Bascom DCF und Anzeige auf dem PC

dimmu

Neues Mitglied
11. Juli 2011
54
0
0
Schömberg bei Neuenbürg
Sprachen
  1. BascomAVR
Hallo an alle,
ich bin Neueinsteiger in der Mikrocontroller Welt.
Bisher war ich eher als Beobachter in diesem Forum unterwegs und konnte meine Fragen durch lesen klären. jetzt bin ich aber an ein Problem gestoßen wo ich keine diskutierte Lösung finden kann.
Ich will einen DCF Empfänger betreiben. Der Empfänger ist von Conrad. Ich habe einen Pullup Widerstand gegen den invertierten Ausgang geschaltet. Das ganze steuert mir dann ein Hcf 4093 an. Der 4093 ist ein nand gatter mit schmitttrigger. Irgendwo habe ich gelsen dass es gut wäre das Signal zu filtern bevor es auf den Controller geht.
Da der 4093 ein nand ist müsste ich ja am diesem Ausgang wieder ein nicht invertiertes Signal haben.
Den Empfang habe ich mit einer led schon getestet, sie blinkt auch schön im Sekundentakt.

Jetzt zum eigentlichen Problem.
Ich will fürs erste Mal den Code von der bascom Hilfe benutzen. Wenn ich alles richtig verstanden habe müsste mir dann in der Konsole die Werte der einzelnen Variablen angezeigt werden.
In der Konsole wird mir allerdings nur dass angezeigt:

ž¬‚,ÂÂÂÂÂþ‘-þ‘,:Šâ,×ÚžžÂVâ’CÊ— Úž¬‚,ÂÂÂÂÂþ‘-þ‘,:Šâ,×ÚÂ
žÂžÂVâ’Cʑ— Úž¬‚,ÂÂÊÂÂþ’.þ‘¬:Šâ,×âžžÂVâ’Cʑ— Úž¬‚,ÂÂÊÂÂ
þ’.þ‘¬:Šâ,×âžžÂVâ’Cʒ— Úž¬‚,‘ÂÂþ‘ þ™£¨â,×êžžÂVâ’Cʒ— Ú
ž¬‚,‘ÂÂþ‘ þ™£¨â,×êžžÂVâ’Cʓ— Úž¬‚,ÂÂÂ,‘ þ‘,:Šâ, ‚
²²‚’,—Úš¬Â— Úž¬‚,ÂÂÂ,‘ þ‘,:Šâ, ‚²²‚’,—Úš, — Úž¬‚,ÂÂÊÊÂ
þ’.þ‘,:Šâ,#‚²²‚’,—Úš, — Úž¬‚,ÂÂÊÊÂþ’.þ‘,:Šâ,#‚²²‚’,—Úš¬ — Ú
ž¬‚,‘‘Âþ‘-þ™:Šâ,C‚²²‚’,—Úš¬ — Úž¬‚,‘‘Âþ‘-þ™:Šâ,C‚²
²‚’,—Úš, — Úž¬‚,ÂÂÂ,‘‘-þ‘¬:Šâ,c‚²²‚’,—

Ich bin ratlos was der Fehler ist, und konnte auch noch nichts in der Hilfe finden.
Ich hoffe dass ihr mir helfen könnt.

Achso, auf meiner Platine habe ich ein Uhrenquarz, und Fusebits habe ich keine umgestellt.

Das ist mein Programm:

$regfile = "M8def.dat"
$crystal = 1000000
$hwstack = 128
$swstack = 128
$framesize = 128
$baud = 19200


'Config Dcf77 = Pind.2 , Debug = 1 , Inverted = 0 , Check = 2 , Update = 0 , Updatetime = 30 , Switchpower = 0 , Secondticks = 50 , Timer1sec = 1 , Powerlevel = 1 , Timer = 1
Config Dcf77 = Pinb.1 , Timer = 1 , Timer1sec = 1 , Debug = 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 ': DCF_Debug_Timer = 0

' Testroutine für die DCF77 Clock
Print "Test DCF77 Version 1.00"
Do
For I = 1 To 78
Waitms 10
If Sec_old <> _sec Then
Exit For
End If
If Dcfsec_old <> Dcf_sec Then
Exit For
End If
Next
Waitms 220
Sec_old = _sec
Dcfsec_old = Dcf_sec
Print Time$ ; " " ; Date$ ; " " ; Time(dcf_sec) ; " " ; Date(dcf_day) ; " " ; Bin(dcf_status) ; " " ; Bin(dcf_bits) ; " " ; Bdcf_impuls ; " " ; Bdcf_pause
Loop

