PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wecker bauen



xbgamer
19.01.2010, 18:37
Servus ich würde mir da ich noch einen atmega 8 übrig habe gerne einen Wecker damit bauen.

Nun habe ich in dem Buch von Roland Walter den abschnitt über timer2 durchgelesen und wollte direkt mal fragen ob man mein vorhaben damit realisieren kann?


Da ich noch blutiger anfänger bin wollte ich ebenfalls noch fragen ob es einfacher ist eine 7 segment anzeige anzusteuern oder ein lcd. da ich ein 4x20 lcd noch da habe würde dies sich für mich anbieten aber wenn es zu schwer für den anfang ist investiere ich auch geld.

vielleicht habt ihr ja auch ein paar gute links wo ich mich einlesen kann.
es sol ein recht simpler wecker einfach werden. man soll die uhr sowie den wecker einstellen können und eben über ne anzeige ausgeben. recht simpel eigentlich oder ist das zu schwer für ein erstes projekt?

Thomas$
19.01.2010, 20:52
ich würd den anfang so gestalten
1 versuchen tasterauszulesen
dann display anschliesen wirst du auch hinbekommen (welche sprache nutzt oder willst du nutzen bascom oder c oder asmbler)
danach kanst du dich an die uhrzeit mit passendem quarz wagen.
7 segment ist einfach aber bei 4*7 segment anzeige wird das ganze schon aufwendiger als das display (was für ein display hast du?)
z.B. link http://www.mcselec.com/index2.php?option=com_forum&Itemid=59&page=viewtopic&p=23456#23456

xbgamer
19.01.2010, 21:40
also ich will mit bascom arbeiten. display is so ein dot matrix display 4x20 zeichen.

Thomas$
19.01.2010, 22:00
mit treiber? der HDD44780 kompatibel ist?
sonst wirds schwierig
lies dir wenn du dann mit dem display anfängst die hilfe mal kurz durch was zum thema lcd steht.
http://www.rn-wissen.de/index.php/Bascom_und_LCD%27s rn wissen weis halt viel

xbgamer
20.01.2010, 06:58
ja is kompatibel hatte es damals zum anschließen an den rechner gekauft aber nie umgesetzt.

Vitis
20.01.2010, 09:55
anschließen kann man im Endeffekt alle LCD, nur ob Bascom
dafür direkt die Unterstützung bietet ist wieder ne andere Sache.
Ggf. muss man sich seinen "Treiber" halt selbst zusammen
schustern.

Andree-HB
20.01.2010, 12:03
Vielleicht mal als Anregung :
http://www.pixelklecks.de/projekteii/quarzbasiertesoftclock/index.php

xbgamer
20.01.2010, 17:49
hallo,
also hab mir hier nochmal das kapitel über den timer 2 durchgelesen nun wird hier gesagt dass man die uhr auch mit einem 3,2768MHz Quarz zum laufen bekommt und man nur wegen Stromverbrauch einen 32768Hz Quarz nehmen soll.

Also kann ich quasi mein Board mit dem Quarz testen und am ende alles auf den anderen quarz umschreiben?

Thomas$
20.01.2010, 18:05
ja kannst du wenn es aber um die uhrzeit geht macht sich ein uhren quarz mit 3,27... günstig (wegen teilbarkeit der zahl) kannst ja mal in paar ausschlacht baren uhren nachsehen ob ein passender quarz drin ist haupt sache er ist beschriftet
für den anfang kannst auch die 1mhz intern nehmen für die restlcihen sachen

xbgamer
20.01.2010, 18:19
ja wie jetzt brauch ich den 3,27...Mhz quarz oder den 327...Hz Quarz weil der Mhz Quarz is auf meinem AVR board bereits verbaut.

xbgamer
21.01.2010, 17:41
Vielleicht mal als Anregung :
http://www.pixelklecks.de/projekteii/quarzbasiertesoftclock/index.php

dieses teil is ja gar net mal so schlecht nur fehlt eben die wecker funktion. ich denke ich nehm dieses programm und erweitere es um den wecker.

wenn ich nun was auf dem display in der selben zeile erweiitern will schreibe ich:

Time$ = "00:00:00"
Date$ = "00/00/00"
Wecker$ = "00/00"

