Axel Z. schrieb:
> Nimm mal das return 0 aus der while-Schleife heraus. Dann hat das
> Programm wenigstens die Chance mehr als einmal zu laufen.
>
> Gruß
Das habe ich übersehen. Funktioniert jetzt.
Ich möchte ein PWM Signal (Fast PWM, 10bit) erzeugen. PWM Frequenz soll
ca. 18Khz betragen. Das Problem ist, dass nur ca. 2,5khz signal erzeugt
wird. Wo mache ich fehler?
Mein (Teil)Code:
1 | #include <avr/io.h>
|
2 | #include <inttypes.h>
|
3 |
|
4 | #define F_CPU 8000000UL
|
5 |
|
6 | uint16_t readADC(double x) {
|
7 | blabla
|
8 | }
|
9 |
|
10 | int main(void)
|
11 | {
|
12 | PORTB=0;
|
13 | DDRB=(1<<PB1);
|
14 |
|
15 | //Timer1 Konfigurieren
|
16 | TCCR1A=(1<<COM1A1) | (1<<PWM1A); //PWM, OC1A
|
17 | TCCR1B=(1<<CS10); //F_CPU ohne Prescaler
|
18 | TCCR1D=(0<<WGM11) | (0<<WGM10); //Fast PWM
|
19 |
|
20 | OCR1A=0; //default
|
21 |
|
22 | //TOP Setzen, 18kHz
|
23 | TC1H=444 >> 8;
|
24 | OCR1C=444 & 0xFF;
|
25 |
|
26 | double x=0.4333;
|
27 |
|
28 | //uint16_t readADC(); //Auslesen der analogen Spannungen an PB5,
|
29 | // also ADC8. In result steht das Ergebnis.
|
30 |
|
31 | while(1){
|
32 | TC1H=readADC(x) >> 8;
|
33 | OCR1A=readADC(x) & 0xFF;
|
34 | }
|
35 | return 0;
|
36 | }
|