Hy zusammen,
ich hab nen kleines Problem mit dem PWM Mode meines Atmeg8, und zwar versuche ich durch drücken eines Tasters ne LED heller zu machen, bzw. wenn ein best. Wert errericht ist die LED wieder erlöschen zu lassen. Eigentlich funktioniert auch alles, ausser dass die LED nie wirklich ganz aus ist!? (Bei OCR1A sollte dass doch aber sein, oder?)
Nur warum funktioniert es nicht???
Auch wenn ich direkt OCR1A=0 setze ist die LED auch nicht (ganz) aus, ich schätze das hängt vielleicht mit der Initialisierung zusammen???
Noch was zur Hardware PB1 --> PWM Ausgabe
PB0 --> Taster einlesen
PC0 --> Test LED (bei Tastendruck)
Hier mal der Quellcode:
Noch ne Frage: Kann ich bei dieser Programmierung davon ausgehen, dass die Spannung bei jedem Tastendruck jetzt um (5/255)[V] Schritten erhöht wird?Code:// Test PWM #include <avr/io.h> #include <util/delay.h> int main (void) { DDRB &= ~( 1 << PB0 ); //set PB0 input PORTB |= ( 1 << PB0 ); //set PB0 Pull up on DDRB |= (1 << PB1); //set PB1 output PORTB |= ( 1 << PB1 ); //set PB1 Pull up on DDRC |= ( 1 << PC0 ); //set PC0 output TCCR1A = (1 << WGM11); // mode 14, fast pwm, update at top TCCR1B = (1 << WGM13) // tov1 flag set on top | (1 << WGM12) // top = ICR1 | (1 << CS11) // clock select clk/64 | (1 << CS10); ICR1 = 255; TCCR1A |= (1 << COM1A1); //don´t invert OCR1A = 0; //start value while(1) { /*Test automatic inrementation of OCR1A OCR1A ++; _delay_ms(10); if (OCR1A >=255) { OCR1A = 0; } */ if (!(PINB & (1 << PB0))) //if PB0 is low then (bec. PB0 --> Pull up) { PORTC |= (1 << PC0); //set PC0 high OCR1A = OCR1A+1; //inc OCR1A _delay_ms(1000); //delay time for switch }//if (!(PINB & (1 << PB0))) else //else { PORTC &= ~(1 << PC0); //set PC0 low }//else if (!(PINB & (1 << PB0))) if (OCR1A >=10) //if OCR1A is 255 then { OCR1A =0; //reset OCR1A }//if (OCR1A >=255) }//while(1) return 0; }//int main (void)
Vielen Dank im Voraus
Gruß Finwe0815







Zitieren

Lesezeichen