- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Warum kann ich 2 LED's mit diesem Programm nicht ansteuern.!

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67

    Warum kann ich 2 LED's mit diesem Programm nicht ansteuern.!

    Anzeige

    Praxistest und DIY Projekte
    Ich will 2LED's auf Tastendruck an und ausschalten aber leider klappt es nicht was ist denn in meinem Programm Falsch!
    Code:
    #include <avr/io.h> 
    //#define F_CPU 16000000
    //#include <avr/delay.h>
    
    //extern void wait(uint8_t T);
    
    #define T1 0x04
    #define T2 0x08
    #define LED1 0x20
    #define LED2 0x40
    #define LED1AUS 0xDF
    #define LED2AUS 0x9F
    
    int main() 
    { 
    
    DDRD |= 0x60;//PD5 und PD6 als Ausgänge setzen 
    
    
    while(1) 
       { 
       if (PIND & T1) 
         {
    	   if(PORTD & LED1)
    	   { 
             PORTD &= LED1AUS; 
           } 
           else  
           { 
             PORTD |= LED1; 
           } 
         }
       if (PIND & T2)
         {
    	   if(PORTD & LED2)
    	   { 
             PORTD &= LED2AUS; 
           } 
           else  
           { 
             PORTD |= LED2; 
           } 
         }
    	} 
    return 0;
    }

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    36
    Beiträge
    373
    hallo,
    wie hast du denn deine taster angeschlossen. einfach nur an 5V und nach dem taster auf den mega oder an gnd und dann zum mega. wenn du sie auf gnd hast musst du die internen pull-up widerstände an den tastenpins noch aktivieren mit port und dann eben die an denen du sie brauchst, da der AVR immer einen definierten pegel braucht. such einfach mal im forum nach pull up widerstand müsste man schon was drunter finden.
    mfg franz

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    Hallo Franz,
    die Taster habe ich auf High angeschlossen,das hast auch beim anschalten funktioniert ,jetzt will die an und ausschalten, es geht irgendwie nicht!

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    36
    Beiträge
    373
    hallo,
    hast du an den tastern externe pull up widerstände. ansonsten hängt der pin in der luft wenn der taster nicht gedrückt ist und schaltet wirr je nach lust und laune. guck dir mal die seite an http://www.mikrocontroller.net/artic...riff_auf_Ports und schreib danach vielleicht nochmal.
    mfg franz

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    36
    Beiträge
    373
    hallo nochmal,
    also ich glaub ich weiß jetz deinen fehler und zwar überprüfst du ja dauernd den eingang und wenn du jetz eine taste drückst dann ist sie ja nicht nur ganz kurz aktiv sondern sie prellt und ist läger high und wieder low. du musst also entweder deine tasten entprellen mit einer geeigneten wartezeit oder zum testen einfach mal in die schleife eine delay 10ms einbauen.
    mfg franz

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    ich übe grad auf einem Evaluation Board, da ist schon alles intern geregelt, mit dieser code hat leider auch nicht funktioniert!
    Code:
    #include <avr/io.h> 
    //#define F_CPU 16000000
    //#include <avr/delay.h>
    
    //extern void wait(uint8_t T);
    
    #define T1 0x04
    #define T2 0x08
    #define LED1 0x20
    #define LED2 0x40
    
    
    int main() 
    { 
    
    DDRD |= 0x60;//PD5 und PD6 als Ausgänge setzen 
    
    
    while(1) 
       { 
       if (PIND & T1) 
         {
    	     do{ PORTD &= ~LED1;} //LED1 ausschalten
             while(PORTD & LED1); //wenn LED1 auf HIGH ist
            
             PORTD |= LED1; //LED1 anschalten
    	 }
       if (PIND & T2) 
         {
    	     do{ PORTD &= ~LED2;} //LED2 ausschalten
             while(PORTD & LED2);//wenn LED2 auf HIGH ist
            
             PORTD |= LED2;//LED2 anschalten 
    	 }
    	} 
    return 0;
    }

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.03.2007
    Beiträge
    176
    Zitat Zitat von RIFMAN
    ich übe grad auf einem Evaluation Board, da ist schon alles intern geregelt, mit dieser code hat leider auch nicht funktioniert!
    dann schau hier
    https://www.roboternetz.de/phpBB2/vi...=271207#271207

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Wemm du einen Taster drückst, wird ja eine LED dauernd umgeschaltet. Nach dem Loslassen des Tasters hat die LED dann einen quasi zufälligen Zustand.

    Du musst deine Taster also entprellen.

    Hier eine Version ohne entprellte Taster, die einfach nur die Tastenzustände an den LEDs reflektiert (also nicht umschaltet).

    Wenn das nicht funktioniert, hast du was falsch verdrahtet.

    Code:
    #include <avr/io.h> 
    
    #define T1 (1 << 2)
    #define T2 (1 << 3)
    #define LED1 (1 << 5)
    #define LED2 (1 << 6)
    
    int main() 
    {
        // LEDn als OUT
        DDRD  |= LED1;
        DDRD  |= LED2;
        
        // PullUps an Tn
        PORTD |= T1;
        PORTD |= T2;
    
        while(1) 
        { 
            if (PIND & T1) 
            {
                PORTD &= ~LED1;
            }
            else  
            { 
                PORTD |= LED1; 
            } 
            
            if (PIND & T2)
            {
                PORTD &= ~LED2; 
            } 
            else  
            { 
                PORTD |= LED2; 
            }
        } // while (1)
    } // main
    Disclaimer: none. Sue me.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    Wemm du einen Taster drückst, wird ja eine LED dauernd umgeschaltet. Nach dem Loslassen des Tasters hat die LED dann einen quasi zufälligen Zustand.

    Du musst deine Taster also entprellen.

    Hier eine Version ohne entprellte Taster, die einfach nur die Tastenzustände an den LEDs reflektiert (also nicht umschaltet).

    Wenn das nicht funktioniert, hast du was falsch verdrahtet.
    PORTD |= T1;
    PORTD |= T2;
    warum hast du die pull up's gesetzt? die Tasten sind ja an High angeschlossen. das verstehe ich nicht!

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.03.2007
    Beiträge
    176
    Zitat Zitat von RIFMAN
    warum hast du die pull up's gesetzt? die Tasten sind ja an High angeschlossen. das verstehe ich nicht!
    kann man das hier riechen ? wo ist dein Schaltplan ?

    ich meine immer noch , besser wär ein GND schalten mit internem Pullup
    wenn es anders sein soll bitte sehr, dann alles umdrehen

    Tasten entprellen würde ich mit _delay_ms(50) machen

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress