Hallo,
ich versuche gerade eine Funkuhr zu bauen und experimentiere ein
bisschen mit dem DCF77-Modul von Conrad rum.
Wenn ich den benutzten ATMega8 mit folgendem Programm einsetzte, blinkt
die Diode an PB0 im Sekundenrhythmus so wie sie soll (Empfangsmodul ist
an PB1):
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
int main()
{
DDRB = (1<<PB0);
PORTB = (1<<PB1);
int8_t i=1;
uint8_t t=0;
while(1)
{
/*if(bit_is_set (PINB, PINB1)) PORTB |= (1<<PB0);
else PORTB &=~ (1<<PB0);*/
if(bit_is_set (PINB, PINB1) && i)
{
if(t) {PORTB |= (1<<PB0); t=0;}
else {PORTB &=~ (1<<PB0); t=1;}
i = 0;
}
if(bit_is_clear (PINB, PINB1)) i=1;
}
return 0;
}
Wenn ich jedoch möchte, dass Empfangsmodul eine ISR auslöst,
funktioniert das nicht, wenn ich jedoch einen Finger an den PIN PD2
halte fängt die Diode an zu leuchten, wie sie soll (Empfangsmodul an
PD2, Diode an PC4):
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <avr/interrupt.h>
#include <avr/io.h>
volatile uint8_t t=0;
ISR(INT0_vect) {
t=1;
}
int main(void)
{
//externer Interrupt
MCUCR = (1<<ISC01) | (1<<ISC00);
GICR |= (1<<INT0);
sei();
DDRC = (1<<PC4);
while(1)
{
if(t==1)
{
PORTC |= (1<<PC4);
}
}
return(0);
}
Und in beiden Fällen habe ich direkt den Ausgang des Empfangsmoduls am
µC angeschlossen ohne zusätzlichen Widerstände oder so.
Ich verstehe nicht warum das Signal im oberen Code erkannt wird und im
unteren nicht.
Ich hoffe mir kann jemand helfen.
Gruß
Andy
Im ersten Fall hast du den internen Pull-up (PORTB = (1<<PB1);) an der Signalleitung (PB1) aktiviert. Wenn das DCF77 Modul z.B. einen Open Collector Ausgang (Ausgangsstufen Logik-ICs) hat, ist der auch notwendig. Im zweiten Fall fehlt der Pull-up.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.