Also ich habe mal das unterprogramm "umgebaut" aber nun leuchtet nur noch eine Farbe. Kann sein das ich die wartezeit zu hoch gesetzt habe.
Wer kann mir sagen, warum ich über UART keine Informationen bekomme? Mit anderen Programen geht es! Wo ist der Fehler in meinem Programm?
Tobias
Code:'------------------------------------------------------------------------------- 'Konfiguration µC: $regfile = "ATtiny2313.dat" 'ATtiny2313-Deklarationen $crystal = 20000000 'Quarz: 20.0 MHz $baud = 9600 'Baudrate der UART: 9600 Baud '------------------------------------------------------------------------------- 'Ein- Ausgänge: Ddrd = &B1000011 '1 Ausgang, 0 Eingang = Pin PD6,1+0 als Ausgang / PD5-2 als Eingang Ddrb = &B11111111 '1 Ausgang, 0 Eingang = Pin PB7-0 als Ausgang Portb = &B11111111 'PB0...PB7 auf High setzen '------------------------------------------------------------------------------- 'Variablen auswertung FB Dim Pulsbreite1 As Word 'Knüppelstellung Knüppel 1 ' Dim Pulsbreite2 As Word Dim Pulsbreite3 As Word Dim Pulsbreite4 As Word Dim Kanal1o As Bit 'Speicher von Knüppel 1 OBEN Dim Kanal1u As Bit 'Speicher von Knüppel 1 UNTEN Dim Kanal2o As Bit Dim Kanal2u As Bit Dim Kanal3o As Bit Dim Kanal3u As Bit Dim Led1 As Byte Dim Led1m As Byte 'LED1 Merker Dim Led2 As Byte Dim Led2m As Byte Dim Led1pause As Word 'Als Pause zwischen den Lichteffekten für die UnterBodenbel. Dim Portb3 As Byte 'PWM Dim Portb4 As Byte 'PWM '------------------------------------------------------------------------------- 'Konfiguration Timer: Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1 Config Timer0 = Timer , Prescale = 256 'Teiler Enable Timer0 'timer einschalten On Timer0 Ledcount 'Unteprogramm aufrufen Enable Interrupts 'interrupts einschalten '------------------------------------------------------------------------------- ' HAUPTPROGRAMM '------------------------------------------------------------------------------- Led1 = 255 'PWM Startwert vorgeben Led2 = 1 'PWM Startwert vorgeben Do 'Do Loop Schleife Print "Led1: " ; Led1 Print "Led2: " ; Led2 Print "Led1Pause: " ; Led1pause 'Hardware PWM mit Timer1 U N D 'FB auswerten: Umschaltung von normal auf PWM If Portb3 = 0 And Portb4 = 0 Then Compare1a = Led1 '=PB3 / max 255 Compare1b = Led2 '=PB4 / max 255 Else If Portb3 = 0 Then Compare1a = 255 Else Compare1a = 0 End If If Portb4 = 0 Then Compare1b = 255 Else Compare1b = 0 End If End If 'FB auswerten: 'Umschaltung von normal auf PWM 'Kanal 1 LICHT HINTEN: '____________________ Pulsein Pulsbreite1 , Pind , 5 , 1 'Pulsbreite auslesen (1=High Impuls) 'Knüppel rastend OBEN If Pulsbreite1 > 9 And Kanal1o = 0 Then 'wenn Knüppel oben und Kanal1oben=0 dann Toggle Portb.1 'Pin 1 mal schalten (entweder auf Hi oder Low je nach vorherigem zustand) Kanal1o = 1 'Variable Kanal1o setzen damit nicht neu getoggled werden kann End If If Pulsbreite1 < 9 Then 'Wenn Knüppel nicht oben dann Kanal1o = 0 'Variable Kanal1o RÜCKsetzen damit neu getoggled werden kann End If 'Knüppel rastend UNTEN If Pulsbreite1 < 6 And Kanal1u = 0 Then Toggle Portb.0 Kanal1u = 1 End If If Pulsbreite1 > 6 Then Kanal1u = 0 End If 'Kanal 2 UNTERBODEN: '___________________ Pulsein Pulsbreite2 , Pind , 4 , 1 'Pulsbreite auslesen (1=High Impuls) 'Knüppel rastend OBEN If Pulsbreite2 > 9 And Kanal2o = 0 Then Toggle Portb3 Kanal2o = 1 End If If Pulsbreite2 < 9 Then Kanal2o = 0 End If 'Knüppel rastend UNTEN If Pulsbreite2 < 6 And Kanal2u = 0 Then Toggle Portb4 'ACHTUNG PB4!!! nicht PB2!!! Kanal2u = 1 End If If Pulsbreite2 > 6 Then Kanal2u = 0 End If 'Kanal 3: '________ Pulsein Pulsbreite3 , Pind , 3 , 1 'Pulsbreite auslesen (1=High Impuls) 'Knüppel rastend OBEN If Pulsbreite3 > 9 And Kanal3o = 0 Then Toggle Portb.5 Kanal3o = 1 End If If Pulsbreite3 < 9 Then Kanal3o = 0 End If 'Knüppel rastend UNTEN If Pulsbreite3 < 6 And Kanal3u = 0 Then Toggle Portb.2 'ACHTUNG PB2!!! nicht PB4!!! Kanal3u = 1 End If If Pulsbreite3 > 6 Then Kanal3u = 0 End If 'Kanal 4 (Taster / Taster): '________ Pulsein Pulsbreite4 , Pind , 2 , 1 'Pulsbreite auslesen (1=High Impuls) 'Knüppel tastend OBEN If Pulsbreite4 > 9 Then 'Knüppel oben Portb. 7 = 0 'Port PB 7 setzen Else 'sonst Portb. 7 = 1 'Port PB 7 zurücksetzen End If 'Knüppel tastend UNTEN If Pulsbreite4 < 6 Then 'Knüppel unten Portb. 6 = 0 'Port PB 6 setzen Else 'sonst Portb. 6 = 1 'Port PB 6 zurücksetzen End If 'Automatikfunktion für Scheinwerfer: GEPRÜFT MIT HARDWARE OK '___________________________________ If Portb.0 = 0 Or Portb.1 = 0 Then 'Wenn PB0 oder PB1 Hi sind dann Portd.6 = 0 ' PD6 setzen Else 'sonst Portd.6 = 1 'PD6 RÜCKsetzen End If Loop 'Unterprogramme: '_______________ Ledcount: 'Farbwechsel über Timer1 Timer0 = 150 'LED´s wechseln die Farbe mit ca 2 Hz While Led1pause > 1000 'wenn Led1Pause > 1000 dann Schleife bearbeiten Incr Led1pause If Led1 = 255 Then 'Wenn Led1 100% dann Merker zum hochzählen setzen Led1m = 0 End If If Led1 = 0 Then 'Wenn Led1 0% dann Merker zum runterzählen setzen Led1m = 1 End If 'Zähler1 hoch/runter If Led1m = 1 Then Incr Led1 'Wenn Merker Led1m = 1 -> um 1 hochzählen End If If Led1m = 0 Then Decr Led1 'um 1 runterzählen End If '------- If Led2 = 255 Then Led2m = 0 End If If Led2 = 0 Then Led2m = 1 End If 'Zähler1 hoch/runter If Led2m = 1 Then Incr Led2 'um 1 hochzählen End If If Led2m = 0 Then Decr Led2 'um 1 runterzählen End If Wend If Led1pause = 2000 Then Led1pause = 0 End If Return







Zitieren

Lesezeichen