PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funkuhr bauen



xbgamer
25.06.2010, 22:46
Servus ich bin gerade drann einen Funkwecker mit einem DCF77 zu bauen.
Die Hardware steht soweit. Es fehlt somit nur die Software. Jedoch weiß ich nicht so recht wie das ganze nun weiter geht.

Ich habe bereits dies erstellt:

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



Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 ,
Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcdbus = 4
Cursor Off
Config Pinb.1 = Output
Config Pinb.4 = Output
Config Pinb.5 = Output

Config Pinb.3 = Input
Config Pind.4 = Input
Config Pind.1 = Input
Config Pind.2 = Input
Config Pind.3 = Input

Portd = &B00011111

Enable Interrupts
Config Clock = Soft
Declare Sub Stundew
Declare Sub Minutew
Declare Sub Onoff
Declare Sub Licht

Dim Stellenstunde As Byte
Dim Stellenminute As Byte
Dim Anaus As Byte


Cls

Time$ = "00:00:00"
Date$ = "01:01: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
Locate 2 , 1
Lcd Date$ ; " " ;

Debounce Pind.2 , 0 , Stundew , Sub 'Wecker
Stellen
Debounce Pind.3 , 0 , Minutew , Sub


Debounce Pind.1 , 0 , Onoff , Sub
If Anaus = 0 Then 'Wecker
an/aus
Locate 2 , 11
Lcd " aus"
End If

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


Debounce Pind.4 , 0 , Licht , Sub

Loop


'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:

Portb.5 = 1
Wait 4
Portb.5 = 0
Return


jedoch sind hier schon Sachen die ich nicht hinbekomme. Und zwar wird mir das Datum nicht richtig angezeigt die Doppelpunkte sind nicht richtig.

Und ich habe eigentlich vor das Licht von 8-20Uhr einzuschalten und in der Nacht soll es mit einem Tastendruck 4 Sekunden eingeschaltet werden können.

Mein Ansatz war:
If _hour <20 and _hour >8 or pind.4 = 1 then
portb.5 = 0
else
portb.5 = 1
end if


Jedoch tut sich so nix.

Kann mir jemand hierbei helfen und mir vielleicht auch erklären wie ich hier nun das DCF77 Signal einarbeite?

wkrug
26.06.2010, 09:57
Ich bin kein BASCOM Anhänger, versuch aber trotzdem mal zu antworten.

Kann es sein, das der Ausdruck _hour <20 and _hour >8 in Klammern muß ?

Die DCF 77 Kodierung kann nach dem DCF 77 Kreis erfolgen.

Alle Sekunde kommt ein kurzer, oder ein langer Puls, in dem die Informationen über Datum und Uhrzeit enthalten sind.

In der 59 Sekunde wird dieser Puls komplett ausgelassen, was als Startsignal für eine neue Impulskette verwendet werden kann.

Guck mal z.B. hier: http://www.meinberg.de/german/info/dcf77.htm
oder hier: http://de.wikipedia.org/wiki/DCF77

Für Bascom dürfte es aber so viele fertige .libs geben, die Du dann nur in deinen Code einbauen brauchst und die Datums und Uhrzeitinformation direkt als Variable zur Verfügung stellt.

Deine Uhr sollte nach der Synchronisation mit DCF frei laufen und durch die DCF 77 Signale immer wieder mal synchronisiert werden.

Das hat den Vorteil, das die Uhr auch bei einem Funksignal Ausfall weiter läuft.

xbgamer
26.06.2010, 15:08
und noch ne frage wenn ich hier:
http://www.rn-wissen.de/index.php/DCF77-Decoder_als_Bascom-Library

den decodertest mache wie stelle ich denn ein auf welchem pin das dcf77
signal liegt?

ich schalte bei meiner schaltung das die spannungsversorgung des dcf77
moduls durch den avr ein und dann kommt das signal auf einen pin am avr.

peterfido
26.06.2010, 22:08
Bascom kann DCF von Haus aus. Einfach Config dcf77 mit den passenden Parametern aufrufen. Da kommt dann auch gleich eine Softuhr mit...

xbgamer
26.06.2010, 23:07
Bascom kann DCF von Haus aus. Einfach Config dcf77 mit den passenden Parametern aufrufen. Da kommt dann auch gleich eine Softuhr mit...

hast du da vielleicht mal ein beispiel wie das aussehen könnte?

peterfido
26.06.2010, 23:46
Ich sitze grad nur am Lappi. Bascom bringt aber eine gute Hilfe mit Beispielen mit. F1 drücken und nach config dcf77 suchen. Die Parameter beinhalten z.B. welche Pins genutzt werden und ob das Signal invertiert werden muss oder nicht.

xbgamer
27.06.2010, 12:43
so hab nun die lip und bas datei aus dem wiki raus erstellt. habe auch beide so editiert dass das dcf77 signal an pinb.3 liegt. verwenden tu ich einen atmega8 mit internem oszillator. weiß jemand welchen startwert ich in die bas eintragen muss?

angezeigt wird mir auf dem display zwar 00:00:00 für uhr und 01.01.00 für datum. die uhr will auch loslaufen nur viel zu langsam und sie hackt hat also aussetzer. und empfangen wird halt auch nix. weiß jemand woran das liegt?
habe eben den decodertest vom wiki für mich angepasst und zeile 3+4 rausgelöscht da ich ja nur ein 2 zeilen display habe.

xbgamer
27.06.2010, 14:19
so glaube ich hab den fehler. liegt aber an der hardware. weiß jemand
was für ein quarz auf dem dcf77 modul aufgelötet ist? der is
abgebrochen.

peterfido
27.06.2010, 14:28
Wenn du erwähnst welchen DCF-Empfänger du hast, oder ein Foto reinstellst, könnte evtl jemand nachgucken. Oder neuen Kaufen. Kosten bei Pollin ja nur ~5 Euro und die laufen bei mir recht gut.

xbgamer
27.06.2010, 14:30
hab leider den von reichelt. neukaufen will ich eigentlich nicht mehr da es so schon meinen rahmen gesprengt hat. wenn es wirklich auf neukauf hinausläuft baue ich ne normale uhr.