danke flo für deine schnelle antwort. Nur check ich nicht ganz was du meinst. Ich poste jetzt mal den code da ich dazu gerstern noch nicht fähig war. Das zwischen 'Routine Schalterstellung Quellenwahl und 'Ende Routine Quellenwahl würde ich irgendwie gern besser machen nur gibts derzeit eine gehirnblockade. Probier da schon seit Tagen rum und komm einfach nicht dahinter...
Ich hoffe mir kann wer helfen
Code:
$regfile = "m16def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 16
$framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen
$swstack = 32 'wirklich nötig werden
$hwstack = 32
$crystal = 8000000 '7372800
'$lib "mcsbyte.lbx" 'ACHTUNG:numeric<>string conversion routines only for bytes
'Encodervariable
Dim A As Byte
Dim B As Byte
'LCD Config
Config Lcd = 40 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.0 , Rs = Portc.1
Config Lcdbus = 4
Config Lcdmode = Port
Initlcd
Cls
Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.4 = Output
Config Portb.3 = Output
Config Portb.2 = Output
Config Pina.0 = Input 'Zimmerlautstärke
Config Pina.2 = Input 'Encoder rechts
Config Pina.3 = Input 'Encoder links
'Relaisboard Config
Config Pind.3 = Input 'Taster Schalter 1
Config Pind.4 = Input 'Taster Schalter 2
Config Pind.5 = Input 'Taster Schalter 3
Portd.3 = 1 'interner Pullup Schalter1
Portd.4 = 1 'interner Pullup Schalter2
Portd.5 = 1 'interner Pullup Schalter3
S1 Alias Pind.3
S2 Alias Pind.4
S3 Alias Pind.5
'Ende Relaisboard Config
Room Alias Pina.0 'alias Pina.0
Porta.0 = 1 'interner Pullup Taster
Porta.2 = 1 'interner Pullup Encoder
Porta.3 = 1 'interner Pullup Encoder
'PGA2320 Config
Cs2320 Alias Portb.1 'CS pga2320
Mute Alias Portb.4 'Mute pga2320
Zcen Alias Portb.0 'Zero crossing detection pga2320
'SPI Config pga2320
Config Spi = Soft , Dout = Pinb.3 , Ss = Pinb.1 , Clock = Pinb.2
'RC5 config things
Config Portc.2 = 0
Input_pin Alias Pinc.2 'Pin für TSOP1736
Config Timer0 = Timer , Prescale = 8
On Timer0 Timer_irq
Const Timervorgabe = 78 'Timeraufruf alle 178µs (10 Samples = 1 Bit = 1,778ms)
Enable Timer0 'Hier werden die Timer aktiviert
Enable Interrupts
'Timing für 10 Samples Per Bit = 1,778ms
Const Samples_early = 8 'Flanke Frühestens Nach 8 Samples
Const Samples_late = 12 'Flanke Spätestens Nach 12 Samples
Const Samples_min = 3 'Flanke Vor 3 Samples - > Paket Verwerfen
'Variablen der ISR
Dim Sample As Byte 'eigentlich Bit, spart aber 46Byte ROM
Dim Ir_lastsample As Byte 'zuletzt gelesenes Sample
Dim Ir_bittimer As Byte 'zählt die Aufrufe von Timer_IRQ
Dim Ir_data_tmp As Word 'Bitstream
Dim Ir_bitcount As Byte 'Anzahl gelesener Bits
'Rückgabewerte der ISR
Dim Address_rc5 As Byte , Command_rc5 As Byte , Rc5_flag As Bit
'RC 5 config things end
'Startumgebung
A = 120 'On Volume
Gosub Spio
Cursor Off
Cls
Locate 1 , 1
Lcd " O-Ton Preamp "
Locate 2 , 1
Lcd " Mute "
'Einschaltverzögerung
Zcen = 1 'Zcen ein
Mute = 0 'Mute ein
Waitms 3000
Mute = 1 'Mute aus
Main: 'Hauptprogramm
'Routine Schalterstellung Quellenwahl
If S1 = 0 And S2 = 1 And S3 = 1 Then
Locate 1 , 1
Lcd " CD "
End If
If S1 = 1 And S2 = 0 And S3 = 1 Then
Locate 1 , 1
Lcd " Line 1 "
End If
If S1 = 1 And S2 = 1 And S3 = 0 Then
Locate 1 , 1
Lcd " Line 2 "
End If
'Ende Routine Quellenwahl
'IR input
If Rc5_flag = 1 Then
Reset Rc5_flag
Print "toggle:" ; Command_rc5.7;
'clear the toggle bit
Command_rc5 = Command_rc5 And &B01111111
'Locate 1 , 1
'Cls
'Lcd " Adresse:" ; Address_rc5 ; " Code:" ; Command_rc5
End If
'Waitms 100
'IR input end
If Command_rc5 = 16 Then
Gosub Rechts
End If
If Command_rc5 = 17 Then
Gosub Links
End If
If Room = 0 Then
Gosub Roomsub
End If
If Command_rc5 = 13 Then
Gosub Roomsub
End If
Locate 2 , 1 'Mute im Display weg
Lcd " Volume " ; A ; " "
B = Encoder(pina.3 , Pina.2 , Links , Rechts , 0) 'Encoder auslesen
Waitms 3
Goto Main
Links: 'leiser machen mit Encoder
If A > 50 Then 'min. Lautstärke
Decr A
End If
Gosub Spio
Locate 2 , 1 'Volume darstellen
Lcd " Volume " ; A ; " "
Command_rc5 = 0 'RC5 zurücksetzen
Return
Rechts: 'lauter machen mit Encoder
If A < 192 Then 'max Lautstärke Gain = 1
Incr A
End If
Gosub Spio
Locate 2 , 1 'Volume darstellen
Lcd " Volume " ; A ; " "
Command_rc5 = 0 'RC5 zurücksetzen
Return
Roomsub: 'Zimmerlautstärke
A = 120
Locate 2 , 1 'Volume darstellen
Lcd " Volume " ; A ; " "
Spio: 'Unterprogramm Übergabe PGA
Spiinit
Cs2320 = 0
Spiout A , 1
Spiout A , 1
Cs2320 = 1
Return
'RC5 subroutine
Timer_irq:
Timer0 = Timervorgabe
Sample = Not Input_pin
'bittimer erhöhen (bleibt bei 255 stehen)
If Ir_bittimer < 255 Then Incr Ir_bittimer
'flankenwechsel erkennen
If Ir_lastsample <> Sample Then
If Ir_bittimer <= Samples_min Then
'flanke kommt zu früh: paket verwerfen
Ir_bitcount = 0
Else
'nur Flankenwechsel in Bit-Mitte berücksichtigen
If Ir_bittimer >= Samples_early Then
If Ir_bittimer <= Samples_late Then
'Bit speichern
Shift Ir_data_tmp , Left , 1
Ir_data_tmp = Ir_data_tmp + Sample
Incr Ir_bitcount
Else
'Flankenwechsel zu spät: Neuanfang mit gemessener Flanke
Ir_bitcount = 1
Ir_data_tmp = Sample
End If
'bittimer zurücksetzen wenn Timer > Samples_early
Ir_bittimer = 0
End If
End If
'Kontrolle des Startbits auf 1
If Ir_bitcount = 1 Then Ir_bitcount = Ir_data_tmp.0
'Alle 14 Bits gelesen?
If Ir_bitcount >= 14 Then
Command_rc5 = Ir_data_tmp 'Bit 6 und 7 siehe unten
Shift Ir_data_tmp , Right , 6
Address_rc5 = Ir_data_tmp And &B00011111
'For extended RC5 code, the extended bit is bit 6 of the command.
Command_rc5.6 = Not Ir_data_tmp.6
'The toggle bit is stored in bit 7 of the command
Command_rc5.7 = Ir_data_tmp.5
'Paket erfolgreich gelesen
Set Rc5_flag
'paket zurücksetzen
Ir_bitcount = 0
End If
End If
'sample im samplepuffer ablegen
Ir_lastsample = Sample
Return
'RC5 subrutine end
End
Lesezeichen