DarkFire
21.11.2005, 07:52
Hallo,
ich wollte mit meinem Mega32 eine LED mit der Pulsweitenmodulation dimmen. Dazu habe ich folgenden Code verwendet:
int main(void)
{
uint16_t hell = 500;
PORTD = 0x00; //PORTD alle Pins low
DDRD = 0x30; //PORTD Pin 4 und 5 als Ausgang
TCCR1A = (1<<WGM10) | (1<<WGM11) |(1<<COM1A1); //10 Bit Phase Correct PWM, max Wert 0x03FF
TCCR1B = (1<<CS10) | (1<<CS11); //Takt = CPU-Takt/8
OCR1A = hell; //Vergleichswert
}
Dies funktionierte auch einwandfrei.
Nur will ich den Helligkeitswert per Taster verändern. Dazu habe ich den Code um folgendes erweitert:
while(1){
DDRB = 0x00; //Port B alle Pins Eingang
if ((PINB & (0x10))==0) //Wenn Taster 1 gedrück (Pin 2 auf low)
{
if (hell < 0x03F6)
{
hell = hell +10; //Erhöhe Helligkeit um 10
_delay_ms(1); //Verzögerung
}
}
if ((PINB & (0x20))==0) //Wenn Taster 2 gedrück (Pin 3 auf low)
{
if (hell > 0x0009)
{
hell= hell -10; //Verringere Helligkeit um 10
_delay_ms(1); //Verzögerung
}
}
//PWM-Code
}
Das Problem ist nur, dass ich zwar den Wert ändern kann, jedoch die PWM an sich nicht mehr funktioniert.
Mache ich irgendetwas falsch?
Chris
ich wollte mit meinem Mega32 eine LED mit der Pulsweitenmodulation dimmen. Dazu habe ich folgenden Code verwendet:
int main(void)
{
uint16_t hell = 500;
PORTD = 0x00; //PORTD alle Pins low
DDRD = 0x30; //PORTD Pin 4 und 5 als Ausgang
TCCR1A = (1<<WGM10) | (1<<WGM11) |(1<<COM1A1); //10 Bit Phase Correct PWM, max Wert 0x03FF
TCCR1B = (1<<CS10) | (1<<CS11); //Takt = CPU-Takt/8
OCR1A = hell; //Vergleichswert
}
Dies funktionierte auch einwandfrei.
Nur will ich den Helligkeitswert per Taster verändern. Dazu habe ich den Code um folgendes erweitert:
while(1){
DDRB = 0x00; //Port B alle Pins Eingang
if ((PINB & (0x10))==0) //Wenn Taster 1 gedrück (Pin 2 auf low)
{
if (hell < 0x03F6)
{
hell = hell +10; //Erhöhe Helligkeit um 10
_delay_ms(1); //Verzögerung
}
}
if ((PINB & (0x20))==0) //Wenn Taster 2 gedrück (Pin 3 auf low)
{
if (hell > 0x0009)
{
hell= hell -10; //Verringere Helligkeit um 10
_delay_ms(1); //Verzögerung
}
}
//PWM-Code
}
Das Problem ist nur, dass ich zwar den Wert ändern kann, jedoch die PWM an sich nicht mehr funktioniert.
Mache ich irgendetwas falsch?
Chris