Hallo ich habe kleines Bascom Progamm geschrieben und finde den Fehler nicht. Ich habe an ein Baby Orangutanboard einen Hallsensot an Int0 angeschlossen. Nach Minute 1 fängt LED zu leuchten an und schaltet wie gewünscht nach 10 Sensorimpulsen ab. Das LED sollte aber nach Minute 2 wieder anfangen zu leuchten, aber hier liegt das Problem. Bin Anfänger und befürchte ich habe eien Denkfehler. Ausserden ist die Timereistellung auch noch nicht richt , eine Minute dauert mit dieser Einstellung nur ca 30 sec. Aber das ist nicht so wild
Ich hoffe jemand kann mir helfen !!!Code:'Bascom Hallsensor test $regfile = "m328pdef.dat" $crystal = 20000000 'Quarzfrequenz $hwstack = 32 $framesize = 64 $swstack = 32 Config Pind.1 = Output 'Timer und der Teiler festlegen 10ms Config Timer0 = Timer , Prescale = 1024 On Timer0 Timer_irq Const Timervorgabe = 175 Config Int0 = Rising Enable Int0 Enable Interrupts Dim Hallimpuls As Integer Dim Cnt As Byte Dim Sekunde As Byte Dim Minute As Byte Dim Stunde As Byte Dim Sekunde_last As Byte Hallimpuls = 0 Stunde = 0 Minute = 0 Sekunde = 0 Enable Timer0 Do ' 1. Minute If Stunde = 0 And Minute = 1 Then Gosub Led ' 2. Minute If Stunde = 0 And Minute = 3 Then Gosub Led Loop Led: Hallimpuls = 0 On Int0 Zaehlen If Hallimpuls = 0 Then Toggle Portd.1 Do Idle Loop Until Hallimpuls = 10 Else Reset Portd.1 End If Return Zaehlen: Incr Hallimpuls Return Timer_irq: Timer0 = Timervorgabe Incr Cnt If Cnt = 50 Then Portb.6 = 0 End If If Cnt = 100 Then Portb.6 = 1 Sekunde = Sekunde + 1 If Sekunde = 60 Then Sekunde = 0 Minute = Minute + 1 If Minute = 60 Then Minute = 0 Stunde = Stunde + 1 If Stunde = 24 Then Stunde = 0 End If End If End If Cnt = 0 End If Return
Geändert von radbruch (01.06.2012 um 19:22 Uhr) Grund: Bitte Code-Tags verwenden
Danke für die schnelle Antwort !! cnt auf 200 funktioniert gut. Aber mein Hauptproblem, daß das Led nach 2 Minuten nicht wieder das Leuchten beginnt besteht weiter. !!!
Du schreibst ja auch if minute = 3 und nicht if minute= 2...
MfG
Tido
---------------------------------------------------
Have you tried turning it off and on again???
---------------------------------------------------
Hab ich auch auf 2 geändert, fängt aber weder nach 2 noch nach 3 Minuten an zu leuchten.
Das liegt daran, dass dein Programm in der 2. Do-Loop-Schleife hängt.
Erklärung folgt:
Nach deinen 10 Impulsen wird die Sub LED verlassen. Da deine Bedingung "if stunde=0 and minute=1" im nächsten Programmdurchlauf wieder war ist, springt er wieder zu LED.
Dort macht er dir mit "toggle LED" die LED aus und wartet auf 10 Impulse (die die ihm nicht gibst, da du auf minute=2 wartest).
MfG
Tido
---------------------------------------------------
Have you tried turning it off and on again???
---------------------------------------------------
Versuch mal:
Löst zwar wahrscheinlich dein Problem, hat aber weitere Fallstricke.Code:'Bascom Hallsensor test $regfile = "m328pdef.dat" $crystal = 20000000 'Quarzfrequenz $hwstack = 32 $framesize = 64 $swstack = 32 Config Pind.1 = Output 'Timer und der Teiler festlegen 10ms Config Timer0 = Timer , Prescale = 1024 On Timer0 Timer_irq Const Timervorgabe = 175 Config Int0 = Rising Enable Int0 Enable Interrupts Dim Hallimpuls As Integer Dim Cnt As Byte Dim Sekunde As Byte Dim Minute As Byte Dim Stunde As Byte Dim Sekunde_last As Byte Dim Minute_last as Byte Hallimpuls = 0 Stunde = 0 Minute = 0 Sekunde = 0 Enable Timer0 Do If Stunde = 0 And Minute <> Minute_last Then Gosub Led Loop Led: Hallimpuls = 0 Portd.1 = 1'LED an On Int0 Zaehlen Do Idle Loop Until Hallimpuls = 10 Portd.1 = 0'LED aus minute_last = minute Return Zaehlen: Incr Hallimpuls Return Timer_irq: Timer0 = Timervorgabe Incr Cnt If Cnt = 50 Then Portb.6 = 0 End If If Cnt = 100 Then Portb.6 = 1 Sekunde = Sekunde + 1 If Sekunde = 60 Then Sekunde = 0 Minute = Minute + 1 If Minute = 60 Then Minute = 0 Stunde = Stunde + 1 If Stunde = 24 Then Stunde = 0 End If End If End If Cnt = 0 End If Return
MfG
Tido
---------------------------------------------------
Have you tried turning it off and on again???
---------------------------------------------------
Danke werd ich morgen ausprobieren. Wollte aber am ende der Entwicklung Motoren zu einer bestimmten Zeit (z.B 1h23m)einschalten und nach einer Bestimmten Anzahl an Umdrehungen ( z.B. 20) wieder ausschalten, nach einer bestimmten Zeit ( z.B. 3h56) wieder einschalten und nach 20 Umdrehungen wieder ausschalten usw...
Dann setz dir in der Sub ne Variable auf 1 und lösche sie in der irq wieder, wenn sich die minute ändert. Und den "gosub" führst du nur aus wenn variable=0. So ist sichergestellt, dass die sub nur einmal pro minute aufgerufen wird.
MfG
Tido
---------------------------------------------------
Have you tried turning it off and on again???
---------------------------------------------------
Hallo danke für die Hilfe hat leider nicht den gewünschten Erflog gebracht !!
Geändert von hunikuni (02.06.2012 um 22:18 Uhr)
Lesezeichen