Hallo!
Habe nun endlich meinen DCF77-Empfänder zum Laufen gebracht.
er hat immer 2,7V im Sekundentakt geschaltet.
nun habe ich eine Treiberstufe gebaut. einen BC547 in der
Emitterschaltung.
33k also basisvorwiderstand.
es funktioniert. jetzt schaltet er GND im sekundentakt.
Das signal geht an pind.6 von einem AtTiny2313.
da kann ich ihn auch noch verfolgen.
Der Zähler läuft.
der lcd zeigt erst 00.00.00 dann 00.00.01 u.s.w. an.
die Zeit wird aber nicht eingestellt.
die sol sich ja automatisch einstellen, oder?
hier ist mein Quellcode( aus AVR-Help kopiert an angepasst)
Moin,
sehe ich das richtig, daß die einzige Verbindung zwischen DCF-Empfänger
und ATTiny aus dem Sekundensignal besteht? Dann kann er die korrekte
Uhrzeit nicht einstellen, woher soll er die auch bekommen. Der
DCF-Empfänger müßte normalerweise an irgendeinem Anschluß die Uhrzeit
ausgeben (meist seriell). Die mußt Du auswerten. Sonst kriegst Du nur
eine Uhr, die zwar exakt die Sekunden zählt, aber immer von 00:00 an.
Grüße, Dennis
das teil hat ja nur so zu sagen 3 Anschlüsse.
VCC, GND, TOC (dcf77signal) und PON (der ist aber nur zum einschalten.
was er ganue liefert kann ich nicht sagen, ich weiss nur, dass es sich
immer was ändert. und zwar im Sekudentakt.
der Wecker hat damit ja auch die Uhrzeit eingestellt.
das ist natürlich Käse, was Dennis hier erzählt, da die
Zeitinformationen ja in der Impulslänge der Sekundenimpulse enthalten
ist.
ob der Code oben das leistet, kann ich nur erahnen, da es mir
schleierhaft ist, wie man einen Mikrocontroller mit Basic programmieren
kann...
Sehr schönes Beispiel, wie ein gut kommentierter Code auszusehen hat.
Daß man ihn dann selber nicht versteht und auch andere kaum helfen
werden können, ist normal.
Peter
Boxi Boxitec wrote:
> das ist natürlich Käse, was Dennis hier erzählt, da die> Zeitinformationen ja in der Impulslänge der Sekundenimpulse enthalten> ist.
Ist klar, aber erstens gibt es durchaus DCF-Empfänger, die ein serielles
Signal ausgeben (einer hängt grad ca. 0,75m vor mir an der Wand),
zweitens hat Alex was von nem Sekundensignal erzählt, daß er sich aus
seinem Modul holt und über nen Transi verstärkt. Daher bin ich davon
ausgegangen, daß er tatsächlich ein reines Sekundensignal meint.
@Alex
Wenn Dein Sekundensignal die Zeitinfo enthält, bist Du sicher, daß der
BC547 das nicht wieder verfälscht, weil er einen kleinen Moment braucht,
um durchzusteuern?
>Wenn Dein Sekundensignal die Zeitinfo enthält, bist Du sicher, daß der>BC547 das nicht wieder verfälscht, weil er einen kleinen Moment braucht,>um durchzusteuern?
was kann denn die Abhilfe sein?
wie soll ich denn überhaupt weiter vorgehen?
Paul Baumann wrote:
> So wie das oben aussieht, zählst Du einfach nur die "rohen"> Sekundenimpulse hoch.
Dachte ich im ersten Moment nämlich auch. Ich nutze Bascom nicht, aber
ich denke, das es eine eingebaute Routine für DCF haben wird und weiß,
was mit den Sekundensignalen anzufangen ist.
@Alex
Hast Du mal hier reingeguckt?
http://www.mikrocontroller.net/articles/DCF77-Funkwecker_mit_AVR
Das mit dem BC547 scheint so erstmal richtig zu sein. Möglicherweise
hast Du ein Timingproblem, also daß die Impulslänge nicht richtig
gemessen wird. Evtl. die Waitms mal versuchen anzupassen.
Alex wrote:
> @Peter> kannst du noch was zum Thema sagen?
Nö, jetzt mußt Du erstmal wieder was sagen, und zwar, was Du Dir bei dem
Programm gedacht hast, eben als Kommentar hinter die Zeilen.
Fängt schon mal damit an, woher diese ominöse 78 kommt.
Wenn Du Dir garnichts dabei gedacht hast, ganz schlecht
Peter
P.S.:
Je weniger Mühe Du Dir gibst, umso weniger sind auch andere bereit zu
helfen.
>Hast Du mal hier reingeguckt?>http://www.mikrocontroller.net/articles/DCF77-Funk...>Das mit dem BC547 scheint so erstmal richtig zu sein.
ich habe das anders.
der interne pull-up scheint aktiviert zu sein, und ich habe an dem
Pind.6
immer 4V(wenn kein Empfänger da ist).
ich habe es so gebaut, dass der Transistor immer GND schaltet.
in deinem link ist das aber umgekehrt.
wie ist das denn richtig?
Dennis Nitschke wrote:
> @Alex> Wenn Dein Sekundensignal die Zeitinfo enthält, bist Du sicher, daß der> BC547 das nicht wieder verfälscht, weil er einen kleinen Moment braucht,> um durchzusteuern?
Deine Kommentare dürften den OP nur verwirren. Bei der
Pulsbreitenmodulation der Zeitinformation gehts um 100ms differenz
zwischen den Informationen Hi und Low.
Ein BC547 hat Latenzzeiten, die irgendwo im Nanosekundenbereich liegen
und sind somit absolut vernachlässigbar...
>Je weniger Mühe Du Dir gibst, umso weniger sind auch andere bereit zu>helfen.
ich kann mir schon Mühe geben. dazu muss ich aber wissen, WAS falsch
ist.
wonach ich suchen muss.
Ich verfolge das hier schon ne Weile und mir drängt sich der Eindruck
auf, du müßtest dir vielleicht erstmal überlegen, was du überhaupt tun
willst und auf dieser Basis ein Konzept erstellen.
@Boxi Boxitec
sag mal, prüfst du eigentlich alle angaben, die du im Dattenblatt liest?
Wenn im Datenblatt steht, dass pin 40 vom mega 16 als ADC pin werwendet
werden kann, dann wird das wohl auch so stimmen, oder?
genau so ist das auch hier.
wenn im "datenblatt" von Bascom was steht, dann ist das schon so
richtig.
ich finde man MUSS sich da nicht soooo rief reinsteigern.
man kann es so übernehmen, oder bei bedarf bearbeiten.
so habe ich das gemacht.
es werden Jahre vergehen, bis ich da alles durchgelesen und verstanden
habe, denn es hängt alles miteinander zusammen.
und jetzt soll ich diese löde Uhr zur Seite legen, und Bascom studieren?
ich finde man kann es am besten lernen, indem man an fertigen Beispielen
arbeitet.
IMHO.
Weiß zwar nicht, was das mit meinem Post zu tun hat, aber wenn du nicht
weißt, was du tust und aufgrund von Annahmen so drauf los wurschtelst,
wirst du regelmäßig auf die Schnauze fallen. Is aber deine Entscheidung.
Alex wrote:
> ich kann mir schon Mühe geben. dazu muss ich aber wissen, WAS falsch> ist.
Woher soll ein anderer wissen, was an Deinem Code falsch ist, wenn Du
nicht erklärst, was Du Dir dabei gedacht hast?
In Deinen Kopf schauen kann ich nicht.
Ich kann Dir höchstens funktionierenden Code zeigen (Codesammlung), ist
aber in Assembler bzw. C.
Ich könnte jetzt ganz profan erklären, alles was anders als mein Code
aussieht, ist falsch.
Aber es gibt viele verschiedene Ansätze eine Aufgabe in Software zu
lösen, d.h. was anderes muß nicht automatisch falsch sein.
Aber ohne Kommentierung kann das eben keiner sagen.
Peter
Nehmen wir an, das Programm würde so laufen, dass es 150 ms nach einer
steigenden Flanke, dem Beginn des Sekundenimpulses misst, ob eine 1 oder
eine 0 anliegen.
Wenn jetzt ein Inverter in den Signalweg geschaltet wird, liegt die
Steigende Flanke am Ende des Sekundenimpulses und die Messung nach 150
ms fällt dann in die Zeit nach dem Sekundenimpuls, ist also immer 1 oder
0, je nach Programm.
@ Peter Dannegger
wenn es dir nichts ausmacht, dann bitte eine .hex - datei.
AtTiny2313 ; interner oszillator. 1Mhz
DCF am PD6
LCD im 4-bit modus ohne Busy am port B
danke
>ich habe es so gebaut, dass der Transistor immer GND schaltet.>in deinem link ist das aber umgekehrt.>wie ist das denn richtig?
Preisfrage: Wo könnte man das denn nachschauen?
Und als Super-Sonder-Bonusfrage: Unter welchen Stichwort, damit man
nicht das ganze Manual lesen muß, weil, das dauert ja Jahre...
(Ab hier nicht weiterlesen, wenn du selber raten möchtest)
RTFM
XXXXX (Die Antworten zu Bonusfragen werden nicht verraten)
Oliver
arrgh:-)
Also dann: RTFM heisst read the friendly manual (ok, eigentlich heisst
es nicht friendly, somdern fuxxing)
Du benutzt in dem Progamm eine Bascom-Funktion, die irgend etwas tun
soll. Dann schau doch mal ins manual, was denn da zu dieser Funktion
steht. Der einzige Nachteil ist halt, daß die frei verfügbare
Bascom-Doku Englisch ist.
Also
http://avrhelp.mcselec.com/
auf search drücken
Das Zauberwort, in userem Fall "DCF77" eingeben.
Da kommt dann ein Eintrag zu CONFIG DCF77 - hallo, das steht ja auch
oben im Programm !!
Also draufklicken, und lesen. Wenn du was nicht verstehst, hier wieder
fragen.
Oliver
Wennn das hier noch irgendwas werden soll, schau doch einfach mal in die
Doku. Wenn du alle Parameter zu dcf77 verstanden hast, und sicher bist,
das die alle richtig für DEINE Schaltung eingestellt sind, und dann noch
Fragen vorliegen, oder es immer noch nicht geht, dann frag halt nach.
Vorher nicht.
Oliver
Alex wrote:
> @ Oliver>> du hast nicht alles in diesem Theard gelesen!>> Das programm habe ich von http://avrhelp.mcselec.com/ !!!!
Und?
Was hindert dich daran, dort mal die Doku zu lesen.
Insbesondere hat der Config Parameter INVERTED meine
Aufmerksamkeit erregt.
>sind beides Fremdsprachen.>komme nicht aus Deutschland
Na, dann Glückwunsch zu dem hervorragend funktionierenden
Übersetzungsprogramm, mit dem du hier deine Beiträge übersetzen lässt.
Da das anscheinend kein Bascom beherrscht, lass es dann lieber.
Oliver
Alex wrote:
> es gibt also keine lösung..> ok.
Doch. Es gibt mit Sicherheit eine Lösung.
Aber dir ist nicht geholfen, wenn hier jemand die Lösung
auf einem Silbertablett präsentiert. Du musst lernen
dir aus Dokus die notwendigen Informationen zusammenzusuchen.
µC Programmierung ist nun mal etwas anspruchsvoller als einen
MP3 Player einschalten. Da müssen alle durch. Sei froh, dass
es die dann doch relativ ausführliche BASCOM Hilfe gibt und
lerne sie zu benutzen. In weiterer Folge wirst du in nicht
allzulanger Zeit auf Probleme stossen, bei denen du völlig
alleine (also ohne irgendeine Hilfe) dastehst.
Stell Dich doch mal mit dem Cursor auf den Befehl "Config DCF 77" und
drücke F1, um zur Hilfe für diesen Befehl zu gelangen.
Was passiert zum Bleistift, wenn Du den Parameter "Timer1sec" auf Null
setzt?!......
Man kann nicht von den Entwicklern erwarten, daß jedes Codebeispiel
genau
mundgerecht ist.
Bedenke: Es könnte noch schlimmer kommen, wenn Du selbst eine Routine
für die Auswertung schreiben müßtest. Den Befehl "Config DCF77" gibt es
nämlich noch gar nicht so lange. Manch einer wäre in einer anderen
Programmiersprache froh, wenn er es so schön vorbereitet bekommen würde.
;-)
MfG Paul
Das ist der Grund, warum ich immer sage: Programmieren lernt man nicht.
Endweder man hat einen Hang zum Autodidaktismus oder man hat ihn nicht.
Im letzteren Fall sollte man es besser bleiben lassen.
Schliesslich bringt man einem völlig unmuskalischen Menschen auch nicht
das Klavierspielen bei.
>Na, dann Glückwunsch zu dem hervorragend funktionierenden>Übersetzungsprogramm
ich meinte, dass ich in Deutschland noch gar nicht so lange wohne.
ich benutze kein Programm zum Übersetzen
>Was passiert zum Bleistift, wenn Du den Parameter "Timer1sec" auf Null>setzt?!......
schon probiert.
ob du es glaubst, oder nicht, aber es ändert sich NICHTS.
was macht dieser Parameter eigentlich?
bin aus der AVR-Hilfe nicht viel schlauer geworden, da ich nicht sehr
gut englisch kann.
Alex wrote:
> also es ist noch was komisches..> habe mal ein Bild gezeichnet.> warum funktioniert das so nicht?> ich sollte ja 5V am Ausgang haben, oder?
Nein, das ist eine Collectorschaltung. Ein sogenannter Impendanzwandler
bzw Spannungsfolger.
Wenn du eine Verstärkung haben möchtest, setzt zu den Widerstand
zwischen Collector und +5V. Der Emitter kommt direkt an GND.
entschuldigung, ich meinte es anders.
im Programm selbst (unten) steht ja nirgendwo "INVERTED = 0" oder so, wo
ich statt 0 eine 1 reinmachen kann.
das meinte ich
Alex wrote:
> im Programm selbst (unten) steht ja nirgendwo "INVERTED = 0" oder so, wo> ich statt 0 eine 1 reinmachen kann.
Und wo ist jetzt das Problem? Traust du dir nicht zu die paar Zeichen
einzufügen?
Alex wrote:
> entschuldigung, ich meinte es anders.> im Programm selbst (unten) steht ja nirgendwo "INVERTED = 0" oder so, wo> ich statt 0 eine 1 reinmachen kann.> das meinte ich
Wie wäre es, wenn du dein Augenmerk einfach mal auf die Beschreibung
der einzelnen Möglichkeiten dieses Config Befehls richten würdest
und nicht nur auf das angegebene Programm. Das angegebene Programm
ist nämlich genau das: Ein Beispiel, wie man in einer speziellen
Konfiguration diesen Befehl benutzen kann. Nicht mehr und nicht
weniger. Es ist keinesfalls dazu gedacht alle Möglichkeiten
und alle Varianten aufzuzeigen.
So ist das generell mit Beispielprogrammen: Sie illustrieren
eine Möglichkeit! Will man wissen, was sonst noch so alles geht,
dann gilt der Erklärungstext eines Kommandos.
Und komm mir jetzt nicht mit: Ich kann kein Englisch.
So viel Englisch kannst du allemal und wenn wirklich nicht,
dann nimm den Text und steck ihn in eine Übersetzungsmaschine
hinein und denk darüber nach, was das Kauderwelsch welches die
Maschine ausspuckt wohl im Zusammenhang mit der Konfiguration
eines DCF Eingangs bedeuten könnte. So schwer ist das nicht.
er will einfach nicht.
ich weiss auch nicht wo das Problem genau liegt. entweder am Programm,
oder am Empfänger.
Habe jetzt den OP zur Verstärkung genommen.
SIEHT ok aus.
aber tuts noch nicht.
Ich hab zwar keine Ahnung, ob bascom case-sensitiv arbeitet, aber im
Zweifelsfalle würde ich mich da immer an die Vorgabe halten.
> Habe jetzt den OP zur Verstärkung genommen.
Welchen OP? Wie sieht die Schaltung aus? Invertiert der das Signal?
> SIEHT ok aus.> aber tuts noch nicht.
Du hattest schonmal in einem anderen Posting beschrieben, das dein
Wecker 1-2Stunden braucht, bis die Zeit stimmt. In diesem Fall ist das
ein Zeichen, das der Empfang nicht optimal ist. Der Empfang muss für
eine Erfolgreiche synchronisierung für mindestens 2-5Minuten absolut
fehlerfrei sein. In der Regel reichen 3Minuten.
Damit der Empfang optimal ist, legt man dem Empfänger weit von der CPU
weg oder anderen Störquellen (rechner, bohrmaschine, waschtrockner,
umluftbackofen usw).
es ist ja nicht so, dass ich mir keine Mühe geben will.
ich habe noch kein Gefühl für sowas. und nur darum bitte ich euch um
Hilfe.
aber die meisten Beiträge sehen ungefäht so aus " kannst du nicht lesen,
oder was?"
leider :(
>Welchen OP? Wie sieht die Schaltung aus? Invertiert der das Signal?LM324N ist nicht invertiert.
schaltet von 0.1V bis auf 4.3V. ich finde das müsste reichen, um die
Flanken zu merken.
dass der Wecker 2 Stunden gebrauch hat, muss glaube ich am Wecker ligen.
Der Empfänger ist ca.2m vom PC entfernt. klebt auf der Scheibe.
Empfang hat er jede sekunde.
Alex wrote:
> Empfang hat er jede sekunde.
Dir ist offensichtlich nicht ganz klar, wie das DCF-Signal funktioniert.
Eine Sekunde hält nur ein 59tel der Information, die es braucht um die
Uhrzeit und Datum zu dekodieren. Es braucht also 59 sekunden, bis einmal
die komplette Zeit dekodiert werden kann. Dazu kommt der Sync mit der
59' sekunde und eine Referenzeit zum Verifizieren.
Ich sagte bereits: um zu Syncen braucht eine DCF-Uhr mindestens 2
Minuten. Mindestens. Eher drei.
Ich frage nochmal: wie sieht die OP-Schaltung aus? Wenn sie nicht
Invertiert, brauchst du natürlich auch die Inverted-configuration nicht.
Alex wrote:
>>Welchen OP? Wie sieht die Schaltung aus? Invertiert der das Signal?> LM324N ist nicht invertiert.> schaltet von 0.1V bis auf 4.3V.
Das sollte allerdings reichen.
Hast du auch kontrolliert, ob das genau so am µC Pin
PD6 ankommt?
>wie sieht die OP-Schaltung aus?http://www.stegem.de/Elektronik/OP2/op.jpg
ganau so.
und "Inv = 0".
also ich warte schon immer 5-6 minuten, bevor und sage, dass es nicht
geht.
Alex wrote:
> fuf, es läuft jetzt endlich..> durch wildes Ausprobieren.
Ausprobieren ist nicht weiter schlimm.
Was jetzt aber wichtig ist: Das jetzige mit
deiner Urversion vergleichen und verstehen was die
Änderungen waren und was sie bewirkt haben.
[OT]
Also das fand ich mit Abstand am besten:
Peter Dannegger wrote:
> Ich kann Dir höchstens funktionierenden Code zeigen (Codesammlung), ist> aber in Assembler bzw. C.
Alex wrote:
> @ Peter Dannegger> wenn es dir nichts ausmacht, dann bitte eine .hex - datei.> AtTiny2313 ; interner oszillator. 1Mhz> DCF am PD6> LCD im 4-bit modus ohne Busy am port B
Aber ein Versuch wars wert! ;)
[/OT]
Du kannst den Empfang optimieren, in dem du vom einen Pol der
Feritantenne an Erde (zb. Heizkörper) anschliesst und an dem anderen Pol
der Feritantenne eine Wurfantenne sprich ein langes stück Litze zum
Fenster raushängst.
Eine Verstärkung ist in der Regel nicht möglich: wer ein schlechtes
Signal verstärkt, erhält ein verstärktes schlechtes Signal.
>Eine Verstärkung ist in der Regel nicht möglich: wer ein schlechtes>Signal verstärkt, erhält ein verstärktes schlechtes Signal.
hast natürlich recht.
danke
also ich habe das ding jetzt nach hause mitgenommen ;)
jetzt versucht er schon seit 30 minuten die Zeit zu sync. , klappt aber
nicht.
ich habe noch eine LED zur Kontrolle. die blinkt auch ganz brav mit.
Empfang sollte gut sein, weil das ding auf der Fenstebrank steht.
auf der Arbiet hat es so ca. 7 minuten gedauert.
eine Frage habe ich noch.
konnte es nicht komplett verstehen.
wie kann man das übersetzen?
es dauert immer min. 15min. bis er die Zeit syncr. hat. ist mir etwas zu
lange, und ich suche noch auf irgendwas, womit ich diese Fehlerfreie
durchläufe beeinflussen kann. also nicht 5 z.b. , sondern nur 2.
werde aber nicht fundig.
The number of times that the DCF signal state is read. This is the
number of times per second that the interrupt is executed. This value is
calculated by the compiler. The highest possible timer pre scale value
is used and the lowest possible number of times that the interrupt is
executed. This gives least impact on your main application.
You can override the value by defining your own value. For example when
you want to run some own code in the interrupt and need it to execute
more often.
ok, ist auch egal.. dann nehme ich das so an ;)
mir ist aber noch was aufgefallen.
mein alter funkwecker..
In jeder Position in der Wohnung und in jeder Lage konnte er noch die
Zeit einstellen.
jetzt habe ich nur noch auf der Fensterbank einen richtigen, sauberen
Empfang, und nur Wagerecht in Richtung Frankfurt ausgerichtet.
kann mir einer erklären wie das angehen kann?
Danke
>Erzähl doch mal, was das projekt an dem du da arbeitest für einen rahmen>hat.
ich mache die ganzen Sachen nur so, zur Übung. Macht schon ´ne Menge
Spass.
Mit den Fusebits habe ich das nicht verstanden. Sind schon bestimmt x0
µC draufgegangen. :(
so, ich möchte es noch mal versuchen mit den Fusebits.
und zwar möchte ich einen Quarz crystal mit 4Mhz verwenden.
habe das Datebblatt gerage vor mir.
Könnt ihr mir, dem blöden Menshen sagen, wo das steht, wie ich die
Häckchen setzen muss? Ich sehe es einfach nicht.
http://pdf1.alldatasheet.com/datasheet-pdf/view/80317/ATMEL/ATTINY2313.html
ich bin auf der seite 23...
Device Clocking Option CKSEL3..0
External Clock 0000 - 0001
Calibrated Internal RC Oscillator 4MHz 0010 - 0011
Calibrated internal RC Oscillator 8MHz 0100 - 0101
Watchdog Oscillator 128kHz 0110 - 0111
External Crystal/Ceramic Resonator 1000 - 1111
ok, so weit, so gut.
weiter...
CKSEL3..1 Frequency Range(1) (MHz)
Recommended Range for Capacitors C1
and C2 for Use with Crystals (pF)
100(2) 0.4 - 0.9 –
101 0.9 - 3.0 12 - 22
110 3.0 - 8.0 12 - 22
111 8.0 - 12 - 22
auch klar...
Table 5. Start-up Times for the Crystal Oscillator Clock Selection
CKSEL0 SUT1..0
Start-up Time from
Power-down and
Power-save
Additional Delay
from Reset
(VCC = 5.0V) Recommended Usage
0 00 258 CK(1) 14CK + 4.1 ms Ceramic resonator, fast
rising power
0 01 258 CK(1) 14CK + 65 ms Ceramic resonator,
slowly rising power
0 10 1K CK(2) 14CK Ceramic resonator,
BOD enabled
0 11 1K CK(2) 14CK + 4.1 ms Ceramic resonator, fast
rising power
1 00 1K CK(2) 14CK + 65 ms Ceramic resonator,
slowly rising power
1
01 16K CK 14CK Crystal Oscillator, BOD
enabled
1
10 16K CK 14CK + 4.1 ms Crystal Oscillator, fast
rising power
1
11 16K CK 14CK + 65 ms Crystal Oscillator,
slowly rising power
nichts mehr klar. :(
Um dich mit dem Fusebits auseinanderzusetzen, solltest du erstmal
halbwegs die Zahlensystem beherrschen (dez, hex, binär)....
Das fände ich ziemlich Elementar.
> es dauert immer min. 15min. bis er die Zeit syncr. hat. ist mir> etwas zu lange, und ich suche noch auf irgendwas, womit ich diese> Fehlerfreie durchläufe beeinflussen kann. also nicht 5 z.b. ,> sondern nur 2. werde aber nicht fundig.
Hiermit hast du rausgefunden, warum das BASCOM-Modul System hier
in diesem Forum nicht sonderlich beliebt ist.
Die Bausteine die du mit BASCOM mitbekommst sind super, solange
sie genau das tun was du möchtest, bzw. sich darauf konfigurieren
lassen. Aber wehe, wenn nicht! Dann stehst du da und hast
keinerlei Einflussmöglichkeiten mehr.
Alex wrote:
> @Thomas> WO ist mein 4Mhz ext. Crystal? ich sehe nur 3.0Mhz bis 8.0MHz.> erklär es mit bitte ein für alle mal.
4 liegt doch im Bereich 3 bis 8 drinnen.
Diese Einstellun der Fuse Bits bedeutet:
Wenn du einen Quarz im Bereich 3 bis 8 Mhz hast, dann
musst du diese Einstellung nehmen. Es ist nicht so, dass
du mit den Fuse Bits die Quarzfrequenz einstellst. Sondern
du konfigurierst den internen Schwingkreis so, dass er mit
dem externen Quarz klarkommt. Und je nachdem in welchem
Bereich dieser Quarz schwingt, muss der interne Schwingkreis
etwas anders abgestimmt werden.
>Aber wehe, wenn nicht! Dann stehst du da und hast keinerlei Einflussmöglichkeiten
mehr.
man kann Check = 0 setzen. dann übernimmt er die Zeit, ohne sie zu
vergleichen.. kommt soooo ein Müll raus. z.B. 23.15.07 (für heute)
u.s.w.
Bei Check = 1 vergleicht er zwar die Zeit, aber irgendwie hatte ich vor
30 minuten auf einmal 23:45:10 also statt 08:45:10.
mit Check = 2 funktionier alles soweit gut. aber ich nutze den int. Rc
osc. und er geht immer 3-4 sekunden pro minute zu schnell.
also auch für´n Arsch. und bis er die Zeit abgeglichen hat ( bei check=2
), ich schon min. eine Stunde um, weil der Empfang offensichtlich nicht
sehr gut ist.
den ext. Crystal kann ich nicht verwenden.
Also den 4MHz-Quarz zu finden ist doch wirklich kein Problem.
In deinem Datenblattauszug stehen die CKSEL-Einstellungen für 4MHz. Das
ist für Bit 3 bis Bit 1 110, da sich 4MHz meistens zwischen 3 und 8 MHz
befinden. In dem Tool ist das also "medium frequency" für einen externen
Crystal/Resonator.
Die Startup-Clocks sind im Datenblatt beschrieben, wie mein Vorredner
bereits erwähnt hat. Bei deiner Anwendung kannst du da reinschreiben was
du willst. Ist nicht sonderlich relevant.
>In dem Tool ist das also "medium frequency" für einen externen Crystal/Resonator.
ich sehe beim besten Willen nichts mit "medium frequency" in diesem
Tool.
also wenn ich das richtig verstehe, ich das ein Bonärcode. also 100 für
1, 010 für 2, 110 für 3, u.s.w.
oder?
Unbekannter wrote:
> Das brauchst du nicht erwähnen, er schreibt sowieso irgendetwas rein ;-)
Könntest du bitte deinen Müll, den wirklich niemand lesen möchte, im
Heiseforum ablassen und nicht hier. Danke!
Also normalerweise nummeriert man die Bits von rechts nach links.
Weiterhin habe ich geschrieben, dass im Datenblatt CKSEL 3 bis 1
angegeben sind. Also insgesamt 4 Bits mit in deinem Fall 110X. Das 0.
(nullte) Bit wählt zusammen mit den SUT-Bits die Startup-Clocks.
also ich habe die fuses jetzt eingelesen.
so sieht es jetzt aus: Anhang
wenn ich das jetzt richtig verstanden habe, muss ich CKSEL0 wegmachen,
und dafür CKSEL2 reinsetzen, oder?
>Also normalerweise nummeriert man die Bits von rechts nach links.
Da hast du Recht, beim AVR bedeutet aber eine logische 1 dass diese Bit
nicht programmiert ist.
Alex: Meiner Meinung nach, den Haken bei CKSEL3 weg, der Rest bleibt so.
>Meiner Meinung nach, den Haken bei CKSEL3 weg, der Rest bleibt so.
aber ich muss ja noch ein Häckchen setzen, bzw. wegmachen, damit er mit
ext. Crystal läuft, oder?
sonst ist er ja bei 4Mhz intern RC.
Alex wrote:
>>Meiner Meinung nach, den Haken bei CKSEL3 weg, der Rest bleibt so.>> aber ich muss ja noch ein Häckchen setzen, bzw. wegmachen, damit er mit> ext. Crystal läuft, oder?> sonst ist er ja bei 4Mhz intern RC.
Hm, ich habe jetzt einfach dieses Tool benutzt und
"Externer Kristall, Frequenz 3 bis 8 Mhz, Start-Up 14 CK + 4.1 ms"
ausgewählt. Bei SUT1 und SUT0 muss also ein Haken hin, sowie bei CKSEL1
und CKSEL0
Soll der Takt intern wirklich durch 8 geteilt werden? (Der Haken bei
CKDIV8 ist noch gesetzt)
Noch etwas: Ich habe jetzt nicht den kompletten Thread gelesen, in
deinem 1. Beitrag steht aber "$crystal = 1000000" Hast du einen 1Mhz
Kristall?
Wenn ja, dann müssen die Fuses natürlich anders gesetzt werden.
Eine Möglichkeit wäre: Kein Haken bei SUT1, SUT0, CKSEL3, CKSEL1,
CKSEL0. Nur ein Haken bei CKSEL2.
>Nur der Schreibvorgang oder funktioniert jetzt auch das Programm so wie
es soll?
auf dem ersten blick beides.
muss jetzt nur noch die Zeit stoppen, und gucken wie genau meine Uhr
jetzt nun läuft.
wenn die immernoch nicht genau ist, woran kann es liegen?
bei mir om code sind volgenden Zeilen:
Waitms 10
und
Waitms 220
ist sowas überhaupt zulässig, wenn man eine Uhr baut?
also wait- befehl und eine Uhr... finde ich etwas komisch.
>werde sofort mal den 1.6GHz Counter anschliessen ;)
Das wäre keine schlechte Idee! Wenn bei Fusebit "CKOUT" ein Haken
gesetzt ist, kannst du an PORTD2 den Clock-Takt ausgeben lassen. Dort
sollten dann 4Mhz rauskommen.
mich beschleicht das gefühl, daß deine Fuse-einstellung nicht
geschrieben wurden und dein mega8 immernoch vom Internen RC auf 1MHz
schwingt. Setz mal $crystal=1000000 und überprüf dann nochmal die
zeit....
ich wette ich habe recht!
>mich beschleicht das gefühl, daß deine Fuse-einstellung nicht>geschrieben wurden und dein mega8 immernoch vom Internen RC auf 1MHz>schwingt. Setz mal $crystal=1000000 und überprüf dann nochmal die>zeit....
Dann sollte er mal besser die Einstellungen mit Ponprog auslesen und
nachsehen, ob sie wirklich geschrieben worden sind.
habe ich schon.. da zählt er die sunkunden wie verrückt ;)
also ich habe jetzt im Quellcode die beiden Waitms auf 0 gesetzt.
läuft schon seit 5 minuten. kann bis jetzt keine abweichung feststellen
:)
>also ich habe jetzt im Quellcode die beiden Waitms auf 0 gesetzt.>läuft schon seit 5 minuten. kann bis jetzt keine abweichung feststellen>:)
Du könntest auch das Programm durch
1
Do
2
3
4
5
6
Loop
ersetzen!
Die wait-Anweisungen werden schon ihren Sinn haben, dein Quellcode im 1.
Beitrag kann doch aber nicht das komplette Programm sein. Irgendwo muss
ja auch z.B. die Variable "_sec" definiert worden sein und irgendwie
durch das Programm verändert werden.
>jetzt im Erns?
Probier es doch einfach mal aus. Jede Kamera kann nur bis zu einem
gewissen Mindestabstand zum Objekt scharfstellen, bei besseren Kameras
kann das durchaus weniger als 10cm sein, bei Kameras ohne Makrofunktion
leider nicht.
ich habe da mal so eine Idee.
die Uhr läuft ja etwas langsamer.
was passiert, wenn ich den compiler anlüge und $crystal = 3999998
schreibe?
dann soll sie ja schneller laufen, oder?
ist das nicht die Lösung dann?
also meine geile Uhr geht 10 sekunden pro Stunde zu langsam.
am Quarz ist 4.00009MHz. (gemessen).
waran kann es liegen?
also wenn mal ganzen Tag kein Empfang habe, dann ist die ganz toll
verstellt :(
hat jemand einen Tipp?
Gratulation ! 10 Sekunden pro Tag ist ein guter Wert. I.d.R. weichen µP
gesteuerte Uhren immer etwas ab. Das kann man aber durch geschickte
Auswahl des Quarzes beeinflussen. Da die Abweichung bekannt und immer
gleich ist, kannst Du eine Korrektur einbauen, z.B. alle 144 Minuten
eine Sekunde dazurechnen.
Das liegt vermutlich an der Verwendung von BASCOM AVR. Am Besten Du
programmierst den Zeitgeber für Deinen 1/100 Sekunden-Takt in Assembler.
Ich habe zwar auch eine DCF77-gesteuerte Uhr in BASCOM AVR programmiert,
jedopch gänzlich auf das "Selberzählen" verzichtet. Das übernimmt eine
I2C-Echtzeituhr. Die ist auch unabgeglichen relativ genau und läßt sich
durch einen Goldcap 2-3 Tage puffern. Das hat den Vorteil, daß sofort
nach einem Stromausfall die aktuelle Uhrzeit zur Verfügung steht.
@ nummernschalter
noch eine Möglichkein gibt es nicht?
was ist damit?
ich habe da mal so eine Idee.
die Uhr läuft ja etwas langsamer.
was passiert, wenn ich den compiler anlüge und $crystal = 3999998
schreibe?
dann soll sie ja schneller laufen, oder?
ist das nicht die Lösung dann?
Ich glaube das bringt im konkreten Fall nichts, da Du die Zeitgeber ja
selber Einstellen (Vorteiler) mußt. Abgesehen davon werden alle
Komponenten, die der Kompiler mit seinen errechneten Werten "versorgt"
nicht mehr richtig funktionieren. z.B. "wait", serielle Schnittstelle
usw.
Alex wrote:
> was passiert, wenn ich den compiler anlüge und $crystal = 3999998> schreibe?
Wenn schon, dann würde ich da auch das Ergebnis deines
Frequenzmessers reinschreiben.
Also:
$crystal = 4000090
Dann lügst du auch nicht, denn dein Quarz macht ja wirklich
diese Frequenz.
> dann soll sie ja schneller laufen, oder?
Kommt drauf an, was BASCOM mit dieser Angabe macht.
PS:
Wenn du die Abweichung deines Quarzes von 4000090 hz mal
in Bezug auf die SollFrequenz von 4000000 Hz setzt und das
ganze auf 1 Stunde umlegst, dann kommst du drauf, dass du dann
bei 3600 Sekunden (=1 Stunde) rund 8 Sekunden Abweichung haben
wirst. Deine 10 Sekunden sind also realistisch. Wenn du
die Abweichung mal über einen Tag feststellst, dann kannst du
die tatsächliche Quarzfrequenz noch wesentlich genauer errechnen.
(Aber dazu musst du den Quarz dann temperieren. Der ändert seine
Frequenz auch mit der Temperatur).
Ich würde den Parameter "Secondtics=50" mal weglassen. In der Hilfe
steht, daß der Compiler diesen Wert selbst errechnet. Nur wenn man
selbst festlegt, daß man im Interrupt mehr Zeit braucht, sollte man den
Wert von Hand verändern.
Ich habe hier übrigens eine Uhr mit Attiny 2313, die nur mit einem 4Mhz-
Quarz betrieben wird (ohne DCF). Die läuft seit 2 Jahren mit einer so
geringen Abweichung, daß ich sie nur mal bei Sommer/Winterzeitwechsel
stellen muß. Link: http://www.lexatronic.de/
MfG Paul
Karl heinz Buchegger wrote:
> bei 3600 Sekunden (=1 Stunde) rund 8 Sekunden Abweichung haben> wirst.
Oops. Da ist mir wohl am Taschenrechner irgendwo eine oder 2 Nullen
zuviel reingerutscht. Es sind 0.08 Sekunden. Erklärt also deine
Abweichung nicht. Kam mir irgendwie seltsam viel vor, dafür dass
der Quarz nur um 90 Hz danebenliegt.
Hi
Selbst bei einem 100% genauen 4MHz Quarz kannst du keine genaue Sekunde
erzeugen. Der minimale Fehler beträgt 0,006%. Besser wäre ein 4,096MHz
Quarz.
MfG Spess
>Besser wäre ein 4,096MHz Quarz.
kann mir jemand meine 2 Fragen beantworten?
1. Warum ist dieses Quarz besser? Kann man ein Quarz aus alten
Funkwecker nehmen?
2. dann stehe ich wieder vor dem Problem mit den Fusebits.
gerabe Zahlen, könnte ist mit 3-bin BCD code noch darstellen, aber wie
mache ich nun 4,096?
Hi
1.Die Vorteiler der Timer sind 2er-Potenzen. Z.B. 1024.
4000000 / 1024 = 3906,25
4096000 / 1024 = 4000
2. Kommt auf den Quarz an.
Was hat das mit den Fusebits zu tun ????
MfG Spess
Das Problem ist, das dir die Grundlagen fehlen. Solange du die nicht
lernst, wirds du immer wieder auf neue Fragen stossen, die du dir selber
beantworten könntest, würdest du dich mit den Grundlagen E-Technik und
Digitaltechnik befassen.
@Spess 53
Ich habe mal ein Programm angehangen, was mir wunderschön 1Hz aus 4Mhz
erzeugt. Mit Timer 1 ginge das sogar noch einfacher, aber den hatte ich
schon "besetzt". ;-)
MfG Paul
Hm,
soweit ich mich erinnere liefert DCF77 die Zeitinformation über die
Impulsdauer.
Jede Sekunde kommt ein Low-Impuls (Signal ist low-aktiv). Je nach dauer
des Low-Impulses (100 oder 200 ms) wird ein 0- oder 1-Bit repräsentiert.
Du brauchst jetzt nur 59 Bits abzuwarten, dann hast du eine komplette
DCF77-Sequenz empfangen. natürlich musst du noch wissen, ab wann du die
Bits zählen musst. Nun, immer der Minutenanfang wird durch einen etwas
längeren low-Impuls gekennzeichnet, sofern ich das noch richtig im Kopf
habe.
also - langen low-Impuls abwarten und danach alle Bits merken, je nach
dem ob der Impuls 100 oder 200 ms dauerte. Die Bits nachher gemäss
Wikipedia decodieren und gewünschte Bits ausgeben - fertig.
Wahrscheinlich hat weiter obe das schon jemand beschrieben, aber wenn
nicht hast dus hier nochmal ;) ansonsten ist eine sehr gute Beschreibung
von DCF77 auf Wikipedia.
Hi
@Paul Entschuldige, ein solcher Aufwand zur Erzeugung eines
Sekundensignals lag bisher ausserhalb meines Vorstellungsvermögens. In
Assembler brauche ich dafür ca. 10 Befehle. Mit geeigneter
Hardwareauswahl kann man sich eine Menge Stress ersparen.
MfG Spess
Brrr...also ich bin ja selber Assembler- und GCC-Coder aber dieses
Pseudo-elitäre "in assembler ist kürzer und schneller" gequatsche geht
mir auf den Sack weils einfach nicht wahr ist!
Assembler hat den Nachteil, das der Code schwerer zu lesen ist und die
Sprache einen überhauptnicht bei seiner Arbeit unterstüzt, strukturiert
an eine Problemlösung ranzugehen. Man ist ständig auf seine eigne
Disziplin angewiesen den Stack und den Code selbst aufgeräumt zu halten.
C und Bascom nehmen da einem sehr viel arbeit ab und der Code ist für
jedermann auf Anhieb verständlich.
Um zu verdeutlichen was ich meine:
Setz dich mal vor einen Assemblerprogrammcode den du vor 2-3 Jahren
geschrieben hast und versuche nur anhand des Programmcodes zu erkennen,
um welches Programm es sich handelt. Das geht mit C deutlich einfacher.
Assembler hat ganz klar auch seine Vorteile, aber der Aussage "in
assembler gehts schneller" ist nur äusserst bedingt richtig. Vor allem
was die Laufzeitgeschwindigkeit betrifft stimmts nur in den wenigsten
Fällen, da hier Erfahrung mit Hardware und Plattform des Programmierers
gefragt ist. Häufig kann ein C-Compiler Optimierungen fahren, wo nahezu
jeder Hobbyprogrammierer nicht drankommt.
Schon gewusst: nur die wenigstens Berufsprogrammierer suchen sich ihre
Plattform selber aus sondern müssen sich an ein Team anpassen.
Professionalität bedeutet also, sich anpassen zu können und andere
Plattformen zu respektieren.
Ich hab jetzt nicht in euren Code hineingeschaut (Omg. bas Dateien muss
ich erst speichern und dann öffnen!), aber warum lasst ihr den Timer
nicht einfach im CTC Modus laufen?
Vorteiler 64 und 62500 ins jeweilige CTC-Register und fertig.
4000000/64/62500 = 1Hz
ich habe jetzt ein 6.40040 MHz Quarz gefunden.
wie muss man ist dem Fall die Fusebits setzen?
also bei 1MHz - 001, bei 2MHz - 010, bei 3Mhz - 011, bei 4Mhz - 100,
5Mhz - 101 u.s.w.
und wie macht man das bei 6.40040? Einfach fusebits für 6Mhz setzen, und
den Compiler 6.40040 Mhz erzählen?
Also bei 6Mhz is das ja 110. Richtig so?
Ne Alex, langsam macht das echt keine Spass mehr dir zu helfen. Willst
du die Gedult des Forums testen oder bist du wirklich so unselbständig
und überhaupt nicht lernfähig/lernwillig?
Max Schradin wrote:
> Ne Alex, langsam macht das echt keine Spass mehr dir zu helfen.
??? Wenn ich das richtig sehe ist das dein erster Post in diesem Thread.
>Ne Alex, langsam macht das echt keine Spass mehr dir zu helfen.
brauchst du nicht! ;)
die Uhr ist fertig! :)
läuft NOCH 2 sek /2 Stunden zu schnell jetzt, aber ich krige das schon
besser hin! ;)
Danke, dass du mir geholfen hast!
>>in der zeit hättest du fast schon ne vernünftige programmiersprache>>lernen können!>ich habe mir Assembler angeguckt.>ALLES dichter Wald ;)
BASCOM wahr jetzt aber auch nicht gerade eine einzelne Fichte ;-)
> finde ich noch unverständlicher ;)
?!?
wie es Niels Hüsken schon zuvor geschrieben hat: Assembler und
Lesbarkeit bzw. Verständlichkeit nach einiger Zeit... naja...
Es mag sicher C-Programme geben, die schwer zu lesen sind; aber ich
glaube in asm sind die noch schwieriger zu lesen.
Trotzdem: jedem das Seine!
>die Uhr ist fertig! :)>läuft NOCH 2 sek /2 Stunden zu schnell jetzt, aber ich krige das schon>besser hin! ;)
2 sek /2 Stunden Abweichung bei einer DCF77-FUNKUHR ist allerdings eine
einmalige Leistung. Das dürfte vor dir noch keiner hinbekommen haben.
Oliver
Oliver wrote:
> 2 sek /2 Stunden Abweichung bei einer DCF77-FUNKUHR ist allerdings eine> einmalige Leistung. Das dürfte vor dir noch keiner hinbekommen haben.
Naja, für jemanden, der keinen blassen Schimmer hat von dem was er tut
ist das schon nicht schlecht. Aber sowenig aus so einem Projekt
mitzunehmen ist tatsächlich ne Leistung.
>2 sek /2 Stunden Abweichung bei einer DCF77-FUNKUHR ist allerdings eine>einmalige Leistung.
wie wäre es mal mit ALLES lesen, und dann posten?
weiter ober steht noch in dem Fall, wenn KEIN DCF signal da ist!
Alex wrote:
>>BASCOM wahr jetzt aber auch nicht gerade eine einzelne Fichte>> im Bascom sind die Befehle LESBAR :)))
Falsch.
In Bascom gibt es eine Menge fertiger Bausteine, die
dem Unbedarften suggerieren, dass er ein Programm
progammiert hat, wenn er in Wirklichkeit nur ein paar
vorgefertigte Bausteine mit etwas verbindendem Kit
zu einer ausführbaren Einheit kombiniert hat.
In Wirklichkiet hast ja nicht du den DCF Empfänger
programmiert. In Wirklichkeit hast ja nicht du die
Uhr programmiert. All das hat schon jemand vorgefertigt.
Du schaltest es nur noch ein und holst die Ergebnisse ab.
Dagegen ist auch nicht unbedingt etwas einzuwenden.
Solange man versteht was man da eigentlich tut.
Nichts gegen Lego bauen. Aber Modellbau ist was anderes :-)
also ich weiss nicht, wie ich das beschreiben soll... NERVENAUSBRUCH
passt am ehersten.
auf dem arbeit habe ich alles eingestellt.
mit der Stoppuhr abgeglichen. es waren nur 2 sek / 2 Stunden zu schnell.
ich komme nach hause. schalte das ein...
16 SEKUNDEN in 2 MINUTEN zu schnell.
WIE kann das angehen? WARUM?
gleich alles vom Tisch runtergeschmissen.
eine geraucht.
wieder alles zusammengesammelt.
also ich weiss echt nicht mehr weiter.
suche schon seit einer Stunde kramphaft bei google mit dem Stichwort
"DCF Clock AVR Bascom" und finde NICHTS passendes.
ich brauche einen Quellcode, der funktioniert, damit ich den bearbeiten
kann.
selbst ein zu schreiben, bin ich nicht in der Lage.
wenn ich was finde, dann ist das mit 7-segment-Anzeige.
kann aber auf mein LCD nicht übertragen.
WAS soll ich machen?
es geht jetzt ums prinzip, und nicht um diese blöde Uhr.
Guten Morgen.
Vielleicht wäre es jetzt an der Zeit, sich doch einmal mit Assembler zu
befassen. Kauf' Dir ein Buch und lasse zunächst einige Lampen blinken.
Danach kannst Du Dich dann mit Zeitgebern befassen und Du wirst
plötzlich verstehen, was es mit den krummen MHz'en auf sich hat, wenn Du
Vorteiler und Zeitgeber Register berechnest.
BASCOM AVR ist zwar eine feine Sache, wenn man schnelle Ergebnisse
braucht, allerdings gibt es einige Tücken, wie ich selber erfahren
musste. Prozessor- und Assemblerkenntisse wären in jedem Fall sehr von
Vorteil.
>ich brauche einen Quellcode, der funktioniert,
Den wirst du bestimmt irgendwo finden, aaaaaber:
>damit ich den bearbeiten kann.
Bei deinem jetztigen Wissensstand lieber nicht. (nicht böse gemeint)
>WAS soll ich machen?>es geht jetzt ums prinzip, und nicht um diese blöde Uhr.
Am besten ganz von Anfang an beginnen, damit du die Grundlagen
beherrscht.
Evtl. erst mal klein Anfangen und nur eine LED zum blinken bringen. Ein
Patentrezept kann ich die leider auch nicht geben, aber mit Copy & Paste
+ wildes Editieren ohne den Code halbwegs zu verstehen für nicht zum
Ziel und kann, wie du ja schon selbst erleben musstest, sehr schnell
frustierend sein.
Alex wrote:
> 16 SEKUNDEN in 2 MINUTEN zu schnell.> WIE kann das angehen? WARUM?
Wie ich bereits sagte, du wirst das Thema nie im Griff haben, wenn du
die Grundlagen nicht kennst.
Ich schlage vor du bastelst dir erstmal in Bascom eine eigene Uhr, die
mit dem Systemtakt und einem Timerinterrupt arbeitet und zwar OHNE
irgendwelche Module zu verwenden.
Danach kannst du dich an die dekodierung des DCF-77-Signals wagen. OHNE
Module zu verwenden.
Danach kannst du beide Projekte kombinieren und zusammenfügen. OHNE blah
blah blah...