www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ISR beim Atmega88


Autor: Allrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich Arbeite seid einiger Zeit mit Atmegas und AVR Studio. Als Controller 
dient mir ein Atmeag88 der an einem PC verbunden ist, ein 14,7456MHz 
Quarz ist ebenfalls angeschlossen. Die Kommunikation untereinander 
Funktioniert auch schon.
Jetzt zu meinem Problem. Ich wollte den timer0 initialisieren und mir 
erst einmal nur auf der Konsole etwas ausgeben lassen. Suche schon seid 
ein paar Tagen nach einer Lösung im Netz, hier auf der Seite und in dem 
Forum, bekomme es jedoch nicht hin.
Hier ist mein Code evt habt Ihr ja eine Idee was ich falsch mache.

#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>

#include "uart.h"

ISR ( TIMER0_COMPA_vect ) { 
    printf("TIMER0_COMPA_vect\n");
}

void timerInit( void ) {

    // Globale Interrupts aktivieren
    sei();

    TCCR0A = ( 1<<WGM00 );  //Waveform Generation Mode
    TCCR0A = ( 1<<CS02 ) | ( 1<<CS00 ); // Prescalor 256
    
    OCR0A  = 230;   // 14.745.600 / 256 / 230 = 250 Hz

    // Compare Interrupt aktivieren
    TIMSK0 |= ( 1<<OCIE0A );

    // Set Timer
    TCNT0 = 0x00;
}

int main ( void ) {   
    uartInit( MY_UBRR, 0 );

    timerInit( );

    for( ;; ){
        printf("do nothing\n");
        _delay_ms(500);
        
    }
    return 0;
}

Habe schon einige Möglichkeiten und Varianten ausprobiert und komme 
einfach nicht weiter.

Grüße Allrik

Autor: Kasperle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein
  // Globale Interrupts aktivieren
    sei();
gehört in die main nach
 timerInit( );

Gruß

Autor: Kasperle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine
uartInit( MY_UBRR, 0 );

finde ich auch nicht.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>    TCCR0A = ( 1<<WGM00 );  //Waveform Generation Mode
>    TCCR0A = ( 1<<CS02 ) | ( 1<<CS00 ); // Prescalor 256

    TCCR0A = ( 1<<WGM00 );  //Waveform Generation Mode
    TCCR0A |= ( 1<<CS02 ) | ( 1<<CS00 ); // Prescalor 256

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>    TCCR0A = ( 1<<WGM00 );  //Waveform Generation Mode
>    TCCR0A |= ( 1<<CS02 ) | ( 1<<CS00 ); // Prescalor 256

Ach Quatsch ;)

CS02 und CS00 liegen nicht in TCCR0A!

Autor: Allrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für eure Antworten

@Kasperle
habe die uart nicht gepostet weil sie Funktioniert hat ;)

@holger
Stimmt. Danke hat sehr geholfen

Ansonsten habe ich von TCCR0A auf TCCR0B gewechselt. Nun funktioniert 
es. Dankeschön
void timerInit( void ) {

    TCCR0B = ( 1<<WGM00 ); //Waveform Generation Mode
    TCCR0B = ( 1<<CS02 ) | ( 1<<CS00 ); // Prescalor - 256
    
    OCR0B  = 230;   // 14.745.600 / 256 / 230 = 250 Hz

    // Compare Interrupt aktivieren
    TIMSK0 |= ( 1<<OCIE0B );

    // Set Timer
    TCNT0 = 0x00;
}

So geht es. Jetzt muss ich nur noch testen wie schnell die Frequenz 
wirklich ist.

Gruß und Danke Allrik

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>    TCCR0B = ( 1<<WGM00 ); //Waveform Generation Mode

WGM00 steht aber nicht in TCCR0B ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.