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






Zitieren

Lesezeichen