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

Gast #1494486
Lesenswert?

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ß
#1494506
Lesenswert?

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

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

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