PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] RN Controll & DCF-RS232 Wandler DCF-RS1



Dominik009
11.06.2014, 19:51
Hallo Zusammen,
ich habe den DCF-RS232 Wandler DCF-RS1 von Robotikhardware an meine RnControll angeschloßen.
Am DCF-RS1 hängt ein DFC Empfänger von ELV.

Der Empfänger gibt die Impulse weiter an den DCF-RS1. Die Impulse stimmen soweit, die hab ich mim Oszi geprüft.
Nach ein paar Minuten geht die LED am DCF-RS1 an und er hat das Signal erkannt und verarbeitet.

Ich habe jetzt meine RNControll über einen Leiter an Pin7 des DCF-RS1 angeschloßen und das Beispielprogramm von der Robotikhardware CD über Bascom AVR auf dem Mega32 der RnControll geflasht.

Am anfang kommt immer das die Uhrzeit nicht verifiziert werden konnte, was soweit ok ist.
Sobald die LED leuchtet und der DCF-RS1 bereit ist fragt der Mega32 per RS232 an und bekommt werte.
Diese stimmen hinten und vorne nicht! Die Werte ändern sich auch nicht. Woran kann sowas liegen?

Ich hab das Beispielprogramm von der beiligenden CD genommen, welches auch in Handbuch steht.

Meine Bascom Version ist schon älter, kann es daran liegen?

Hier ein Link zu dem IC: http://www.shop.robotikhardware.de/shop/catalog/product_info.php?products_id=277

Gruß Dominik

HeXPloreR
11.06.2014, 20:47
Hallo Dominik,

ich schätze es liegt an DCF-RS1 "GND nicht verbunden" mit RN-Control GND oder an "Baudrate falsch eingestellt an RN-Control". Klassische Fehler.

Viele Grüße
Jörg

Dominik009
11.06.2014, 21:19
Abend Jörg,

vielen Dank für deine Antwort :D

Das mit der Baud werde ich gleich mal schauen.

GND ist verbunden. Ich greife die 5V für das IC und den empfänger von der RnControll ab, also daran kann es nicht liegen.

Am anfang vom Code steht:


$baud = 9600 'Baudrate (Übertragungsgeschwindigkeit)
Baud = 9600



Ist das richtig? Müsste nicht normal das 2te baud wegfallen?

Ansonsten hab ich folgende Zeile:


Open "comd.5:2400,8,n,1" For input As #1

Inputbin #1,bstart,uhr_tag,uhr_monat,uhr_jahr,uhr_std,
uhr_min,uhr_sek,uhr_wochentag,uhr_sommerzeit,uhr_z eitumschaltung,uhr_sync,bende
Close #1




Die besagt doch das die Baud 2400 ist.

Gruß Dominik

Dominik009
12.06.2014, 20:09
Also ich hab die Zeile "Baud 9600" aus dem code genommen, da sie nicht notwendig ist.
Die Baud von 2400 für das IC sollte ja auch stimmen (steht auch so in der Anleitung).

