Forum: Mikrocontroller und Digitale Elektronik DCF77 Signal Testen per µC


von Sebastian B. (sebastian86)


Lesenswert?

Moin zusammen ich hab nun endlich mein DCF Modul bekommen und wollt 
jetzt einfach ma testen ob es funktioniert und da hab ich mir gedacht 
Das ich den DATA Out vom Funkmodul einfach an einen Eingang (bei mir 
PD2) meines Mega 32 hängeund mein Display soll jedes mal um 1 hochzählen 
wenn eis eine High sieht.


Nun Läuft die zahl aber rattenschnell hoch ca 100 ticks pro sekunde 
(geschätzt)

hier der c Code.

Kann ich das nicht so machen ?
1
int main(void)
2
{
3
  
4
  _delay_ms(200);      //3x 200ms Einschaltverzögerung
5
  _delay_ms(200);
6
  _delay_ms(200);
7
8
    lcd_init();        //Initalisierung des LCD
9
10
  stdtxt();        //Ausgabe des Standarttextes auf dem LCD
11
12
/*    
13
   TCCR0 = ( 1 << CS02 ) | ( 1 << CS00 );   // Vorteiler auf 1024
14
    TIMSK = ( 1 << TOIE0 );  // Interrupt bei Overflow vom  Timer 0
15
*/  
16
  
17
  PORTD = 0x00;
18
  
19
  while(1)
20
  {
21
    if(PD2>0)
22
    {  signal++;
23
    }
24
  
25
  set_cursor(0,2);
26
  char Out[80];
27
  sprintf( Out, "Count: %d ", signal );
28
  lcd_string( Out );
29
30
  }

von Wasweisich (Gast)


Lesenswert?

>soll jedes mal um 1 hochzählen wenn es eine High sieht.

Dein Programm macht genau das was Du geschrieben hast.
Aber das ist nicht was Du willst.
Du willst ja garnicht wissen wie oft Dein Programm sieht das das Signal 
High ist.
Mal abgesehen von den Polaritäten die solche Module mal so und mal so 
ausgeben, willst Du eigentlich wissen wie oft das Signal von Low nach 
High bzw. High nach Low wechselt.
1
  while(1)
2
  {
3
    while (PD2 == 0);
4
    signal ++;
5
   set_cursor(0,2);
6
   char Out[80];
7
   sprintf( Out, "Count: %d ", signal );
8
   lcd_string( Out );
9
   while (PD2 > 0);
10
  }

Oder so ähnlich.

von Karl H. (kbuchegg)


Lesenswert?

Wasweisich wrote:

> Oder so ähnlich.

Vor allen Dingen 'so ähnlich' :-)

Seit wann wird denn ein Eingang so abgefragt
 while (PD2 == 0);

(Ich weiß schon: Du hast das vom Sebastian so übernommen. Trotzdem)
1
  while( ( PIND & PD2 ) == 0 )
2
    ;
3
4
  ....
5
6
7
  while( ( PIND & PD2 ) != 0 )
8
    ;


@Sebastian: Den Port auf Eingang schalten, ehe man ihn als Eingang
verwendet, wäre sicherlich auch nicht schlecht.

von Wasweissich (Gast)


Lesenswert?

>(Ich weiß schon: Du hast das vom Sebastian so übernommen. Trotzdem)
;-)

von Sebastian B. (sebastian86)


Lesenswert?

Karl heinz Buchegger wrote:
>
> @Sebastian: Den Port auf Eingang schalten, ehe man ihn als Eingang
> verwendet, wäre sicherlich auch nicht schlecht.


Hab ich doch das PORTD = 0x00;

kommt vor der while schleife. Ist doch richtig so oder ?



Gutes nächtle

gruss

Sebastian

von Wasweissich (Gast)


Lesenswert?

>Hab ich doch das PORTD = 0x00;
Nee, hast Du leider nicht.
PORTD ist das Datenregister, nicht das Datenrichtungsregister
Das heisst DDRB.

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.