Hallo Gemeinde, die PWM-Frequenz kann bei diesem µC über den Timer0 überlauf gesteuert werden. Als Quarz verwende ich 22.1184 MHz und die PWM funktioniert bereits mit LEDs an P1.3 und P1.4. Nun versuche ich den Timer0 im Mode 1 zu betreiben und eine Frequenz von ca. 200 Hz auf die PWM zu geben. Mit dem Timer im Mode0 (13bit) blinkt die LED 2 mal /sek.. Dann habe ich den Timer im Mode 1 ohne Reloadwert betrieben und die LED blinkt alle 5 sek. auf. Nun zum (Verständniss)problem: Die Blinkfrequenz erscheint mir ein wenig niedrig. Sollte sie nicht, bei diesem Qaurz, bei mind. ca. 28 Hz liegen? Wenn ich mit Reloadwerten arbeite verändert sich das Blinken auch nicht. Hier der Code:
1 | #include <at89c51xd2.h> |
2 | |
3 | |
4 | sbit pulsweite_pca0=P2^2; // Tasten für Pulsweiten |
5 | sbit pulsweite_pca1=P2^5; |
6 | |
7 | /*-----------------------------------------------------------------------
|
8 | Zusatzfunktionen
|
9 | ------------------------------------------------------------------------*/
|
10 | |
11 | void T0_Mode1_INI(void) |
12 | {
|
13 | TR0 = 0; // Timer stoppen |
14 | TMOD = 0x01; // Timer 0 im Mode 1 aktivieren |
15 | TH0 = 100; // wird um 1 inkrementiert wenn TL0 überläuft |
16 | TL0 = 0; // wird alle Fosz/12 um 1 inkrementiert bis 256 dann überlauf |
17 | TF0 = 0; // Timer0 Überlaufflag löschen |
18 | //ET0 = 1; // Interrupt für Timer 0 aktivieren
|
19 | //EA=1; // Interrupts aktivieren
|
20 | TR0 = 1; // Timer 0 run |
21 | }
|
22 | |
23 | void PWM_INI(void) |
24 | { CMOD=0x05; // PCA-Clock = Timer 0 überlauf |
25 | CCON=0x00; // PCA steht still |
26 | CCAPM0=0x42; // ECOM0-Bit und PWM0-Bit werden gesetzt |
27 | CCAPM1=0x42; // ECOM1-Bit und PWM1-Bit werden gesetzt |
28 | }
|
29 | |
30 | /*--------------------------------------------------------------------
|
31 | Hauptprogramm
|
32 | ----------------------------------------------------------------------*/
|
33 | void main(void) |
34 | |
35 | {
|
36 | |
37 | T0_Mode1_INI(); // Timer 0 Initialisierung |
38 | PWM_INI(); // PWM-Initialisierung |
39 | CR=1; // PWM starten |
40 | CCAP0H=128; // Startwert der PWM 0 |
41 | CCAP1H=128; // Startwert der PWM 1 |
42 | |
43 | while(1) // Endlosschleife |
44 | {
|
45 | }
|