Ich bin am verzweifeln :(
Würde Euch vieleicht Weiterhelfen was genau ich im terminal empfange?

Gruß Dominik

Dirk
12.06.2014, 23:01
Hi Dominik,

hast du auch den Pullup-Widerstand R2 vorgesehen (Datenblatt des DCF-RS1 Schaltplan S.4) und einen 100nF an VCC?
Es schadet auch nicht, einen kleineren Elko (10µF) an VCC parallel zum 100nF einzubauen.

Was du dann noch probieren kannst:
- Abstand von Störquellen (RN-Control, PC, Handy, Elektrokabel ...) vergrößern, Antenne nach Frankfurt ausrichten, Antenne an ein Fenster in Richtung Frankfurt stellen, Pullup-Widerstand 10kOhm an Pin 3 des DCF-RS1 einbauen ...

Dominik009
17.06.2014, 18:57
Hi Dirk,

vielen lieben Dank für die Tipps. Ich habe mich die letzen Tage nochmal mit dem Probelm befasst, aber keine Lösung gefunden. Ich bin da echt am verzweifeln.

Ich habe den 27kOhm Widerstand wie er im Schaltplan ist eingebaut. Zusätzlich habe ich jetzt einen 100nF Kondensator und einen 20yF Elko direkt am IC zwischen GND und VCC.

Das IC ist auf einer Steckplatine und die Rn-Controll ist davon 30cm entfernt. Einen Pullup von 10k habe ich auch mal in die Leitung mit reingemacht, keine Verbesserung.

Die LED am IC leuchtet und ich kann mit der RN Controll auch was abfragen, bekomme aber immer nur Folgendes raus:

Heute haben wir denn 227.3.2 5:223:240 Wochentag 246

Ich komme da einfach nicht mehr weiter. Das Signal von DCF Empfänger habe ich direkt am IC mit dem Oszzi gemessen, das ist sauber und gut.

Gruß Dominik

HeXPloreR
18.06.2014, 16:22
Zeig oder verlinke mal bitte das ganze Programm das Du aktuell benutzt. Das Programm ist für RN-AVR Universal - hast Du das ggf berücksichtigt?

Erscheint diese Daten im Terminal oder auf einem Display am Board.
Kommt immer die selbe Telegramm oder ändert es sich z.B. im Bereich der Sekunde? Ist eine Prüfsumme mit dabei? Ändert sich der Wochentag aufwärts?

Welchen Mode hast Du gewählt? Stell den nochmal zum testen um, jenachdem wie er jetzt schon ist.

GND des DSF Empfängers ist auch mit der Schaltung verbunden, nicht nur GND des IC's?

Ich vermute eine Routine greift nicht richtig auf die Daten zu, oder die Daten liegen falsch vor und werden somit falsch ausgegeben.

Berichtige oder prüfe bitte die Variable "uhr_z eitumstellung" auf richtige Schreibweise.

Gibt es sonst Fehlermeldungen von Bascom? Dazu sollte natürlich die Fehlerausgabe in Bascomeinstellungen eingestellt sein.

Ansosnten muss das "Sternzeit" sein ;)

Dominik009
19.06.2014, 14:03
Hallo,

ersmal hier das Programm:



'################################################# #############
'DCF_Decoder3.bas
'
'Das Programm liest die Uhrzeit aus dem digetalen DCF-Decoder aus
'und gibt die Zeit über RS232 aus
'Den digitalen DCF Decoder gibt es nur bei Robotikhardware.de
'Es muss lediglich PIN PD7 mit dem DOUT Pin des Chips DCF-RS1 verbunden werden
'Natürlich auch GND und VCC
'
'Wenn ein USB Modul an RN-AVR UNIVERSAL angesteckt oder eingelötet wurde
'dann wird das Ergebnis über USB zu einem virtuellen COM Port übertragen
'und kann auch mit allen Programmen oder Terminalprogramm empfangen werden
'
' (c) Frank roboternetz.de
'Bezug: www.robotikhardware.de
'Weitere Beispiele auf DVD oder im www.Roboternetz.de und rn-wissen.de
'################################################# #####################
Declare Sub DCF_UhrzeitLesen()
'$programmer = 12 'MCS USB (Zeile weglassen wenn anderer Programmer)

$regfile = "m32def.dat"

$framesize = 32
$swstack = 32
$hwstack = 64
$crystal = 8000000 'Quarzfrequenz
$baud = 9600 'Baudrate (Übertragungsgeschwindigkeit)

'Baud = 9600

Config Pind.6 = Output 'LED
Led1 Alias Portd.6
'Diese Variablen enthalten nach dem Abruf die Uhrzeit und Datum Informationen
Dim uhr_sek As byte
Dim uhr_min As byte
Dim uhr_std As byte
Dim uhr_tag As byte
Dim uhr_monat As byte
Dim uhr_jahr As byte
Dim uhr_wochentag As byte
Dim uhr_sommerzeit As byte
Dim uhr_zeitumschaltung As byte
Dim uhr_sync As byte
dim bstart as byte 'Enthaelt Byte Zeilenanfang immer 126
dim bende as byte 'Enthaelt Byte Zeilenanfang immer 127
dim zeitgueltig as byte
zeitgueltig=0
wait 1
Do
DCF_UhrzeitLesen
if zeitgueltig=1 then
Print "Heute haben wir den: "; uhr_tag;".";uhr_monat;".";uhr_jahr;" ";uhr_std;":";
uhr_min;":";uhr_sek;" Wochentag:";uhr_wochentag
if uhr_sommerzeit=1 then print "Es gilt Sommerzeit!"
print "Die Uhr wurde von "; uhr_sync; " Minuten per Funk verglichen"
print
endif
Wait 3
toggle led1
Loop
'Hilfsfunktion
'Diese Funktion ruft der Zeit im binären Modus ab
'und uerbergibt diese den globalen Uhr Variablen
Sub DCF_UhrzeitLesen()
Config Pind.5 = Input

