kann keine Uhrzeit automatisch einstellen

Gast #703027
Lesenswert?

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)

1
$regfile = "2313def.dat"
2
$crystal = 1000000
3

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

7
  Cls
8
  cursor off
9
Config Dcf77 = Pind.6 , Timer = 1 , Timer1sec = 1 , Debug = 1
10

11
Enable Interrupts
12

13
Config Date = Dmy , Separator = .
14

15
Dim I As Integer
16

17
Dim Sec_old As Byte , Dcfsec_old As Byte
18

19
Sec_old = 99 : Dcfsec_old = 99
20

21

22
Do
23

24
For I = 1 To 78
25

26
Waitms 10
27

28
If Sec_old <> _sec Then
29

30
Exit For
31

32
End If
33

34
If Dcfsec_old <> Dcf_sec Then
35

36
Exit For
37

38
End If
39

40
Next
41

42
Waitms 220
43

44
Sec_old = _sec
45

46
Dcfsec_old = Dcf_sec
47

48
Locate 1 , 5
49
Lcd Time$ ; " "
50
Locate 2 , 5
51
Lcd Date$ ; " "
52

53

54
Loop
55

56
End

weiss einer warum das nicht läuft?
bitte, helft mir.
MfG Alexander
#703039
Lesenswert?

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
Gast #703045
Lesenswert?

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.
#703046
Lesenswert?

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...
#703069
Lesenswert?

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?
Gast #703073
Lesenswert?

>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?
#703088
Lesenswert?

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.
#703093
Lesenswert?

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.
Gast #703098
Lesenswert?

>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?
#703100
Lesenswert?

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...
Gast #703120
Lesenswert?

@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.
#703142
Lesenswert?

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
Gast #703152
Lesenswert?

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.
Gast #703168
Lesenswert?

>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
Gast #703188
Lesenswert?

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
Gast #703196
Lesenswert?

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
Gast #703220
Lesenswert?

>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
#703229
Lesenswert?

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.
Gast #703271
Lesenswert?

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
#703286
Lesenswert?

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.
Gast #703353
Lesenswert?

>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.
#705256
Lesenswert?

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.
#705530
Lesenswert?

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.
Gast #705533
Lesenswert?

ich habe das schon so erweitert:
1
Config Dcf77 = Pind.6 , INVERTED = 1 , UPDATE = 0 ,  Timer = 1 , Timer1sec = 0 , Debug = 1
2

3

4
Enable Interrupts
5

6
Config Date = Dmy , Separator = .
7

8
Dim I As Integer
9

10
Dim Sec_old As Byte , Dcfsec_old As Byte
11

12
Sec_old = 99 : Dcfsec_old = 99

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.
#705549
Lesenswert?

Alex wrote:
> ich habe das schon so erweitert:
>
>
1
> Config Dcf77 = Pind.6 , INVERTED = 1 , UPDATE = 0 ,  Timer = 1 ,
2
> Timer1sec = 0 , Debug = 1
3

4
Und warum Gross? Warum schreibst du es nicht so, wie es in der Doku beschrieben steht?
5

6
[c]
7
' Config Dcf77 = Pind.2 , Debug = 1 , Inverted = 0 , Check = 2 , Update = 0 , Updatetime = 30 , Switchpower = 0 , Secondticks = 50 , Timer1sec = 1 , Powerlevel = 1 , Timer = 1

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).
Gast #705550
Lesenswert?

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 :(
Gast #705560
Lesenswert?

>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.
#705568
Lesenswert?

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.
Persönliche Seite #705623
Lesenswert?

[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]
#705828
Lesenswert?

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.
Gast #705857
Lesenswert?

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.
Gast #705993
Lesenswert?

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.
Gast #706014
Lesenswert?

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
Gast #706146
Lesenswert?

>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. :(
Gast #706187
Lesenswert?

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. :(
#706210
Lesenswert?

> 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.
#706215
Lesenswert?

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.
Gast #706222
Lesenswert?

>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.
Gast #706224
Lesenswert?

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.
Gast #706232
Lesenswert?

>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?
Gast #706241
Lesenswert?

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.
Gast #706259
Lesenswert?

>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.
#706269
Lesenswert?

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
#706291
Lesenswert?

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.
Gast #706343
Lesenswert?

>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?
#706377
Lesenswert?

>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.
Gast #706378
Lesenswert?

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 
:)
#706387
Lesenswert?

>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.
Gast #706404
Lesenswert?

das programm läuft jetzt so:

[c]

$regfile = "2313def.dat"
$crystal = 4000000

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

  Cls
  Cursor Off
Config Dcf77 = Pind.6 , Inv = 0 , Upd = 0 , Timer = 1 , Timer1sec = 0 , 
Debug = 1 , Check = 2 , Switchpower = 0 , Secondticks = 50 , Powerlevel 
= 1


Enable Interrupts

Config Date = Dmy , Separator = .

Dim I As Integer

Dim Sec_old As Byte , Dcfsec_old As Byte

Sec_old = 99 : Dcfsec_old = 99


Do

For I = 1 To 78

Waitms 0

If Sec_old <> _sec Then

Exit For

End If

If Dcfsec_old <> Dcf_sec Then

Exit For

End If

Next

Waitms 0





Sec_old = _sec

Dcfsec_old = Dcf_sec

Locate 1 , 5
Lcd Time$ ; " "
Locate 2 , 5
Lcd Date$ ; " "
Locate 4 , 5
Lcd Bin(dcf_bits) ; " "
Locate 2 , 15
Lcd Bdcf_impuls ; " "


Loop

End
[c/]

hat aber immer noch verspätung. ca. 3 sekunden in 20 minuten
Gast #706454
Lesenswert?

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?
Gast #706687
Lesenswert?

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?
Gast #706711
Lesenswert?

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.
Gast #706732
Lesenswert?

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.
Gast #706737
Lesenswert?

@ 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?
Gast #706798
Lesenswert?

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.
#706855
Lesenswert?

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.
#706865
Lesenswert?

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).
Gast #706899
Lesenswert?

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
#706915
Lesenswert?

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.
Gast #706974
Lesenswert?

>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?
#707004
Lesenswert?

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.
Gast #707040
Lesenswert?

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
#707061
Lesenswert?

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.
Gast #707250
Lesenswert?

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?
Gast #707693
Lesenswert?

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?
Gast #707728
Lesenswert?

>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!
Gast #707775
Lesenswert?

> 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!
Gast #707805
Lesenswert?

>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
#707816
Lesenswert?

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.
Gast #707893
Lesenswert?

>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!
#707898
Lesenswert?

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 :-)
Gast #708072
Lesenswert?

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.
Gast #708342
Lesenswert?

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.
#708345
Lesenswert?

>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.
#708351
Lesenswert?

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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren