Forum: Mikrocontroller und Digitale Elektronik countdown timer giebt bei der Sekunden Anzeige HEX Zeichen aus


von Patrick S. (patrick_s94)


Lesenswert?

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

von Sascha W. (sascha-w)


Lesenswert?

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

von Patrick S. (patrick_s94)


Lesenswert?

Ist komisch weil es nur ist wenn ich den Timmer1 hinzufüge,
ohne das was ich verändere. oder übersehe ich da was?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Uwe (de0508)


Lesenswert?

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
von Patrick S. (patrick_s94)


Lesenswert?

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
Noch kein Account? Hier anmelden.