- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

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

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

    Praxistest und DIY Projekte
    Danke für eure Hilfe!

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.03.2007
    Beiträge
    176
    Zitat Zitat von RIFMAN
    Danke für eure Hilfe!
    hats denn geholfen ? und vor allem was ?

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    Ja, jetzt gehen die LED's an und aus auf Tastendruck, nur das Problem ist,
    solange ich auf Taste 1 bzw. Taste 2 drücke ist der Processor totol mit der entsprechenden Led beschäftigt er kann nichts anders machen, woran kann das denn liegen?
    der Code lautet:



    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 
    DDRD &= ~(0x0c);
    PORTD &= 0x00;
    
    
    while(1) 
       { 
         
         if(PIND & T1)
           {
    	    while(PIND & T1)
    	    if(PORTD & LED1) 
              
    		   {
    		     
    			PORTD &= ~LED1; 
               }
            else 
               {
    		    
    			PORTD |= LED1;
    		   }  	
           }
        
    	if(PIND & T2)
          { 
            while(PIND & T2)
    		if(PORTD & LED2) 
             {
    		 PORTD &= ~LED2; 
             }
            else 
            {
    	     PORTD |= LED2;
    		}  	
    	
    	 }
       }	     
    return 0;
    }

  4. #14
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Sag mal, verendest du nicht das AVR-Studio? Das ist genau für solche kleine Progs zum simulieren geeignet, aber auch für größere Prog.
    Was glaubst du was der µC hier macht "while(PIND & T1) " solange du auf die Taste drückst.
    Hubert

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    Sag mal, verendest du nicht das AVR-Studio? Das ist genau für solche kleine Progs zum simulieren geeignet, aber auch für größere Prog.
    Doch, aber was hat das mit meinem Problem zu Tun?
    Was glaubst du was der µC hier macht "while(PIND & T1) " solange du auf die Taste drückst.
    Hubert
    while(PIND&T1) : damit bleibt die Led an- bzw. ausgeschaltet wenn ich auf die Taste drücke.
    MfG

  6. #16
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Und wenn du das simuliert hättest dann müsstest du auch wissen das solange du die Taste drückst das dieser Teil:
    while(PIND & T1)
    if(PORTD & LED1)

    {

    PORTD &= ~LED1;
    }
    else
    {

    PORTD |= LED1;
    }
    nicht verlassen wird solange du die Taste gedrückt hältst und somit sich auch im Rest des Progs nichts tut.
    Ausserdem flimmert die LED in der Zeit.
    Hubert

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    03.04.2007
    Ort
    Frankfurt/M
    Beiträge
    67
    Danke Hubert!
    ich habe es jetzt so gelöst:
    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 SUM  0x80;
    
    int main() 
    { 
    uint8_t release1;
    uint8_t release2;
    DDRD |= 0xE0;//PD5,PD6,PD7 als Ausgänge setzen 
    DDRD &= ~(0x0c);
    PORTD &= 0x00;
    
    release1 = 0x01;
    release2 = 0x01;
    
    while(1) 
    { 
        
      if((PIND & T1) && (release1 == 0x01))
      {
        release1 = 0x00;      
        if(PORTD & LED1) 
    	{
    		PORTD &= ~LED1;
    		PORTD &= ~SUM; 
    	}
        else 
    	{
    		PORTD |= LED1;
    		PORTD |= SUM;
    	}
           	
      }
      else
      {
    	if (!(PIND & T1))
    	{
    	  release1 = 0x01;
    	}
      }
    
           
      if ((PIND & T2) && (release2 == 0x01))
      { 
        release2 = 0x00;      
      	if(PORTD & LED2) 
        {
    		PORTD &= ~LED2;
    		PORTD &= ~SUM; 
        }
        else 
        {
    		PORTD |= LED2;
    		PORTD |= SUM;
    	}  	
      }
      else		
      {		
    	if (!(PIND & T2))
    	{ 
    	  release2 = 0x01;
        }
      }	     
    }
    
    return 0;
    }
    kann noch eine bessere Lösung?
    MfG

  8. #18
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Hier ist was interessantes über Tasten entprellen:
    http://www.mikrocontroller.net/articles/Entprellung

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.03.2007
    Beiträge
    176
    Zitat Zitat von RIFMAN
    Danke Hubert!
    ich habe es jetzt so gelöst:

    kann noch eine bessere Lösung?
    MfG
    hab mir deine nicht angesehen, aber es gibt doch so nette defines

    #include <avr/sfr_defs.h>

    #define _TASTER1_PC PC4
    #define _TASTER2_PC PC5

    dazu das obligatorische

    DDRC &=~ (1 << _TASTER1_PC); // Pin PC4 input TASTER
    DDRC &=~ (1 << _TASTER2_PC); // Pin PC5 input TASTER

    PORTC |= (1 << _TASTER1_PC); // Pin PC4 pull-up enabled
    PORTC |= (1 << _TASTER2_PC); // Pin PC5 pull-up enabled



    if(bit_is_clear(PINC, _TASTER1_PC))
    { lcd_gotoxy(10,0); lcd_puts("T1"); }
    else
    { lcd_gotoxy(10,0); lcd_puts(" "); }

    if(bit_is_clear(PINC, _TASTER2_PC))
    { lcd_gotoxy(14,0); lcd_puts("T2"); }
    else
    { lcd_gotoxy(14,0); lcd_puts(" "); }

    das bit_is_clear(
    gibt es für den der mag auch als bit_is_set(

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Labornetzteil AliExpress