Forum: Mikrocontroller und Digitale Elektronik 16 bit timer


von pille1990 (Gast)


Lesenswert?

hallo,

ich habe mal das folgende programm geschrieben:
1
int main()
2
{
3
4
  //prescaler einstellen
5
  TCCR0 |= (1 << CS01);
6
7
  TCCR1B |= (1 << CS11);
8
  
9
  TCCR2 |= (1 << CS21);
10
11
12
  //timer auf fast pwm mode stellen
13
  TCCR0 |=  (1 << WGM00);
14
15
  TCCR1A |= (1 << WGM10);
16
  TCCR1B |= (1 << WGM12);
17
18
  TCCR2 |= (1 << WGM20);
19
20
21
  //compare output mode 
22
  TCCR0 |= (1 << COM01);
23
24
  TCCR1A |= (1 << COM1A1) | (1 << COM1B1);
25
26
  TCCR2 |= (1 << COM21);
27
28
29
  //hiermit wird der gewünschte pwm wert eingestellt
30
  OCR0 = 0;
31
32
  OCR1A = 0;
33
34
  OCR2 = 0;
35
36
37
  //pins als ausgänge definieren
38
  // PD5 gehört zu timer1, PD7 zu timer2, PB3 gehört zu timer0
39
  DDRD |= (1 << PD5) | (1 << PD7);
40
  DDRB |= (1 << PB3);
41
42
OCR0 = 0;
43
OCR1A = 0;   //UM DIESE STELLE HIER GEHT ES!!!
44
OCR2 = 0;

und zwar weise ich dem OCR1A den wert 0 zu aber die led die am ausgang 
angeschlossen ist ist nicht komplett aus, sondern glimmt noch ein 
bisschen. zu erwähnen ist noch das es sich beim timer 1 um einen 16 bit 
timer handelt. die anderen 2 timer gehen schön auf null wenn ich ihnen 
den wert 0 zuweise. der controller ist ein atmega32. jetzt meine frage: 
warum geht der 16 bit timer nicht komplett auf null, die 8 bit timer 
aber schon? habe ich da irgendwas falsch eingestellt?

von pille1990 (Gast)


Lesenswert?

kann mir wirklich keiner helfen??

von avr (Gast)


Lesenswert?

Du betreibst in Timer in Mode5, d.h. 8 Bit fast PWM.
Da bleibt immer ein Pik stehen.

Datenblatt Modes Timer1
1
The extreme values for the OCR1x Register represents special cases when generating a PWM
2
waveform output in the fast PWM mode. If the OCR1x is set equal to BOTTOM (0x0000) the output
3
will be a narrow spike for each TOP+1 timer clock cycle. Setting the OCR1x equal to TOP
4
will result in a constant high or low output (depending on the polarity of the output set by the
5
COM1x1:0 bits.)

So kann der Timer kein "echtes" Low/High erzeugen.

Evtl. Pin drehen (Set statt Clear) und Wert invertieren ~0 (=255).

guß avr

von pille1990 (Gast)


Lesenswert?

das hört sich erstma kompliziert an....was muss ich denn dann an der 
konfiguration des timers ändern?
prescaler bleibt oder?
fast pwm mode auch oder?
der output compare mode muss geändert werden oder?

gibt es einen avr mit drei 8 bit timern?

danke für antworten

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.