Hallo habe folgendes Prgrammm gestestet an PB1(OC1A) soll der Ausgang sein an PB0+PB2 hängen Taster nach GND. Am Ausgang kommt zwar ein ca. 13kHz Signal aber ich kann keine Regelung vornehmen wo hängts.....? Alles was mir auffällt kann nur OCR1A nutzen da compiler bei OC1A meckert. hier der code :
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | #define F_CPU 8000000UL
|
4 | #include <util/delay.h> |
5 | |
6 | |
7 | |
8 | int main() |
9 | {
|
10 | // OC1A => PB1 Ausgang
|
11 | DDRB |= (1<<PORTB1); //Ausgang DDRB &= ~(1<<PORTB0); // Eingang Tater auf GND |
12 | DDRB &= ~(1<<PORTB2); // Eingang Taster auf GND |
13 | PORTB |= (1<<PORTB0) | (1<<PORTB2); // an S1 und S3 Taster PUL UP Widerstände |
14 | |
15 | // PWM Konfig
|
16 | TCCR1A |= (1<<WGM10); //fast PWM 8-Bit |
17 | TCCR1B |= (1<<WGM12); |
18 | TCCR1B |= (1<<CS12); // Prescaler 256 |
19 | TCCR1A |= (1<<COM1A1); //nichtinvertierender PWM Modus |
20 | OCR1A = 0; //LED aus; |
21 | sei(); |
22 | |
23 | while(1) |
24 | { // ******* Tatster 1 (LED heller) ************ |
25 | if (!(PINB & (PINB0))) |
26 | {
|
27 | if(OCR1A= 255) // wenn Maxwert noch nicht erreicht |
28 | OCR1A++; // verbreitere die Impulsbreite |
29 | _delay_ms(15); |
30 | }
|
31 | |
32 | //******* TASTER 2 (LED dunkler) *************
|
33 | if (!(PINB & (PINB2))) |
34 | {
|
35 | if(OCR1A > 0) // wenn Minimalwert noch nicht erreicht |
36 | OCR1A--; // verbreitere die Impulsbreite |
37 | _delay_ms(15); |
38 | }
|
39 | }
|
40 | }
|