TEA5767 FM-Modul

  • Friedenstaube
    "Es gibt keinen Weg zum Frieden, denn Frieden ist der Weg." - Mahatma Gandhi

Wilhelm

Neues Mitglied
1 Nov 2014
6
0
0
Sprachen
Hallo,

als Neuer (s. Vorstellungsthread) sollte man viel lesen und ich habe einen alten
thread von wolverine über die Programmierung des FM-Moduls
TEA5767 gelesen, worin Cassio in dem letzten Beitrag ein
fertiges Programm (in Bascom) dafür anbot. Dann endet
der thread, leider.

Da ich mich in Bascom einarbeiten möchte, AVR für mich
ausgewählt habe und einen TEA5767 hier liegen habe, wäre
ich an dem Prog interessiert. Vielleicht gibt es auch in den
Tiefen des Forums entsprechende Archivdateien. Bitte um
Eure Hilfe.

Gruß
Wilhelm
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3,505
65
48
Marwitz
Sprachen
  1. BascomAVR
  2. Assembler
Du meinst wohl diesen Thread.
Dort hat Cassio am Ende geschrieben, daß er sein Programm zur Verfügung stellt, wenn jemand (Wolverine) Interesse daran hat. Dieser hat sich allerdings daraufhin nicht mehr geäussert - insofern wirst Du hier wohl nichts finden.

Ob das jetzt ein anfangsgerechtes Projekt ist, wage ich zu bezweifeln - aber das mußt du selbst wissen.
Letztlich solltest Du Dich insbesondere in das I2C bzw TWI selbst, dessen Umsetzung unter Bascom und das Datenblatt des Radiomoduls einarbeiten - dann sollte das zu schaffen sein (auch als Anfänger, wenn man sich wirklich dahinterklemmt).
 

Wilhelm

Neues Mitglied
1 Nov 2014
6
0
0
Sprachen
Du meinst wohl diesen Thread.
Dort hat Cassio am Ende geschrieben, daß er sein Programm zur Verfügung stellt, wenn jemand (Wolverine) Interesse daran hat. Dieser hat sich allerdings daraufhin nicht mehr geäussert - insofern wirst Du hier wohl nichts finden.

Ob das jetzt ein anfangsgerechtes Projekt ist, wage ich zu bezweifeln - aber das mußt du selbst wissen.
Letztlich solltest Du Dich insbesondere in das I2C bzw TWI selbst, dessen Umsetzung unter Bascom und das Datenblatt des Radiomoduls einarbeiten - dann sollte das zu schaffen sein (auch als Anfänger, wenn man sich wirklich dahinterklemmt).

Vielen Dank für Deine Antwort,

das ist sicher kein anfangsgerechtes Projekt, da muß ich wesentlich tiefer beginnen.
Ich glaube aber, daß ich aus dem Programm von Cassio einiges hätte lernen können.

Ist Cassio nicht mehr aktiv?

Gruß
Wilhelm
 

dino03

Aktives Mitglied
27 Okt 2008
6,758
18
38
Sprachen
  1. BascomAVR
  2. Assembler
Hi Wilhelm,

herzlich willkommen im Forum :flowers:

Ist Cassio nicht mehr aktiv?

... er ist noch aktiv. Aber das leidige Problem mit der Zeit :p :rolleyes:
Beruf, Familie, Hobby, ... usw müssen wie bei vielen anderen irgendwie nebeneinander existieren.
Mal hat das eine etwas Vorsprung und mal das andere :rolleyes:

Gruß
Dino
 

Cassio

Aktives Mitglied
29 Okt 2008
4,027
17
38
Region Hannover
Sprachen
  1. BascomAVR
Hallo Wilhelm!

Willkommen im AVR-Praxis Forum! :ciao:

Der Cassio befindet sich zwar zur Zeit in seinem wohlverdienten Urlaub,
aber trotzdem habe ich immer mal ein Auge für das Forum. :wink:


