ich brauche ein periodische Ein-Aussignal am Ausgang PORTD1
hier ist der Code
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 16000000UL // Quarz mit 16.0000 Mhz
#endif
unsigned int i;
ISR(TIMER0_COMP_vect){
if (i == 0){
PORTD |= (1<<PORTD1); //PIND1 als 1 setzen
i++;
}
else{
PORTD &= ~(1<<PORTD1); //PIND1 als 0 zurücksetzen
i = 0;
}
}
int main(void){
TCCR0 |= (1<<WGM01) | (1<<CS01); // CTC Modus, 16/8 MHz,
TIMSK |= (1<<OCIE0); Compare Match Interrupt enable
//wenn Wert aus TCNT0 Register gleich 255, Interrupt ausgelöst
OCR0 = 0xFF;
sei();
while(1){
return 0;
}
}
Der Vorgehensweise nach meine Meinung würde so laufen...
am Anfang i = 0;
für erste Auslösen der Interrupt
weil i gleicht 0 ==> PD1 = High
"gleichzeitig" ist Inhalt in TCNT0 wieder gelöscht, Zeitzähler Register
zurück auf 0
danach inkrementiert i auf 1
für zweite Auslösen der Interrupt
weil i gleicht 1 ==> PD1 = Low
"gleichzeitig" ist Inhalt in TCNT0 wieder gelöscht, Zeitzähler Register
zurück auf 0, und natürlich ist i wieder nach 0 zurückgesetzt
für dritte... periodisch
für vierte... periodisch
leider liegt die Ausgangspannung PD1 immer an null, welche Gedankfehler
habe ich hier gemacht?
> welche Gedankfehler habe ich hier gemacht?
Wie wäre es, wenn Du Dich dem vernachlässigten Register DDRD widmest und
den Portpin als Ausgang konfigurierst?
Gast
#629909
hallo, ich vermute auch, das dein Data Direction Register noch auf Default steht. Ergo ist der Port als eingang definiert. und dort wird nur der pull-up gezogen, wenn du auf eins setzt. ergo: DDRD |= 1<<DDD1) bei sowas ..
1 | |
2 | |
3 | |
graut es mir. gut, dass die libgcc so nett ist und das programm am leben lässt. bye kosmo
Menschskind, es tut endlich wieder!!!!! Danke für deine Hilfe bin schon zweistellige Stunden aufgehängt, endlich geschafft Definition der Datenrichtung ist nicht "nachverlässig"!!!!