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

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.

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.