-         

Ergebnis 1 bis 10 von 10

Thema: Sehe Fehler nicht

  1. #1
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    23
    Beiträge
    449

    Sehe Fehler nicht

    Anzeige

    Hallo zusammen,

    ich werd noch doof hier... Hier ein Auszug aus dem Quellcode:

    Code:
    void putaintoled (void)
    {
    	unsigned char Pos_2;
    	unsigned char Pos_1;
    
    
    	Pos_1 = 0;
    	Pos_2 = 0;
    	while(Pos_1 <=4)
    	{
    		LEDTable_text[Pos_2] = char_A[Pos_2];
    		Pos_1 = Pos_1 +1;
    		Pos_2 = Pos_1;
    	}
    			
    	LEDTable_text[5] = 0b10000000;
    }
    Wenn ich den jetz so ändere:
    Code:
    void putaintoled (void)
    {
    	unsigned char Pos_2;
    	unsigned char Pos_1;
    
    
    	Pos_1 = 0;
    	Pos_2 = 0;
    	while(Pos_1 <=4)
    	{
    		LEDTable_text[Pos_2] = char_A[Pos_2];
    		Pos_1 = Pos_1 +1;
    		Pos_2 = Pos_2 +1;
    	}
    			
    	LEDTable_text[5] = 0b10000000;
    }
    (es wird nur der rote Teil geändert)

    Dann funktioniert nichts mehr! Bzw. in das Array LEDTable_text wird Anstatt
    Code:
    0b00111111
    0b01001000
    0b01001000
    0b01001000
    0b00111111
    das hier reinkopiert:
    Code:
    0b00000011
    0b00000000
    0b00000000
    0b00000000
    0b00100000
    Ich checks einfach nicht... Pos_1 wird doch genauso behandelt wie Pos_2?!?

    Ich hab erst schon gedacht, das kommt von einem Ram-Überlauf oder sowas (Das Programm ist schon relativ groß), aber wohl eher nicht:
    Code:
    $ avr-size --mcu=atmega32 -C main.elf
    AVR Memory Usage
    ----------------
    Device: atmega32
    
    
    Program:    2262 bytes (6.9% Full)
    (.text + .data + .bootloader)
    
    
    Data:        296 bytes (14.5% Full)
    (.data + .bss + .noinit)
    
    
    EEPROM:      250 bytes (24.4% Full)
    (.eeprom)
    Weis jemand Rat?

    Viele Grüße
    -schumi-

    PS: Das ganze ist für eine LED-Board mit 336 LEDs, um dann einen Text anzuzeigen. Leider habe ich derzeit keine guten Debugmöglichkeiten, da der FTDI-Chip noch nicht so will... Aber der Fehler äußerst sich dadurch, dass bei Code 1 ein "A" angezeigt wird (siehe Array) und bei Code 2 eben nur diese 3 LEDs leuchten...

    [EDIT] Codebeispiele übersichtlicher gemacht
    Geändert von -schumi- (24.08.2011 um 13:47 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.378
    hast du es eventuell mal mit +=1 statt ++ versucht!? klingt gerade ein wenig verwirrden für mich, lässt sich das nicht eventuell anders lösen ? einfach das inkrement des ungeprüften wertes am ende der schleife manuell inkremetieren ?!
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    23
    Beiträge
    449
    @Ceos

    Habe den Code gerade vereinfacht (siehe oben), das Problem bleibt aber

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.378
    zeig bitte auch wie deine arrays deklariert sind, vll. gewinnt man dann mehr überblick ich finds bisher auch seltsam
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    23
    Beiträge
    449
    Ich hab das ganze Projekt jetzt mal kopiert und alles rausgeschmissen, was ich nicht brauche. Hier die LED-Board.c:

    Code:
    #include <avr/io.h>
    #include <avr/pgmspace.h>
    #include <stdlib.h>
    #include <util/delay.h>
    #include "ledboard.h"
    
    
    
    
    const prog_char char_A[6] = {    0b00111111,
                                    0b01001000,
                                    0b01001000,
                                    0b01001000,
                                    0b00111111};
                                    
    const prog_char char_B[6] = {    0b01111111,
                                    0b01001001,
                                    0b01001001,
                                    0b01001001,
                                    0b00110110};
                                    
    const prog_char char_C[6] = {    0b00111110,
                                    0b01000001,
                                    0b01000001,
                                    0b01000001,
                                    0b00100010};
    
    
    unsigned char LEDTable_text[30];
    
    
    void putaintoled (void)
    {
        unsigned char Pos_2;
        unsigned char Pos_1;
    
    
        Pos_1 = 0;
        Pos_2 = 0;
        while(Pos_2 <=4)
        {
            LEDTable_text[Pos_1] = char_A[Pos_2];
            Pos_1 = Pos_1 +1;
            Pos_2 = Pos_2 +1;
        }
                
        LEDTable_text[5] = 0b10000000;
    }
    
    // ------------------------------- Ab hier nur noch Funktionen um den Text mit den LEDs auszugeben -----------------------
    
    
    void PrintByte2LEDs (unsigned char data, unsigned char posonboard) // Spalte der LED-Matrix ansteuern
    {
        unsigned char Data_for_Block_dez = 0;
        if(1)
        {
            BOARDHORIZ_PORT = BOARDHORIZ_PORT & ~BOARDHORIZ1 & ~BOARDHORIZ2 & ~BOARDHORIZ3 & ~BOARDHORIZ4 & ~BOARDHORIZ5 & ~BOARDHORIZ6 & ~BOARDHORIZ7;
            if(data & 0b00000001)
                BOARDHORIZ_PORT = BOARDHORIZ_PORT | BOARDHORIZ1;
            if(data & 0b00000010)
                BOARDHORIZ_PORT = BOARDHORIZ_PORT | BOARDHORIZ2;
            if(data & 0b00000100)
                BOARDHORIZ_PORT = BOARDHORIZ_PORT | BOARDHORIZ3;
            if(data & 0b00001000)
                BOARDHORIZ_PORT = BOARDHORIZ_PORT | BOARDHORIZ4;
            if(data & 0b00010000)
                BOARDHORIZ_PORT = BOARDHORIZ_PORT | BOARDHORIZ5;
            if(data & 0b00100000)
                BOARDHORIZ_PORT = BOARDHORIZ_PORT | BOARDHORIZ6;
            if(data & 0b01000000)
                BOARDHORIZ_PORT = BOARDHORIZ_PORT | BOARDHORIZ7;
                
            if(posonboard<=8)
            {
                BLOCKENABLE_PORT = BLOCKENABLE_PORT &~BLOCKENABLE1;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE2;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE3;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE4;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE5;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE6;
                Data_for_Block_dez = posonboard;
            }
            if((posonboard>8) && (posonboard<=16))
            {
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE1;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT &~BLOCKENABLE2;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE3;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE4;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE5;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE6;
                Data_for_Block_dez = posonboard - 8;
            }
            if((posonboard>16) && (posonboard<=24))
            {
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE1;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE2;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT &~BLOCKENABLE3;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE4;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE5;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE6;
                Data_for_Block_dez = posonboard - 16;
            }
            if((posonboard>24) && (posonboard<=32))
            {
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE1;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE2;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE3;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT &~BLOCKENABLE4;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE5;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE6;
                Data_for_Block_dez = posonboard - 24;
            }
            if((posonboard>32) && (posonboard<=40))
            {
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE1;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE2;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE3;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE4;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT &~BLOCKENABLE5;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE6;
                Data_for_Block_dez = posonboard - 32;
            }
            if((posonboard>40) && (posonboard<=48))
            {
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE1;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE2;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE3;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE4;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE5;
                BLOCKENABLE_PORT = BLOCKENABLE_PORT &~BLOCKENABLE6;
                Data_for_Block_dez = posonboard - 40;
            }
            unsigned char Data_for_Block_bin = 1<<(Data_for_Block_dez-1);
            
            BLOCKDATA_PORT = BLOCKDATA_PORT & ~BLOCKDATA1 & ~BLOCKDATA2 & ~BLOCKDATA3 & ~BLOCKDATA4 & ~BLOCKDATA5 & ~BLOCKDATA6 & ~BLOCKDATA7 & ~BLOCKDATA8;
            if(Data_for_Block_bin & 0b00000001)
                BLOCKDATA_PORT = BLOCKDATA_PORT | BLOCKDATA1;
            if(Data_for_Block_bin & 0b00000010)
                BLOCKDATA_PORT = BLOCKDATA_PORT | BLOCKDATA2;
            if(Data_for_Block_bin & 0b00000100)
                BLOCKDATA_PORT = BLOCKDATA_PORT | BLOCKDATA3;
            if(Data_for_Block_bin & 0b00001000)
                BLOCKDATA_PORT = BLOCKDATA_PORT | BLOCKDATA4;
            if(Data_for_Block_bin & 0b00010000)
                BLOCKDATA_PORT = BLOCKDATA_PORT | BLOCKDATA5;
            if(Data_for_Block_bin & 0b00100000)
                BLOCKDATA_PORT = BLOCKDATA_PORT | BLOCKDATA6;
            if(Data_for_Block_bin & 0b01000000)
                BLOCKDATA_PORT = BLOCKDATA_PORT | BLOCKDATA7;
            if(Data_for_Block_bin & 0b10000000)
                BLOCKDATA_PORT = BLOCKDATA_PORT | BLOCKDATA8;
        }
    }
    
    
    void PrintText2LEDs (void)  //LEDTable_text auf die LED-Matrix ausgeben (muss periodisch aufgerufen werden)
    {
        unsigned char Pos_in_LEDTable_text;
        for(Pos_in_LEDTable_text = 0; LEDTable_text[Pos_in_LEDTable_text]!=0b10000000; Pos_in_LEDTable_text++)
        {
            PrintByte2LEDs(0, Pos_in_LEDTable_text+1);
            _delay_us(1);
            PrintByte2LEDs(LEDTable_text[Pos_in_LEDTable_text], Pos_in_LEDTable_text+1);
            _delay_us(2);
            
        }
    }
    
    
    void LEDInitIO (void)
    {
        BLOCKENABLE_DDR = BLOCKENABLE_DDR | BLOCKENABLE1 | BLOCKENABLE2 | BLOCKENABLE3 | BLOCKENABLE4 | BLOCKENABLE5 | BLOCKENABLE6;
        BLOCKENABLE_PORT = BLOCKENABLE_PORT | BLOCKENABLE1 | BLOCKENABLE2 | BLOCKENABLE3 | BLOCKENABLE4 | BLOCKENABLE5 | BLOCKENABLE6;
        
        BLOCKDATA_DDR = BLOCKDATA_DDR | BLOCKDATA1 | BLOCKDATA2 | BLOCKDATA3 | BLOCKDATA4 | BLOCKDATA5 | BLOCKDATA6 | BLOCKDATA7 | BLOCKDATA8;
        BLOCKDATA_PORT = BLOCKDATA_PORT & ~BLOCKDATA1 & ~BLOCKDATA2 & ~BLOCKDATA3 & ~BLOCKDATA4 & ~BLOCKDATA5 & ~BLOCKDATA6 & ~BLOCKDATA7 & ~BLOCKDATA8;
        
        BOARDHORIZ_DDR = BOARDHORIZ_DDR | BOARDHORIZ1 | BOARDHORIZ2 | BOARDHORIZ3 | BOARDHORIZ4 | BOARDHORIZ5 | BOARDHORIZ6 | BOARDHORIZ7;
        BOARDHORIZ_PORT = BOARDHORIZ_PORT & ~BOARDHORIZ1 & ~BOARDHORIZ2 & ~BOARDHORIZ3 & ~BOARDHORIZ4 & ~BOARDHORIZ5 & ~BOARDHORIZ6 & ~BOARDHORIZ7;
    
    
    }
    Wie man sehen kann: Die Buchstaben A, B, und C liegen und bleiben im Flash, der LEDTable_text liegt im Ram (muss ja verändert werden)

    Vielen Dank schonmal :-D
    -schumi-

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Code:
    LEDTable_text[Pos_1] = pgm_read_byte(&char_A[Pos_2]);
    MfG
    Stefan

  7. #7
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    23
    Beiträge
    449
    Stefan, ich könnt dich knutschen^^

    Vielen vielen vielen Dank!!!

    Endlich kanns weitergehen...

    Viele herzliche Grüße
    -schumi-

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    23
    Beiträge
    449
    So, inzwischen läuft die Sache schon ganz passabel...

    http://dl.dropbox.com/u/19005544/ledboard.MP4

    Noch mal vielen vielen Dank euch beiden :-D

    Viele Grüße
    -schumi-

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.08.2011
    Ort
    Hannover
    Beiträge
    164
    Coooool!!

    Danke für's Zeigen!
    Andreas
    #define true ('/'/'/')
    #define false ('-'-'-')

  10. #10
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    23
    Beiträge
    449
    Hier gibts die Sourcen zu dem ganzen: http://www.roboternetz.de/community/...936#post522936

Ähnliche Themen

  1. ADC - Ich finde den/die Fehler nicht
    Von Christoph2 im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 07.08.2007, 19:34
  2. (Problem gelöst, DANKE)sehe den Fehler nicht
    Von jar im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 06.04.2007, 20:11
  3. Mal ist Fehler da, mal nicht
    Von Fielmann im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 22.02.2007, 23:19
  4. Warum sehe ich auf dem LCD nichts?
    Von rolfw20 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 19
    Letzter Beitrag: 10.04.2006, 13:16
  5. Antworten: 3
    Letzter Beitrag: 06.01.2004, 11:25

Berechtigungen

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