Wie LotadaC schon geschrieben hat, ist das Programm wirklich nichts für Anfänger!
Natürlich kannst du es dir ansehen, ausprobieren und vielleicht auch etwas daraus lernen.
Ich denke aber, dass es dir zu Beginn mehr Fragen bringen als helfen wird!

Außerdem hatte ich schon geschrieben, dass ich selbst nur das AR1010 besitze!!!
Ob es mit dem TEA5767 tatsächlich funktioniert, kann ich leider nicht sagen!


Nun gut.....
Das Grundprogramm ist aber auch nicht von mir!
Ich hatte immer verzweifelt nach einem vernünftigen Datenblatt gesucht und nichts passendes gefunden.
So bin ich zu dem Programm gekommen. :wink:

Da ich gerade in Urlaub bin, kann ich dir jetzt auch nur meine angepasste Version geben.
Zum Ansteuern des Moduls benutze ich eine Matrixtastatur und ein LCD via I2C.
Aus dem Grunde sind in meinem Programmcode natürlich diese Optionen mit berücksichtigt!
Um also das Programm fehlerfrei verwenden zu können, müsstest du die Hardware natürlich erst noch nachbauen. :wink:


Wie eingangs schon erwähnt, wird der Programmcode dich sicherlich weit überfordern.....
aber vielleicht funktioniert er ja wenigstens ein bisschen. :cool:

Hier das Programm:
Code:
'AR1010 Testprogramm

$regfile = "m8adef.dat"
$crystal = 8000000
$hwstack = 64
$swstack = 64
$framesize = 64

'(
       ----------------------------
       -----AVR32pinMSL-Modul------
       ----------------------------
Taster o--PD5       |        PD4--o
LED    o--PD6       |   INT1/PD3--o
       o--PD7       |   INT0/PD2--o
       o--PB0-------|    TxD/PD1--o
       o--PB1/OC1A  |----RxD/PD0--o
       o--PB2/OC1B  |    SCL/PC5--o SCL
       o--PB3/MOSI  |    SDA/PC4--o SDA
       o--PB4/MISO  |        PC3--o
       o--PB5/SCK   |        PC2--o
       o--PB6/XTAL1 |        PC1--o
       o--PB7/XTAL2-|--------PC0--o
       o--Vcc      8MHz     ADC7--o
       o--Vcc    Resonator  Aref--o
       o--GND       |       ADC6--o
       ----------------------------
')
' ==============================================================================

' Bestimme die Ein und Ausgänge
Ddrb = &B_00_0000                                           '1 ist Ausgang 0 ist Eingang
Portb = &B11_1111                                           'auf Hi oder Low setzen

Ddrc = &B_00_0000                                           '1 ist Ausgang 0 ist Eingang
Portc = &B11_1111                                           'auf Hi oder Low setzen

Ddrd = &B_0100_0000                                         '1 ist Ausgang 0 ist Eingang
Portd = &B1011_1111                                         'auf Hi oder Low setzen

' #############################################################################

Taster Alias Pind.5                                         'Test-Taster
Led Alias Portd.6                                           'Signal-LED

' ==============================================================================
' Globale Interrupts einschalten
Enable Interrupts

On Int0 Read_key
Enable Int0
' ==============================================================================

$include "Radio_dim.inc"


' ==============================================================================
' I2C-Config
Config Scl = Portc.5
Config Sda = Portc.4
'$lib "i2c_twi.lbx"
'Config Twi = 100000                                         'BUS-Takt,
Config I2cdelay = 10

'AR1010 read and write address
Const Arwr = &H20
Const Arrd = &H21
' ==============================================================================


' I2C Matrixtastatur (Kent Andersson)------------------------
$lib "key_i2c.lib"                                          'LIB für I2C-Matrixtastatur
$external _key_code                                         'Externe Routine
Const Pcf8574_kbd = &H72                                    'I2C-Adresse des PCF8574A
Dim _key_scan As Byte                                       'Variable für Tastenausgabe
'!rcall _Key_Init

