Hey, möchte mir eine schöne kleine Wanduhr bauen mit einem µC und einem RTC. Kann mir jemand vielleicht ein einfaches und leichtes Tutorial verraten? Also wo ich einmal werte an den RTC übermittel um die Uhr im RTC zu stellen und einmal eine einfache Abfrage der Zeit. Würde gern mit dem I2C Bus anfangen mich zu beschäftigen. Michael
Im Ordner von Bascom gibt es ein beispiel. siehe: C:\Programme\MCS Electronics\BASCOM-AVR\SAMPLES\I2C\ds1307.bas Gruss k.
Ja gut, ihn gibts. Habs mir angeguckt, nur so noch nicht richtig verstanden habe ich wie ich da nun die Aktuelle Zeit rein bekomme. Weil so weiß er ja nicht welcher Tag heute ist und wie spät. Weil den Code hatte ich schon mal genommen, stand in einem Forum und er hat nur müll ausgegeben und keine normale Uhrzeit bzw. Datum. Danke für Eure Hilfe. Michael
Gast
#2668490
Schau mal hier:
1 | |
2 | |
3 | |
Damit stellt man die aktuelle Zeit und das Datum ein. SDA und SCL müssen auch stimmen. Ich bezweifle, dass der Code nicht funktioniert. Der I2C-Bus bzw. die daran angeschlossene DS1307-RTC reagiert recht empfindlich auf Störungen, zu lange Leitungen und unpassende Pull-Up-Widerstände.
Ich habe den RTC wie folgt angeschlossen. Bild Packe ich in den Anhang. Michael
geh mit den Pullups mal lieber so auf 2k. Gruss k
Gast
#2668558
Also wenn die beiden Jumper geschlossen sind, ist das gut so. Du kannst auch mal das Minimalbeispiel im Anhang ausprobieren und berichten.
Werte es gleich mal Testen. Also Widerstände tauschen und den minimalcode übermitteln. Hoffe es klappt dann. Melde mich dann.
So ich habe es gerade getestet. Und bei dem Code gibt er bei meinem COM - Schnittstelle nur folgendes aus: @5.@5.@5 @5:@5:@5 Und dies fortlaufend anzeigend. Also keine Erneuerung der Zeit oder so. Habe die Zeit aus dem Code einfach ersma übernommen, was aber ja noch keine Probleme bereiten soll. Weil der RTC ja nicht weiß ob ich Ihm die Wahrheit erzähle. Ich benutze das AVR Board von Pollin. Eine Frage noch vorab: Const DS1307w = &HD0 Const DS1307r = &HD1 Ist doch die Adresse des RTCs. Die ist aber nicht wie beim einem 1-Wire Bus fest eingestellt oder? Den Widerstand habe ich gegen 2,2kOhm getauscht. Und Kabellänge sollte eigentlich noch nich das Problem sein. es sind nur 10 cm (wenn nich sogar weniger) zzgl. das kurze Flachbandkabel was den Adapter für das Laborbrett mit dem AVR Board verbindet. Michael
Gast
#2668655
Michael N. schrieb: > @5.@5.@5 > @5:@5:@5 Typische Anzeige bei "schlechter" Verbindung. Verlangsame mal die Busgeschwindigkeit:
1 | |
oder probier mal Hardware TWI
1 | |
2 | |
Michael N. schrieb: > Const DS1307w = &HD0 > Const DS1307r = &HD1 Die Adressen sind fest. Michael N. schrieb: > Und Kabellänge sollte > eigentlich noch nich das Problem sein. es sind nur 10 cm (wenn nich > sogar weniger) 10 cm ist schon nicht ohne. Die Buskapazität ist hier entscheidend.
So habe beide Varianten schon getestet. Leider kommt das gleiche ergebnis raus. Also er gibt weiter dieses Oben genannte aus. Habe auch noch mal alles kontrolliert, dass ich nichts verkehrt zusammen gesteckt habe. Nur normal dachte ich, dass das Laborbrett und das AVR Board von Pollin wäre eine gute Wahl für den Anfang. Nur an sich ist es ärgerlich. Weil ich wollte jetzt nicht alles auf einer Platine löten um einen nahezudirekte Verbindung hin zu bekommen. Wäre fürs üben nur etwas umständlich. Daher habe ich mir das Board gekauft gehabt. Michael
Gast
#2668691
Das Pollin-Board, dass ich habe, führt teilweise die Pins in Verbindung mit dem Breadboard-Adapter nicht richtig heraus. Ich benutze es bloß schon länger nicht mehr, so dass ich nicht mehr genau weiß, wie das war. Probier doch einfach mal andere Pins aus (dann halt nur Software-I2C) oder teste die Pins auf Funktion (LED leuchten lassen, Spannung messen, etc).
Ich weiß, dass die Pins verschoben sind, wenn ich den Mega8 nehmen, aber dafür gab es eine Schablone für. Also in der hinsicht sollte das hin hauen. Aber ich werde mal eine LED anklemmen und LEDs ein und ausschalten lassen. Meld mich gleich noch mal dann. Michael
So habe schon die Ports getestet. Und es klappte. Also habe die entsprechenden Output Pins im wechsel ein und ausgeschalten und es funktionierte wunderbar. Also schon mal zur Info. Michael
Gast
#2668713
Hey, irgendetwas stimmt mit Deinem DS1307 auf dem Schaltplan nicht. Schau mal ins Datenblatt: http://datasheets.maxim-ic.com/en/ds/DS1307.pdf So, muss jetzt mal ins Bett....
Habe mir das noch mal angeguckt. Also wenn ich beim aufstecken nichts falsch gemacht habe sollte das Passen. Also den Quarz habe ich auf Pin 1 und 2 gepackt, Pin 3 ist + der Batterie, 4 GND von VCC und Batterie, 5 sda, 6 scl, 7 offen und 8 VCC. SDA und SCL sind mit Widerständen von 2,2 k gegen Vcc. Michael
Gast
#2668741
1. Der Quarz muss kurz und kapazitätsarm angeschlossen werden. Sonst läuft die Uhr nicht. Belastung am Quarz (DVM, Oszi) lässt ihn sofort stoppen. 2. Der DS1307 muss gestartet werden, d.h. es eventuell muss das Clock-Hold-Bit geleöscht werden, sonst läuft die Uhr nicht los. 3. Der DS1307 muss mit einer gültigen Zeit initialisiert werden, sonst stehen irgendwelche Werte in den Registern, und wenn er nicht läuft bleiben die auch so. In ASM sieht das so aus, ist also nicht sonderlich kompliziert:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
Gast
#2668824
Michael N. schrieb: > Habe mir das noch mal angeguckt. Also wenn ich beim aufstecken nichts > falsch gemacht habe sollte das Passen. Also den Quarz habe ich auf Pin 1 > und 2 gepackt, Pin 3 ist + der Batterie, 4 GND von VCC und Batterie, 5 > sda, 6 scl, 7 offen und 8 VCC. Ja, ok. Auf dem Schaltplan sind die Pins in der falschen Reihenfolge. Das war etwas verwirrend. Ist GND überall gleich oder verwendest Du unterschiedliche Spannungsquellen? Ansonsten würde ich einfach die Busgeschwindigkeit herunter regeln (Config I2Cdelay). Sehr unwahrscheinlich können sowohl die RTC als auch der Quarz defekt sein. Du kannst auch in jede Sub nach jedem I2cstop "Print Err" einfügen, um zu sehen, ob es irgendwelche Fehler gibt (0=OK, 1= Fehler). @Timm Thaler BASCOM "kümmert" sich eigentlich um Punkt 2 und 3. Vielleicht Punkt 1 oder falsch angeschlossen oder defekt.
Am besten sagst du mal was du für einen Prozessor verwendest und in welchem Takt der läuft . k.
Ich verwenden den ATMega8 mit 16Mhz Quarz Tackt, wie auf dem Pollinboard verbaut. Den Quarz habe ich ganz nah mit auf die Platine gepackt wo die Pins für den Quarz sein sollen. Habe nämlich den RTC mit Knopfzelle und Quarz auf eine kleine Platine zusammengelötet und führe mit sehr kurzen Leitungen VCC, SDL, SCL und GND vom Board auf die Platine. Fand dies als beste Lösung, weil der Quarz so minimalistisch ist und so kann er nicht verlohren gehen. Habe mir den RTC mit der Artikel_Nr. 170823098864 bei Ebay erworben und an sich gab es mit diesem Händler nie Probleme. Als Spannungsquelle nutze ich den Vcc vom Board und als Batteriespannung habe ich einfach eine Knopfzelle (CR2032 mit 3V) genommen. Wenn eins von beidem defekt wäre, wäre ärgerlich. Kann das aber mit dem Print Err mal einbauen und gucken was passiert. Werde ich dann später mal machen. und das mit der Busgeschwindigkeit hab ich schon gemacht, wurde oben schon angesprochen und habe den Wert 100 erst eingesetzt, dann noch weiter reduziert auf den Wert 50. Ist es den auch Problemlos, dass der Pin SQW in der Luft hängt? Vielleicht könnte man ja auch die Softwarelösung des i2c Bus mal testen, nicht das es doch irgendwie dadran hängt? Man müsste mich nur aufklären wie das klappt. Ich hoffe es sind alle Fragen beantwortet, wenn nicht bitte nachfragen. Michael
Hi, ich habe dir nochmals eine bas angehängt, die einwandfrei funktioniert. Sie benutzt den Hardware TWI und enthält ein paar Kommentare. Versuch das nochmal. Stelle bitte auch sicher, dass dein uC wirklich auf 16Mhz läuft. Da 16Mhz ja auch ziemlich schnell ist könntest für die ersten Tests mal auf internen RC Oscillator mit 8Mhz umstellen und den Quellcode anpassen. Gruss Klaus p.s. die Hardware TWI funktioniert meiner Meinung nach eher unproblematischer als die Soft-Lösung
Ich habe das per http://www.engbedded.com/fusecalc auf den externen Quarz umgestellt, nach Anleitung aus dem Netz. Da ich jetzt zurück auf Intern stellen soll / könnte, wollte ich einmal zur Überprüfung die FB Lösung zeigen, bevor ich sie Umsetze. Ich benutze PonyProg2000 nur zur Info. LOW: SUT0 (Check) CKSEL3 (Check) CKSEL1 (Check) CKSEL0 (Check) High: SPIEN (Check) BOOTSZ1 (Check) BOOTSZ0 (Check) Mit Check mein ich, der Harken ist gesetzt. Als Option oben bei Futurs habe ich ausgewählt: Int. RC Osc 8MHz; Start-uup time: 6 CK + 64 ms;[CKSEL=0100 SUT =10] Oder ist da irgendwas falsch dran? Nicht das ich den µC nachher abschieße :-) daher frag ich mal zur Sicherheit lieber nach. Momentane Einstellungen sind: High: High: SPIEN (Check) BOOTSZ1 (Check) BOOTSZ0 (Check) Michael
Gast
#2669111
Michael N. schrieb: > Den Quarz habe ich ganz nah mit auf die Platine gepackt wo die Pins für > den Quarz sein sollen. Habe nämlich den RTC mit Knopfzelle und Quarz auf > eine kleine Platine zusammengelötet und führe mit sehr kurzen Leitungen > VCC, SDL, SCL und GND vom Board auf die Platine. Fand dies als beste > Lösung, weil der Quarz so minimalistisch ist und so kann er nicht > verlohren gehen. Da ich es schon gelegentlich gelesen habe. Hast Du eine Lochraster- oder eine Streifenrasterplatine verwendet?
Streifenrasterplatine und die Löcher direkt nebebeinander genommen um dort keine großen kabelwege zu haben und zum anderen um für den RTC nicht eine irre große platine zu verwenden. man will ja sparen ;-) Oder is das ein Problem? Falls Frage kommt ob ich unterbrochen habe, ja habe ich. Also zwischen den Pins des RTC (hab den auf einen Sockel gesetzt) habe ich die Pins natürlich getrennt also zwischen 1 und 8 und so weiter meine ich. Michael
Gast
#2669155
Du solltest die Busleitungen und die zum Quarz so kurz wie möglich halten (ggf. nur 1 bis 2 Löcher). Ansonsten überprüfe noch einmal genau, ob die Bahnen richtig durchbrochen sind. Auch eine hauchdünne Verbindung kann alles "ruinieren". Ein oder mehrere Fotos vom Aufbau der RTC wären auch nicht schlecht. Dabei bitte folgendes beachten: http://www.mikrocontroller.net/articles/Bildformate
Unterbrochen sind die Ganz sicher, mache ich immer bei Jedem mal, wenn ich unterbreche mit nem durchgangspiepser einmal piepsen bevor bauteile dazu kommen. Mache aber gleich mal fix Fotos. Also von dem Flachbandkabel, welches das AVR Board mit dem Laborbrett verbindet und einmal die verbindung vom RTC zum Laborbrett. Bilder kommen sofort. Aber sind den Fusebits richtig gesetzt das es damit keine Probs gibt? Michael PS: So hier das Bild. Da wo unten rechts die LEDs sind habe ich den I2c Bus drin. LEDs habe ich raus genommen. Hoffe man kann alles halbwegs erkennen. Bild lade ich hier rauf: http://freewareecke.de/2012-05-09-008.jpg
Habe den Code getestet, also der hier gepostet wurde, nur leider haut der Compiler nen Fehler raus. Eigentlich sollte dieser Code ja funktionieren. Ich will aber nicht unterstellen, das es nicht so wäre. Michael
Hi Michael, das ist doch prima, du bekommst realistische Meldungen. Ein Mega8 Prozessor hat keinen Port A. (Den gibt es nicht) Denk doch mal drüber nach, ob man irgendwelche Beispiele einfach ohne Nachdenken übernehmen sollte. Du sagst , du hättest einen Mega 8 und postest diese Fehler über Port A. Denk doch bitte nochmal nach. Gruss klaus p.s. ... und vergiss mal für einen Moment die gut gemeinten Ratschläge über Quarze und kurze Leitungen. Das sagen alle , die noch nie einen TWI am Laufen hatten. .... und hättest du meinen Code verwandt, indem Port A niemals erwähnt wurde, hättest du auch kein Problem.
Sry dass ich das jetzt sage, aber genau den Code habe ich verwendet. (an Klaus De lisson) und genau bei dem Code gab es den oben genannten Fehlercode. Das wunderte mich nämlich. Weil wie gesagt kein Port A erwähnt wurde. Habe diesen auch noch ein zweites mal kopiert in Bascom AVR und Erfolg war der selbe, bzw der Misserfolg. Und ich denke bei Copy + Paste sollte man nichts falsch machen können. Michael
Gast
#2669968
Klaus De lisson schrieb: > Das sagen alle , die noch nie einen > TWI am Laufen hatten. Bitte, Klaus! Man versucht hier zu helfen und wird von Dir indirekt mit haltlosen Behauptungen konfrontiert. Was soll das? Schlechten Tag gehabt? Dein Beispiel funktioniert genau so gut wie mein Beispiel oder das Beispiel aus der Hilfe. Wieviel Beispiele soll Michael den noch brennen? Es liegt nun mal zu 99% nicht am Code. Würde meinen, das solltest Du ebenfalls sehen. Ich bin hier jedenfalls raus.
Gast
#2669978
PS. Dein Code lässt sich so nicht compilieren. Hätte man ja mal vorher überprüfen können.
Karl, wäre schade, wenn jetzt hier abbrichst. Dachte eigentlich immer viele Leute kommen gemeinsam zu einer Lösung. Jap er lässt sich nicht Compilieren und ich habe mehrfach drüber geguckt und leider irgendwie finde ich zumindest mit meinen noch beschrenkten Fähigkeiten keinen Fehler zumindest kann keinen zuordnen. Michael
Gast
#2669994
Bevor hier weiter im Trüben gestochert wird: Hast Du ein Oszi, kannst Du Dir die Signale mal anschauen?
Ne hab ich leider nicht, gibt zwar Möglichkeiten ja eine Softwarelösung zu machen, nur soweit bin ich ersma noch nicht. Also per µC sich ein Oszi zu bauen und dann Signal grafisch am PC darstellen zu lassen. Habe bislang nur ein paar normale Multimeter hier. Michael
Karl schrieb: > Bitte, Klaus! Man versucht hier zu helfen und wird von Dir indirekt mit > haltlosen Behauptungen konfrontiert. Was soll das? Schlechten Tag > gehabt? Hallo Karl, nun nimm das doch nicht gleich in den falschen Hals. Ich wollte damit keinen angreifen. Sollte es falsch angekommen sein, entschuldige ich mich. Allerdings ist dein Code, den du am Datum: 08.05.2012 22:30 gepostet hattest nicht sonderlich hilfreich gewesen, da du sehr krumme Einträge darin hast: $crystal = 3686400 $baud = 19200 und diese für den Fragesteller nicht weiter kommentiert hattest @Autor: Michael N. (lwl2012) Nun habe ich mir das mit dem Port A nochmal angeschaut und muss sagen, ich war verwirrt. Das Problem verschwindet wenn du entgegen meiner Bemerkung nun doch die Portdefinitionen in den Quelltext einfügst: 'configure the scl and sda pins Config Sda = Portc.4 Config Scl = Portc.5 Interessanterweise geht es bei M644def.dat auch ohne. Das ist offenbar ein Tribut des letzten Bascom Updates. Seitdem die da nun auf "Teufel komm raus" den XMEGA mit einflechten wird das Bascom immer abscheulicher. zudem habe ich mir dein Bild vom Aufbau mal angesehen, welches ich wohl zuvor überlesen hatte. (http://freewareecke.de/2012-05-09-008.jpg) und muss sagen dass das so wohl nicht gehen wird. Es entspricht auch in keiner Weise deiner Aussage "Und Kabellänge sollte eigentlich noch nich das Problem sein. es sind nur 10 cm (wenn nich sogar weniger)" Leider habe ich 2ten Absatz deines Satzes überlesen . Da steht ja: "zzgl. das kurze Flachbandkabel was den Adapter für das Laborbrett mit dem AVR Board verbindet." In deinem Foto wird das ganze Desaster ja sichtbar. Evt. kannst du das ans Laufen bringen indem du 2 weitere Pullups einbaust. 2 Pullups am Atmega und 2 Pullups direkt am DS. Für die ersten Tests würde ich aber vorschlagen den DS mit kurzen Kabelstücken direkt auf die Pins des Mega zu löten. (Also kein Steckbrett und so) Wenn es dann geht, kannst du ja wieder die Leitungen verlängern. Gruss Klaus
Gast
#2670367
Klaus De lisson schrieb: > Hallo Karl, > nun nimm das doch nicht gleich in den falschen Hals. Ich wollte damit > keinen > angreifen. Sollte es falsch angekommen sein, entschuldige ich mich. Ok, Klaus. Kein Problem. Hatte Gestern wohl selbst keinen so guten Tag, dass ich gleich so empfindlich darauf reagiert habe. > Allerdings ist dein Code, den du am Datum: 08.05.2012 22:30 gepostet > hattest > nicht sonderlich hilfreich gewesen, da du sehr krumme Einträge darin > hast: > $crystal = 3686400 > $baud = 19200 Ja, das stimmt. Da ich Michael jedoch schon an anderer Stelle mal geholfen hatte, wusste ich, dass er das meistern wird. Letztendlich sind wir nun alle zu der Überzeugung gelangt, dass es wohl an der Hardware / Verkabelung etc. liegen muss. Gruß, Karl
Karl schrieb: > Letztendlich sind wir nun alle zu der Überzeugung gelangt, dass es wohl > an der Hardware / Verkabelung etc. liegen muss. Ja! .. und schön, dass du jetzt nicht nachtragend bist. Ich gebe auch zu, das ich auch etwas hyperaktiv war. Gruss Klaus
Ich werde es dann versuchen direkt an den Controller zu bekommen, nur anlöten direkt dran ist eigentlich schlecht (Weils direkt auf dem Board steckt). Aber werde mir was überlegen. Vielleicht packe ich alles direkt aufs Steckbrett. Wäre nicht die Ideale Lösung, aber vielleicht ein kompromiss? Wollte gleich noch gucken nach einem Software Oszi, also ob ich das hin bekomme aus dem Buch zu holen. Habe hier eines Rumliegen (Basiskurs Bascom - AVR). Nur nicht alles ist verständlich gemacht. Also ich Programmiere den Controller und stecke diesen dann aufs Steckbrett mit minikleinen kabeln zwischen Controller und RTC. Als ausgabe werde ich einfach den LC-Bildschirm nehmen. Michael
Michael N. schrieb: > einem Software Oszi vergiss es .. es klappt nicht .. und es ist unnötig. Einfanch mal testweise direkt an die Pins des uC löten. Wenn es dann klappt hast du die halbe Miete. k.
Reichts notfalls auch, wenn ich Sockel für RTC und Controller auf eine Platine löte mit ganz kurzen Leitungen für den I2C? Und was würdet ihr als Pullup nehmen? 4,7k oder mehr oder weniger? Michael
Hi Michael, ich glaube du denkts zu kompliziert. Wenn du einfach deine vorhandene Platine mit dem RTC und der Batterie mal direkt an die Pins vom uC anklemmst sollte es klappen. Du darfst aber gern auch 10cm Kabel zwischen uC und RTC einsetzen. Es sind doch nur 4 Leitungen (+.-,SDA,SCL) Das kann doch so schwer nicht sein. Die Pullups sind zwischen 1k und 10k. Je niederohmiger desto stabiler das Signal und desto höher der Stromverbrauch. Mit deinen 2k liegst du schon im sicheren Bereich. Gruss k.
Gast
#2671304
So, hier funktionierender Bascom-Code. Vorsicht, der DS1307 kann nur mit 100khz betrieben werden, mit 400khz Busspeed kommt der laut datenblatt nicht klar, dann kommt nur datenmüll raus! Habe mit dem Code grade eben eine meiner DS1307-Platinchen mit Zeit gefüttert.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
Markus
Hallo, ist die Backupbatterie auch wirklich richtig gepolt und ist die Spannung der Batterie noch ausreichend ?
Sollte richtig sein. Kontrollier es aber zur sicherheit noch mal. Und auch ob sie noch gut ist teste ich eben. Aber denke ja ist eine gute Duracell Knopfzelle. Michael PS: Batterie geprüft und für gut befunden. Plarität passt auch. Aber außer wenn die Polarität falsch wäre sollte ja nicht schlimm sein, wenn Batterie leer ist. Soll ja nur zum Backup sein.
Hi, schau mal unter http://www.fakedomain.de/elektronik/messuhr/index.htm. Da hab ich ne Uhr mit ds1307 gebastelt und auch den BASCOM-Quelltext dazu veröffentlicht. Die Uhr läuft seit ihrem Bau ohne Probleme und ist auch nur auf Lochraster aufgebaut. Vielleicht hilft es ja. Bei mir waren die Bus-Widerstände mal ein Problem, aber mit 4,7k lauft es.
Hallo, vielleicht hilft dir auch mein Programm mit automatischer Sommerzeitumschaltung, läuft recht brav seit einigen Monaten im Echtbetrieb: Beitrag "Sommerzeitberechnung mit Bascom"
Danke für Zahlreiche Hilfen, hab eine Lösung im Netz gefunden, die Funktioniert. Hier der Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
Michael
Gast
#2689162
Michael N. schrieb: > Rem Datumsetzen Das ist ein Auszug aus dem von dir geposteten Quelltext. Ich bezweifle doch, das das so durchkompiliert und dann auch noch funktioniert. k.
Doch funktioniert erste Sahne. Wollte es eigentlich nur erwähnt haben, falls wer anders noch mal eine Codealternative sucht. Michael
Gast
#2689351
Michael N. schrieb: > Wollte es eigentlich nur erwähnt haben, falls wer anders noch mal eine > Codealternative sucht. Hallo Michael, das finde ich auch gut, dass du deine Lösung zur verfügung stellst. Trotzdem bezweifle ich dass der Bascom Compiler Dinge wie: Rem Zeitsetzen _sec = Makebcd(_sec) _min = Makebcd(_min) und Rem Datum und Zeit holen I2cstart I2cwbyte Ds1307w ohne Fehlermeldung durchlaufen lässt. Insofern erzeugt deine Lösung nun für jeden, der es nachmachen will ein fehlerhaftes Abbild der Realtität. Falls dein Quelltext bei dir nun funktioniert, so hast du diesen hier fehlerhaft dargestellt. Deine Definitionen Dim _weekday As Byte Dim _day As Byte Dim _month As Byte Dim _year As Byte Dim _sec As Byte Dim _min As Byte Dim _hour As Byte sind interessant aber normalerweise unter Verwendung: Config Clock = User ' this will dim the bytes automatic werden all diese Teile automatisch dimensioniert. einzig dieser hier: 'dim other needed variables Dim Weekday As Byte müsste manuell gemacht werden. Andererseits hast du es geschafft, den "Config Clock = User " manuell nachzubilden und das ist auch gut. Gruss Klaus
Naja ob man bei Copy Past was falsch machen kann, weiß ich nicht. Also habs aus BascomAVR rauskopiert und hier eingefügt. Also Text ist 1 zu 1, zu dem welcher auf dem µC liegt. Und Kommentare in Bascom kann man entweder mit REM beginnen bzw '. Das Rem stammt noch aus QBasic zeiten. Den soweit ich weiß stammt Bascom von Basic ab. Nur die oben geposteten Codes funktionierten nicht, das weiß ich. Meiner Funktionierte. Den in den anderen Codes fehlte mir irgendwie das kontinuierliche Abrufen der Zeit. Aber egal. Es funktioniert. Ich möchte diesen RTC in ein Wanduhrprojekt einbauen. Muss mich nur wo möglich noch mit dem Funkempfänger auseinander setzen. Also um dadraus eine Funkuhr zu bauen. Alternativ soll ein Eingang abgefragt werden, ob er im Programmiermod oder im Laufmod ist. Also dass nicht bei jedem Stromausfall immer oben der Code durchläuft, wo man Uhr und Datum stellt. Aber das ist nicht mehr der große Aufwand. Eher das mit dem Funkempfänger wäre noch interessant, aber mal gucken. Michael
Gast
#2689370
Ohhh Michael, michael ich muss mich entschuldigen. REM geht tatsächlich und ich dachte es würde es nicht. Nun habe ich schon seit 8 Jahren Bascom und bin Betriebsblind weil ich immer das "'" verwende. Verzeih also bitte. Klaus
Kein Problem. Sowas kann vorkommen. Vielleicht kannst mir nen bischen Hilfe gehen, wie das mit dem Funkempfänger geht? Habe den hier zuhaus: http://www.pollin.de/shop/dt/NTQ5OTgxOTk-/Bausaetze_Module/Module/DCF_Empfangsmodul_DCF1.html Hast mal mit sowas gearbeitet: http://www.pollin.de/shop/dt/OTI5OTgxOTk-/Bausaetze_Module/Module/Funkmodul_RFM12_Sende_Empfangsmodul.html ist sowas schwer an zu steuern? Also nur aus interesse mal gefragt. Michael
Gast
#2689404
Michael N. schrieb: > Vielleicht kannst mir nen bischen Hilfe gehen, wie das mit dem > Funkempfänger geht? Hmmm, ich kann versuchen dir zu helfen aber ich lebe in Südfrankreich und bin daher nicht der Superkunde für DCF77, da ich das hier sehr schlecht empfange. Ich habe einen Empfänger für Radio Monaco gebaut, der mit 216khz als refeferenztakt ins Haus liefert. damit kann ich dann ggf. Frequenzzähler eichen. Du willst ja nur eine einfache Uhr bauen und ich kann dir gerne den Baustein DS3232 empfehlen, da dieser mit der Bascom Software für DS1307 compatibel ist. Das ergibt dann schon eine gute Genauigkeit, die kein DCF mehr erfordert. Ich könnte mir vorstellen, dass die Uhr dann ein serielles (RX/TX) Terminal hat, welches ich von Zeit u Zeit mit dem Computer verbinde und die aktuelle Atomzeit in den Wecker schiebe. Da benötigt man kein DCF mehr. wegen deiner Funkmodule kann ich dir sagen, dass die durchaus kompliziert sind. Es ist kein Hexenwerk aber diese Module verlangen vom Programmierer die implentierung eines Protocols. Das protocol und ggf. eine Fehlerkorrektur werden ja gebraucht wenn mehrere Module gleichzeitig funken. Ob es nun das Modul des Nachbarn oder eines aus deiner Gruppe ist. Du musst ja per Software herausfiltern, ob die Daten die ankommen für dich sind. Insofern kann ich dir gern als Anfänger die anderen Module á la Zigbee empfehlen, da diese das Protocol schon innen drinne haben. Ansonsten gibt es für die RFM Teile auch schon recht viele Softwarebeispiele. Gruss Klaus
Gast
#2689495
Michael N. schrieb: > Nur die oben geposteten Codes funktionierten nicht, das weiß ich. Meiner > Funktionierte. Naja, die anderen Codes funktionieren schon. Warum sie auf Deinem System nicht funktionieren, sollte man sich eher fragen. Michael N. schrieb: > Den in den anderen Codes fehlte mir irgendwie das > kontinuierliche Abrufen der Zeit. Zeit und Datum werden kontinuierlich in Time$ und Date$ aktualisiert. Aber wenn Deine Lösung funktioniert..... Michael N. schrieb: > Habe den hier zuhaus: > > http://www.pollin.de/shop/dt/NTQ5OTgxOTk-/Bausaetz... Geht theoretisch ganz einfach (siehe BASCOM-Hilfe, Config Dcf77). Der Pollin-Empfänger will aber 3,3 V und ist recht störanfällig.
Gast
#2689524
Vom Pollin-Empfänger gibt es zwei Versionen. Eine davon funktioniert problemlos auch mit 5 V. Oftmals kann man die Empfänger aus Uhren ausbauen, verwenden und damit billiger weg kommen. Alternativ zu einem DCF77 Empfänger kommt man auch mit einem GPS Empfangsmodul an die genaue Zeit zum syncronisieren seiner RTC. Ist zwar bissel teuerer als ein DCF77 Empfänger aber u.U. sicherer im Betrieb. Ich habe ein relativ billiges GPS Empfangsmodul das sogar unterm Dach in einem Raum die GPS Daten empfängt. Also ohne frei Sicht zum Sateliten.
Gast
#2689731
Starkstromer schrieb: > Vom Pollin-Empfänger gibt es zwei Versionen. Eine davon funktioniert > problemlos auch mit 5 V. Und welche Version ist das? Bei Pollin gibt es momentan nur eine Version zu kaufen und da steht 3,5V max.
Gast
#2689793
Gute Frage. Wenn du gut im suchen bist, wirst du die entsprechende Seite finden. Ich glaube sogar es gab hier bei Mikrocontroller diese Info mit Bildern des Unterschiedes oder es gab links dazu. Andererseits, wieso sollte diese derzeit käufliche Version nur mit 3,5 V max gehen? Nur weil Pollin das so angibt um bei irgendwelchen Fehlfunktionen aus dem Schneider zu sein und argumentieren zu können Sie haben da garantiert mehr als 3,5 V angelegt? So'n Käse kennt man doch aus Amerika, wo an jeder Waschmaschine ein Schild kleben muss, dass man keine Katze usw in die Waschmaschine tun darf. Normalerweise bräuchte man solche Aufkleber nicht. Sie dienen nur gewissen versicherungstechnischen Gründen. Mein Pollinmodul hängt seit langem an 5 V. Übrigens, wie bereits gesagt gibt es bei Disountern oft billige Uhren mit DCF77 Modul für unter 5 Euro. baut man den DCF77 Empfänger aus, läuft die Uhr noch und die Raumtemperatur wird weiter angezeigt.
Eine kleine Anfrage, zum Verständnis. Der RTC läuft mit geänderter Zeit weiter, sobald man die Zeit an diesen übergeben hat oder? Also wenn ich z.B. Manuell per Uart Terminal die Zeit übergebe. Und für meine Uhr bin ich am überlegen, eine Sommer / Winterzeit umschaltfunktion ein zu bauen. Also es wäre zwar eher die "schmutzige" Lösung, aber okay. Da ich nur die Uhrzeit anzeigen möchte wäre es aber nicht weiter schlimm. Als Lösung dachte ich, ein einfachen Schalter, der an einem Pin angeschlossen wird, dieser manipuliert eigentlich nur die Zeit, die vom RTC kommt um 1h. Also im allgemeinen läuft die eine Zeit (vermutlich Winterzeit werde ich wohl nehmen) normal weiter, nur wird dieser Schalter umgelegt, wird zu der Stunde vom RTC eine Stunde hinzugerechnet. Wie gesagt ist eher die "schmutzige" Lösung, aber wäre eine einfache Lösung, um nicht jedesmal den PC mit der Uhr zu verbinden. Dieses wäre aber nur dann die Lösung, wenn ich das mit dem Funkempfänger nicht hin bekommen sollte irgendwie. Und als RTC wollte ich schon den DS1307 nehmen, weil davon habe ich 3 Stück hier rum fliegen. Also von daher danke für Tip für Alternativen, aber erstmal bleib ich bei dem. Aber wenn die Identisch sind, könnte ich die im nachgang austauschen. Den der RTC wird gesockelt auf die Platine gebracht. Wollte dies mal als Diskusionsbeitrag hinterlassen. Michael
Gast
#2692713
Für die SZ/WZ-Umschaltung brauchst Du das Datum in der Uhr, inkl. Wochentag und Jahr. Mit Jahr macht der 1307 auch korrekte Schaltjahre. Den Wochentag musst Du selbst setzen, der 1307 hat keinen WT-Kalender. Dann hast Du zwei Möglichkeiten: Wenn die Uhr läuft, prüfst Du mit dem AVR auf SZ/WZ-Regel. Die Regel ist nicht so schwierig zu implementieren, wie es auf den ersten Blick aussieht. a) Wenn SZ, rechnest Du eine Stunde zur Uhrzeit dazu. Musst aber dann ab 23:00 das Datum auch weiterrechnen, falls Du es brauchst. b) Wenn Zeitpunkt für Umschaltung, stellst Du die Uhr 1 Stunde vor / zurück. Dann setzt Du im Sommer ein Flag in einem freien Register der Uhr als SZ-Merker. Wird die Uhr eingeschalten, die SZ-Regel greift und der Merker ist gesetzt, alles in Ordnung. Wenn Merker nicht gesetzt, Uhr vorstellen, im Winter umgekehrt. Ist nicht so schwierig, und Du hast immer korrekte Zeit und korrektes Datum.
Gast
#2692728
Hi, vielleicht hilft dir auch mein Programm mit automatischer Sommerzeitumschaltung, läuft recht brav seit einigen Monaten im Echtbetrieb, ich brauche weder einen Schalter noch ein eigenes Bit, noch eine Wochentagseingabe. Die Uhr läuft immer ganz normal weiter, vorm Anzeigen, wird der Offset von +/- 1 Stunde berechnet, den Wochentag gibts ja automatisch in Bascom mit dayofweek. Beitrag "Sommerzeitberechnung mit Bascom", Beitrag "Sommerzeitberechnung mit Bascom"
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
