Habe ich korrigiert Andreas, das hatte ich falsch interpretiert, ich dachte er springt aus der While Schleife.:p
Druckbare Version
Habe ich korrigiert Andreas, das hatte ich falsch interpretiert, ich dachte er springt aus der While Schleife.:p
Hallo, habe die Fehler beseitigt und jetzt geht alles wie gewollt, ich bin davon ausgegangen das OCR0A dann automatisch zu "b" wird da der wert "10" ist, habe dem ganzen wohl zuviel Logisches denken zugemutet und den absatz im AVR Buch vollkommen falsch interpretiert ... :o
Auf dem Ozi kann ich auch schön sehen wie sich das PWM Signal ändert....
Danke für die Tipps
Code:
#include <avr/io.h>
#define F_CPU 1200000UL // 1,2 MHz
#include <util/delay.h>
int main (void)
{
DDRB =(1<<PB0); // Ausgang PB0
TCCR0A=(1<<COM0A1) | (1<<WGM00) | (1<<WGM01); // PWM Phase Korrigieren, OCR0A an TOP setzen
TCCR0B=_BV(CS01) ; // Prescaler 8
int a=5; // Min Wert für Lichtstärke
int b=255 // Max Wert für Lichtstärke
while (1)
{
OCR0A = a; // Startpunkt mit Min Lichtstärke
if (PINB & (1<<PB3)) // Prüfe auf High Signal an PB3
{
if (a <255) a++; // Wenn Wahr dann erhöhe in 5s auf den Wert "b"
_delay_ms(5);
}
else // (!(PINB & (1<<PB3))) // Prüfe ob PB3 Low wenn Wahr zurück zu "a"
{
if (a >10) a--; // Wenn solange der Wert Max gößer als Min dann a--
_delay_ms(5);
}
}
return 0;
}