Vielen Dank.
 
Hallo Dimmu!

Willkommen im AVR-Praxis Forum! :ciao:


Da der Programmcode vermutlich der Beispielcode aus der BASCOM-Hilfe ist, habe ich ihn mir nun nicht so genau angesehen. :wink:
Deiner Zeichenausgabe nach, wüde ich auf eine falsche Baudrate am Terminalprogramm tippen.

Sollte die Baudrate jedoch stimmen, wird es wohl an der "Kombination" von 1MHz Taktfrequenz und 19200 Baud liegen.
Bei dieser Baudrate hast du minimum einen Fehler von 8,5%!
Das ist definitv zu viel!

Die Fehlerquote sollte eigentlich kaum über 1% gehen, um eine vernünftige Ausgabe zu bekommen.
Entweder änderst du den Systemtakt deines Mega8, oder aber die Baudrate.
Bei 1MHz Systemtakt kannst du nur 2400 oder 4800 baud wählen.....
Jeder höhere Wert erzeugt einen zu großen Fehler!

Für deine Testausgabe der DCF-Werte reichen aber die 4800baud auch locker aus. :wink:


Ändere also nur mal die Baudrate im Programmcode und am Terminalprogramm und du bekommst bestimmt eine vernünftige Ausgabe.

Grüße,
Cassio


PS:
Heißer Tipp....
Du kannst dir HIER den AVR-USART Calculator von Dirk runterladen.
Damit kannst du alle Systemtakte und Baudraten auf Fehler prüfen. :cool:
 
Hi,

ja sieht eindeutig nach der baudrate aus...

Im Atmega8 Datenblatt Seite 154 - 156 siehst du was die baudrate im zusammenhang mit dem gewünschten Quarz für einen Fehler ergibt.

@Cassio eine kleien Anmerkung :) es ist nicht immer so dass eine größere baudrate auch einen größeren Fehler macht .. die baudrate 14,4 und dessen vielfache (28,8 , 57,6 ...) sind da meist ne ausnahme :)

im U2X = 0 Mode (also Normal) darf man einen Fehler von +-2% haben
im U2X = 1 Mode (also Normal) darf man einen Fehler von +-1.5% haben
(bei 8 Datenbits)

was natürlich auch noch ein Problem sein kann wenn es der interne 1MHz Oszillator ist, dieser hat auch sehr hohe Streuungen mit dem OSCAL Byte bekommt man es zwar etwas besser in griff aber nicht über eine Serie.

Gruß,
Manuel
 
Hallo zusammen,

so einen Bitsalat bekommt man wirklich nur mit falscher Baudrate angezeigt.

Also erst mal den ATmega8 entweder mit den Fuses auf 8MHz internen Takt umstellen oder gleich Nägel mit Köpfen und nen externes Quarz mit 2 Kondensatoren (jeweils 22pico-Farad) anschließen. Bei mir läuft ein externes 16MHz-Quarz bei Baudraten bis 115kBaud genauso gut als wenn man nen Baudratenquarz mit ner krummen Frequenz nehmen würde. Aber 8MHz oder drüber sollte der Takt schon liegen damit man vernünftig was machen kann.

Gruß
Dino
 
Hallo,
Und danke erstmal für die zahlreichen antworten. Also ihr hattet recht. Mit umstellen der baudrate hat auch die Anzeige funktionirt.

Doch das Problem ist immer noch nicht ganz gelöst.

Im terminell bekomme ich jetzt richtige Zeichen, allerdings zählen nur die ersten hoch, also die Time variable. Wenn ich alles richtig verstanden habe wird die ja durch die softclock erstellt. Bei der dcftime tut sich allerdings gar nichts. Da steht überall nur ne 0 drin.

Ich habe zwar schonmal was darüber in einem anderen Beitrag gelesen, kann ihn aber nicht mehr finden.

Eigentlich wollte ich noch ein Beispiel von der Ausgabe anhängen aber ich bin unterwegs und kann nur vom Handy aus ins Internet. Aber ich denke ihr versteht mein Problem trotzdem.

Also cristal ist jetzt 1 MHz
Und Baud 4800

Was könnte jetzt noch falsch sein.

Viel. Dank für eure Hilfe.
 
hallo nochmal,

ich konnte das problem jetzt lösen. es ist vermutlich der 4093 defekt. mit einem neun geht die anzeige jetzt.