Do
Locate 1 , 1
Lcd Time$
Locate 1 , 8
Lcd Wecker$
Locate 2 , 1
Lcd _day ; "/" ; _month ; "/0" ; _year
'lcd Date$


kann ich zum vergleichen der weckzeit und der aktuellen zeit eigentlich eine gängige if schleife verwenden oder is das nicht ratsam?
is diese uhr überhaupt genau sehe da niergends was von nem timer oder ner quarz einstellung. was heißt eigentlich cls clear screen oder wie?

xbgamer
26.01.2010, 19:48
kann mir mal einer zufällig sagen wie ich ne selbsthaltung programmiere?

peterfido
26.01.2010, 22:33
Die Ausgänge behalten ihren Zustand, bis er vom Programm geändert wird.
Der Takt wird im Allgemeinen am Anfang des Codes eingestellt. ($Crystal= x ) wobei x in Hz angegeben wird.

xbgamer
28.01.2010, 19:05
he kann mir mal einer helfen bin gerade am inbetrieb nehmen meines lcd displays nur gibt es mir nur wirres zeug aus. manchmal is es abgeschnitten der text manchmal überlagert mit anderen zeichen. woran liegt dass?


$regfile = "m8def.dat"
$crystal = 1000000

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4

Cls
Locate 1 , 1
Lcd "Hallo Welt"

Rone
28.01.2010, 22:56
Hallo!

lcdbus rauswerfen und am ende ein end einfügen

MfG

Asuro91
28.01.2010, 23:11
Hey
@xbgamer ich bin auch erst neu in diesem gebiet hab aber auch letzt ein display angeschlossen ich hab bei meinem code noch ein

Waitms 1
Initlcd
Waitms 1

eingefügt weiß nicht ob man das braucht auf jeden fall fehlt bei dir das end am schluss deines codes




'LCD_Test.bas
$regfile = "m32def.dat"
$crystal = 16000000



Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4










Waitms 1
Initlcd
Waitms 1

Enable Interrupts


Cls


Locate 1 , 4
Lcd "*Hallo Welt*"
Locate 2 , 9
Lcd "Test"
Locate 3 , 6
Lcd "08.01.2010"
Locate 4 , 7
Lcd "Freitag"

Cursor Off




End 'end program

so müsste es funktionieren
lg micha

xbgamer
29.01.2010, 13:39
Hallo!

lcdbus rauswerfen und am ende ein end einfügen

MfG

wenn ich lcdbus rauswerfe bekomme ich nur noch zeichen aber nix gescheites.

habe am ende jetzt end eingefügt und habe festgestellt dass es zwar funktioniert aber nicht richtig.

wenn ich zb das wort "test" ausgebe bekomme ich immer "test_" auf dem display angezeigt. wie bekomm ich diesen strich weg? desweiteren wenn ich "hallo welt" eintrage bekomme ich wieder irgendwelche Zeichen aber eben nicht "hallo welt".

kann mir einer helfen?

Rone
29.01.2010, 16:37
Hallo!

Der "Strich" ist der Cursor!

Wie Du den wegbekommst und noch viel, viel mehr
steht in der Hilfedatei.

MfG
Rone

P.S. Auch eine kaputte Tastatur? Scheinen relativ teuer zu sein
die Dinger.

xbgamer
30.01.2010, 16:29
jetzt habe ich wieder ein problem ich will bei einem tastendruck ein wort text auf dem display erscheinen lassen nur wird das wort nicht beim tastendruck an sich angezeigt sonder nur wenn ich in die nähe des tasters komme.

habe auch schon entprellt nur hats nichts gebracht:


$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100


Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcdbus = 4
Cursor Off
Ddrb = &B11111111
Ddrd = &B00000000
Portd.2 = 1
Declare Sub Keypressed

Cls

Do
Debounce Pind.2 , 1 , Keypressed , Sub Keypressed
Loop

Sub Keypressed
Locate 2 , 1
Lcd "mp3"
End Sub
End

peterfido
30.01.2010, 21:00
Dir fehlt ein Pull-Up oder Pull-Down. Je nachdem. Am einfachsten ist es, Du Tastest nach GND und schaltest die Pull-Ups des AVR ein.

Rone
30.01.2010, 21:10
Hallo!

Versuch mal das:

$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100


Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcdbus = 4
Cursor Off
Ddrb = &B11111111
Ddrd = &B00000000
Portd.2 = 1
'Declare Sub Keypressed

