Timer Compare Match Problem

OP #629867
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
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

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.