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?
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 | while(1){ |
2 | return 0; |
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"!!!!
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.