Hallo,
ich habe mal wieder ein Problem mit meinem Hoflicht-projekt. Manchmal stoppt das Programm einfach so .
Ich kann mir einfach keinen Reim drauf machen. Bitte mal drüber schauen, ob da sich ein Fehler eingeschlichen hat.
Alles anzeigen
ich habe mal wieder ein Problem mit meinem Hoflicht-projekt. Manchmal stoppt das Programm einfach so .
Ich kann mir einfach keinen Reim drauf machen. Bitte mal drüber schauen, ob da sich ein Fehler eingeschlichen hat.
BASCOM-Quellcode
- 'Laufrichtungslicht für Hofeinfahrt (Wegbeleuchtung)
- 'D.Jäschke 20.05.11 fertig 16.11.13
- 'rev.20.07.2014 wegen Regen ISR zeitlich auf 40ms
- 'rev.25.02.2017 Comperator mit Rückkopplung (ä.LM358)wegen Hysterese
- '_______________________________________________________________
- $regfile = "attiny2313.dat"
- $crystal = 1000000
- $hwstack = 32
- $swstack = 10
- $framesize = 40
- '$sim
- '-------Pin, Port, Alias------------------------------------------
- Ddrb = &B00011100 'PB1 ist LDR
- Ddrd = &B11110011
- A1 Alias Portb.4 'OC1B
- A2 Alias Portb.3 'OC1A
- A3 Alias Portb.2 'OC0A
- A4 Alias Portd.5 'OC0B
- Led Alias Portd.4 'Anzeige Hell oder Dunkel
- Raus_led Alias Portd.0 'LED nur für Test
- Rein_led Alias Portd.1 'LED nur für Test
- Isr0 Alias Pind.2 'rot raus
- Portd.2 = 1
- Config Int0 = Falling
- Enable Int0
- On Int0 Raus_isr0
- Isr1 Alias Pind.3 'blau rein
- Portd.3 = 1
- Config Int1 = Falling
- Enable Int1
- On Int1 Rein_isr1
- 'Ddra = &B0000000 'Eingänge setzen
- '----------Helligkeitseinstellung--------------------------------
- Acsr = &B00000000 'komp ein, V+ -- 47k -- AIN0 -- 24k -- GND ACSR.aco -- 240k -- AIN0
- Du Alias Acsr.aco 'zeigt dunkel = 1
- '----------PWM---------------------------------------------------
- Config Timer0 = Pwm , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_up , Prescale = 1
- Config Timer1 = Pwm , Pwm = 8 , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_up , Prescale = 1
- Enable Interrupts
- '---------Variablen---------------------------------------------
- Dim X_1 As Byte 'Anzahl Durchläufe
- Dim X_2 As Byte
- Dim X_3 As Byte
- Dim X_4 As Byte
- 'Dim Du As Bit 'Helligkeitseinstellung
- Dim Pwm As Byte
- Dim A As Byte
- Dim Raus As Bit 'Status für RAUS
- Raus = 0
- Dim Rein As Bit 'Status für REIN
- Rein = 0
- Const Zeit = 120 'Laufdauer
- '--------Hauptprogramm------------------------------------------
- Led = 1
- Do
- Led = Du
- If Du = 1 Then
- If Raus = 1 And Rein = 0 Then
- A = 0
- For A = 1 To 10 '10 Durchläufe
- For X_1 = 0 To 255 Step 51 'a1 an
- Pwm1b = X_1
- Waitms Zeit
- Next
- For X_2 = 0 To 255 Step 51 'a2 an
- Pwm1a = X_2
- Gosub 1 'a1 aus
- Waitms Zeit
- Next
- For X_3 = 0 To 255 Step 51 'a3 an
- Pwm0a = X_3
- Gosub 2 'a2 aus
- Waitms Zeit
- Next
- For X_4 = 0 To 255 Step 51 'a4 an
- Pwm0b = X_4
- Gosub 3 'a3 aus
- Waitms Zeit
- Next
- For X_4 = 255 To 0 Step -51 'a4 aus
- Pwm0b = X_4
- Waitms Zeit
- Next
- If Rein = 1 Then
- Exit For 'Abfrage ob Weg fertig
- End If
- Next A
- Rein = 0
- Raus = 0
- Elseif Rein = 1 And Raus = 0 Then
- A = 0
- For A = 1 To 10 '10 Durchläufe
- For X_4 = 0 To 255 Step 51 'a4 an
- Pwm0b = X_4
- Waitms Zeit
- Next
- For X_3 = 0 To 255 Step 51 'a3 an
- Pwm0a = X_3
- Gosub 4 'a4 aus
- Waitms Zeit
- Next
- For X_2 = 0 To 255 Step 51 'a2 an
- Pwm1a = X_2
- Gosub 3 'a3 aus
- Waitms Zeit
- Next
- For X_1 = 0 To 255 Step 51 'a1 an
- Pwm1b = X_1
- Gosub 2 'a2 aus
- Waitms Zeit
- Next
- For X_1 = 255 To 0 Step -51 'a1 aus
- Pwm1b = X_1
- Waitms Zeit
- Next
- If Raus = 1 Then 'Abfrage ob Weg fertig
- Exit For
- End If
- Next A
- Rein = 0
- Raus = 0
- End If
- End If
- Loop
- End
- '----------------------Gosub's----------------------------------------
- 1:
- X_1 = X_1 - 51
- Pwm1b = X_1
- Return
- 2:
- X_2 = X_2 - 51
- Pwm1a = X_2
- Return
- 3:
- X_3 = X_3 - 51
- Pwm0a = X_3
- Return
- 4:
- X_4 = X_4 - 51
- Pwm0b = X_4
- Return
- '---------------------Isr's-------
- Raus_isr0:
- A = 0
- For A = 1 To 80 'ist taster aktiv ?
- Waitus 500
- If Isr0 = 1 Then Exit For 'nein Abbruch
- Next
- If A = 81 And Isr0 = 0 Then 'verhindert Fehlauslösung
- Raus = 1
- End If
- Return
- '----------
- Rein_isr1:
- A = 0
- For A = 1 To 80 'ist taster aktiv ?
- Waitus 500
- If Isr1 = 1 Then Exit For 'nein Abbruch
- Next
- If A = 81 And Isr1 = 0 Then 'verhindert Fehlauslösung
- Rein = 1
- End If
- Return