Anfängerfrage zur Software PWM

Thema: Anfängerfrage zur Software PWM

  1. Daaniel:

    Anfängerfrage zur Software PWM

    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;
    }
     
  2. Avatar von Hubert.G

    Hubert.G:
    PullUp auf PortB?
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at
     
  3. Avatar von radbruch

    radbruch:
    Tastenabfrage nicht in der while()-Schleife?

    Kein Code-Tag verwendet?

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!
     
  4. Avatar von ePyx

    ePyx:
    Zitat Zitat von radbruch Beitrag anzeigen
    Tastenabfrage nicht in der while()-Schleife?
    Hab ich auch gerade gedacht. Würde die Abfrage eher so formulieren :
    Code: [Ansicht]
    if ( PINB & (1<<PBX ) )
    {
        was machen
    }
    Des Weiteren

    Code: [Ansicht]
    PORTA|= (1<<PB0);	
    PORTA|= (1<<PB1);
    ist zwar funktional richtig, aber formal nicht sauber. Besser so schreiben :

    Code: [Ansicht]
    PORTA|= (1<<PA0);	
    PORTA|= (1<<PA1);
    Grüße,
    Daniel
     
  5. Daaniel:
    Super Danke. Jetzt funktioniert es