allerdings stimmt die zeit die angezeit wird nie.

ich stelle mal ein beispiel rein

00:38:18 00.00.00 39:45:92 45.25.@5 00000001 11111110 40 11
00:38:19 00.00.00 39:45:93 45.25.@5 00000001 11111111 20 31
00:38:20 00.00.00 39:45:94 45.25.@5 00000001 11111111 41 9
00:38:21 00.00.00 39:45:95 45.25.@5 00000001 11111111 28 23
00:38:22 00.00.00 39:45:96 45.25.@5 00000001 11111111 45 6
00:38:23 00.00.00 39:45:97 45.25.@5 00000001 11111111 14 37
00:38:24 00.00.00 39:45:98 45.25.@5 00000001 11111111 24 27
00:38:25 00.00.00 39:45:99 45.25.@5 00000001 11111111 33 17

irgendwo ist gestanden dass man so 2 bis 3 min warten muss bis es korrekt angezeigt wird. das ist das ergebnis nach über einer halben stunde.

was bedeuten denn eigentlich die ganzen zahlen jetzt?

also das erste ist klar, die zeit die von der softclock hochgezählt wird. das zweite das datum was von der softclock gezählt wird. das dirtte ist die dcf zeit und das vierte das dcf datum. was die anderen bedeuten habe ich noch nicht ganz verstanden.

ich lese mich jetzt nochmal in das thema ein weil ich glaube das es schon wo erklärt wurde. falls mir trotzdem jemand auf die schnelle helfen will bin ich dankbar.
 
Hallo!

Nun ja, deine PRINT-Ausgabe zeigt dir genau das an, was du gern wissen möchtest.....

Time$
Date$
Time(dcf_sec)
Date(dcf_day)
Bin(dcf_status)
Bin(dcf_bits)
Bdcf_impuls
Bdcf_pause


00:38:18
00.00.00
39:45:92
45.25.@5
00000001
11111110
40
11


Damit hast du alle Infos die du benötigst, um deine DCF-Uhr zu überprüfen! :wink:
Vielleicht solltest du dir die BASCOM-Hilfe zu dem Thema noch mal genau ansehen----> HIER der Link dazu !

Was aber dem "geschulten Auge" bei deiner Printausgabe gleich auffällt.....
Die DCF-Pausen und DCF-Impulse sind nicht in Ordnung!
Die Impulse sind zu lang und die Pausen zu kurz.
Dies deutet auf einen fehlerhaften Empfang hin!

OK, du empfängst zwar sichtbar das Signal, aber es ist nicht "sauber".
Das kannst du auch daran sehen, dass die ermittelte DCF-TIME und das DCF-DATE völlig wilde Werte ausgeben. :wink:
Zumindest halte ich "39:45:92" nicht für eine gültige Uhrzeit. :D

An den Stautsbits kannst du auch sehen, ob alles richtig funktioniert.......
Was diese einzelnen Bits bedeuten, steht ebenfalls in der BASCOM-Hilfe:
BitExplanation
0
The last reading of the DCF pin.
1 This bit is reserved.
2This Bit is set, if after a complete time-stamp at second 58 the time-stamp is checked and it is OK. If after a minute mark (2 sec pause) this bit is set, the time from the DCF-Part is copied to the Clock-Part and this bit reset too. Every second mark also resets this bit. So time is only set, if after second 58 a minute mark follows. Normally this bit is only at value 1 from Second 58 to second 60/00.
3This Bit indicates, that the DCF-Part should be stopped, if time is set. (at the option of updating once per hour or day).
4 This Bit indicated that the DCF-Part is stopped.
5This bit indicates, that the CLOCK is configured the way, that during DCF-Clock is stopped, there is only one ISR-Call in one second.
6 This Bit determines the level of the DCF input-pin at the pulse (100/200 mSec part).
7 This bit indicates, that the DCF-Part has set the time of the Clock-part.



Im Zweifel gibt es hier um Forum noch so einige Themen, die sich mit BASCOM und DCF77 beschäftigen.
Dort gibt es z.B. auch Hinweise zu den Statusbits......


Grüße,
Cassio
 
hallo,

einfach schön wenn man es mit profis zu tun hat.

das problem war schlussendlich der empfang.
hätte nicht gedacht das der empfänger so empfindlich ist dass er ein halben meter weiter rechts geht und weiter links nicht.

auf jeden fall funktioniert es jetzt.

vielen dank für die unterstützung
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)