Hallo
Also ich hab eine kleines Programm für einen Atmega 8 geschrieben welches LEDs ansteuert.
Es werden genau 7 Ausgänge angesteuert. Jeder Ausgang kann über einen Software PWM gesteuert werden. Es sollen Lauflichter entestehen die Geschwindigkeit dieser Lauflichter kann auch eingestellt werden. Beides geschieht über ein Poti. Es werden dazu 2 Timer benutzt. Die Einstellungen sollen Spannungsfrei gespeichert werden.
Nun zum Problem. Leider stürzt das Programm immer mal wieder ab. Ich weiß nicht warum und es gibt auch keine Regelmäßigkeit. Was aber bis jetzt immer so war ist wenn der µC längere Zeit nicht eingeschaltet ist und dann wieder eingeschaltet wird stürzt das Programm immer ab. Es kann dann durch ein bischen hin und her stellen zum laufen gebracht werden. Das war aber eigentlich nicht so gedacht.... Kann mir jemand helfen?
Danke für die Hilfe.
lg dämmi
Das Programm:
Code:
'-----------------------------Registrierung-------------------------------------
$regfile = "m8def.dat" 'Konfiguration auf ATmega 8
$crystal = 16000000 'Quarztakt 16MHz
'-----------------------------Configuration-------------------------------------
'Config Porta = Input
Config Portb = Output 'Led Ausgang
Config Portd.7 = Output 'Led Ausgang
Config Portd.0 = Input 'Schalter Eingang
Config Portd.1 = Input 'Schalter Eingang
Config Portd.2 = Input 'Schalter Eingang
Config Portd.3 = Input 'Schalter Eingang
Config Portd.4 = Input 'Schalter Eingang
Config Portd.5 = Input 'Schalter Eingang
Config Portd.6 = Input 'Schalter Eingang
Config Adc = Single , Prescaler = Auto , Reference = Internal 'ADC Konfiguaration 'mit interner reference
'Spannung
Start Adc
Config Timer0 = Timer , Prescale = 1 'Konfiguriere Timer0
Config Timer2 = Timer , Prescale = 8
Enable Timer2
Enable Timer0 'schalte den Timer0 ein
On Timer0 Routtimer0
On Timer2 Routtimer2 'verzweige bei Timer0 überlauf zu Isr_von_Timer0
Enable Interrupts
'-----------------------------Dimensionierung-----------------------------------
Tast1 Alias Pind.0
Tast2 Alias Pind.1
Tast3 Alias Pind.2
Tast4 Alias Pind.3
Tast5 Alias Pind.4
Tast6 Alias Pind.5
Tast7 Alias Pind.6
Leds Alias Portb
Led1 Alias Portb.0
Led2 Alias Portb.1
Led3 Alias Portb.2
Led4 Alias Portb.3
Led5 Alias Portb.4
Led6 Alias Portb.5
Led7 Alias Portd.7
Dim Adcwert As Word
Dim Adcwertalt As Word
Dim Zaehler As Word
Dim Zaehler2 As Word
Dim Pwm As Word
Dim Speed As Word
Dim Schritt As Word
Dim Aus As Bit
Dim Status As Byte
Dim Staled1 As Bit
Dim Staled2 As Bit
Dim Staled3 As Bit
Dim Staled4 As Bit
Dim Staled5 As Bit
Dim Staled6 As Bit
Dim Staled7 As Bit
Dim Epwm As Eram Word
Dim Espeed As Eram Word
Dim Tast1stat As Bit
Dim Adcstat As Bit
'-----------------------------Vorkonfiguration----------------------------------
Portb = &B00000000
Portd.7 = 0
Adcwert = 0
Adcwertalt = 0
Zaehler = 0
Zaehler2 = 0
Schritt = 0
Aus = 0
Status = 0
Timer0 = 0
Timer2 = 0
Adcstat = 0
Pwm = Epwm
Speed = Espeed
Tast1stat = Tast1
'----------------------------Hauptprogramm--------------------------------------
Do
If Tast1stat <> Tast1 Or Adcstat = 1 Then 'einlesen des Poti Werts
Adcstat = 1
Adcwert = Getadc(0)
If Adcwert <> Adcwertaltthen
Adcwertalt = Adcwert
If Tast1 = 0 Then 'abspeichern des Wertes als PWM Wert
Pwm = Adcwertalt
End If
If Tast1 = 1 Then 'abspeichern des Wertes als Speed Wert
Speed = 1400 - Adcwertalt
End If
End If
End If
If Tast7 = 1 And Tast3 = 0 And Tast4 = 0 And Tast5 = 0 And Tast6 = 0 And Tast2 = 0 Then
If Status <> 1 Then
Schritt = 0 'Programm 1
Status = 1
End If
If Schritt = 1 Then
Staled1 = 1
Staled2 = 1
Staled3 = 1
Staled4 = 1
Staled5 = 1
Staled6 = 1
Staled7 = 1
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 1
Led6 = 1
Led7 = 1
End If
If Schritt = 2 Then
Staled1 = 0
Staled2 = 0
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0
Schritt = 0
End If
End If
If Tast3 = 1 And Tast2 = 0 And Tast4 = 0 And Tast5 = 0 And Tast6 = 0 And Tast7 = 0 Then
If Status <> 2 Then
Schritt = 0 'Programm 2
Status = 2
End If
If Schritt = 1 Or Schritt = 15 Then
Staled1 = 0
Staled2 = 0
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0
If Schritt = 15 Then Schritt = 0
End If
If Schritt = 2 Or Schritt = 14 Then
Staled1 = 1
Staled2 = 0
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0
End If
If Schritt = 3 Or Schritt = 13 Then
Staled1 = 1
Staled2 = 1
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 1
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0
End If
If Schritt = 4 Or Schritt = 12 Then
Staled1 = 1
Staled2 = 1
Staled3 = 1
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0
End If
If Schritt = 5 Or Schritt = 11 Then
Staled1 = 1
Staled2 = 1
Staled3 = 1
Staled4 = 1
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 0
Led6 = 0
Led7 = 0
End If
If Schritt = 6 Or Schritt = 10 Then
Staled1 = 1
Staled2 = 1
Staled3 = 1
Staled4 = 1
Staled5 = 1
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 1
Led6 = 0
Led7 = 0
End If
If Schritt = 7 Or Schritt = 9 Then
Staled1 = 1
Staled2 = 1
Staled3 = 1
Staled4 = 1
Staled5 = 1
Staled6 = 1
Staled7 = 0
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 1
Led6 = 1
Led7 = 0
End If
If Schritt = 8 Then
Staled1 = 1
Staled2 = 1
Staled3 = 1
Staled4 = 1
Staled5 = 1
Staled6 = 1
Staled7 = 1
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 1
Led6 = 1
Led7 = 1
End If
End If
If Tast4 = 1 And Tast2 = 0 And Tast3 = 0 And Tast5 = 0 And Tast6 = 0 And Tast7 = 0 Then
If Status <> 3 Then 'Programm 3
Schritt = 0
Status = 3
End If
If Schritt = 1 Or Schritt = 11 Or Schritt = 21 Then
Staled1 = 0
Staled2 = 0
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0
If Schritt = 21 Then Schritt = 0
End If
If Schritt = 2 Or Schritt = 20 Then
Staled1 = 1
Staled2 = 0
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0
End If
If Schritt = 3 Or Schritt = 19 Then
Staled1 = 1
Staled2 = 1
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 1
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0
End If
If Schritt = 4 Or Schritt = 18 Then
Staled1 = 1
Staled2 = 1
Staled3 = 1
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0
End If
If Schritt = 5 Or Schritt = 17 Then
Staled1 = 0
Staled2 = 1
Staled3 = 1
Staled4 = 1
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 0
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 0
Led6 = 0
Led7 = 0
End If
If Schritt = 6 Or Schritt = 16 Then
Staled1 = 0
Staled2 = 0
Staled3 = 1
Staled4 = 1
Staled5 = 1
Staled6 = 0
Staled7 = 0
Led1 = 0
Led2 = 0
Led3 = 1
Led4 = 1
Led5 = 1
Led6 = 0
Led7 = 0
End If
If Schritt = 7 Or Schritt = 15 Then
Staled1 = 0
Staled2 = 0
Staled3 = 0
Staled4 = 1
Staled5 = 1
Staled6 = 1
Staled7 = 0
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 1
Led5 = 1
Led6 = 1
Led7 = 0
End If
If Schritt = 8 Or Schritt = 14 Then
Staled1 = 0
Staled2 = 0
Staled3 = 0
Staled4 = 0
Staled5 = 1
Staled6 = 1
Staled7 = 1
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 1
Led6 = 1
Led7 = 1
End If
If Schritt = 9 Or Schritt = 13 Then
Staled1 = 0
Staled2 = 0
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 1
Staled7 = 1
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 1
Led7 = 1
End If
If Schritt = 10 Or Schritt = 12 Then
Staled1 = 0
Staled2 = 0
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 1
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 1
End If
End If
If Tast6 = 1 And Tast2 = 0 And Tast3 = 0 And Tast4 = 0 And Tast5 = 0 And Tast7 = 0 Then
If Status <> 5 Then
Schritt = 0 'Programm 4
Status = 5
End If
If Schritt = 1 Then
Staled1 = 1
Staled2 = 0
Staled3 = 0
Staled4 = 0
Staled5 = 1
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 1
Led6 = 0
Led7 = 0
End If
If Schritt = 2 Then
Staled1 = 0
Staled2 = 1
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 1
Staled7 = 0
Led1 = 0
Led2 = 1
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 1
Led7 = 0
End If
If Schritt = 3 Then
Staled1 = 0
Staled2 = 0
Staled3 = 1
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 1
Led1 = 0
Led2 = 0
Led3 = 1
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 1
End If
If Schritt = 4 Then
Staled1 = 0
Staled2 = 0
Staled3 = 0
Staled4 = 1
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 1
Led5 = 0
Led6 = 0
Led7 = 0
Schritt = 0
End If
End If
If Tast5 = 1 And Tast2 = 0 And Tast3 = 0 And Tast4 = 0 And Tast7 = 0 And Tast6 = 0 Then
If Status <> 6 Then
Schritt = 0 'Programm 5
Status = 6
End If
If Schritt = 1 Then
Staled1 = 1
Staled2 = 0
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0
End If
If Schritt = 2 Then
Staled1 = 1
Staled2 = 1
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 1
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0
End If
If Schritt = 3 Then
Staled1 = 1
Staled2 = 1
Staled3 = 1
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 0
End If
If Schritt = 4 Then
Staled1 = 1
Staled2 = 1
Staled3 = 1
Staled4 = 1
Staled5 = 0
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 0
Led6 = 0
Led7 = 0
End If
If Schritt = 5 Then
Staled1 = 1
Staled2 = 1
Staled3 = 1
Staled4 = 1
Staled5 = 1
Staled6 = 0
Staled7 = 0
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 1
Led6 = 0
Led7 = 0
End If
If Schritt = 6 Then
Staled1 = 1
Staled2 = 1
Staled3 = 1
Staled4 = 1
Staled5 = 1
Staled6 = 1
Staled7 = 0
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 1
Led6 = 1
Led7 = 0
End If
If Schritt = 7 Then
Staled1 = 1
Staled2 = 1
Staled3 = 1
Staled4 = 1
Staled5 = 1
Staled6 = 1
Staled7 = 1
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 1
Led6 = 1
Led7 = 1
End If
If Schritt = 8 Then
Staled1 = 0
Staled2 = 1
Staled3 = 1
Staled4 = 1
Staled5 = 1
Staled6 = 1
Staled7 = 1
Led1 = 0
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 1
Led6 = 1
Led7 = 1
End If
If Schritt = 9 Then
Staled1 = 0
Staled2 = 0
Staled3 = 1
Staled4 = 1
Staled5 = 1
Staled6 = 1
Staled7 = 1
Led1 = 0
Led2 = 0
Led3 = 1
Led4 = 1
Led5 = 1
Led6 = 1
Led7 = 1
End If
If Schritt = 10 Then
Staled1 = 0
Staled2 = 0
Staled3 = 0
Staled4 = 1
Staled5 = 1
Staled6 = 1
Staled7 = 1
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 1
Led5 = 1
Led6 = 1
Led7 = 1
End If
If Schritt = 11 Then
Staled1 = 0
Staled2 = 0
Staled3 = 0
Staled4 = 0
Staled5 = 1
Staled6 = 1
Staled7 = 1
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 1
Led6 = 1
Led7 = 1
End If
If Schritt = 12 Then
Staled1 = 0
Staled2 = 0
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 1
Staled7 = 1
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 1
Led7 = 1
End If
If Schritt = 13 Then
Staled1 = 0
Staled2 = 0
Staled3 = 0
Staled4 = 0
Staled5 = 0
Staled6 = 0
Staled7 = 1
Led1 = 0
Led2 = 0
Led3 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Led7 = 1
Schritt = 0
End If
End If
If Tast2 = 1 Then 'abspeichern der Werte im Eprom
Espeed = Speed
Epwm = Pwm
Do
Led1 = 1
Led2 = 1
Led3 = 1
Led4 = 1
Led5 = 1
Led6 = 1
Led7 = 1
Loop Until Tast7 = 0
End If
Loop
End
Routtimer0:
If Zaehler <= Pwm Then 'PWM
If Staled1 = 1 Then Led1 = 1
If Staled2 = 1 Then Led2 = 1
If Staled3 = 1 Then Led3 = 1
If Staled4 = 1 Then Led4 = 1
If Staled5 = 1 Then Led5 = 1
If Staled6 = 1 Then Led6 = 1
If Staled7 = 1 Then Led7 = 1
End If
If Zaehler > Pwm Then
If Staled1 = 1 Then Led1 = 0
If Staled2 = 1 Then Led2 = 0
If Staled3 = 1 Then Led3 = 0
If Staled4 = 1 Then Led4 = 0
If Staled5 = 1 Then Led5 = 0
If Staled6 = 1 Then Led6 = 0
If Staled7 = 1 Then Led7 = 0
End If
If Zaehler = 1026 Then Zaehler = 0
Zaehler = Zaehler + 1
Return
Routtimer2: 'Programm geschwindigkeit
If Zaehler2 >= Speed Then
Zaehler2 = 0
Schritt = Schritt + 1
End If
Zaehler2 = Zaehler2 + 1
Return
Lesezeichen