Ich habe vor 1 Woche mit Bascom und AVR angefangen...
Nach Anschaffung der Hardware habe mit etwas einfaches begonnen. Eine Uhr mit LCD...Nun habe ich das Ganze fast aus eigner Kraft fertiggestellt....
Nun meine Frage, warum die Anzeige flackert..ein wenig, besonders die erste Zeile "aktuelle Uhrzeit",,nun erstmal mein Code...
$regfile = "m8def.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
$baud = 9600
$regfile "m8def.dat"
$crystal = 16000000
Config Lcd = 16 * 2
Dim Sekunde As Word
Dim Minute As Word
Dim Stunde As Word
Dim S1 As String * 2
Dim S2 As String * 2
Dim S3 As String * 2
Config Pind.2 = Input
Portd.2 = 1
Taster0 Alias Pind.2
Config Pind.3 = Input
Portd.3 = 1
Taster1 Alias Pind.3
Config Timer1 = Timer , Prescale = 256
Enable Timer1
On Timer1 Test
Enable Interrupts
Timer1 = 3036
'------------ Uhr Voreinstellung ----------------------------------------------
Sekunde = 0
Minute = 0
Stunde = 0
Initlcd
Cls ' Display löschen
'-------------------- Formatkonvertierung für Uhrzeit -------------------------
S1 = Str(stunde)
S1 = Format(s1 , "00")
'----------------------------------
S2 = Str(minute)
S2 = Format(s2 , "00")
'------------------------------------
S3 = Str(sekunde)
S3 = Format(s3 , "00")
'--------------------------------------
' S1 ist nun die Variable für Stunde
' S2 ist nun die Variable für Minuten
' S3 ist nun die Variable für Sekunden
'----------- Anzeige Stunden , Minuten, Sekunden auf Display ------------------
Locate 2 , 13
Lcd S3
Locate 2 , 11
Lcd ":"
Locate 2 , 8
Lcd S2
Locate 2 , 6
Lcd ":"
Locate 2 , 3
Lcd S1
Locate 1 , 1
Lcd "Aktuelle Uhrzeit"
Cursor Off
Waitms 50
If Sekunde > 59 Then Minute = Minute + 1
If Sekunde > 59 Then Sekunde = 0
If Minute > 59 Then Stunde = Stunde + 1
If Minute > 59 Then Minute = 0
If Stunde > 23 Then Stunde = 0
'--------------Uhr einstellen Minute ------------------------------------------
If Taster0 = 0 Then
Waitms 50
Incr Stunde
End If
'--------------Uhr einstellen Stunde -----------------------------------------
If Taster1 = 0 Then
Waitms 50
Incr Minute
End If
'--------Uhr komplett auf Null stellen ----------------------------------------
If Taster0 = 0 And Taster1 = 0 Then
Sekunde = 0
Minute = 0
Stunde = 0
Waitms 50
End If
'------------------------------------------------------------------------------
Loop
End
Test:
Incr Sekunde
Timer1 = 3036
Return
Ich vermute es muss irgendwas mit dem Timer zusammenhängen....meine erste Version war mit einem Zähler..etwa so :
onfig Pind.2 = Input
Portd.2 = 1
Taster0 Alias Pind.2
Do
For Initcounter = 1 To 36
'LCD löschen
Cls
'Haupttext der ersten Zeile anzeigen
Locate 1 , 1
Lcd "Aktuelle Uhrzeit"
'Jede Sekunde um 1 hochzählen und neuen Wert anzeigen
Cursor Off
For Bt = 0 To 59
'Neuen Wert in einen Text umwandeln
S = Str(bt)
S = Format(s , "00")
Locate 2 , 13
Lcd S
Locate 2 , 11
Lcd ":"
Hier war es ok,,,,,ich komme momentan nicht weiter, ich wollte das Programm mit anderen Optionen erweitern, aber so lange, eins nicht 100% geht, gehe nicht weiter...Andere Frage wäre noch, klar mein Programmstiel ist Amateurhaft..ich weiss, bin aber froh daß ich erstmal soweit gekommen bin
Nach Anschaffung der Hardware habe mit etwas einfaches begonnen. Eine Uhr mit LCD...Nun habe ich das Ganze fast aus eigner Kraft fertiggestellt....
Nun meine Frage, warum die Anzeige flackert..ein wenig, besonders die erste Zeile "aktuelle Uhrzeit",,nun erstmal mein Code...
$regfile = "m8def.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , _
Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
$baud = 9600
$regfile "m8def.dat"
$crystal = 16000000
Config Lcd = 16 * 2
Dim Sekunde As Word
Dim Minute As Word
Dim Stunde As Word
Dim S1 As String * 2
Dim S2 As String * 2
Dim S3 As String * 2
Config Pind.2 = Input
Portd.2 = 1
Taster0 Alias Pind.2
Config Pind.3 = Input
Portd.3 = 1
Taster1 Alias Pind.3
Config Timer1 = Timer , Prescale = 256
Enable Timer1
On Timer1 Test
Enable Interrupts
Timer1 = 3036
'------------ Uhr Voreinstellung ----------------------------------------------
Sekunde = 0
Minute = 0
Stunde = 0
Initlcd
Cls ' Display löschen
'-------------------- Formatkonvertierung für Uhrzeit -------------------------
S1 = Str(stunde)
S1 = Format(s1 , "00")
'----------------------------------
S2 = Str(minute)
S2 = Format(s2 , "00")
'------------------------------------
S3 = Str(sekunde)
S3 = Format(s3 , "00")
'--------------------------------------
' S1 ist nun die Variable für Stunde
' S2 ist nun die Variable für Minuten
' S3 ist nun die Variable für Sekunden
'----------- Anzeige Stunden , Minuten, Sekunden auf Display ------------------
Locate 2 , 13
Lcd S3
Locate 2 , 11
Lcd ":"
Locate 2 , 8
Lcd S2
Locate 2 , 6
Lcd ":"
Locate 2 , 3
Lcd S1
Locate 1 , 1
Lcd "Aktuelle Uhrzeit"
Cursor Off
Waitms 50
If Sekunde > 59 Then Minute = Minute + 1
If Sekunde > 59 Then Sekunde = 0
If Minute > 59 Then Stunde = Stunde + 1
If Minute > 59 Then Minute = 0
If Stunde > 23 Then Stunde = 0
'--------------Uhr einstellen Minute ------------------------------------------
If Taster0 = 0 Then
Waitms 50
Incr Stunde
End If
'--------------Uhr einstellen Stunde -----------------------------------------
If Taster1 = 0 Then
Waitms 50
Incr Minute
End If
'--------Uhr komplett auf Null stellen ----------------------------------------
If Taster0 = 0 And Taster1 = 0 Then
Sekunde = 0
Minute = 0
Stunde = 0
Waitms 50
End If
'------------------------------------------------------------------------------
Loop
End
Test:
Incr Sekunde
Timer1 = 3036
Return
Ich vermute es muss irgendwas mit dem Timer zusammenhängen....meine erste Version war mit einem Zähler..etwa so :
onfig Pind.2 = Input
Portd.2 = 1
Taster0 Alias Pind.2
Do
For Initcounter = 1 To 36
'LCD löschen
Cls
'Haupttext der ersten Zeile anzeigen
Locate 1 , 1
Lcd "Aktuelle Uhrzeit"
'Jede Sekunde um 1 hochzählen und neuen Wert anzeigen
Cursor Off
For Bt = 0 To 59
'Neuen Wert in einen Text umwandeln
S = Str(bt)
S = Format(s , "00")
Locate 2 , 13
Lcd S
Locate 2 , 11
Lcd ":"
Hier war es ok,,,,,ich komme momentan nicht weiter, ich wollte das Programm mit anderen Optionen erweitern, aber so lange, eins nicht 100% geht, gehe nicht weiter...Andere Frage wäre noch, klar mein Programmstiel ist Amateurhaft..ich weiss, bin aber froh daß ich erstmal soweit gekommen bin