Op Ebay had ik een FM radio module gevonden met de TEA5767 voor €2,50. Ik had het idee om hier met een MAX7219 als displaydriver 4 displays aan te sturen, nou dat was niet echt een succes.
De MAX7219 zorgt er voor dat ik alleen een piep hoor, de multiplexfrequentie stoort enorm.
Display dan maar uit en kijken of ik geluid kreeg. Maar ook dat zit tegen. Toch wat fout in het i2c gedeelte? Eerst een LCD en dan maar weer eens proberen. Met het lcd is het ook wat makkelijker om de inhoud van de registers van de tea5756 weer te geven. Voor de aardigheid heb ik de source toegevoegd.
Device 18F2620
Declare Xtal = 20
' i2c
SCL_Pin = PORTC.3
SDA_Pin = PORTC.4
' aansluitingen max7219
Symbol Clk = PORTB.0
Symbol Dta = PORTB.1
Symbol Load = PORTB.2
' adres tea5767
Symbol tea5767 = %01100000
' up en down toets
Symbol Toetsup = PORTB.3
Symbol Toetsdown = PORTB.4
' Variabelen
Dim Frequentie As Word
Dim Pll As Dword
Dim Register As Byte
Dim Waarde As Byte
Dim Digit As Byte
Dim Positie As Byte
TRISB= %00011000
Declare All_Digital = True
' Init MAX7219 zie datasheet
Register = 11 ' aantal displays 0-3 (4)
Waarde = 3
GoSub waardenaarMax
Register = 10 ' Helderheid
Waarde = 9
GoSub waardenaarMax
Register = 9 ' BCD voor 4 disp
Waarde = 15
GoSub waardenaarMax
Register = 12 'Display aan
Waarde = 1
GoSub waardenaarMax
Register = 15 ' Disp test uit
Waarde = 0
GoSub waardenaarMax
Frequentie = 932
main:
If Toetsup = 0 Then GoSub frequp
If Toetsdown = 0 Then GoSub freqdown
GoSub displayfreq
GoSub progtea
GoTo main
frequp:
DelayMS 100
Frequentie = Frequentie + 1
If Frequentie > 1080 Then Frequentie = 1080
Return
freqdown:
DelayMS 100
Frequentie = Frequentie - 1
If Frequentie < 875 Then Frequentie = 875
Return
progtea:
Pll = Frequentie * 100000 + 225000
Pll = Pll * 4 / 32768
BusOut tea5767,[Pll.Byte1,Pll.Byte0,$10,$10,$00] 'zie datasheet tea
Return
displayfreq:
Digit = 0 ' eerste disp
For Positie = 4 To 1 Step -1 ' bepaal reg max
Register = Positie
Waarde = Dig Frequentie,Digit ' bepaal disp waarde
If Frequentie < 1000 And Positie = 1 Then Waarde = 15 ' onder 100 mhz geen 0 op laatste digit
If Digit = 1 Then Waarde.7 = 1 ' punt op digit 1
GoSub waardenaarMax
If Digit >= 3 Then Digit = 0 ' 4 digits gehad ?
Digit = Digit + 1
Next
Return
waardenaarMax:
SHOut Dta,Clk,MsbFirst,[Register,Waarde] 'Waarde via spi naar max
High Load 'enable transfer
DelayUS 2
Low Load
Return
Geen opmerkingen:
Een reactie posten