Forum: Mikrocontroller und Digitale Elektronik Programm für Atmega 8L


von mc (Gast)


Lesenswert?

Hallo erstmal!

Ich versuche den Timer 16Bit von dem Atmega 8L zu benutzen. Aber das 
funktioniert nicht. Ich benutze Winavr mit kamavr. Hier der C-Code.

#include <stdint.h>
#include <stdlib.h>

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



int main (void)
{

DDRC=1;
PORTC=1;
TCCR1B=0x02;
OCR1AH=20000>>8;
OCR1AL=20000%256;
TIMSK=0x10;

sei();

while(1);
 return 1;
}



ISR (TIMER1_COMPA_vect)

{
PORTC=0;
}

Ich will erstmal nur, dass er in die ISR reinkommt.

gruss mc

von Johannes M. (johnny-m)


Lesenswert?

mc wrote:
> Hallo erstmal!
>
> Ich versuche den Timer 16Bit von dem Atmega 8L zu benutzen. Aber das
> funktioniert nicht.
Was funktioniert nicht?

> int main (void)
> {
>
> DDRC=1;
> PORTC=1;
> TCCR1B=0x02;
Bitte schreib das so, dass man ohne Blick ins Datenblatt erkennen 
kann, was da passiert. Siehe Bitmanipulation.
In diesem Fall
1
TCCR1B = 1 << CS11;

> OCR1AH=20000>>8;
> OCR1AL=20000%256;
Dürfte zwar in diesem Fall funktionieren, ist aber Murks. Schreib
1
OCR1A = 20000;
Die Drecksarbeit erledigt der Compiler.

> TIMSK=0x10;
Siehe oben bei TCCR1B

Und wie gesagt: Musst schon erzählen, was genau nicht funktioniert bzw. 
was Dich zu der Annahme verleitet, dass es nicht funktioniert. Von der 
Funktion her scheint da zumindest kein dicker Fehler drin zu sein. Aber 
es gibt viele Stolpersteine, v.a. dann, wenn man den Simulator benutzt.

von Michael H* (Gast)


Lesenswert?

> #include <stdint.h>
> #include <stdlib.h>
>
> #include <avr/eeprom.h>
> #include <avr/interrupt.h>
> #include <avr/io.h>
> #include <avr/pgmspace.h>
> #include <avr/sleep.h>
> #include <avr/wdt.h>

holla... wozu das alles? o_O
#include <avr/interrupt.h>
#include <avr/io.h>
die reichen dafür.

> DDRC=1;
> PORTC=1;

misst du auch am richtigen pin? PORTC=1 setzt nur das bit PC0. nur, um 
das mal auszuschließen. der rest sieht ziemlich richtig aus...

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

1
DDRC=1;
2
PORTC=1;
3
TCCR1B=0x02;
4
OCR1AH=20000>>8;
5
OCR1AL=20000%256;
6
TIMSK=0x10;

Schreib erstmal leserlichen Code, dann sprechen wir weiter. Die 
Zuweisung an OCR1AL ist jedenfalls schwachsinnig.

von Johannes M. (johnny-m)


Lesenswert?

Michael G. wrote:
> Die Zuweisung an OCR1AL ist jedenfalls schwachsinnig.
Begründung? (Abgesehen von der, die ich oben schon angesprochen habe...)

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
Noch kein Account? Hier anmelden.