' I2C LCD (Kent Andersson)-----------------------------------
$lib "Lcd_i2c.lib"                                          'LIB für I2C-LCD
Const Pcf8574_lcd = &H74                                    'I2C-Adresse des PCF8574A
Dim _lcd_e As Byte
_lcd_e = 128
!Rcall _init_lcd


' ==============================================================================
Dim Kb As String * 1
Dim Kba As Byte At Kb Overlay
Dim Kbn As Byte
Dim Iw As Word                                              'Index-Word-Variable

' ==============================================================================
'Erster Start
Cls
Gosub Initar1010
Gosub Waitforstc

Waitms 100
Strg = 1
Channel = 1026                                              'NDR2
Locate 1 , 1 : Lcd "I2C-Radio AR1010"
Locate 2 , 1 : Lcd "Frequenz: " ; Channel ; "  "
Gosub Tune

Waitms 100
!rcall _Key_Init

' ==============================================================================
Do


Select Case Kbn
   Case 1 To 7
      Strg = Kbn
      Gosub Sender
      Kbn = 42                                              'ASCII-Wert für "Z"
   Case 17                                                  'Taste "A"
      Gosub Set_freq
End Select



If Taster = 0 Then
   Strg = 1
   Gosub Sender
   Bitwait Taster , Set
Else
End If


Loop

End

' ==============================================================================
$include "Radio_subs.inc"


' ==============================================================================
Sender:
   Led = 1                                                  'LED aus

   Select Case Strg
      Case 1
         Channel = 1026                                     'NDR2
         Locate 2 , 1 : Lcd "Frequenz: " ; Channel ; "  "
      Case 2
         Channel = 1019                                     'FFN
         Locate 2 , 1 : Lcd "Frequenz: " ; Channel ; "  "
      Case 3
         Channel = 1038                                     'Antenne NDS
         Locate 2 , 1 : Lcd "Frequenz: " ; Channel ; "  "
      Case 4
         Channel = 0980                                     'NDR1
         Locate 2 , 1 : Lcd "Frequenz: " ; Channel ; "  "
      Case 5
         Channel = 0936                                     'N-Joy
         Locate 2 , 1 : Lcd "Frequenz: " ; Channel ; "  "
      Case 6
         Channel = 1014                                     'SAW
         Locate 2 , 1 : Lcd "Frequenz: " ; Channel ; "  "
      Case 7
         Channel = 0875                                     '111
         Locate 2 , 1 : Lcd "Frequenz: " ; Channel ; "  "
      Case Else
         Channel = 1026                                     'NDR2 (default)
         Locate 2 , 1 : Lcd "Frequenz: " ; Channel ; "  "
   End Select

   Gosub Tune
   Led = 0                                                  'LED ein

   While _key_scan > 0                                      'Keine Teste mehr gedrückt? Sonst warten!
   NOP
   Wend
Return


' ==============================================================================
Set_freq:

Led = 1
Channel = 0
Locate 1 , 1
Lcd "Frequenz waehlen"
Locate 2 , 1
Lcd "Eingabe: ____   "

Wait 1
While _key_scan > 0                                         'Keine Teste mehr gedrückt? Sonst warten!
nop
Wend

'-------------------------------
While _key_scan = 0                                         'Warten bis eine Taste gedrückt wurde
nop
Wend
   Channel = Kbn
   Channel = Channel * 1000
   Locate 2 , 1
   Lcd "Eingabe: " ; Kbn ; "= " ; Channel
While _key_scan > 0                                         'Keine Teste mehr gedrückt? Sonst warten!
nop
Wend

'-------------------------------
While _key_scan = 0                                         'Warten bis eine Taste gedrückt wurde
nop
Wend
   Iw = Kbn * 100
   Channel = Channel + Iw
   Locate 2 , 1
   Lcd "Eingabe: " ; Kbn ; "= " ; Channel
While _key_scan > 0                                         'Keine Teste mehr gedrückt? Sonst warten!
Gosub Read_key
Wend

