- LiTime Speicher und Akkus         
Ergebnis 1 bis 8 von 8

Thema: Programm schreiben..!

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

    Programm schreiben..!

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo!

    wie würdet ihr ein Programm schreiben, das 2 LED s an und ausschaltet
    durch 2 Taster. LED1 ist an PD5 und LED2 an PD6 bzw. Taster1 an PD2 und Taster2 an PD3 angeschlossen.

    ich brauche das Programm zum Vergleichen!
    Danke

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    33
    Beiträge
    522
    so etwa:
    Code:
    #include <avr/io.h>
    
    #define LED1 PD5
    #define LED2 PD6
    #define T1 PD2
    #define T2 PD3
    
    int main()
    {
    	DDRD=(1<<LED1)|(1<<LED2);
    	while(1)
    	{
    		PORTD=(PIND&~((1<<T1)|(1<<T2)))>>(LED1-T1);
    	}
    }
    MfG Mark

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    Danke!
    hat aber leider nicht funktioniert!

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    33
    Beiträge
    522
    Das hier aber:
    Code:
    #include <avr/io.h> 
    
    #define LED1 PD5 
    #define LED2 PD6 
    #define T1 PD2 
    #define T2 PD3 
    
    int main() 
    { 
       DDRD=(1<<LED1)|(1<<LED2); 
       while(1) 
       { 
          PORTD=(PIND&((1<<T1)|(1<<T2)))<<(LED1-T1); 
       } 
    }
    Das '~' nach 'PIND&' musste weg.

    MfG Mark

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    Danke! dies mal hat das funktioniert!
    kannst du mir bitte diese Zeile erklären!
    PORTD=(PIND&((1<<T1)|(1<<T2)))<<(LED1-T1);
    Danke!

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    ich habe es nämlich so gelöst:
    #include <avr/io.h>


    #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)
    {
    PORTD |= LED1;
    }
    if (PIND & T2)
    {
    PORTD |= LED2;
    }
    else
    {
    PORTD &= 0x00;
    }
    }
    return 0;
    }

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    33
    Beiträge
    522
    Die Zeile "PORTD=(PIND&((1<<T1)|(1<<T2)))<<(LED1-T1);" könnte man etwa so auseinander nehmen:

    Code:
    unsigned char temp;
    
    temp=PIND;		//temp hat jetzt den Wert von PIND
    temp=temp&((1<<T1)|(1<<T2));	//alle bits in temp, ausser T1 und T2 sind auf 0
    temp=temp<<(LED1-T1);	//verschiebt den Inhalt vom temp um so viele Stellen nach 
    //links, wie LED1 von T1 entfernt ist. In Deinem Fall 3. Der Zustand von T1 ist 
    //jetzt im 5ten bit, der Zustand von T2 in 6ten. Also genau da, wo auch die 
    //beiden LEDs sind
    PORTD=temp;	//Jetzt hat LED1 den Zustand von T1 und LED2 den Zustand von T2
    "PORTD=(PIND&((1<<T1)|(1<<T2)))<<(LED1-T1);" ist einfach nur eine Zusammenfassung davon.

    MfG Mark

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    Danke!
    findest du mein Programm zu lang ?

Berechtigungen

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

LiTime Speicher und Akkus