Cls

Do
Debounce Pind.2 , 0 , Keypressed
Loop
End

Keypressed:
Locate 2 , 1
Lcd "mp3"
Return

xbgamer
31.01.2010, 18:10
bin jetzt schon etwas weiter bloß hab ich ein problem und zwar funktioniert das entprellen bei dem einstellen der zeit nicht. die anzeige rast dann.
der letzte sub sollte für die einstellung sein nur irgendwie entprellt er nicht.


$regfile = "m8def.dat"
$crystal = 1000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40



Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcdbus = 4
Cursor Off
Ddrb = &B11111111
Ddrd = &B00000000
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
Portd.6 = 1
Portd.7 = 1

Enable Interrupts
Config Clock = Soft
Config Portd = Input
Declare Sub Stunde
Declare Sub Minute
Declare Sub Ausgabe
Declare Sub Menue
Dim Modus As Byte
Declare Sub Einstellen
Cls

Time$ = "00:00:00"

Do
Locate 1 , 1
Lcd Time$ ; " " ;
Debounce Pind.3 , 0 , Stunde , Sub
Debounce Pind.4 , 0 , Minute , Sub
Debounce Pind.2 , 0 , Menue , Sub
Debounce Pind.7 , 0 , Einstellen , Sub
Loop






Menue:
Gosub Ausgabe
Return



Ausgabe:
Incr Modus
If Modus = 3 Then Modus = 0
Locate 2 , 1
If Modus = 0 Then
Locate 2 , 1
Wait 1
Lcd "MP3 "
Portb.0 = 1
Else
Portb.0 = 0
End If

If Modus = 1 Then
Locate 2 , 1
Wait 1
Lcd "Radio"
Portb.1 = 1
Else
Portb.1 = 0
End If

If Modus = 2 Then
Locate 2 , 1
Wait 1
Lcd "AUX "
Portb.2 = 1
Else
Portb.2 = 0
End If
Return



'Stunde
Sub Stunde
Waitms 200
Cls
Waitms 200
Do
Locate 1 , 1
Lcd "Stunde"
Locate 1 , 10
Lcd _hour
If Pind.7 = 0 Then
Incr _hour
Locate 1 , 10
Lcd _hour
End If
If _hour > 23 Then
_hour = 00
End If
Loop Until Pind.3 = 0
Waitms 200
Cls
Waitms 200
End Sub



'Minute
Sub Minute
Waitms 200
Cls
Waitms 200
Do
Locate 1 , 1
Lcd "Minute"
Locate 1 , 10
Lcd _min
If Pind.7 = 0 Then
Incr _min
Locate 1 , 10
Lcd _min
End If
If _min > 59 Then
_min = 00
End If
Loop Until Pind.4 = 0
Waitms 200
Cls
Waitms 200
End Sub

Return


'einstellen
Sub Einstellen
Gosub Stunde
Gosub Minute
End Sub
Return

peterfido
31.01.2010, 20:03
Die weiteren Locates im Modus kannst Du dir sparen. Wofür sind die Waits gedacht? Du rufst Subs mit Gosub und debounce auf. Wofür soll der Einstellungen "Knop" gut sein? Irgendwie ist einiges doppelt, bzw ich versteh nicht, welchen Zweck es erfüllt.

xbgamer
31.01.2010, 21:41
habs gerade nochmal überarbeitet:

$regfile = "m8def.dat"
$crystal = 1000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40



Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcdbus = 4
Cursor Off
Ddrb = &B11111111
Ddrd = &B00000000
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
Portd.6 = 1
Portd.7 = 1

Enable Interrupts
Config Clock = Soft
Declare Sub Stunde
Declare Sub Minute
Declare Sub Ausgabe
Declare Sub Menue
Dim Modus As Byte
Declare Sub Einstellen
Cls

Time$ = "00:00:00"

Do
Locate 1 , 1
Lcd Time$ ; " " ;
Debounce Pind.3 , 0 , Stunde , Sub
Debounce Pind.4 , 0 , Minute , Sub
Debounce Pind.2 , 0 , Menue , Sub
Debounce Pind.7 , 0 , Einstellen , Sub
Loop





Menue:
Incr Modus
If Modus = 4 Then Modus = 0
Locate 2 , 1
If Modus = 0 Then
Locate 2 , 1
Wait 1
Lcd "Aus "
End If


