Forum: Mikrocontroller und Digitale Elektronik DCF77 Conrad Singnal Fehler?!


von Alex W. (de1m)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
so wie jeder Anfänger bastle ich natürlich auch eine DCF Uhr. ))

Ich habe das jetzt softwareseitig fertig gemacht. In einem Simulator 
(Proteus) getestet, dort funktioniert es einwandfrei. Ich habe jetzt das 
ganz in Hardware aufgebaut (DCF_sch.PNG) und das funktioniert natürlich 
nicht.

LED, was DCF Signal zeigen sollte blinkt irgendwie nicht regelmäßig und 
ich verstehe leider nicht, wo ich was falsch gemacht habe. DCF Modul ist 
auch ok, ich habe hier ein Arduino, das Ding kriegt sein Signal sauber.

Kann mir bitte jemand sagen, wo mein Fehler ist??!

: Bearbeitet durch User
von foo (Gast)


Lesenswert?

Alex Wka schrieb:
> LED, was DCF Signal zeigen sollte blinkt irgendwie nicht regelmäßig und
> ich verstehe leider nicht, wo ich was falsch gemacht habe.


Es ist schon erstaunlich, dass die überhaupt etwas tun, wo sie doch laut 
Schaltplan gar nicht am µC angeschlossen sind.

von foo (Gast)


Lesenswert?

P.S.:
Der Prozessor hängt ja überhaupt in der Luft, die Displays hast du auch 
nicht an  die Versorgung angeschlossen, und vermutlich sind auch die 
HC595 auf diese stromsparende Weise verdrahtet.

Was erwartest du bei so vielen Fehlern?

von Simon S. (-schumi-)


Lesenswert?

Wie sieht deine Spannungsversorgung aus? Stelle sicher, dass das GND in 
deiner Schaltung auch tatsächlich mit Erde verbunden ist (Beim Arduino 
passiert das durch USB-Leitung->PC-Netzteil->Schutzleiter)

von Karl H. (kbuchegg)


Lesenswert?

Alex Wka schrieb:

Ich geh mal davon aus, dass du die Versorgungsspannungen korrekt 
angeschlossen hast.

> Kann mir bitte jemand sagen, wo mein Fehler ist??!
Simpel.
Du hast den Kardinalfehler aller Anfänger gemacht: Du hast zuviel Code 
auf einmal geschrieben, in der Annahme du würdest das beherrschen.

Damit musst du anfangen:
> LED, was DCF Signal zeigen sollte blinkt irgendwie nicht regelmäßig


Das hier ...
> Ich habe das jetzt softwareseitig fertig gemacht.
... tja, da hast du dir viel Mühe gemacht für nichts. Wenn deine LED, 
die den Signaleingang anzeigen soll, schon nicht das erwartete Ergebnis 
bringt, dann brauchst du auch hinten nach noch keine Auswertung machen. 
Erst mal musst du das regelmässige Pulsen ordentlich ins System kriegen. 
Solange das nicht der Fall ist, brauchst du dir um den Rest dahinter 
erst mal noch überhaupt keine Gedanken machen.

Das hier ist dein erstes Programm
1
#include <avr/io.h>
2
3
int main()
4
{
5
  DDRA |= ( 1 << PA0 );
6
7
  while( 1 ) {
8
    if( PIND & ( 1 << PD2 ) )
9
      PORTA |= ( 1 << PA0 );
10
    else
11
      PORTA &= ~( 1 << PA0 );
12
  }
13
}

