dcf77 ich werd noch wahnsinnig (was könnte falsch sein?)

Gast #1494486
hi,

ich bastle jetzt seit einiger zeit an meinem dcf77 empfänger.
und ich weiß einfach nicht was falsch läuft :/

ich kann das signal zwar empfangen aber irgendwie passt es nicht wenn 
ich es manuell auswerte...
ich habe mehr mals in reihe das signal empfangen lassen und es mir 
notiert
es sieht immer sehr ähnlich aus (datum/jahr usw.)
von daher kann es nicht sooo arg falsch sein :/

hier mal zwei komplette signale..
mag sein das das ganze atm noch nicht 100%ig verkabelt ist aber wenn 
sich zwei strings so stark ähnlich sind wird es ja so schlecht auch 
nicht sein oder? :/
0110010100101010001010010010000110100001001010100011001000010000
0111011110000010001010001110100110100001001010100011001000010000


hier der code
1
main()
2
{    
3
  DDRD  = 0x00;
4
  MCUCR = (1<<ISC01) | (1<<ISC00) ;    //positive flanke
5
  GICR  = (1<<INT0);            //int0  aktiv
6

7
  TCCR1A  = 0x00;
8
  TCCR1B   = (1<<CS12);          //prescaler 256 //wertet die signallängen aus
9

10
  lcd_pwrup();
11
  
12
  TCNT1=0;
13
  sei();
14
  
15
  while(1)
16
  {  
17
    if(k==2) 
18
    {
19
      cli(); 
20
      lcd_choporder(1);         //clear screen
21
      _delay_ms(2);
22

23
      sprintf(out,"%08lx",ether3); 
24
      lcd_sendstring(out);      //gibt den out string aus
25

26
      sprintf(out,"%08lx",ether4);
27
      lcd_sendstring(out);
28
      while(1);
29
    }
30
  }
31
}
32

33
ISR(INT0_vect)
34
{
35
  if(TCNT1>23000) {ether3=ether1; ether4=ether2; ether1=0; ether2=0; lcd_senddata('x'); if(j>26){k++;}; i=0;j=0;}    //anfang einer neuen minute
36

37
  TCNT1=0;
38
  
39
  if(z>=15) {lcd_choporder(1); z=0;}          //leert das display periodisch damit es nicht überläuft
40

41
  while(up);
42
  
43
  
44
  if(TCNT1<1800 && TCNT1>1200 && i<32) {ether1|=(0l<<31-i); lcd_senddata('0'); i++; z++;}        //füllt die erste long variable
45
  if(TCNT1>2700 && TCNT1<3600 && i<32) {ether1|=(1l<<31-i); lcd_senddata('1'); i++; z++;}
46

47
  if(TCNT1<1800 && TCNT1>1200 && i>31) {ether2|=(0l<<31-j); lcd_senddata('0'); j++; z++;}        //füllt die zweite long variable
48
  if(TCNT1>2700 && TCNT1<3600 && i>31) {ether2|=(1l<<31-j); lcd_senddata('1'); j++; z++;}
49

50
  
51
   
52
  TCNT1=0;
53
}

ein problem was vereinzelt auftritt ist das schnell hintereinander 
2zahlen aufs display geschrieben werden...ist mir schleierhaft wie das 
sein kann :/

wäre echt klasse wenn ihr mir weiterhelfen könnt

gruß
Hallo!

(DCF77 macht man, damit es störsicherer ist, nicht per 
Flanken-Interrupt, sondern tastet mehrfach pro Bit ab und entscheidet 
dann z.B. anhand der Mehrheit, in welchem Zustand sich das Bit 
befindet.)

Ansonsten bringt dir jede Störung sofort das gesamte Datenpaket 
durcheinander.

Beispiele gibt es in der Codesammlung zu Genüge.

PS: sehe gerade, dass du zumindest die Zeiten der Flanken prüfst, ob sie 
ungefähr stimmen. Naja, wie gesagt, inspirier dich in der Codesammlung.

Gruß
David
Gast
naja wie gesagt ich glaube allzu störanfällig ist es glaube ich nicht, 
denn die letzten bits (jahr,monat) sind immer gleich hex(2a3210)

nur passen sie nicht zum heutigen datum :(
Wenn du die exakte Signalform nicht kennst (Oszi?), dann lass das mit 
dem Flanken-Interrupt sein und frag alle zig Millisekunden im 
Timerinterrupt nach. Bei den Reichelt/Pollin-Modulen ist das 
beispielsweise ziemlich nützlich.
gast schrieb:
> naja wie gesagt ich glaube allzu störanfällig ist es glaube ich nicht,
> denn die letzten bits (jahr,monat) sind immer gleich hex(2a3210)
>
> nur passen sie nicht zum heutigen datum :(

Probier es auch mal anders rum
Aus 0 mach 1, aus 1 mach 0

Kommt dann was Vernünftiges raus?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.