If Modus = 1 Then
Locate 2 , 1
Wait 1
Lcd "MP3 "
Portb.0 = 1
Else
Portb.0 = 0
End If



If Modus = 2 Then
Locate 2 , 1
Wait 1
Lcd "Radio"
Portb.1 = 1
Else
Portb.1 = 0
End If



If Modus = 3 Then
Locate 2 , 1
Wait 1
Lcd "AUX "
Portb.2 = 1
Else
Portb.2 = 0
End If
Return



'Stunde
Sub Stunde
Incr _hour
If _hour > 23 Then
_hour = 00
End If
End Sub




'Minute
Sub Minute
Incr _min
If _min > 59 Then
_min = 00
End If
End Sub

Return






nun muss ich irgendwie die weckzeit einstellen und ausgeben wie gehe ich da vor zwecks variablen und so?

peterfido
31.01.2010, 21:59
Versuch doch erstmal selber und poste, wenn Du an einem "Problem" verzweifelst. Denk Dir, wie es geht, und bringe es so Stück für Stück ins Programm.

xbgamer
01.02.2010, 06:52
so hab hier das ganze mal mit variablen mal noch mit der weckzeit
gemacht:

$regfile = "m8def.dat"
$crystal = 1000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40



Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 ,
Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcdbus = 4
Cursor Off
Ddrb = &B11111111
Ddrd = &B00000000
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
Portd.6 = 1
Portd.7 = 1

Enable Interrupts
Config Clock = Soft
Declare Sub Stunde
Declare Sub Minute
Declare Sub Menue
Declare Sub Stundew
Declare Sub Minutew
Dim Modus As Byte
Dim Stellenminute As Byte
Dim Stellenstunde As Byte
Cls

Time$ = "00:00:00"

Do
Locate 1 , 1
Lcd Time$ ; " " ;
Locate 1 , 12
Lcd Stellenstunde
Locate 1 , 14
Lcd ":"
Locate 1 , 15
Lcd Stellenminute
Debounce Pind.2 , 0 , Menue , Sub
Debounce Pind.3 , 0 , Stunde , Sub
Debounce Pind.4 , 0 , Minute , Sub
Debounce Pind.5 , 0 , Stundew , Sub
Debounce Pind.6 , 0 , Minute W , Sub
Loop





Menue:
Incr Modus
If Modus = 4 Then Modus = 0
Locate 2 , 1
If Modus = 0 Then
Locate 2 , 1
Wait 1
Lcd "Aus "
End If


If Modus = 1 Then
Locate 2 , 1
Wait 1
Lcd "MP3 "
Portb.0 = 1
Else
Portb.0 = 0
End If



If Modus = 2 Then
Locate 2 , 1
Wait 1
Lcd "Radio"
Portb.1 = 1
Else
Portb.1 = 0
End If



If Modus = 3 Then
Locate 2 , 1
Wait 1
Lcd "AUX "
Portb.2 = 1
Else
Portb.2 = 0
End If
Return



'Stunde
Sub Stunde
Incr _hour
If _hour > 23 Then
_hour = 00
End If
End Sub




'Minute
Sub Minute
Incr _min
If _min > 59 Then
_min = 00
End If
End Sub

Return

'MinuteW
Sub Minutew
Incr Stellenminute
If Stellenminute > 59 Then
Stellenminute = 00
End If
End Sub
Return


'Stundew
Sub Stundew
Incr Stellenstunde
If Stellenstunde > 23 Then
Stellenstunde = 00
End If
End Sub
Return



nun habe ich dazu noch ne frage. wie bekomme ich es hin dass stellen
minute und stellenstunde mit 00 anzeigen. so wird mir nur eine 0
angezeigt wo dann beim überlauf die letzte ziffer immer stehen bleibt.

dann noch ne frage ich habe das ganze mit der anzeige so gelöst:

Locate 1 , 12
Lcd Stellenstunde
Locate 1 , 14
Lcd ":"
Locate 1 , 15
Lcd Stellenminute
gibt es da ne elegantere möglichkeit?

xbgamer
01.02.2010, 21:07
so also ich bin fast fertig. probleme habe ich noch mit 2 sachen:

1. ich möchte dass das sub onoff immer erscheint wenn konfiguration = 0 jedoch soll eben der taster pind.6 mit debounce auch entprellt sein.