und solange die LED nicht im Sekundentakt aufblinkt, mit erkennbar 2 
unterschiedliche langen Brenndauern, solange brauchst du dir um den Rest 
noch überhaupt keine Gedanken machen. Software wird in Schritten 
entwickelt! Beginnend mit den ganz einfachen ersten Dingen. Man will so 
schnell es nur irgendwoe geht in einen Zustand kommen, in dem man erste 
Dinge testen kann. In der Kette Eingabe-Verarbeitung-Ausgabe fängt man 
entweder mit der Eingabe oder mit der Ausgabe an. Ausgabe deshalb, damit 
man seine Prüfwerte wo ausgeben kann. Die einfachste Ausgabe ist bei dir 
die, die auf einer LED was ausgibt. Damit wäre die einfachste Form der 
Ausgabe abgehakt. Als nächstes wird die Eingabe überprüft, ob sich die 
auch tatsächlich so verhält, wie man das erwartet. Und erst dann, wenn 
auch das korrekt ist, dann fängt man mit dem Verarbeitungs-Teil an, 
wobei man wieder nicht einen monolithischen Klotz auf einmal hinkleckst, 
sondern sich schrittweise vortastet!
Tut man das nämlich nicht, dann steht man so wie du, mit einem Haufen 
Code da und hat keine Ahnung, wo man mit der Fehlersuche anfangen soll. 
Arbeitet man aber in kleinen Schritten und überprüft und testet jeden 
Schritt, dann kann man Probleme recht gut eingrenzen. Denn wenn im 
vorletzten Schritt noch alles in Ordnung war, im letzten aber nicht, 
dann kann das Problem nur irgendwie im Zusammenhang mit der letzten 
Codeänderung stehen. Sind diese Codeänderung aber nur ein paar Zeilen, 
dann ist das überschaubar, welche Programmteile man sich genauer ansehen 
muss.

LED direkt ohne Vorwiderstand angeschlossen. Ts, ts. Keine 
Blockkondensatoren. Kein Widerstand am Reset.
Es ist, als ob hier im Forum noch nie irgendwer nach einer 
Grundschaltung gefragt hätte. Es sind immer wieder die 100% gleichen 
Sachen.

: Bearbeitet durch User
von Wolfgang A. (Gast)


Lesenswert?

Alex Wka schrieb:
> Kann mir bitte jemand sagen, wo mein Fehler ist??!

Bei EAGLE solltest du dir im Schaltplan angewöhnen, i.a. nur 
rechtwinklig verlegte Leitungen zu verwenden und immer im 100mil-Raste 
(0,1 inch) zu zeichnen. Das gilt auch beim Anlegen von Symbolen in der 
Bibliothek für die Anschlüsse (Pins). Sonst nützen auch die 
(überflüssigen) grünen Punkte nichts (U1). Und lass mal den ERC über 
deine Schaltung laufen.

von stefanus (Gast)


Lesenswert?

Versorge den DCF-77 Empfänger nicht direkt mit der gleichen Spannung, 
die auch der Mikrocontroller bekommt. Der DCF-77 ist eine analoge 
Schaltung die empfindlich auf winzige Störungen in der 
Versorgungsspannung reagiert.

Das sollte wenigstens ein Tiefpass zwischen liegen, zum Beispiel aus 
einer 10mH Spule und einem Kondensator-Pärchen mit 10µF + 100nF.

Oder du spendierst dem Funkempfänger einen eigenen Spannunsgregler.

Weiterhin sollte der Funkempfänger (oder die Antenne) möglichst weit von 
allen anderen elektrischen Geräten entfernt sein. Ein 3 Meter langes 
Kabel kann dabei sehr hilfreich sein.

von Alex W. (de1m)


Lesenswert?

foo schrieb:
> Der Prozessor hängt ja überhaupt in der Luft,

Das ist doch klar, dass es an die Pins angeschlossen ist. Irgendwie 
wollte das Program das nicht machen.

Simon S. schrieb:
> Wie sieht deine Spannungsversorgung aus?

Ich habe ein Netzteil, die man zwischen 3-12v (2A) einstellen kann.

Karl Heinz schrieb:
> Tut man das nämlich nicht, dann steht man so wie du, mit einem Haufen
> Code da und hat keine Ahnung

wie gesagt, ich habe das in einem Simulator getestet, von der Logik her 
sollte es passen, ich kann mir vorstellen, dass durch die Fehler, die 
ich jetzt im physikalischen Systeme krige, irgendwelche Effekte 
auftauchen, die ich nicht im Simulator hatte.
Aber ich werde auf jeden Fall heute abends das ganze, wie du gesagt hast 
zu machen - also das Ganze erstmal vereinfachen und nach einander 
testen.

