Update - erstes geht nicht, neuer Versuch halbwegs
Hallo Oliver,
nein das war weiterhin auskommentiert im Programm.. hat nicht
funktionier.
Da Fehlersuche meist ätzender ist, hab ich das ganze mal mit dem
Timer/Counter1 versucht:
1 | #define F_CPU 14745600UL //Frequenz Quartz UL unsigned long
|
2 |
|
3 |
|
4 | #include <stdlib.h>
|
5 | #include <avr/io.h>
|
6 | #include <avr/interrupt.h>
|
7 | #include <util/delay.h>
|
8 | #include <stdint.h>
|
9 |
|
10 |
|
11 |
|
12 | void PWM(void)
|
13 | {
|
14 | DDRB = 0xFF;
|
15 | PORTB = 0x00;
|
16 |
|
17 | // Timer/Counter Control register A
|
18 |
|
19 | //Clear&set@bottom OC1A/ OC1B/ OC1C on compare match
|
20 | TCCR1A |= (1<<COM1A1) | (1<<COM1A0);
|
21 | TCCR1A |= (1<<COM1B1) | (1<<COM1B0);
|
22 | TCCR1A |= (1<<COM1C1) | (1<<COM1C0);
|
23 |
|
24 | //Fast PWM 8 Bit
|
25 | // WGMn3=0
|
26 | // WGMn2=1
|
27 | // WGMn1=0
|
28 | // WGMn0=1
|
29 | TCCR1A |= (1<<WGM10);
|
30 | TCCR1B |= (1<<WGM12);
|
31 |
|
32 |
|
33 |
|
34 | //Clock select * Aktiviert Clock/Timer *
|
35 | // No prescaling:
|
36 | // CSn2=0 1= /1024 1= /256
|
37 | // CSn1=0 0 0
|
38 | // CSn0=1 1 0
|
39 | TCCR1B |= (1<<CS10) | (1<<CS12);
|
40 |
|
41 |
|
42 | //Compare Werte *0x00 = 5V 0xFF = 0V
|
43 | OCR1A = 0xD0; // Pin PB6 (entspricht OC1B ?)
|
44 | OCR1B = 0xA0; // Pin PB7 (entspricht OC1C ?)
|
45 | OCR1C = 0x40; // Pin PB
|
46 |
|
47 | }
|
48 |
|
49 | int main (void)
|
50 | {
|
51 | sei();
|
52 | PWM();
|
53 | while(1);
|
54 | return 0;
|
55 | }
|
Das gibt mir jetzt zumindest ein Signal aus.
Aber wenn man meine Kommentare unter Compare Werte beachtet, bin ich
etwas verwirrt.
Wieso gibt OCR1A z.B. seinen vergleichswert nicht an den Pin mit OC1A ,
sondern an OC1B ?
Auch habe ich kein Signal von OCR1C, was eigentlich ja an PB7 liegen
sollte, aber da ist ja das B...
folglich hab ich kein Signal am übrig gebliebenen Pin B5
1)Vielleicht könnt ihr mir das ja noch sagen.
2)Wenn ihr wisst wieso das Programm ganz oben nicht geklappt hat wär ich
auch dankbar