- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 4 von 4

Thema: Probleme mit Steuerprogramm für 104x7 Pixel LED-Anzeige

  1. #1
    Neuer Benutzer
    Registriert seit
    27.12.2006
    Alter
    42
    Beiträge
    2

    Probleme mit Steuerprogramm für 104x7 Pixel LED-Anzeige

    Anzeige

    E-Bike
    Hallo zusammen , das ist mein erster Post hier.

    Zu meine Problem ich hab hier Zuhaus eine LED-Anzeige liegen für die ich ein Steuerprogramm geschrieben habe.
    Wenn ich Zeilen einzeln anspreche funktioniert das auch so wie es soll , nur sobald ich alle Zeilen anspreche "flackert" jede zweite Zeile.
    Vieleicht sehr ihr da in meinem Programmcode ihrgend etwas was man anders machen sollte.


    main.c
    Code:
    int main(void)
    {
    	init_display();
    	
    	printf("Programm gestartet !\n");
    	
    	
    uint8_t text[7][56] = 
    {{0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}	
    ,{0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
    ,{0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}	
    ,{0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
    ,{0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
    ,{0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
    ,{0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}	};
    	
    	
    	while(1)
    	{
    		uint8_t i;
    		for(i=0;i<7;i++)
    		{
    			anzeigen(text[i],i);
    		}
    	}
    		
    	return 0;
    }
    led.c
    Code:
    /*
    7 Zeilen
    8 Spalten
    
    
    14 Segmente:
    
      0| x x x x x x x x
    Z 1| x x x x x x x x
    e 2| x x x x x x x x
    i 3| x x x x x x x x
    l 4| x x x x x x x x
    e 5| x x x x x x x x
    n 6| x x x x x x x x
      -------------------
       | 0 1 2 3 4 5 6 7 . . .
           Spalten  	
    
    
    PORTA
    
    PA0 Clock
    PA1 Daten
    
    PA2 Enable Zeilen
    
    PA3-PA5 Binär Zeile 1-7 
    
    */
    #include <io.h> 
    #include <stdlib.h>
    #include <stdio.h>
    #include <util/delay.h>
    
    
    #define CHECKBIT(ADDRESS,BIT) (ADDRESS & (1<<BIT))
    #define SETBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
    #define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
    #define TOGGLEBIT(ADDRESS, BIT) ((ADDRESS) ^= (1 << (BIT)))
    
    
    #define MAX_ZEICHEN 56
    
    #define CLOCK PA0
    #define DATEN PA1
    #define ENABLE PA2 
    #define ZEILE2_0 PA3
    #define ZEILE2_1 PA4
    #define ZEILE2_2 PA5
    
    
    void init_display()
    {
    	// Pin 0 bis 5 als Ausgangdefinieren
    	DDRA = (1<<DDA0) | (1<<DDA1) | (1<<DDA2) | (1<<DDA3) | (1<<DDA4) | (1<<DDA5);
    	
    	CLEARBIT(PORTA,ENABLE);// Enable auf 0 setzen  -> Zeilen deaktiviert.
    	CLEARBIT(PORTA,CLOCK); // Clock auf 0 
    	CLEARBIT(PORTA,DATEN); // Daten auf 0 
    	
    	SETBIT(PORTA,ZEILE2_0); //1
    	CLEARBIT(PORTA,ZEILE2_1); //0  Zeile 0 ausgewählt
    	CLEARBIT(PORTA,ZEILE2_2); //0  
    	
    }
    
    void select_zeile(uint8_t zeile)
    {
    	if(zeile == 0)
    	{
    	SETBIT(PORTA,ZEILE2_0); //1
    	CLEARBIT(PORTA,ZEILE2_1); //0  Zeile 0 ausgewählt
    	CLEARBIT(PORTA,ZEILE2_2); //0 
    	}
    	
    	if(zeile == 1)
    	{
    	CLEARBIT(PORTA,ZEILE2_0); //0
    	SETBIT(PORTA,ZEILE2_1); //1  Zeile 1 ausgewählt
    	CLEARBIT(PORTA,ZEILE2_2); //0 
    	}
    	
    	if(zeile == 2)
    	{
    	SETBIT(PORTA,ZEILE2_0); //1
    	SETBIT(PORTA,ZEILE2_1); //1  Zeile 2 ausgewählt
    	CLEARBIT(PORTA,ZEILE2_2); //0 
    	}
    
    	if(zeile == 3)
    	{
    	CLEARBIT(PORTA,ZEILE2_0); //0
    	CLEARBIT(PORTA,ZEILE2_1); //0  Zeile 3 ausgewählt
    	SETBIT(PORTA,ZEILE2_2); //1 
    	}
    	
    	if(zeile == 4)
    	{
    	SETBIT(PORTA,ZEILE2_0); //1
    	CLEARBIT(PORTA,ZEILE2_1); //0  Zeile 4 ausgewählt
    	SETBIT(PORTA,ZEILE2_2); //1 
    	}
    	
    	if(zeile == 5)
    	{
    	CLEARBIT(PORTA,ZEILE2_0);//0
    	SETBIT(PORTA,ZEILE2_1); //1  Zeile 5 ausgewählt
    	SETBIT(PORTA,ZEILE2_2); //1 
    	}
    	
    	if(zeile == 6)
    	{
    	SETBIT(PORTA,ZEILE2_0); //1
    	SETBIT(PORTA,ZEILE2_1); //1  Zeile 5 ausgewählt
    	SETBIT(PORTA,ZEILE2_2); //1 
    	}
    
    }
    
    
    
    void anzeigen(uint8_t data[], uint8_t zeile)
    {
    	uint8_t k;
    	
    	//Daten in Register laden
    	for (k = MAX_ZEICHEN; k!=0; k--) 
    	{	
    		
    		if (data[k] !=0) 				//Welchen Status hat das nächste Bit
    		{
    			SETBIT(PORTA,DATEN); 		//PORT high, falls Bit == 1;
    		}
    		else
    		{
    			CLEARBIT(PORTA,DATEN); 		//PORT low, sonst
    		}	
    		
    		SETBIT(PORTA,CLOCK);  			//CLOCK AN, Pegel übernehmen
    		_delay_us(20);
    		CLEARBIT(PORTA,CLOCK);	  		//CLOCK AUS
    	}
    
    	
    	//Zeile wählen und anzeigen
    	
    	select_zeile(zeile);			//Zeile wählen
    	_delay_ms (20);
    	SETBIT(PORTA,ENABLE);			//Gewählte Zeile einschalten	
    	_delay_ms (20);
    	CLEARBIT(PORTA,ENABLE);			//Gewählte Zeile ausschalten
    }
    Es funktioniert alles soweit, es geht halt nur um "logischefehler" die ich so nicht sehe.

    Wäre nett wenn sich das mal jemand mit mehr ahnung als ich ansehen könnte.

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    flacker.. kann gut sein das es vom Mikrocontroller her kommt, vielleicht wenn du die daten schneller raustaktest?

  3. #3
    Neuer Benutzer
    Registriert seit
    27.12.2006
    Alter
    42
    Beiträge
    2
    Das hab ich schon probiert , naja flackern is vieleicht etwas blöd beschrieben , es ist mehr so das jede zweite zeile immer um 2-3 pixel nach links oder rechts springt.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    der einfachste fehler wäre, es stimmt z.b. ein nuller nicht in deiner textmatrix?
    dass du dich da vielleicht vertan hast?

Berechtigungen

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

LiFePO4 Speicher Test