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
Lesezeichen