2. dann habe ich noch ein problem mit dem format. meine weckzeit wird mir immer als 0:0 ausgegeben ich will aber 00:00 haben wie mache ich das?


$regfile = "m8def.dat"
$crystal = 1000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40



Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcdbus = 4
Cursor Off
Ddrb = &B11111111
Ddrd = &B00000000
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
Portd.6 = 1
Portd.7 = 1

Enable Interrupts
Config Clock = Soft
Declare Sub Stunde
Declare Sub Minute
Declare Sub Menue
Declare Sub Stundew
Declare Sub Minutew
Declare Sub Onoff
Declare Sub Licht
Declare Sub Stellenmenue

Dim Modus As Byte
Dim Stellenstunde As Byte
Dim Stellenminute As Byte
Dim Konfiguration As Byte
Dim Anaus As Byte



Cls

Time$ = "00:00:00"

Do
Locate 1 , 1
Lcd Time$ ; " " ;
Locate 1 , 12
Lcd Stellenstunde ; ":" ; Stellenminute
Debounce Pind.2 , 0 , Menue , Sub
Debounce Pind.3 , 0 , Stellenmenue , Sub

If Konfiguration = 1 Then 'Wecker stellen
Debounce Pind.4 , 0 , Stundew , Sub
Debounce Pind.5 , 0 , Minutew , Sub
End If

If Konfiguration = 2 Then 'Uhr stellen
Debounce Pind.4 , 0 , Stunde , Sub
Debounce Pind.5 , 0 , Minute , Sub
End If

If Konfiguration = 0 Then 'Wecker an/aus
Debounce Pind.6 , 0 , Onoff , Sub
End If


If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 Then
Portb.5 = 1
Else
Portb.5 = 0
End If

Debounce Pind.7 , 0 , Licht , Sub

Loop



'Stellenmenü 'Menü zum einstellen Wecker/Uhr
Sub Stellenmenue
Incr Konfiguration
If Konfiguration = 3 Then Konfiguration = 0
Locate 2 , 11
If Konfiguration = 0 Then
Locate 2 , 11
Wait 1
Lcd " "
End If


If Konfiguration = 1 Then
Locate 2 , 11
Wait 1
Lcd "Wecker"
End If



If Konfiguration = 2 Then
Locate 2 , 11
Wait 1
Lcd " Uhr"
End If
End Sub
Return


'Menü 'Menü MP3, Radio, Aux
Menue:
Incr Modus
If Modus = 4 Then Modus = 0
Locate 2 , 1
If Modus = 0 Then
Locate 2 , 1
Wait 1
Lcd "Aus "
End If


If Modus = 1 Then
Locate 2 , 1
Wait 1
Lcd "MP3 "
Portb.0 = 1
Else
Portb.0 = 0
End If



If Modus = 2 Then
Locate 2 , 1
Wait 1
Lcd "Radio"
Portb.1 = 1
Else
Portb.1 = 0
End If



If Modus = 3 Then
Locate 2 , 1
Wait 1
Lcd "AUX "
Portb.2 = 1
Else
Portb.2 = 0
End If
Return



'Stunde 'Hier wird die Stunde der Uhr hochgezählt
Sub Stunde
Incr _hour
If _hour > 23 Then
_hour = 00
End If
End Sub



'Minute 'Hier wird die Minute der Uhr hochgezählt
Sub Minute
Incr _min
If _min > 59 Then
_min = 00
End If
End Sub

Return



'MinuteW 'Hier wird die Minute des Weckers hochgezählt
Sub Minutew
Incr Stellenminute
If Stellenminute > 59 Then
Stellenminute = 0
End If
End Sub
Return



'Stundew 'Hier wird die Stunde des Weckers hochgezählt
Sub Stundew
Incr Stellenstunde
If Stellenstunde > 23 Then
Stellenstunde = 0
End If
End Sub
Return



'onoff 'Hier wird der Wecker ein- und ausgeschaltet
Sub Onoff
Incr Anaus
If Anaus = 2 Then Anaus = 0
Locate 2 , 13
If Anaus = 0 Then
Locate 2 , 14
Wait 1
Lcd "aus"
End If

If Anaus = 1 Then
Locate 2 , 14
Wait 1
Lcd " an"
End If
End Sub
Return