Karl Heinz schrieb:
> Keine
> Blockkondensatoren. Kein Widerstand am Reset.

Blockkondensator (100nF) zwischen +3v3 und GND habe ich erstmal 
eingebaut, aber Fehler konnte ich dadurch nicht beseitigen.
Widerstand am Reset mache ich.

Leute danke für die Hilfe, ich versuche heute abends erstmal diese 
Vorschläge zu realisieren.

von Karl H. (kbuchegg)


Lesenswert?

Alex Wka schrieb:
> foo schrieb:
>> Der Prozessor hängt ja überhaupt in der Luft,
>
> Das ist doch klar, dass es an die Pins angeschlossen ist.

OK. Das mag bei dir so sein.

Aber so 'klar' ist das bei weitem nicht. Du glaubst gar nicht, was man 
hier im Forum im Lauf der Zeit so alles sieht.

Trotzdem solltest du dir eine gewisse Sorgfalt aneignen.


> wie gesagt, ich habe das in einem Simulator getestet,

Ein Simulator operiert in einer idealen Welt.
In einem Simulator sind alle Eingangspegel exakt auf dem Wert auf dem 
sie sein sollen, es gibt keine Spikes, der Prozessor arbeitet mit der 
Takfrequenz mit der er laufen soll, Rechteckpulse haben eine ideale 
Form.
Die Realität sieht aber ganz anders aus.

So wie ich das sehe, hast du noch nicht mal überprüft, ob du vom Modul 
vernünftige Pulse in den µC kriegst. Und das ist nun mal grob 
fahrlässig.

Aber bitte. Es ist deine Zeit, die du verplemperst.

: Bearbeitet durch User
von Michael (Gast)


Lesenswert?

Was für ein Netzteil ?
Schaltnetzteile können den Empfang
stören.

von der alte Hanns (Gast)


Lesenswert?

> Schaltnetzteile können den Empfang stören.
Ich würde es umformulieren: Schaltnetzteile stören den Empfang!

Das Grundproblem ist aber ein anderes, Reinhard Mey sei zitiert:
"Ich übe den Fortschritt und das nicht faul, nehme zwei Schritt auf 
einmal und fall aufs Maul."

von Alex W. (de1m)


Lesenswert?

Karl Heinz schrieb:
> Ein Simulator operiert in einer idealen Welt.

das ist mir klar, aber die Logik, die ich in Software programmiert habe 
sollte ja trotzdem funktionieren, ich meine z.B wenn PIND2 log. 1 hat, 
dann das und das machen. Sowas ist ja im Simulator und in der Schaltung 
gleich. Problem ist ehe, dass dieses "PIND2 log. 1" aus irgendeinem 
Grund in meiner Schaltung nicht geschaltet wird.

Karl Heinz schrieb:
> So wie ich das sehe, hast du noch nicht mal überprüft, ob du vom Modul
> vernünftige Pulse in den µC kriegst. Und das ist nun mal grob
> fahrlässig.

Das habe ich schon überprüft und gesehen, dass es nicht sauber ankommt. 
Mir fehlen halt die Wissen, wie man sowas beseitigen kann und deswegen 
habe ich das hier geschrieben.

von Uwe (Gast)


Lesenswert?

Hi,
>Blockkondensator (100nF) zwischen +3v3 und GND
Du versorgst das Modul also mit 3,3V.
Auf dem Ding ist eine 3,6V Z-Diode verbaut die dann nicht mehr wirksam 
ist,
Das ist aber ganz wichtig weil auf Ub absolute Ruhe sein muss sonst 
kommt da nur Grütze an Signal. Lange Rede kurzer Sinn .. Überbrücke die 
3,6V ZD mit einer 2,5V ZD und ich denke es wird gehen.

Viel Erfolg, Uwe

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.