'-------------------------------
While _key_scan = 0                                         'Warten bis eine Taste gedrückt wurde
nop
Wend
   Iw = Kbn * 10
   Channel = Channel + Iw
   Locate 2 , 1
   Lcd "Eingabe: " ; Kbn ; "= " ; Channel
While _key_scan > 0                                         'Keine Teste mehr gedrückt? Sonst warten!
nop
Wend

'-------------------------------
While _key_scan = 0                                         'Warten bis eine Taste gedrückt wurde
nop
Wend
   Channel = Channel + Kbn
   Locate 2 , 1
   Lcd "Eingabe: " ; Kbn ; "= " ; Channel
While _key_scan > 0                                         'Keine Teste mehr gedrückt? Sonst warten!
nop
Wend

Iw = Channel
Gosub Tune
Led = 0
Wait 1


Kbn = 42                                                    'ASCII-Wert für "Z"
Locate 1 , 1
Lcd "I2C-Radio AR1010"
Locate 2 , 1
Lcd "Frequenz= " ; Iw ; "  "
Return


' ------------------------------------------------------------------Data-Tabelle
Read_key:
!rcall _key_code                                            'externe Routine aufrufen
If _key_scan > 0 Then
   Kb = Lookupstr(_key_scan , Matrix_wert)                  'Wert vom Key_scan der Tastatur anpassen
   Kbn = Kba - 48
Else
End If


If _key_scan = 16 Then
   !rcall _init_lcd
   Waitms 250
   Locate 1 , 1 : Lcd "I2C-Radio AR1010"
Else
End If

Return

' ------------------------------------------------------------------Data-Tabelle
Matrix_wert:
Data "Z" , "7" , "8" , "9" , "A" , "4" , "5" , "6" , "B" , "1" , "2" , "3" , "C" , "F" , "0" , "E" , "D"



Nun noch die benötigte Radio_dim.inc:
Code:
$nocompile

'Dim/Declaredatei für das I2C-Radio AR1010

Dim Z As Byte
Dim Datalo As Byte
Dim Datahi As Byte
Dim Daten As Word At Datalo Overlay
Dim Regno As Byte
Dim Channello As Byte
Dim Channelhi As Byte
Dim Channel As Word At Channello Overlay
Dim Strg As Byte
Dim I As Byte


...und die Subroutinen, die sich in der Radio_subs.inc befinden:
Code:
$nocompile

'Subroutinen für das I2C-Radio AR1010


'-------------------------------------------------------------------------------
Initar1010:
Dim Temp As Byte
Restore Regdefaults

For Temp = 1 To 18
   Regno = Temp
   If Temp = 18 Then Regno = 0
   Daten = 00                                               ' reset chip
   Gosub Writeword
   Read Daten
   Gosub Writeword
Next Temp

Gosub Set_hmute
Return

'-------------------------------------------------------------------------------
Waitforstc:
Waitms 500
Do
Regno = &H13
Gosub Readword
Waitms 300
Loop Until Datalo.5 = 1                                     ' wait for STC flag
Return

'-------------------------------------------------------------------------------
Tune:
Gosub Set_hmute
Gosub Clear_tune
Gosub Clear_seek
Gosub Setchannel
Gosub Set_tune
Gosub Waitforstc
Gosub Clear_hmute
Return

'-------------------------------------------------------------------------------
Set_hmute:
Regno = &H01
Gosub Readword
Datalo = Datalo Or &B00000010
Gosub Writeword
Return

'-------------------------------------------------------------------------------
Clear_hmute:
Regno = &H01
Gosub Readword
Datalo = Datalo And &B11111101
Gosub Writeword
Return

'-------------------------------------------------------------------------------
Set_tune:
Regno = &H2
Gosub Readword
Datahi = Datahi Or &B00000010
Gosub Writeword
Return

'-------------------------------------------------------------------------------
Clear_tune:
Regno = &H2
Gosub Readword
Datahi = Datahi And &B11111101
Gosub Writeword
Return