'Licht 'Hier wird das Licht für 4 Sekunden eingeschaltet
Sub Licht

Portc.5 = 1
Wait 4

End Sub
Return

for_ro
01.02.2010, 21:33
Declare Sub Stunde
Declare Sub Minute
Declare Sub Menue
Declare Sub Stundew
Declare Sub Minutew
Declare Sub Onoff
Declare Sub Licht
Declare Sub Stellenmenue

Debounce erwartet Subs vom Label-Typ, keine richtige Sub.
Die Declares kannst du alle löschen.

Dies

Sub Stellenmenue
Incr Konfiguration
If Konfiguration = 3 Then Konfiguration = 0
Locate 2 , 11
If Konfiguration = 0 Then
Locate 2 , 11
Wait 1
Lcd " "
End If
If Konfiguration = 1 Then
Locate 2 , 11
Wait 1
Lcd "Wecker"
End If
If Konfiguration = 2 Then
Locate 2 , 11
Wait 1
Lcd " Uhr"
End If
End Sub
Return

sollte so aussehen

Stellenmenue:
Incr Konfiguration
If Konfiguration = 3 Then Konfiguration = 0
Locate 2 , 11
If Konfiguration = 0 Then
Locate 2 , 11
Wait 1
Lcd " "
End If
If Konfiguration = 1 Then
Locate 2 , 11
Wait 1
Lcd "Wecker"
End If
If Konfiguration = 2 Then
Locate 2 , 11
Wait 1
Lcd " Uhr"
End If
Return



2. dann habe ich noch ein problem mit dem format. meine weckzeit wird mir immer als 0:0 ausgegeben ich will aber 00:00 haben wie mache ich das?
Z.B. so

If Stellenstunde<10 Then Lcd "0"
Lcd Stellenstunde ; ":"
If Stellenminute<10 Then Lcd "0"
Lcd Stellenminute

xbgamer
01.02.2010, 22:09
also das mit dem format verstehe ich nicht so ganz. muss ich dass in die hauptschleife reinfügen oder kann ich es auch in die sub einfügen?

dann habe ich noch das problem dass wenn ich das menü durchdrücke dass ich wenn es klar ist wieder zum aktivieren des weckers auf die taste pind.6 drücken muss dass überhaupt mal wieder an oder aus erscheint.

ich will aber dass der zustand bleibt und sobald ich wieder bei konfiguration = 0 bin dass der zustand von der onoff schleife angezeigt wird.

wie mach ich das am besten?

xbgamer
02.02.2010, 11:53
ich bin jetzt soweit fertig nur wie startet man die uhr denn mit welchem befehl?

xbgamer
02.02.2010, 12:04
hier mal mein code. es scheint mir als ob der avr zu langsam wäre. ich muss jetzt etwas länger auf den tastern bleiben dass er ein signal wahrnimmt. is das normal?


$regfile = "m8def.dat"
$crystal = 1000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40



Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcdbus = 4
Cursor Off
Ddrb = &B11111111
Ddrd = &B00000000
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
Portd.6 = 1
Portd.7 = 1

Enable Interrupts
Config Clock = Soft
Declare Sub Stunde
Declare Sub Minute
Declare Sub Menue
Declare Sub Stundew
Declare Sub Minutew
Declare Sub Onoff
Declare Sub Licht
Declare Sub Stellenmenue

Dim Modus As Byte
Dim Stellenstunde As Byte
Dim Stellenminute As Byte
Dim Konfiguration As Byte
Dim Anaus As Byte


Cls

Time$ = "00:00:00"

Do
Locate 1 , 1
Lcd Time$ ; " " ;
Locate 1 , 12


If Stellenstunde < 10 Then Lcd "0"
Lcd Stellenstunde ; ":"
If Stellenminute < 10 Then Lcd "0"
Lcd Stellenminute


Debounce Pind.2 , 0 , Menue , Sub
Debounce Pind.3 , 0 , Stellenmenue , Sub


If Konfiguration = 1 Then 'Wecker stellen
Debounce Pind.4 , 0 , Stundew , Sub
Debounce Pind.5 , 0 , Minutew , Sub
End If


If Konfiguration = 2 Then 'Uhr stellen
Debounce Pind.4 , 0 , Stunde , Sub
Debounce Pind.5 , 0 , Minute , Sub
End If

