Forum: Mikrocontroller und Digitale Elektronik Timer OCR ändern wärend Ausführung


von Andreas (Gast)


Lesenswert?

Hi,

danke für das Prima tutorial in sachen Timer, bis jetzt hat auch alles 
problemlos geklappt, aber wenn ich nun versuche bei meinem atmega32 dem 
timer1 mittels registerzuweisung nen neuen Vergleichswert zu geben dann 
übernimmt der diesen einfach nicht, weder in der Simulation noch auf der 
Hadware. Anbei ist der Code (Die abgefragten PortD's sind taster)
1
#include <avr/io.h>
2
#include <stdint.h>
3
#include <avr/interrupt.h>
4
5
int main(void)
6
 {
7
 DDRD = 0xE0;  //1:Ausgang LED_pin 1110
8
9
 TCCR1A=0x00;
10
 TCCR1B=0x0D;
11
12
 OCR1AH=0x03;
13
 OCR1AL=0xD0;
14
15
 TIMSK1|=0x02;
16
17
 sei();
18
 
19
 while(1)
20
  {
21
  if((PIND & 0x04) && (OCR1AH>0))
22
   {
23
   OCR1AH-=0x01;
24
   }
25
  if((PIND & 0x08) && (OCR1AH<0xFF))
26
   {
27
   OCR1AH+=0x01;
28
   }
29
  }
30
 return 0;
31
 }
32
33
ISR(TIMER1_COMPA_vect)
34
 {
35
 PORTD^=0x20;
36
 }

von spess53 (Gast)


Lesenswert?

Hi

Bei 16Bit-Registers wird das H-Byte erst übernommen, wenn das L-Byte 
geschrieben wird.

MfG Spess

von Andreas (Gast)


Lesenswert?

Ja, das war das Problem, danke für die schnelle Hilfe!

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.