Timer Compare Match Problem

OP #629867
Lesenswert?
• ▲
▼
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?
Gast #629909
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.