Debounce Pind.6 , 0 , Onoff , Sub

If Konfiguration = 0 Then 'Wecker an/aus
If Anaus = 0 Then
Locate 2 , 11
Wait 1
Lcd " aus"
End If

If Anaus = 1 Then
Locate 2 , 11
Wait 1
Lcd " an"
End If
End If


If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 Then
Portb.5 = 1
Else
Portb.5 = 0
End If


Debounce Pind.7 , 0 , Licht , Sub

Loop



'Stellenmenü 'Menü zum einstellen Wecker/Uhr
Stellenmenue:
Incr Konfiguration
If Konfiguration = 3 Then Konfiguration = 0
Locate 2 , 11

If Konfiguration = 0 Then
Locate 2 , 11
End If


If Konfiguration = 1 Then
Locate 2 , 11
Wait 1
Lcd "Wecker"
End If



If Konfiguration = 2 Then
Locate 2 , 11
Wait 1
Lcd " Uhr"
End If
Return


'Menü 'Menü MP3, Radio, Aux
Menue:
Incr Modus
If Modus = 4 Then Modus = 0
Locate 2 , 1
If Modus = 0 Then
Locate 2 , 1
Wait 1
Lcd "Aus "
End If


If Modus = 1 Then
Locate 2 , 1
Wait 1
Lcd "MP3 "
Portb.0 = 1
Else
Portb.0 = 0
End If



If Modus = 2 Then
Locate 2 , 1
Wait 1
Lcd "Radio"
Portb.1 = 1
Else
Portb.1 = 0
End If



If Modus = 3 Then
Locate 2 , 1
Wait 1
Lcd "AUX "
Portb.2 = 1
Else
Portb.2 = 0
End If
Return



'Stunde 'Hier wird die Stunde der Uhr hochgezählt
Stunde:
Incr _hour
If _hour > 23 Then
_hour = 00
End If
Return



'Minute 'Hier wird die Minute der Uhr hochgezählt
Minute:
Incr _min
If _min > 59 Then
_min = 00
End If

Return



'MinuteW 'Hier wird die Minute des Weckers hochgezählt
Minutew:
Incr Stellenminute
If Stellenminute > 59 Then
Stellenminute = 0
End If
Return



'Stundew 'Hier wird die Stunde des Weckers hochgezählt
Stundew:
Incr Stellenstunde
If Stellenstunde > 23 Then
Stellenstunde = 0
End If
Return



'onoff 'Hier wird der Wecker ein- und ausgeschaltet
Onoff:
Incr Anaus
If Anaus = 2 Then Anaus = 0
Return




'Licht 'Hier wird das Licht für 4 Sekunden eingeschaltet
Licht:

Portc.5 = 1
Wait 4

Return

for_ro
02.02.2010, 13:26
hier mal mein code. es scheint mir als ob der avr zu langsam wäre. ich muss jetzt etwas länger auf den tastern bleiben dass er ein signal wahrnimmt. is das normal?

Da sind zwei Sachen, die du bedenken musst.
Erstens benötigt jedes Debounce, dessen Bedingung erfüllt ist (Eingang hat den angegebenen Wert), die voreingestellte Debounce Zeit. Default ist dabei 25ms. Die kannst du mittels Config Debounce ändern.
Zweitens wird jedes Wait in deinem Code die Ansprechzeit verändern. Die Debounce sind also kein Interrupt, die ein Wait unterbrechen könnten.

xbgamer
02.02.2010, 16:56
jo habs gemerkt dass die waits ziemlich viel leistung brauchen. nachdem die raus waren lief alles wunderbar. werd mich jetzt an die hardware waagen und alles mal durchplanen.

mohi
22.02.2012, 10:45
Was hast du am Code verändert, damit die Reaktion sich an den Tastern verschnellert?

mohi
22.02.2012, 10:57
Ich kann die Uhr zwar einstellen, aber laufen tut sie nicht. Die Sekundenanzeige bleibt auf :00

Ich such eigentlich nur einen Uhren-Wecker mit einem 16*2 LCD Display. Also "MP3" und "Radio" sind nicht sooo nötig...
Die Struktur von deiner uhr gefällt mir ganz gut, also in der Ersten Zeile linke Seite die Uhrzeit mit Sekunde und die Rechte Seite die Alarmzeit, coole Sache...

Greetz
mohi