Forum: Mikrocontroller und Digitale Elektronik Problem mit main und Timer1, ATMEG8


von Tesia (Gast)


Lesenswert?

Guten Abend,

Habe folgendes Problem. Habe ein Programm geschrieben wo der Timer1 des 
ATMEGA8 einen Port toggeln soll, und zwar mit verschiedenen 
Impulslängen.
Das funktioniert auch alles soweit bestens, außer dass in meiner main 
die Werte nicht übernommen werden, wenn ich z.B. die Pulslänge während 
der Laufzeit ändern will. Hier mal mein Code, kann mir einer sagen was 
ich falsch mache???
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <avr/interrupt.h>
4
5
#define STANDARD 60535;
6
7
unsigned short LOAD;
8
9
10
int main(void) 
11
{
12
  DDRD = 0x00;
13
  PORTD = 0xFF;
14
15
  DDRC |= (1<<PC0);
16
  PORTC |= (1<<PC0);
17
18
  TCCR1B = 0x02;
19
  TIMSK = 0x04;
20
  LOAD = 50000;
21
22
  TCNT1 = LOAD;
23
24
  sei();
25
26
27
  while(1)
28
  {
29
    LOAD = 10000;
30
    _delay_ms(1000);
31
    LOAD = 20000;
32
    _delay_ms(1000);
33
  }  
34
35
return 0;
36
}
37
38
39
40
ISR(TIMER1_OVF_vect)
41
{
42
  if(PORTC & 0x01)
43
    TCNT1 = STANDARD;
44
  if(!(PORTC & 0x01))
45
    TCNT1 = LOAD;
46
47
  PORTC ^= (1<<PC0);
48
49
}

von Tueftler (Gast)


Lesenswert?

die Variable eventuell volatile deklarieren?

von Karl H. (kbuchegg)


Lesenswert?

AUsserdem benutzt man für sowas den CTC Modus und nicht dieses 
bescheuerte Timer-Vorladen.

Dann hast du überhaupt keine Arbeit sondern weist einfach nur deinen 
neuen Wert dem Vertgleichsregister zu. Die Hardware kümmert sich dann 
selber darum, dass der Vergleichswert erst zum richtigen Zeitpunkt 
übernommen wird.

von Tesia (Gast)


Lesenswert?

@Tueftler
Danke du bist ein Schatz, es geht:)
Was genau bewirkt denn dieses volatile?

@Karl Heinz Buchegger
Ja das hatte ich auch danach vor, wollte es aber einmal so versuchen, 
muss ma wieder nen bisschen in die Timer reinkommen:)

Also vielen Dank euch beiden!

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.