Anbei ein kleines Programmbeispiel für den TINY12. Funktioniert super ! Alles, was man braucht,ist ein LCD, ein 74HC164, ein ATTINY12, ein DCF77-Modul (z.B. von Conrad) und dann die 5V dran. Hat natürlich alle Features, d.h. Fehlererkennung, Gangreserve, Datum usw.. Im ZIP-File ist auch die ausführliche Beschreibung (index.htm) mit dabei. Peter
Hallo Peter, danke für Deine Nachricht. Werde Deine Vorschläge genauer unter die Lupe nehmen. Falls Fragen auftauchen, melde ich mich nochmal bei Dir. Grüße Hardy
Hi! Du hast da sehr schöne Sachen eingearbeitet (Taktabgleich für gestörten Betrieb,Decodiertabelle,volle Zeit- und Datumsunterstützung). Gefällt mir recht gut,aber was ich nicht finde,ist die Überprüfung ob das was du empfangen hast, auch sein kann.(Paritäts- und Signaltest kannst du vergessen, hilft nicht immer) Habe ich das übersehen? Oder wo machst du das? MFG Uwe
@Uwe, das wäre nur nötig, wenn die mit Absicht eine falsche Zeit senden würden. Empfangsstörungen werden ja sicher erkannt durch die Paritätsprüfung und Impulsüberwachung. Ich habe das als C-Programm schon einige Jahre auf nem AT89C2051 laufen und noch nie eine falsche Zeit gesehen. Probiers einfach mal aus. Peter
@Uwe, zur Erläuterung: Damit Störimpulse durchkommen können, müßten sie: - exakt synchron zum DCF77-Signal kommen, - genau 59 sein - immer 0,9 - 1,1s Abstand haben - immer 50 - 250ms lang sein - die richtige Parität haben Mit anderen Worten: Du hast eher einen Sechser im Lotto als eine falsche Zeitanzeige. Peter
Hi! Ich habe solche "Sechser" schon gesehen,sonst würde ich nicht fragen. Mal sehen ob ich es noch zusammenbekomme. Wenn innerhalb eines Zeitframes 2 Einsen zu Null werden(Signalabbruch),sind alle deine Bedingungen erfüllt und du hast trotzdem eine falsche Zeit. Wenn ich mich recht entsinne geht das beim Datum auch. Bei einer Schaltuhr kann das fatal sein. Deshalb benutze ich einen Vergleich der Quersummen über alle empfangenen Werte der momentanen Minute & der vorherigen Minute die um eins erhöht wurde. Das erzeugt zwar bei jedem Übergang von 9->0 einen Error, aber das ist für mich besser als eine falsche Zeit/Datum.(Die interne Uhr läuft ja deswegen weiter.) MFG Uwe
Hi Uwe, ich gehe mal davon aus, daß Du meinen Code gar nicht getestet hast und deshalb Deine Annahme eines Sechser in z.B. den nächsten 10 Jahren rein spekulativ ist. Mögliche Störquellen des DCF77-Signals sind TV, PC-Monitor, Staubsauger, Gewitter und sonstige Schaltvorgänge. Die Warscheinlichkeit, daß diese bezüglich Impulslänge und Impulsabstand mit dem DCF7-Signal auch nur entfernt ähnlich sind, ist äußerst gering. Rein theoretisch reichen 2 Störimpulse, die genau zum richtigen Zeitpunkt abrupt einsetzen und auch genau so abrupt enden aus, um den Paritätscheck auszutricksen. Dann müssen sie jedoch auch noch einen dem DCF77-Signal identischen Pegel haben, da sonst die automatische Verstärkungsregelung des Empfangs-IC hochregelt und damit nachfolgende echte DCF77-Impulse verloren gehen, d.h. die nötigen 59 Impulse werden nicht erreicht. Ich hatte zuerst auch nur getestet, ob die Impule größer 150ms bzw. die Impulsabstände größer 1,5s sind. Und nur da konnte ich tatsächlich trotz Parität falsche Zeiten feststellen. Also probiers doch einfach mal aus. Für alle Skeptiker werde ich die Zeiten vor der Übernahme vergleichen und bei Unterschieden in den EEPROM schreiben. Das wird dann also nur zur Sommer- und Winterzeitumstellung der Fall sein. Peter
Hi! Ich brauch deinen Code nicht zu testen, weil er meinem teilweise recht ähnlich ist. Ich habe übrigens als 1.Filter die Parität eingesetzt->fehlerhafte Zeiten, 2.Filter fehlerhafte Impulslängen, schon besser aber ab und an immernoch Fehler 3.Filter Quersummentest, Keine falschen Zeiten mehr. Die Zeiten sind per RS232 mitgelesen worden, da habe ich dann die Fehler entdeckt. Bis zum DCF-Sender habe ich ca.: 800km und daneben (1,5m)steht der Fernseher. MFG Uwe
Aber wirklich nur ähnlich. Denn da fehlen ja noch der Abstandstest (0,9-1,1s) und die Anzahl (59). Und deshalb habe ich auch keine falschen Zeiten. Peter
Hi! Das ist richtig, aber ich musste mich leider mit dem Problem beschäftigen und denke das es auch bei deinem Progr. geschehen kann. Es sollte auch nur ein Denkanstoss sein. Mittlerweile benutze ich garkeinen Prüfsummentest mehr und auch nur eine minimale Impulseingrenzung, aber eben den 3.Filter,der geht saugut. Drumm wünsche ich allzeit richtige Zeit. MFG. Uwe
Hi du könntest du mir bitte ein sample zeigen wie man den internen oszillator des ATTiny12 benutz? ich verstehs einfach nicht. und was ist bitte calbyte in deinem programm? denn ich will eigentlich nur einmal kurz etwas assambler verstehen und ein LED mit meinem ATTiny blinken lassen. Wie lange wartet er bei einem NOP befehl? mfg schoasch
Hi, ich habe mal eine Frage zu der definierten Konstante im Teil CLOCK.H reload1sec = (xtal / 64 + 128 ) / 256 Wie setzt sich die Konstante reload1sec zusammen? xtal -> Systemtakt 64 -> Vorteiler des Timers MfG Raik
mich wuerde auch interessieren wie sich diese zeile zusammensetze? woher kommen die "128" - ich kann es nicht wirklich nachvollziehen! .equ xtal = 3686400 ;3.6MHz .equ reload1sec = (xtal / 64 + 128 ) / 256 64 = hardware teiler 256 = software teiler 128 = ? bitte um auskunft :-) besten dank die herren! kamel
Das ist für die Rundung Bei realen Zahlen ist es einfacher (xtal / 64 + 128 ) / 256 = xtal/4 + 0.5 aber beim Rechnen mit INTEGER zieht man die Rundung vor die Division.
Ach quatsch ihr habt doch keine Ahnung :-) Wenn den Taster über 150 ms aussteht wird das Singnal als Null weiter an den xcf gereicht und dort als pc9 verwendet!! Also wenn ihr eine Potenzelle Eins erreichen wollt müßt ihr die Null Konjungent erweitern und dann mit dem "mov" in den akkumulator rutschen anschließend den Quotentionsbefehl an die Androtta senden und den can-befehl abwarten.. Nun den xta von 3 auf Null stellen sich nen stift in den po stecken und dann den 3.5 cpu auf 6+ takten und den kühler ausstellen !!! so funktioniert das bloß!!! Mit anderen Worten: Braune Borstenbürsten Bürsten besser als Börstenbürsten mit Weißen Borsten an der Bürste!!! lg einer derjenigen Ahnung hat!!!
Uwe wrote: > Hi! > Ich brauch deinen Code nicht zu testen, weil er meinem teilweise recht > ähnlich ist. Das haben sich die Leute bei der Ariane 501 auch gedacht; das Ergebnis ist bekannt :-/ Zoe
Versuche von Peter den Code zum laufen zu bringen, bekomme aber immer folgende Fehlermeldung: AVR PROGRAMME__ ASSEMBLER\tn12def.inc(141): error: F: Unknown instruction or macro mit der Zeile: .equ E2END = 3F wo liegt da der Fehler??
Ingo Laabs wrote: > Versuche von Peter den Code zum laufen zu bringen, bekomme aber immer > folgende Fehlermeldung: Das Beispiel ist schon sehr alt. Nimm mal das aktuelle tn12def.inc aus Deiner AVRStudio-Installation. Peter
uiiii..geht soweit. wenn ich den Autor schon mal selber dran habe, ich will jetzt kein LCD anschließen, dafür aber die Register mit der Zeit mit einem zweiten uP auslesen. In welche Registern steht die aktuelle Zeit? Danke Ingo
Ingo Laabs wrote:
> auslesen. In welche Registern steht die aktuelle Zeit?
CLOCK.H:
1 | .def second = r16 ;actual time |
2 | .def minute = r17 |
3 | .def hour = r18 |
4 | .def day = r19 |
5 | .def weekday = r20 |
6 | .def month = r21 |
7 | .def year = r22 |
Peter
alles super :-) die sache hat jetzt einmal kurz funktioniert, dann nie wieder. Ich verwende statt dem 74HCT164 einen LS164. Kann es mit dem Typen Probleme geben??
Was muß man alles ändern wenn man das Programm auf einem Mega8 laufen lassen will? Ports und Frequenz ist klar
@Frankl Für Mega8 kann du auch Peter's Tiny26 AVR-GCC version portiere Beitrag "DCF77 Uhr in C mit ATtiny26" mfg Bingo Dänemark
Vielen Dank für den Tip aber leider bin ich in C nicht so bewandert und ich wollte die DCF Uhr mit einer Erweiterung in Assembler betreiben. Ich vermute das die DCFTable nicht richtig funktioniert, da der Mega8 ja mehr Interupts hat.Folgender Fehler tritt auf: Die Sekunden laufen richtig nur die Zeit steht auf 24:05 und das Datum ist :4.40.2010.
Sowas passiert halt, wenn man statt in übersichtlichem C in steinzeitlichem Assembler programmiert.
Hallo zusammen, ich versuche seit ein paar Tagen das Programm ans laufen zu bekommen. Zunächst mit ein paar kleinen Änderungen auf einem ATTiny13. Ergebnis: In der Anzeige erscheinen die voreingestellten Daten. Die Sekunden zählen dann aber nur alle 3 Sekunden weiter. In der Statusanzeige blingt ständig das "E". Nun habe ich mir einen ATTiny12 besorgt, bekommen das hex-File aber nicht gebrannt. Nach dem Compilieren erhalte ich folgende Meldung:
1 | AVRASM: AVR macro assembler 2.1.2 (build 99 Nov 4 2005 09:35:05) |
2 | Copyright (C) 1995-2005 ATMEL Corporation |
3 | |
4 | C:\Franzis\Clock\Clock.asm(10): Including file 'C:\Franzis\Clock\clock.h' |
5 | C:\Franzis\Clock\clock.h(2): Including file 'C:\Programme\Atmel\AVR Tools\AvrAssembler2\Appnotes\tn12def.inc' |
6 | C:\Franzis\Clock\clock.h(49): warning: Register r26 already defined by the .DEF directive |
7 | C:\Franzis\Clock\Clock.asm(10): info: 'C:\Franzis\Clock\clock.h' included from here |
8 | C:\Franzis\Clock\clock.h(51): warning: Register r28 already defined by the .DEF directive |
9 | C:\Franzis\Clock\Clock.asm(10): info: 'C:\Franzis\Clock\clock.h' included from here |
10 | C:\Franzis\Clock\clock.h(52): warning: Register r29 already defined by the .DEF directive |
11 | C:\Franzis\Clock\Clock.asm(10): info: 'C:\Franzis\Clock\clock.h' included from here |
12 | C:\Franzis\Clock\clock.h(53): warning: Register r30 already defined by the .DEF directive |
13 | C:\Franzis\Clock\Clock.asm(10): info: 'C:\Franzis\Clock\clock.h' included from here |
14 | C:\Franzis\Clock\clock.h(54): warning: Register r31 already defined by the .DEF directive |
15 | C:\Franzis\Clock\Clock.asm(10): info: 'C:\Franzis\Clock\clock.h' included from here |
16 | C:\Franzis\Clock\Clock.asm(11): Including file 'C:\Franzis\Clock\lcd.mac' |
17 | C:\Franzis\Clock\Clock.asm(17): Including file 'C:\Franzis\Clock\ovf0int.inc' |
18 | C:\Franzis\Clock\Clock.asm(59): Including file 'C:\Franzis\Clock\lcd12s.inc' |
19 | C:\Franzis\Clock\Clock.asm(60): Including file 'C:\Franzis\Clock\clockd.inc' |
20 | C:\Franzis\Clock\Clock.asm(61): Including file 'C:\Franzis\Clock\dcf77.inc' |
21 | C:\Franzis\Clock\Clock.asm(62): Including file 'C:\Franzis\Clock\div60.inc' |
22 | C:\Franzis\Clock\Clock.asm(68): No EEPROM data, deleting C:\Franzis\Clock\Clock.eep |
23 | |
24 | ATtiny12 memory use summary [bytes]: |
25 | Segment Begin End Code Data Used Size Use% |
26 | --------------------------------------------------------------- |
27 | [.cseg] 0x000000 0x000400 580 78 658 1024 64.3% |
28 | [.dseg] 0x000000 0x000060 0 0 0 0 - |
29 | [.eseg] 0x000000 0x000000 0 0 0 64 0.0% |
30 | |
31 | Assembly complete, 0 errors. 5 warnings |
Versuche ich dann zu brennen meldet mir "myAVR ProgTool V1.00":
1 | Vorbereiten: |
2 | Flash: C:\Franzis\Clock\Clock.hex |
3 | Brennen: |
4 | USB-Treiber installiert, aktiv (V 4.40.1.0) |
5 | Port: COM16 |
6 | Prozessor: ATtiny12 |
7 | schreibe 1024 Bytes in Flash-Memory ... |
8 | Fehler: beim Schreiben der Daten. |
9 | Fehler: beim Schreiben der Daten. |
Wenn ich ein anderes hex-File in den Tiny12 brenne funktioniert alles. Wer kann mir helfen??? Gruß Stephan
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.