if Pind.5 =1 then 'DCF Uhrzeit bereits vorhanden?

'Kurz auf GND setzen um DCF Decoderzeit ausgeben zu lassen
Config PORTD.5 = output

PORTD.5=0

waitus 1
Config Pind.5 = Input

Open "comd.5:2400,8,n,1" For input As #1

Inputbin #1,bstart,uhr_tag,uhr_monat,uhr_jahr,uhr_std,
uhr_min,uhr_sek,uhr_wochentag,uhr_sommerzeit,uhr_z eitumschaltung,uhr_sync,bende
Close #1
Config Pind.5 = Input

uhr_tag=uhr_tag-65
uhr_monat =uhr_monat-65
uhr_jahr =uhr_jahr-65
uhr_std=uhr_std-65
uhr_min =uhr_min-65
uhr_sek =uhr_sek-65
uhr_wochentag = uhr_wochentag-65
uhr_sommerzeit=uhr_sommerzeit-65
uhr_zeitumschaltung=uhr_zeitumschaltung-65
uhr_sync=uhr_sync-65
zeitgueltig=1
else
Print "Zeit noch nicht verifiziert!"
zeitgueltig=0
endif
end sub


-Die Daten sende ich per RN-Controll auf das Terminal in Bascom AVR auf meinem PC. Dort ändert sich auch im Bereich der Sekunden garnichts. Es kommen immer die selben Werte.

- Einen Mode am IC habe ich nicht gewählt - Also Pin 1 nicht beschaltet = als Text ausgeben, wobei ich die Anleitung so verstanden habe das der Mode Pin nur für Pin 5 ist, der 1mal die Minute die Daten per RS232 aussendet.
Ich habe jedoch Pin 7 "DOUT" Mit der RN Controll verbunden um die Daten geziehlt im Birärcode abzugragen.

- GND ist mit dem Empfäger und dem IC verbunden. Ich nutze für beides die 5V DC die an der RNControll zur verfügung stehen.

- "uhr_z eitumstellung" ist richtig geschrieben

- In Bascom kommen werden keine Fehler angezeigt. Sobald ich einen falschen Befehl zum testen in den Code reinschreibe, wird ein Fehler angzeigt = Fehlerausgabe in Bascomeinstellungen aktiviert?!

Ich hoffe wirklich das ihr mir weiterhelfen könnt. Ich kann einfach nicht verstehen, woran der Fehler noch liegen könnte

Viele Grüße
Dominik

HeXPloreR
19.06.2014, 20:29
Hallo,

naja bleibt ja nicht mehr viel übrig was man aus der Ferne abfragen kann: Die RN-Controll läuft sicher mit 8Mhz?

Was mir beim Code und Beschreibung lesen aufgefallen ist, das in der Info von Port D7 gesprochen wird, im Code selbst aber nur Port D5 als input umgeschaltet wird - von D7 keine Spur mehr?

Also prüfe nochmal Deinen Aufbau diesbezüglich.
Schreibe in die Sub direkt unter den Aufruf: Sub DCF_UhrzeitLesen() mal ein Print "Sub DCF" ...um zu sehen ob die Sub überhaupt angesprungen wird.

Ich fühle das irgendwo da der Fehler sein muss ;)

Viele Grüße
Jörg

Dominik009
20.06.2014, 21:33
Hi,

ja die RnControll läuft mit nem 8Mhz Quarz. Ich habe es auch mal mit nem 16Mhz Quarz getestet, das brachte keine besserung.
Pin D7 ist an der RNControll mit dem PizzoSummer belegt, daher nutze ich D5.

Das SUB wird auch aufgerufen, ich habe mal nen Print befehl reingemacht und der erscheint auch im terminal.

Wenn das IC noch keine Zeit hat, kommt im Terminal die Meldung das die Zeit noch nicht verifiziert ist, allso soweit ok.
Das Problem ist dass sobald die zeit "erkannt" wurde nur müll rauskommt.

