- LiFePO4 Speicher Test         
Ergebnis 1 bis 8 von 8

Thema: 7 Segment Anzeige

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.11.2003
    Ort
    Aachen
    Alter
    42
    Beiträge
    8

    7 Segment Anzeige

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    ich habe ein 7 Segement Anzeige mit Common Anode.
    Ich wollte es direkt mit einer A90S2313 antreiben. Die Pins habe ich
    mit der Vorwiderständen an den PORTB(als Ausgang programmiert) anschlossen.

    Und wollte jetzt wissen wie ich die gemeinsame Anode anschliessen muss.
    Wenn ich es an plus oder GND anschliesse bringt es nichts.

    Grüsse,
    Ali

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Wenn es Common Anode ist, dann muss diese an Plus. Die Anzeige leuchtet wenn der Ausgang auf low ist.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    23.11.2003
    Ort
    Aachen
    Alter
    42
    Beiträge
    8
    Haalo Hurbet,
    danke für deine schnelle Antwort.
    Jetzt habe ich das Problem, das es immer Leuchtet. Nur wenn ich die Taste drücke wird es nur heller. Es sollte eigentlich nur dann leuchten wenn die Taste bestätigt ist.

    Grüsse
    Ali

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Da ist dann was falsch. Zeig einmal deine Schaltung und das Programm.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    23.11.2003
    Ort
    Aachen
    Alter
    42
    Beiträge
    8
    Meine Schaltung hatte fehler, hab sie jetzt korrigiert.
    Und jetzt funktioniert es auch.

    Habe aber jetzt eine andere Problem, unswar wenn ich die Taste
    einmal betätige soll die Anzeige eins und wenn ich es
    zum zweiten mal bestätige 2 Anzeigen. Aber wenn ich es gedrückt halte zählt es weiter.
    Wie kann ich es verhindern das es weiter zählt??





    Code:
    #include "avr/io.h"
    #include <util/delay.h>
    #ifndef F_CPU
    #warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
    #define F_CPU 4000000UL     /* Quarz mit 3.6864 Mhz  */
    #endif
    
    int main(void)
    {
      
    
    	PORTD |= (1<<PD6);
    	DDRD &=  ~(1<<PD6);
    	
    	PORTB = 0xff;
    	DDRB  = 0xff;
    	
    	uint8_t i = 0;
    
    
      while (1)
        {
         	
    		if (!( PIND  & (1<<PIND6) ))  //Wenn Taste betätigt
           { 
    	       _delay_ms(50); 
    		  i= i + 1;
    		  
    			switch (i)
    			{
    	     
    			case 1 : PORTB = 0x4F;   
    						break;
    			case 2 : PORTB = 0x12;
    						break;
    			case 3 : PORTB = 0x06;
    						break;
    			case 4 : PORTB = 0x4C;
    						break;
    			case 5 : PORTB = 0x24;
    						break;
    			case 6 : PORTB = 0x20;
    						break;
    			case 7 : PORTB = 0x0F;
    						break;
    			case 8 : PORTB = 0x00;
    						break;
    			case 9 : PORTB = 0x04;
    						i=0;	
    						break;
    						
    		 
    			}
          	 }  
    		
    		
    
    
          
    	}
    }
    Grüsse Ali

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Ich kann nicht sagen ob es das gelbe vom Ei ist, aber es ist zumindest eine Möglichkeit.
    Code:
    #include "avr/io.h"
    #include <util/delay.h>
    #ifndef F_CPU
    #warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
    #define F_CPU 4000000UL     /* Quarz mit 3.6864 Mhz  */
    #endif
    unsigned char Tastenflag =1;
    
    int main(void)
    {
     
    
       PORTD |= (1<<PD6);
       DDRD &=  ~(1<<PD6);
       
       PORTB = 0xff;
       DDRB  = 0xff;
       
       uint8_t i = 0;
    
    
      while (1)
        {
          
    	  if((!(Tastenflag))&&( PIND  & (1<<PIND6))){	// Wenn Taste nicht gedrückt und Tastenflag=0 
    	  	Tastenflag =1;							// Tastenflag wieder setzen
    	    }
          if ((Tastenflag)&&(!( PIND  & (1<<PIND6) )))  //Wenn Taste betätigt und Tasteflag gesetzt
           {
      //        _delay_ms(50);
            i= i + 1;
           Tastenflag = 0;		// Tastenflag auf 0 setzten
             switch (i)
             {
            
             case 1 : PORTB = 0x4F;   
                      break;
             case 2 : PORTB = 0x12;
                      break;
             case 3 : PORTB = 0x06;
                      break;
             case 4 : PORTB = 0x4C;
                      break;
             case 5 : PORTB = 0x24;
                      break;
             case 6 : PORTB = 0x20;
                      break;
             case 7 : PORTB = 0x0F;
                      break;
             case 8 : PORTB = 0x00;
                      break;
             case 9 : PORTB = 0x04;
                      i=0;   
                      break;
                      
          
             }
              }
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  7. #7
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die verzögerung hat schon ihren Sinn zum Entprellen. Da sollte auch beim 2 ten fall eine rein.

    Man sollte wohl auch noch den Fall I = 10 vorsehen, und erst da I wieder auf 0 setzen.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    23.11.2003
    Ort
    Aachen
    Alter
    42
    Beiträge
    8
    So jetzt ist meine Code fertig \/ .
    Ich bedanke mich euch beiden für eure Hilfe recht herzlich.

    Und so sieht meine fertige Code aus:

    Code:
    #include "avr/io.h"
    #include <util/delay.h>
    
    
    
    unsigned char Tastenflag =1;
    
    int main(void)
    {
     
    
       PORTD |= (1<<PD6);
       DDRD &=  ~(1<<PD6);
       
       PORTB = 0x01;
       DDRB  = 0xff;
       
       uint8_t i = 0;
    
    
      while (1)
        {
         
         if((!(Tastenflag))&&( PIND  & (1<<PIND6))) 
    	   {   // Wenn Taste nicht gedrückt und Tastenflag=0
            Tastenflag =1;                     // Tastenflag wieder setzen
    		
    		_delay_ms(100);
    		
           }
    	   
    	   
          if ((Tastenflag)&&(!( PIND  & (1<<PIND6) )))  //Wenn Taste betätigt und Tasteflag gesetzt
           {
    	   
            _delay_ms(100);
      
            i +=1;
    		
            Tastenflag = 0;      // Tastenflag auf 0 setzten
             
    		 switch (i)
             {
    	
           
             case 1 : PORTB = 0x4F;   
                       break;
             case 2  : PORTB = 0x12;
                       break;
             case 3  : PORTB = 0x06;
                       break;
             case 4  : PORTB = 0x4C;
                       break;
             case 5  : PORTB = 0x24;
                       break;
             case 6  : PORTB = 0x20;
                       break;
             case 7  : PORTB = 0x0F;
                       break;
             case 8  : PORTB = 0x00;
                       break;
             case 9  : PORTB = 0x04;
    				   break;
    		 case 10 : PORTB = 0x08; // 10 = A	
                       i=0;   
                       break;
                     
         
             }
        
    		}
    		
        }
    }

    Grüsse Ali

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad