mikrocontroller.net

Forum: Compiler & IDEs Timer0 vom Atmega8 funktioniert nicht


Autor: Paul P. (cesupa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin grad dabei meine Kenntnisse in Sachen Interrupts zu vertiefen 
und versuche grade den Timer0 von meinem Atmega8(16MHz) so zu 
konfigurieren, dass er mit ca. 10ms läuft. Nur leider funktioniert das 
nicht so wie erhofft. Hier mal mein Code:
#include <avr/io.h>
#include <avr/interrupt.h>

volatile uint8_t counterT2;

ISR(TIMER0_COMP_vect)
{
counterT2++;
}

void init_timer(void)
{
TCNT0=0;
OCR0=156;                 //10ms bei 16MHz
TIMSK=(1<<OCIE0);
sei();
TCCR0 = ((1<<CS02) | (1<<CS00) | (1<<WGM01)); //Prescaler=1024(?), CTC Mode
}

inline void sleep(uint8_t t)
{
counterT2=0;
while(counterT2<t);
}

inline void sleep_s(uint16_t ms)
{
uint16_t i;

for(i=0;i<ms;i++)
sleep(100);
}

int main(void)
{

init_timer();

DDRD|=(1<<PD5) | (1<<PD6);

while(1)                        
{
PORTD|=(1<<PD5);
PORTD&=~(1<<PD6);

sleep_s(1);                    //1s warten

PORTD|=(1<<PD6);
PORTD&=~(1<<PD5);

sleep_s(1);                    //1s warten
}

return 0;
}


Warum funktioniert das nicht? Es leuchtet immer nur die LED an PD5.

Gruß
Paul

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Timer 0 vom ATMega8 hat gar keine Compare-Einheit und 
dementsprechend auch keinen CTC-Modus. Das müsste eigentlich beim 
Compilieren schon Fehlermeldungen geben (v.a. wegen den nichtexistenten 
OCR0 und WGMxx).

Autor: Paul P. (cesupa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, das wusste ich nicht. AVR-Studio hat da noch nicht einmal eine 
Warnung ausgegeben. Ich hab das ganze mal mit CTC beim Timer2 probiert, 
da ließ sich aber der Prescaler nicht einstellen. Ich hab halt einfach 
TCCR2=(1<<CS22) | (1<<CS20) | (1<<WGM21); gesetzt, aber die LEDs 
leuchteten entweder beide auf, oder blinkten sehr schnell wenn ich statt 
sleep_s(1) sleep_s(100) verwendete. Also warum lässt sich der Prescaler 
nicht einstellen?

Gruß
Paul

Autor: Michael J. (jogibaer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul P. wrote:
> Aha, das wusste ich nicht. AVR-Studio hat da noch nicht einmal eine
> Warnung ausgegeben.


Hallo,

da würde ich fast darauf tippen, das Du die falsche CPU eingestellt 
hast.

Wenn die CPU nicht die entsprechenden Register kennt, gibt es eigentlich
immer eine Fehlermeldung.


Jogibär

Autor: Paul P. (cesupa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahhhhh, das vergess ich irgendwie immer wieder einzustellen, wenn ich 
ein neues Projekt erstellen will. Gibt es eine Möglichkeit, generelle 
Einstellungen vorzunehmen, die bei jedem neuen Projekt übernommen 
werden?

Jetzt funktioniert das auch mit der ISR.

Danke für eure Hilfe.

Gruß
Paul

Autor: Michael J. (jogibaer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul P. wrote:
> Ahhhhh, das vergess ich irgendwie immer wieder einzustellen, wenn ich
> ein neues Projekt erstellen will. Gibt es eine Möglichkeit, generelle
> Einstellungen vorzunehmen, die bei jedem neuen Projekt übernommen
> werden?
>
> Jetzt funktioniert das auch mit der ISR.
>
> Danke für eure Hilfe.
>
> Gruß
> Paul


Hallo,

passiert mir auch ab und zu mal.
Besonders wenn ich mal kurz ein programm von einem Gerät auf meine 
Testumgebung spiele um "schnell" mal was auszuprobieren.

Allerdings merkt man das recht schnell.

Wo Du das bei AVRStudio einstellen kannst, weiß ich nicht.
Bei mir ändere ich es immer direkt im makefile.

Jogibär

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul P. wrote:
> Aha, das wusste ich nicht.
Unwissenheit schützt vor Strafe nicht...;-) Frage mich, wie man einen µC 
programmieren kann, ohne vorher wenigstens mal ins Datenblatt zu 
schauen, ob der das, was ich brauche, überhaupt hat...

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.