Forum: Compiler & IDEs Timer0 Attiny2313 Problem


von Tishima (Gast)


Lesenswert?

Hallo!

Versuche im folgenden Programm Timer0 zum laufen zu bringen. Timer1 
funktioniert so wie es sein soll, aber die LED im Timer0 wird nicht 
getoggelt. Helft mir mal auf die Sprünge, was hab ich übersehen.

mfg,
Bjoern
1
#include <avr/interrupt.h>
2
#include <avr/pgmspace.h>
3
#include <avr/io.h>
4
#include <avr/wdt.h> 
5
6
#define F_CPU 7372800L                  // Systemtakt in Hz
7
8
#define LEDPORT PORTB              
9
#define LEDPIN  PINB
10
#define LEDDIR   DDRB
11
12
#define LED_INIT()  LEDDIR = 0xFF
13
14
#define LED1_ON()  PORTB &=~(1<<0)
15
#define LED1_OFF()  PORTB |= (1<<0)
16
#define LED2_ON()  PORTB &=~(1<<1)
17
#define LED2_OFF()  PORTB |= (1<<1)
18
#define LED3_ON()  PORTB &=~(1<<2)
19
#define LED3_OFF()  PORTB |= (1<<2)
20
21
22
#define LED1_TOGGLE() PORTB ^= (1<<0);
23
#define LED2_TOGGLE() PORTB ^= (1<<1);
24
#define LED3_TOGGLE() PORTB ^= (1<<2);
25
26
#define SELECT_POWERDOWN MCUCR |= (1<<SM1) | (1<<SM0) | (1<<SE)    // Macro to select powerdown sleep mode
27
#define SELECT_IDLESLEEP MCUCR &= ~(1<<SM1)    // Macro to select idle sleep mode
28
29
#define DISABLE_AC() ACSR |= (1<<ACD)    // Disable Analog Comperator
30
31
// Watchdog reset handling
32
33
 
34
//------------------------------------------------------------------------
35
//        T0 Interrupt
36
//------------------------------------------------------------------------
37
ISR(TIMER0_OVF_vect){
38
39
  LED1_TOGGLE(); 
40
41
}
42
43
ISR(TIMER1_OVF_vect) {
44
  
45
  LED2_TOGGLE()
46
  
47
} 
48
49
int main(void) {
50
51
  LEDPORT=0xFF;
52
  LED_INIT();
53
54
  TCNT0 = (1<<CS02) | (1<<CS00);      //divide by 1024 - 28 Hz @ 7.372800 Mhz 
55
  //TCCR1B = (1<<CS12) | (1<<CS10);      //divide by 1024
56
  TCCR1B = (1<<CS10);            // - 112 Hz @ 7.372800 Mhz 
57
  TIMSK = (1<<TOIE0) | (1<<TOIE1);      //enable timer interrupt
58
59
sei();
60
61
62
 while(1)
63
  {
64
    LED3_TOGGLE(); 
65
    for(long a = 0;a<80000;a++){asm("nop");};
66
67
  }
68
69
return 0;
70
71
}

von Oliver W. (olliw)


Lesenswert?

TCNT0 ist sicher das falsche Register... TCCR0?

von Tishima (Gast)


Lesenswert?

Hallo!

Oliver, ne das ist es auch nicht mit TCCR0, irgendwo muß der Hund doch 
begraben liegen.

mfg,
Bjoern

von Peter D. (peda)


Lesenswert?

Tishima schrieb:
> Oliver, ne das ist es auch nicht mit TCCR0, irgendwo muß der Hund doch
> begraben liegen.

Ja, im Datenblatt.
Da gibt es hinten an jedem Abschnitt ne Registerbeschreibung.
Besser gehts wirklich nicht.


Peter

von Tishima (Gast)


Lesenswert?

Ups,

ja mit TCCR0B haette ich arbeiten müssen, nun kann ich erstmal 
weitermachen.
So wie es aussieht. Muß erstmal weiter im eigentlichen Programm testen.
Danke, für den Denkanstoß.

gruß,
Bjoern

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.