Ich glaube langsam das IC von Robotikhardware, bzw. der Attiny (ist gar kein IC sondern ein Attiny) ist defekt!
Der TX Pin der 1x pro Minute die Zeit aussenden sollte ist permanent auf +5V (habs an nem Osszi beobachtet).
Wenn ich denn Pin an meinen Max232 anschließe und das Terminal am PC passend einstelle kommt auch nichts an :(

Langsam verliere ich die Lust. Das ist jetzt mein 3ter DCF Empfänger, 2 von Conrad wurden defekt geliefert und jetzt ist das blöde IC von Robotikhardware hin. Den Conde gibts nicht zufällig irgendwo hier im Forum?

Gruß Dominik

HeXPloreR
20.06.2014, 22:43
Hast Du den Motortreiber auf der RN-Controll entfernt? Der benutzt ja D5 mit...vielleicht holst Du Dir dadurch eine Störung rein.

Ich würde nochmal versuchen den kompletten Aufbau wie in der Anleitung beschrieben aufzubauen und dann Pin 1 Mode in binär ändern.
Auch würde ich mit dem TX Ausgang arbeiten anstatt dem DOUT. Wenn man den Hinweisen in der Anleitung vertraut, dann muss man da viel zu viele Dinge beachten um überhaupt was sinnvolles heraus zubekommen.

Hast du einen PON-Pin am DCF-Empfänger?

Ansosnten weiß ich so jetzt auch nichts mehr.


Viel Erfolg
Jörg

wolwes
29.06.2014, 14:36
Hallo,
nachdem ich die gleichen Probleme mit dem Chip hatte und ich ihn fast schon aus Wut in die Tonnen gehauen hätte, fand ich dann doch noch die? (eine) Lösung. Der Bascom Code nutzt die Binär!-Ausgabe des Chips. Unscheinbar im "Handbuch" versteckt, steht aber unter PIN1-Mode: unbeschaltet wird die Ausgabe als Text ausgegeben!
Hammer, das war's. Nachdem ich den PIN 1 mit GND verbunden habe, kam fast zeitgleich die richtige Ausgabe auf meinem LCD.
Anbei mein Bascom-Code


Declare Sub Dcf_uhrzeitlesen()

'$programmer = 12 'MCS USB (Zeile weglassen wenn anderer Programmer)
'$prog &HFF , &HFF , &HD9 , &HFE 'Fusebits richtig programmieren (Quarz ein,Jtag aus)

$regfile = "m8adef.dat"
'$framesize = 32
'$swstack = 32
'$hwstack = 64

$framesize = 128
$swstack = 128
$hwstack = 128

$crystal = 3686400 'Quarzfrequenz

$baud = 9600 'Baudrate (Übertragungsgeschwindigkeit)
Baud = 9600


Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2

Config Lcd = 20x4
Cursor Off Noblink
Cls

Config Pinb.3 = Output 'LED
Led1 Alias Portb.3



'Diese Variablen enthalten nach dem Abruf die Uhrzeit und Datum Informationen
Dim Uhr_sek As Byte
Dim Uhr_min As Byte
Dim Uhr_std As Byte
Dim Uhr_tag As Byte
Dim Uhr_monat As Byte
Dim Uhr_jahr As Byte
Dim Uhr_wochentag As Byte
Dim Uhr_sommerzeit As Byte
Dim Uhr_zeitumschaltung As Byte
Dim Uhr_sync As Byte

Dim Bstart As Byte 'Enthaelt Byte Zeilenanfang immer 126
Dim Bende As Byte 'Enthaelt Byte Zeilenanfang immer 127

Dim Zeitgueltig As Byte

Wait 1
Zeitgueltig = 0
Do
Dcf_uhrzeitlesen
If Zeitgueltig = 1 Then
Locate 1 , 1
Lcd "abgeglichen "
Print "Heute haben wir den: " ; Uhr_tag ; "." ; Uhr_monat ; "." ; Uhr_jahr ; " " ; Uhr_std ; ":" ; Uhr_min ; ":" ; Uhr_sek ; " Wochentag:" ; Uhr_wochentag
Locate 2 , 1
Lcd Uhr_tag ; "." ; Uhr_monat ; "." ; Uhr_jahr
Locate 3 , 1
Lcd Uhr_std ; ":" ; Uhr_min ; ":" ; Uhr_sek ;
Locate 4 , 1
Lcd "Wochentag: " ; Uhr_wochentag
If Uhr_sommerzeit = 1 Then Print "Es gilt Sommerzeit!"
Print "Die Uhr wurde von " ; Uhr_sync ; " Minuten per Funk abgeglichen"
Print
Else
Locate 1 , 1
Lcd "nicht abgeglichen"
End If
Wait 3
Toggle Led1
Loop




'Hilfsfunktionen



'Diese Funktion ruft der Zeit im binären Modus ab
'und uerbergibt diese den globalen Uhr Variablen
Sub Dcf_uhrzeitlesen()
Config Pinb.2 = Input
If Pinb.2 = 1 Then 'DCF Uhrzeit bereits vorhanden?
'Kurz auf GND setzen um DCF Decoderzeit ausgeben zu lassen
Config Portb.2 = Output
Portb.2 = 0
Waitus 1
Config Pinb.2 = Input

Open "comB.2:2400,8,n,1" For Input As #1
Inputbin #1 , Bstart , Uhr_tag , Uhr_monat , Uhr_jahr , Uhr_std , Uhr_min , Uhr_sek , Uhr_wochentag , Uhr_sommerzeit , Uhr_zeitumschaltung , Uhr_sync , Bende
Close #1
Config Pinb.2 = Input
Uhr_tag = Uhr_tag - 65
Uhr_monat = Uhr_monat - 65
Uhr_jahr = Uhr_jahr - 65
Uhr_std = Uhr_std - 65
Uhr_min = Uhr_min - 65
Uhr_sek = Uhr_sek - 65
Uhr_wochentag = Uhr_wochentag - 65
Uhr_sommerzeit = Uhr_sommerzeit - 65
Uhr_zeitumschaltung = Uhr_zeitumschaltung - 65
Uhr_sync = Uhr_sync - 65
Zeitgueltig = 1
Else
Print "Zeit noch nicht verifiziert!"
End If

End Sub


tschau
Wolfgang

Frank
08.07.2014, 11:26
Hinweis zum DCF-Chip
=================
Eigentlich steht es schon alles im Datenblatt, aber aufgrund einiger Nachfragen sehe ich immer wieder
das es dort manchmal überlesen wird. Daher noch mal der Hinweis damit der Einstieg schneller gelingt:

Nutzt man den DOUT Ausgang des DCF-Chips für die Uhrzeitabfrage, so sollte man daran denken das diese Abfrage
bei ständiger Wiederholung die Synchronisation der Funkuhr blockiert. Es sollte mindestens einmal am Tag
ca. 3 Minuten zeit zwischen zwei Abrufen über Dout verbleiben, damit die Uhrzeit sich wieder haargenau
synchronisiert. Gewöhnlich ist das ja bei allen Anwendungen leicht zu realisieren.
Über den TX Ausgang kann natürlich jederzeit im Minutenryhtmus eingelesen werden, dies behindert die
Syncronisation nicht!
Achten Sie darauf, das der TX Pin wahlweise im Ascii oder Binärformat die Daten ausgibt,je nachdem ob
der Mode-Pin auf GND liegt oder High.

Unregistriert
15.09.2014, 09:43
Hallo,

ich hab eine Frage zum Quellcode, welcher von Robotikhardware mitgeliefert wird. Leider ist der Code in Bascom. Ich möchte das Programm aber in c++ realisieren.
Die Frage ist wie lese ich den Bitstrom ein?

Also eigentlich fehlt mir der Ansatz, wie ich diesen Bascomcode in c++ ausdrücken kann:

Open "comB.2:2400,8,n,1" For Input As #1
Inputbin #1 , Bstart , Uhr_tag , Uhr_monat , Uhr_jahr , Uhr_std , Uhr_min , Uhr_sek , Uhr_wochentag , Uhr_sommerzeit , Uhr_zeitumschaltung , Uhr_sync , Bende
Close #1

danke schon mal im vorraus für eure Hilfe

Udokrali
22.09.2014, 10:03
Hallo Dominik

ich hatte auch Probleme mit der Seriellen Übertragung von dem RN Controll zum PC über die RS232 Stifte.Versuche mal Direkt RX/TX am Mega abzugreifen.


Udo

Bastler89
01.03.2015, 12:10
Hallo habe auch Probleme mit dem Decoderchip!
es gibt Tage da läuft das Programm stabil aber zu ca 80% wird nur schrott aufm Display bzw vom Decoderchip ausgegeben. Habe ein Oszi am TX Ausgang hingehängt und alle 140 Bits ausgelesen und ausgewertet ( Es kommen schon falsche Werte vom Decoderchip). Kann mir jemand sagen wo hier der Fehler ist? Antenne (von Conrad am besten für solche Zwecke bewertet) und Decoderchip werden mit 3.3V betrieben und hab angeschlossen wie auf Schaltplan. In den Kommentaren habe ich hier jetzt mal gelesen von Pull-Up Widerstand bei Pin 3? Brauch ich dort einen weil im Schaltplan ist keiner bzw der Pull-Up im Schaltplan (R2) brauch man diesen nur wenn man den DOUT Pin benutzt oder auch bei TX Ausgang?