PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfängerfrage zur Software PWM



Daaniel
04.04.2012, 20:32
Hallo. Ich versuche zur Zeit meine ersten Versuche der C Programmierung. Ich nutze die Programmiersoftware AVR Studio5 und das Testboard von AVR (STK500). Per Software PWM habe ich es bereits geschafft eine LED zu dimmen. Nun möchte ich über einen Taster die Helligkeit auf einen bestimmten Wert einstellen. Das funktioniert leider nicht. Es funktioniert soweit alles außer die Tasterabfrage (die erste "if Schleife"). Kann mir bitte Jemand sagen wo das Problem liegt? Danke Gruß Daniel

#include <avr/io.h>
#define F_CPU 16000000UL // Systemtakt in Hz




int main( void )
{
uint8_t pwm_soll=70; //Dort stelle ich die Helligkeit der LED ein
uint8_t pwm_phase=0;

DDRA=0b11111111; //PortA Ausgänge
DDRB=0b00000000; //PORTB Eingänge

if (PINB==0b11111110) //Wenn der Taster am PINB0 gedrückt wird, ändere ich PWM soll auf 50
{
pwm_soll=50;
}

while (1)


{
if(pwm_soll==pwm_phase)
{
PORTA|= (1<<PB0);
PORTA|= (1<<PB1);
}

pwm_phase++;
if (pwm_phase==100)
{
pwm_phase=0;
PORTA&=~(1<<PB0);
PORTA&=~(1<<PB1);
}


}
return 0;
}

Hubert.G
04.04.2012, 20:46
PullUp auf PortB?

radbruch
04.04.2012, 20:55
Tastenabfrage nicht in der while()-Schleife?

Kein Code-Tag verwendet?

Gruß

mic

ePyx
04.04.2012, 20:59
Tastenabfrage nicht in der while()-Schleife?


Hab ich auch gerade gedacht. Würde die Abfrage eher so formulieren :


if ( PINB & (1<<PBX ) )
{
was machen
}


Des Weiteren



PORTA|= (1<<PB0);
PORTA|= (1<<PB1);


ist zwar funktional richtig, aber formal nicht sauber. Besser so schreiben :



PORTA|= (1<<PA0);
PORTA|= (1<<PA1);

Daaniel
04.04.2012, 21:33
Super Danke. Jetzt funktioniert es ;)