maandag 29 augustus 2011

FM radio met TEA5767

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