8-Bittimer und Interrupts :(

OP #1263736
Lesenswert?

abend..

vorweg frequenzen/prescaler usw. sind total bescheuert gewählt aber egal 
mir geht es ums prinzip..

das ganze soll letztlich ein binärzähler sein der im sekundentakt 
hochzählt....dummerweise tut er das nicht er ist einfach dauer an :P
unabhängig davon ob ich den uC mit 16MHZ oder 1MHZ laufen lasse...

die leds hängen an PORTC 0-3

das original beispiel kommt aus dem gcc tutorial. allerdings 
funktionierte das nicht da einige bezeichnungen und register scheinbar 
falsch waren.

erste frage: wenn der zähler 255 erreicht hat und umspringt, wird dann 
ein interrupt ausgelöst?
im original beispiel war extra eine zahl definiert an der der interrupt 
ausgelöst wird.
das register gibt es nur leider nicht welches dort verwendet wird:
1
OCR0=125;
beim lesen der atmega dokumentation hörte es sich aber so an als würde 
beim 255 -> 0 ein overflow produziert....daher habe ihc mir gedacht 
nehme ich den und rechne es mir passend...

die hier genutzten zahlen sind für ein 16MHZ quarz ausgelegt.

seht ihr auf anhieb fehler?

gute nacht

1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/delay.h>
4
 
5

6
volatile int zahler, sek;
7
main()
8
{
9
//Timer 0 konfigurieren
10
DDRC = 0x0F;  //definiert portC ping 0-3 als ausgang
11
PORTC = 0x0F;  //setzt die ausgänge 0-3 vom port C auf logisch 0
12
TCCR0 = (1<<CS00) | (1<<CS02);   //1024er prescaler
13

14
 
15

16
   TIMSK|=(1<<TOIE0);  //timer overflow interrupt
17
   sei();               //Globale Interrupts aktivieren
18
   while(1)
19
   {
20
    PORTC=sek;
21
  _delay_ms(200);
22
   }
23
 
24
}
25
 
26
 
27
ISR(TIMER0_COMP_vect)
28
{
29
  zahler +=159;
30

31
  if(zahler >=10000) {sek++; zahler -= 10000;}
32

33
}
Gast #1263778
Lesenswert?

also 16bit timer zB
1024er prescaler
compare modus  ( CTC ) einschalten

#define zeit  ( F_CPU/(1024*1) )


in
OCRAH = zeit>>8 ;
OCRAL = zeit;

die
ISR(TIMER0_COMP_vect)
{
}
sollte nun alle 1 sek ausgeführt werden


solange in der configuration der richtige F_CPU wert steht ist das alles 
kein thema
#1263853
Lesenswert?

S. S. schrieb:
> im original beispiel war extra eine zahl definiert an der der interrupt
> ausgelöst wird.
> das register gibt es nur leider nicht welches dort verwendet wird:
>
1
OCR0=125;
2
>

Es drängt sich mir der Eindruck auf, daß es vielleicht nicht ganz unklug 
wäre, wenn Du endlich mal den AVR-Typ nennen würdest.

Sonst reden hier alle noch Ewigkeiten aneinander vorbei.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren