Hi Leute,
vieleicht hat ja schon jemand von euch dieses Problem gehabt:
Ich bin in der Programmierung von µC ein Neuling und habe mir gedacht
mit dem AVR-Studio4 und einem ATMEGA 128 anzufangen. Da ich aber noch
keine Hardware habe, wollte ich mit dem Simulator von AVR-Studio
arbeiten. Hier jetzt mein Problem:
Bei Verwendung des 16Bit Timer1 und des 16BitTimer3 treten seltsame
Registerverschiebungen auf. Jetzt weiß ich nicht ob das am
Studio-Simulator liegt oder an meinem Source-Code. Ich habe hoffentlich
alle Forenbeiträge gelesen, aber nirgends ein ähnliches Problem
gefunden.
1 | // Timer/Counter 1 initialization
|
2 | // Clock source: System Clock
|
3 | // Clock value: Timer 1 Running, Not Using Prescaler
|
4 | // Mode: Normal top=FFFFh
|
5 | // OC1A output: Discon.
|
6 | // OC1B output: Discon.
|
7 | // OC1C output: Discon.
|
8 | // Noise Canceler: Off
|
9 | // Input Capture on Falling Edge
|
10 | TCCR1A=0x00;
|
11 | TCCR1B=0x19;
|
12 | TCNT1H=0x00;
|
13 | TCNT1L=0x00;
|
14 | ICR1H=0xff;
|
15 | ICR1L=0xff;
|
16 | OCR1AH=0x00;
|
17 | OCR1AL=0x00;
|
18 | OCR1BH=0x00;
|
19 | OCR1BL=0x00;
|
20 | OCR1CH=0x00;
|
21 | OCR1CL=0x00;
|
22 |
|
23 | // Timer/Counter 3 initialization
|
24 | // Clock source: System Clock
|
25 | // Clock value: Timer 3 Running, Not Using Prescaler
|
26 | // Mode: Normal top=FFFFh
|
27 | // Noise Canceler: Off
|
28 | // Input Capture on Falling Edge
|
29 | // OC3A output: Discon.
|
30 | // OC3B output: Discon.
|
31 | // OC3C output: Discon.
|
32 | TCCR3A=0x00;
|
33 | TCCR3B=0x19;
|
34 | TCNT3H=0x00;
|
35 | TCNT3L=0x00;
|
36 | ICR3H=0xff;
|
37 | ICR3L=0xff;
|
38 | OCR3AH=0x00;
|
39 | OCR3AL=0x00;
|
40 | OCR3BH=0x00;
|
41 | OCR3BL=0x00;
|
42 | OCR3CH=0x00;
|
43 | OCR3CL=0x00;
|
Nach der Initialisierung erscheint im HighByte beider Timer des TCNT3
Registers der Hexwert des TCCR_B Registers.
Beide Timer zählen nur das LowByte hoch, anschliessend wird das
Overflowflag gesetzt und der Zähler beginnt wieder von vorne.
Das interessanteste ist allerdings dann der Timer3, in diesem Timer wird
das OCR3 Register mit irgendwelchen Zählwerten vollgeschrieben.
Achso, bei beiden Timern verwende ich den CaptureInterrupt um eine
Variable hochzuzählen, also nix besonderes, für den Anfang.
Ansonsten eine echt geile Site für Anfänger, Neulinge und ich denke auch
für Profies. Weiter so!