'-------------------------------------------------------------------------------
Clear_seek:
Regno = &H03
Gosub Readword
Datahi = Datahi And &B10111111
Gosub Writeword
Return

'-------------------------------------------------------------------------------
Setchannel:
Regno = &H02
Gosub Readword
Channel = Channel - 690
'Datahi = Channelhi
Datahi.0 = Channelhi.0
Datalo = Channello
Gosub Writeword
Return

'-------------------------------------------------------------------------------
Set_mono:
Regno = &H01
Gosub Readword
Datalo = Datalo Or &B00001000
Gosub Writeword
Return

'-------------------------------------------------------------------------------
Clear_mono:
Regno = &H01
Gosub Readword
Datalo = Datalo And &B11110111
Gosub Writeword
Return

'-------------------------------------------------------------------------------
Writeword:
I2cinit
I2cstart
I2cwbyte Arwr
I2cwbyte Regno
I2cwbyte Datahi
I2cwbyte Datalo
I2cstop
Waitms 50
Return

'-------------------------------------------------------------------------------
Readword:
I2cinit
I2cstart
I2cwbyte Arwr
I2cwbyte Regno
Waitms 50
I2cstart
I2cwbyte Arrd
I2crbyte Datahi , Ack
I2crbyte Datalo , Nack
I2cstop
Return

'****************************  registers default values ****************************************************
Regdefaults:                                                'start with reg01; ends with reg 00
Data &H5B05% , &HF4B9% , &H8012% , &H0400% , &H28AA% , &H4400% , &H1EE7% , &H7141% , &H007D% , &H82C6% , &H4F55%
Data &H970C% , &HB845% , &HFC2D% , &H8097% , &H04A1% , &HDF6A% , &HFFFF%

'dataset1: 5B05 for 50uS deephasis; 5B15 for 75uS deemphasis


Viel Spaß und Erfolg damit! :wink:

Grüße,
Cassio
 

Wilhelm

Neues Mitglied
1 Nov 2014
6
0
0
Sprachen
@ Dino03

Vielen Dank für die Infos

@ Cassio

Vielen Dank, daß Du sogar in Deinem Urlaub noch geantwortet hast.
Jetzt kann ich mir das Programm ansehen und bestimmt etwas über
die Programmierung eines derartigen Projektes lernen. Auch wenn ich jetzt
noch nicht viel von dem Programm verstehe, kann ich zumindest versuchen, die
Struktur zu erkennen.

Weiterhin einen schönen Urlaub.

Gruß
Wilhelm
 

Cassio

Aktives Mitglied
29 Okt 2008
4,027
17
38
Region Hannover
Sprachen
  1. BascomAVR
Auch wenn ich jetzt
noch nicht viel von dem Programm verstehe, kann ich zumindest versuchen, die
Struktur zu erkennen.


Hallo Wilhelm!

Ich drücke dir die Daumen, dass dich das Programm, der Aufbau und die Anweisungen weiter bringen.

Da ich in meinem Programm von einer Matrixtastatur und einem LCD spreche, welche ebenfalls per I2C/TWI angebunden werden, möchte ich dir noch schnell zwei Links mit auf dem Weg geben.

Einmal kannst du HIER meine I2C-Service-Einheit (ISE) sehen, die ich dafür verwende.
In DIESEM Thread bekommst du auch einen Einblick in die ISE und wie sie aufgebaut ist.

Vielleicht solltest du mit diesen einfachen Dingen erst einmal beginnen und später dann mit dem Radio-IC weiter machen.

Softwareseitig wird die Tastatur sowie das LCD mit der Kent Andersson LIB angesteuert.


Ich wünsche weiterhin gutes Gelingen.....
und bei Fragen, solltest du dich vertrauensvoll an das Forum wenden. :wink:

Grüße,
Cassio
 

Cassio

Aktives Mitglied
29 Okt 2008
4,027
17
38
Region Hannover
Sprachen
  1. BascomAVR
