'************************************************************************* '* RDA1846 Steuerung * '* * '*-- Version V01c * '* - erste Version mit 2x8 LCD * '* - fürs Internet kommentiert * '************************************************************************* '************************************************************************* '*Allgemeine Definitionen '************************************************************************* $regfile = "M328pdef.dat" $crystal = 8000000 ' Fuses auf 8 MHz intern gesetzt '************************************************************************* '* LCD-Einstellungen '************************************************************************* Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 Config Lcdbus = 4 Config Lcd = 16 * 2 Config Portd = &B1100_0000 ' Pin 6-7 output, Rest input Portd = &B0011_1111 ' Pullups (1) bei Inputs ein Taste Alias Pind.4 ' Taste und Mittelanschluß bei Auf Alias Pind.3 ' Drehgeber an Masse abgeschlossen Ab Alias Pind.2 Config Int1 = Change ' an Pind.2 auf Flanke warten Config Portb = &B0011_1111 ' Pin 0-5 output, Rest input Din Alias Portb.5 Sclk Alias Portb.0 Ce Alias Portb.1 ' Ptt Alias Portd.2 Maxmode Alias Portb.2 Reset_v Alias Portb.3 Update Alias Portb.4 ' Aout Alias Portd.6 ' wird nicht verwendet Dout Alias Portd.7 ' wird nicht verwendet Deflcdchar 0 , 32 , 4 , 12 , 31 , 12 , 4 , 32 , 32 'Pfeil gebastelt '******************************************************************************* '* Sub-Deklarationen * '******************************************************************************* ' Menue-Anzeige Declare Sub Ausgabe(byval Register As Byte , Byval Value As Word) '************************************************************************* '* Register und Variable dazu '************************************************************************* 'Register 0x30 Dim Reg_30 As Word '************************************************************************* '* Variable '************************************************************************* Dim Frequenz As Dword ' Frequenz 438500000Hz /1000 *8 = Freq_Value 3508000 =hex 358720 Dim Freq_value As Dword ' Frequenz = Freq_Value/8 * 1000 Dim Reg_2a As Word At Freq_value Overlay ' 144.800 = 11AD00 Dim Reg_29 As Word At Freq_value + 2 Overlay Dim Schrittweite As Dword Dim Plus As Bit Dim Minus As Bit '************************************************************************* ' Konstanten '************************************************************************* Const Max_addr = &B0000 '************************************************************************* '* Initialisierung: '************************************************************************* Cls Lcd "RDA_Ctrl" 'Sag Hallo zum Anwender Lowerline Lcd "1MFK V1c" Wait 1 'wart 1s daß man es lesen kann Readeeprom Frequenz , 0 Readeeprom Schrittweite , 4 Enable Int1 Enable Interrupts On Int1 Isr1 Gosub Init '************************************************************************* '* Hauptprogramm: '************************************************************************* Main: Locate 1 , 1 Freq_value = Frequenz / 1000 Freq_value = Freq_value * 8 Call Ausgabe(&H29 , Reg_29) Call Ausgabe(&H2a , Reg_2a) Call Ausgabe(&H0f , &H3DE4) If Ptt = 0 Then Call Ausgabe(&H30 , &H0006) ' TX ein Call Ausgabe(&H30 , &H0046) ' TX ein Else Call Ausgabe(&H30 , &H3006) ' TX aus Call Ausgabe(&H30 , &H3026) ' TX aus End If Lcd Frequenz Do If Plus = 1 Then Plus = 0 Frequenz = Frequenz + Schrittweite Exit Do End If If Minus = 1 Then Minus = 0 Frequenz = Frequenz - Schrittweite Exit Do End If If Taste = 0 Then Waitms 200 Gosub M_schrittweite Goto Main ' Taste langsamer machen/entprellen End If Loop Writeeeprom Frequenz , 0 Goto Main '************************************************************************* '* Auswertung '************************************************************************* M_schrittweite: Writeeeprom Schrittweite , 4 Cls Lcd "Schrittweite" Locate 2 , 1 Lcd Schrittweite M_schrittweite_1: If Plus = 1 Then Plus = 0 Schrittweite = Schrittweite * 2 If Schrittweite > 100000000 Then Schrittweite = 125 End If Goto M_schrittweite End If If Minus = 1 Then Minus = 0 Schrittweite = Schrittweite / 2 If Schrittweite < 125 Then Schrittweite = 100000000 End If Goto M_schrittweite End If If Taste = 0 Then Waitms 200 Return End If Goto M_schrittweite_1 '************************************************************************* '* LCD Ausgabe '************************************************************************* '************************************************************************* '* Register, Value Ausgabe '************************************************************************* Sub Ausgabe(byval Register As Byte , Byval Value As Word) Ce = 0 Shiftout Din , Sclk , Register , 0 Shiftout Din , Sclk , Value , 0 Ce = 1 End Sub '************************************************************************* '* Initialisierung: '************************************************************************* Init: Ce = 1 'Do Call Ausgabe(&H30 , &H0001) ' Reset all registers to default values Waitms 50 Call Ausgabe(&H30 , &H0004) ' power on Call Ausgabe(&H04 , &H0FD0) ' 24-28Mhz geht auch 0F10 'Call Ausgabe(&H31 , &H0031) '? 'Call Ausgabe(&H33 , &H44A5) ' agc numnber 'Call Ausgabe(&H34 , &H2B87) ' RX digital gain 'Call Ausgabe(&H35 , &H????) ' TX Tone 1 toneqrg(khz)*2^12 'Call Ausgabe(&H36 , &H????) ' TX Tone 2 'Call Ausgabe(&H41 , &H470F) ' TX vox open thresh hold 'Call Ausgabe(&H42 , &H????) ' TX vox close thresh hold 'Call Ausgabe(&H43 , &H????) ' TX Hub + ctcss Call Ausgabe(&H44 , &H0DFF) ' RX-Volume 1 und 2 geht auch 00FF 'Call Ausgabe(&H45 , &H2B87) ' ctcss Call Ausgabe(&H47 , &H7FFF) ' ? Call Ausgabe(&H4f , &H2C62) ' ? Call Ausgabe(&H53 , &H0094) ' ? Call Ausgabe(&H55 , &H0081) ' Call Ausgabe(&H56 , &H0B22) ' SQ-detect Call Ausgabe(&H57 , &H1C00) ' bypass rssi lpfilter Call Ausgabe(&H5a , &H0EDB) ' SQ detect Call Ausgabe(&H60 , &H101E) ' noise 2-th SQ Call Ausgabe(&H63 , &H16AD) ' preemphases ' Call Ausgabe(&H30 , &H0AF2) Call Ausgabe(&H0b , &H1A10) ' keine Änderung Call Ausgabe(&H2b , &H30D4) ' 25Mhz xtal Call Ausgabe(&H2c , &H186A) ' adc clk for 25Mhz xtal Call Ausgabe(&H32 , &H627C) Call Ausgabe(&H33 , &H0AF2) Call Ausgabe(&H47 , &H1AEA) ' for 12.5KHz or &H2C2F for 25kHz Call Ausgabe(&H4e , &H293A) Call Ausgabe(&H54 , &H1D40) ' for 12.5KHz or &H1D4C for 25kHz Call Ausgabe(&H56 , &H0652) Call Ausgabe(&H58 , &H0004) ' Preemphase Call Ausgabe(&H71 , &H6C1E) ' for 12.5Khz or &H70 &H1029 for 25Khz 'Call Ausgabe(&H85 , &H001F) ' RFpower is 8dBm, ACP is -63dB in 12.5KHz and -65dB in 25KHz 'dafür: ' &H0018 RFpower is 6dBm, ACP is -64dB in 12.5Khz and -66dB in 26KHz Call Ausgabe(&H7f , &H0001) ' &H0017 RFpower is -3dBM, ACP is -68dBc in 12.5KHz and -68dBc in 25KHz Call Ausgabe(&H05 , &H001F) ' Call Ausgabe(&H7f , &H0000) Call Ausgabe(&H30 , &H0006) ' for 12.5KHz or &H3006 for 25Khz Waitms 100 ' Delay a minimum of 100ms Return Call Ausgabe(&H29 , &H0011) ' Call Ausgabe(&H2a , &HB728) ' 145.125 = 11B728 Call Ausgabe(&H0f , &H3DE4) ' Band Select 134-174MHz Call Ausgabe(&H30 , &H0006) ' TX ein Call Ausgabe(&H30 , &H0046) ' TX ein Wait 5 Call Ausgabe(&H29 , &H0011) ' Call Ausgabe(&H2a , &HC9E8) '145.725 = 11C9E8 Call Ausgabe(&H30 , &H3006) ' TX aus Call Ausgabe(&H30 , &H3026) ' TX aus Wait 5 'Loop Return ' Call Ausgabe(&H29 , &H0035) '438500 ' Call Ausgabe(&H2a , &H8728) ' ' Call Ausgabe(&H0f , &H3D24) ' Band Select 400-520MHz ' Call Ausgabe(&H29 , &H0011) ' ' Call Ausgabe(&H2a , &HAD00) '144.800 = 11AD00 ' Call Ausgabe(&H0f , &H3DE4) ' Band Select 134-174MHz 'Call Ausgabe(&H2a , &HAD00) '144.800 = 11AD00 'Sub Send(byref Register As Byte , Byref Value As Word) ' Spi 'End Sub '**************************************************************** '* Interrupt Services * '**************************************************************** Isr1: ' Encoder Auswertung If Pind.3 = Ab Then Minus = 1 Plus = 0 Else Plus = 1 ' Flag setzen Minus = 0 End If Waitms 1 Return '************************************************************************* '* Eepromdaten '************************************************************************* $eeprom Data 145725000& , 25000& End 'end program