Ich bin dabei einen 24 Stunden Timer zu realisieren mit einem Atmega16 wegen der Genauigkeit habe ich den Timer1 benutzt mit einem externen Quarz. Sobald ich die Timer Routine einfüge zeigen die Sekunden HEX Zeichen an, 00:12:E4 00:12:D9 usw. sobald ich den Timer1 entferne, oder ausklammere Läuft sie normal 00:12:23 00:12:22 usw. Was geht da falsch? $Regfile="m16def.dat" $Crystal=8000000 $hwstack=80 $swstack=32 $framesize=64 config LCDPIN = pin, db4 = portd.0, db5 = portd.2, db6= portd.4, db7 = portd.6, E=portd.1, rs=portd.3 config lcd = 16 * 2 config portd=output Cursor Off Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1 Enable Timer1 'schalte den Timer1 ein On Timer1 Zeit 'verzweige bei Timer1 überlauf zu Isr_von_Timer1 Enable Interrupts Timer1 = 34285 cls Config Portb.0 = Input Config Portb.1 = Input Config Portb.2 = Input Config Portb.3 = Input Config Portb.4 = Input Config Portb.5 = Output config Portb.6 = Output Portb.0 = 1 Portb.1 = 1 Portb.2 = 1 Portb.3 = 1 Portb.4 = 0 Portb.5 = 0 Start_stop Alias Pinb.0 'Start Stopp taste Setup Alias Pinb.1 'Setup Taste Minute Alias Pinb.2 'Minuten Taste Sekunde Alias Pinb.3 'Sekunden Taste Stunde alias PINb.4 ' Stunden Taste Relais Alias Portb.5 'Relais Ausgang Speaker Alias Portb.6 'Buzzer Ausgang Config Clock = Soft Dim Sekunden As Byte 'sekunden variable Dim Minuten As Byte 'minuten variable Dim Stunden As Byte 'stunden variable Dim Time_temp(3) As Byte At Sekunden Overlay Dim Refresh_lcd As Bit Dim Alarm As Bit '____________________________________________ Main: '-------------------------------------------- Do Cls Locate 1 , 1 Lcd "Universal Timer" Locate 2 , 1 Lcd "Setup Dr";CHR(245);"cken" Bitwait Setup , Reset Gosub Einstellen Bitwait Start_stop , Set Gosub Run Loop '____________________________________________ Einstellen: '-------------------------------------------- Cls Locate 1 , 1 Lcd "Zeit einstellen" Refresh_lcd = 1 Alarm = 0 Do If Refresh_lcd = 1 Then Locate 2 , 1 Lcd Time(time_temp(1)) Refresh_lcd = 0 End If 'Sekunden einstellen If Sekunde = 0 Then If Sekunden < 59 Then Incr Sekunden Else Sekunden = 00 Waitms 160 Refresh_lcd = 1 End If 'Minuten einstellen If Minute = 0 Then If Minuten < 59 Then Incr Minuten Else Minuten = 00 Waitms 160 Refresh_lcd = 1 End If 'Stunden einstellen If stunde =0 Then If Sekunden <23 Then Incr Stunden Else Stunden = 00 Waitms 160 Refresh_lcd = 1 end IF Loop Until Start_stop = 0 Return '____________________________________________ Run: '-------------------------------------------- Cls Locate 1 , 1 Lcd "Timer l";CHR(245);"uft" Locate 2 , 1 Lcd Time(time_temp(1)) Do Waitms 500 If Sekunden = 0 Then ' Sind die Sekunden auf Null? If Minuten = 0 Then ' Sind die Minuten auf Null? if Stunden = 0 then ' Sind auch die Stunden Null? Alarm! Alarm = 1 Else ' Stunden waren nicht Null! Decr Stunden ' Um eine Stunde verringern Minuten = 59 ' Minuten wieder auf 59 Sekunden = 59 ' Sekunden wieder auf 59 End IF Else ' Minuten waren nicht Null! Decr Minuten End If Else ' Sekunden waren nicht Null! Decr Sekunden End If Locate 2 , 1 Lcd Time(time_temp(1)) Loop Until Alarm = 1 Or Start_stop = 0 If Alarm = 1 Then Cls Lcd "Zeit Abgelaufen" End If Bitwait Start_stop , Reset Return Zeit: '1Hz Takt Timer1 = 34285 Return
Hallo, wenn du die Minuten um eins verringerst, dann solltest du die Sekunden wieder auf 59 setzen sonst kommen dort natürlich falsche Werte raus. Hat mit dem Timer nichts zu tun. Sascha
Ist komisch weil es nur ist wenn ich den Timmer1 hinzufüge, ohne das was ich verändere. oder übersehe ich da was?
Patrick S. schrieb: > oder übersehe ich da was? Ich vermute sehr, dass du einem Phantom nachjagst. Geh mal analytisch vor: was passiert denn nach 00:00:09? Wenn tatsächlich Hex ausgegeben würde, dann käme danach 00:00:0A. Und da ist sicher auch ein Bock drin:
1 | 'Stunden einstellen |
2 | If stunde =0 Then |
3 | If Sekunden <23 Then Incr Stunden Else Stunden = 00 |
Ich gebs ab hier dann auf, denn dieser Code ist ohne Formatierung und
Einrückungen so unleserlich.
Und auch das hier:
> Minuten = 59 ' Minuten wieder auf 59
Solche Kommentare sind mindestens unnötig, und bestenfalls verwirrend...
Hallo Patrick S. , Sascha hat doch alles relevante genannt. Dein Algorithmus ist halt falsch. Erst, wenn Du dies selbst erkennst, dann wirst Du eine richtige Lösung programmieren können.
:
Bearbeitet durch User
Danke es läuft jetzt muss es noch genau laufen, ich habe 1 Sekunde Abweichung pro Minute.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.