Hallo Wilhelm!

Vielleicht solltest du mal schreiben was du als Hardware.....
und welche Messgeräte du zur Verfügung hast.

Welche Vorkenntnisse in Elektronik und Programmierung besitzt du eigentlich genau? :hmmmm:


Grüße,
Cassio
 

dino03

Aktives Mitglied
27 Okt 2008
6,758
18
38
Sprachen
  1. BascomAVR
  2. Assembler
Hi,

Vielleicht solltest du mal schreiben was du als Hardware.....
und welche Messgeräte du zur Verfügung hast.

Welche Vorkenntnisse in Elektronik und Programmierung besitzt du eigentlich genau? :hmmmm:
stimmt ;) Da man ja nicht so richtig durch die DSL-Leitung sehen kann, hat man dann ne genauere Vorstellung
und kann Antworten, Tips, ... besser auf den jenigen abstimmen.

Gruß
Dino
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3,505
65
48
Marwitz
Sprachen
  1. BascomAVR
  2. Assembler
Zumindest in Bascom isser "neu" - steht ja hier oben und in seinem Vorstellungs-Thread
...Ich bin ein ziemlich alter Knabe und möchte Bascom erlernen...
Ob da nun irgendwelche (AVR-)Assembler-Vorkenntnisse drunter sind, wissen wir natürlich nicht.

Wenn man von den TWI-Hintergründen selbst etwas Ahnung hat, nimmt Bascom einem ja 'ne Menge ab, wenn man dann Datenblätter lesen und kombinieren kann (Elektronik/Programmierung-Vorkenntnisse), sollte das wie gesagt machbar sein. Wenn auch Eigeninitiative da ist, klar.

Aber uns hilft es natürlich zu wissen, wieweit wir "runter zu den Anfängen" müssen;)
 

Wilhelm

Neues Mitglied
1 Nov 2014
6
0
0
Sprachen
guten Morgen,

vielen Dank für Eure Hilfsbereitschaft.

Meine Programmierkenntnisse sind bis jetzt minimal. Verschiedene
Wege habe ich schon begangen, mußte aber aus Zeitgründen wieder
zurückstellen. Dazu gehörten Anfänge mit Assembler für AVR, wobei
ich die Lernmittel von "myAVR" nutzte und ein Anfängerkurs C von
Wolfgang Bengfort (ET Tutorials). Vielleicht kann ich für Bascom
etwas mehr Zeit aufbringen.

An Geräten stehen mir Multimeter und Oszilloskop, sowie ein
STK500 zur Verfügung.

Gruß
Wilhelm
 

dino03

Aktives Mitglied
27 Okt 2008
6,758
18
38
Sprachen
  1. BascomAVR
  2. Assembler
Hallo Wilhelm.

Vielleicht kann ich für Bascom
etwas mehr Zeit aufbringen.

An Geräten stehen mir Multimeter und Oszilloskop, sowie ein
STK500 zur Verfügung.

In Bascom wird die Erfolgskurve auf jeden Fall steiler sein als in Assembler oder in C.
Multimeter und Oszilloskop sind schon eine recht gute Diagnosemöglichkeit.
Ein STK500 reicht für die Anfänge auch allemal aus.
Wenn du dann noch ein Character-LCD (so 2 Zeilen x 16 Zeichen) hast, dann sind zusammen mit dem RS232-Treiber auf dem STK500 für eine seriellen Verbindung zum PC schon viele Diagnosemöglichkeiten bei Problemen vorhanden. Das ist bereits ne Menge mehr als mancher anderer hier hat. Die Voraussetzungen sind also nicht schlecht.

Das leidige Problem mit der Zeit kenne ich auch. Wenn man grade angefangen hat kann man auch schon wieder aufhören :p Bei wenig Zeit ist es vorteilhaft wenn man einen Platz hat an dem alles aufgebaut stehen bleiben kann. Dann geht wenigstens nicht jedes mal die Zeit für die Vorbereitung und das Aufräumen weg.

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)