- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 10

Thema: eeprom 24C16 unverständliches problem

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2006
    Ort
    Detmold
    Alter
    33
    Beiträge
    106

    eeprom 24C16 unverständliches problem

    Anzeige

    LiFePo4 Akku selber bauen - Video
    hallo zusammen
    ich hab ein seltsames problem beim schreiben eines 24C16 eeproms. mit diesem code
    Code:
    ...
    	failed=0;
    	for(address=2047;address!=0;address--)
    	{
    		if(EEWriteByte(address,77)==0)
    		{
    			//Write Failed
    			UART0_puts("Write Failed !");
    			UART0_puts("Addess = ");
    			UART0_puts((char*)itoa(address,buf,10));
    			failed=1;
    			Wait();
    			break;
    		}
    	}
    
    	if(!failed)
    		UART0_puts("Written 2048bytes");
    
    	Wait();
    
    	UART0_puts("Verifying ...");
    
    	//Check if every location in EEPROM has 
    	//number 77 stored
    	failed=0;
    	for(address=2047;address!=0;address--)
    	{
    		if(EEReadByte(address)!=77){
    			UART0_puts("Read Failed !");
    			UART0_puts("Addess = ");
    			UART0_puts((char*)itoa(address,buf,10));
    			failed=1;
    			Wait();
    			break;
    			}
    	}
    
    	if(!failed)
    	{
    		UART0_puts("Write Success !");
    	}
    ...
    kann das komplette eeprom beschreiben und bekomme ein "Write Success!". wenn ich aber anstelle von
    "for(address=2047;address!=0;address--)"
    das hier schreibe:
    "for(address=0;adress<2048;adress++)"
    funktioniert es nicht. woran kann das liegen? ist doch dem eeprom egal ob ich ihn "von unten nach oben" so wie im beispielcode oder umgekehrt beschreibe...
    was ist da los?
    lg martin

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    Du verwendest in der 2. For schleife zwei verschiedene Variablen (address und adress). Ist das nur hier ein Schreibfehler?

    Wenn ja, wäre noch interessant was du in der Schleife machst.

    Edit: sorry, habe irgendwie den Codeteil ignoriert. Bleibt also nur der erste Hinweis übrig

    sast

    雅思特史特芬
    开发及研究

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2006
    Ort
    Detmold
    Alter
    33
    Beiträge
    106
    jo du hast recht aber das war nur nen schreibfehler beim tippen. im code hab ich address stehen. "adress" gibt es garnicht, da würde auch mein compiler meckern.
    lg

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    Was genau funktioniert denn nicht?
    Kannst du mal genau den Code hier rein "kopieren", wenn es nicht funktioniert?

    sast

    雅思特史特芬
    开发及研究

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2006
    Ort
    Detmold
    Alter
    33
    Beiträge
    106
    was nicht funktioniert? ich bekomme nicht die meldung vom mc "Write Success !". ich hab mir daraufhin mal den speicherinhalt des eeproms ausgeben lassen und gesehen, dass nur die letzten 256bytes beschrieben sind mit 77 und der rest mit 0xFF.
    wenn ich
    "for(address=2047;address!=0;address--)"
    und nicht
    "for(address=0;adress<2048;adress++)"
    dann ist der gesamte speicherinhalt 77, so wie ich es möchte.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    Wie wäre es denn mal mit der "Copy and Paste" Kopie des fehlerhaften Codes?

    Zur Zeit hab ich nur wieder die adress Variante

    sast

    雅思特史特芬
    开发及研究

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2006
    Ort
    Detmold
    Alter
    33
    Beiträge
    106
    sry! hier kommt er.
    Code:
    int main(void)
    {	
    	char buf[5];
    	//Varriables
    	uint8_t failed;
    	short address;
    	UART0_init(BAUD(38400));
    	UART0_puts("uart0 ready");
    	//Init EEPROM
    	EEOpen();
    	_delay_ms(10);
    	
    	failed=0;
    	for(address=0;address<2048;address++)
    	{
    		if(EEWriteByte(address,77)==0)
    		{
    			//Write Failed
    			UART0_puts("Write Failed !");
    			UART0_puts("Addess = ");
    			UART0_puts((char*)itoa(address,buf,10));
    			failed=1;
    			Wait();
    			break;
    		}
    	}
    
    	if(!failed)
    		UART0_puts("Written 2048bytes");
    
    	Wait();
    
    	UART0_puts("Verifying ...");
    
    	//Check if every location in EEPROM has 
    	//number 77 stored
    	failed=0;
    	for(address=0;address<2048;address++)
    	{
    		if(EEReadByte(address)!=77){
    			UART0_puts("Read Failed !");
    			UART0_puts("Addess = ");
    			UART0_puts((char*)itoa(address,buf,10));
    			failed=1;
    			Wait();
    			break;
    			}
    	}
    
    	if(!failed)
    	{
    		UART0_puts("Write Success !");
    	}
    	else
    	for(address=0;address<2048;address++)
    	UART0_puts((char*)itoa(EEReadByte(address),buf,10));
    	
    	while(1);

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    was kommt denn für eine Ausgabe bevor eigentlich das Write Success kommen müsste?
    Read Failed ! Addess = 0

    Kannst du die gesamte Ausgabe auch mal posten?

    Der Code sieht bis auf das short, was sicher ein 16 Bit signed integer ist soweit nicht schlecht aus. Glaube zwar nicht, dass das eine Auswirkung hat, da du nicht über 32768 kommst, aber mach da mal ein unsigned int draus.

    Man müsste wissen wie deine Funktionen EEWriteByte und EEReadByte aussehen. Vielleicht braucht der EEPROM die Adresse ja anders als du sie ihm gibst. Obwohl dann wenigstens Adresse 0 noch beschrieben werden sollte.

    Beim Schreiben von 2047 bis 1 kannst du dir ja mal probeweise die Ausgabe von 1 nach 2047 geben lassen. Zum Test ob er wirklich alles geschrieben hat.

    sast

    雅思特史特芬
    开发及研究

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.11.2004
    Ort
    Hvalstad, Norwegen
    Beiträge
    140
    Wenn du rückwärts schreibst wird die Adresse 0x00 nicht beschrieben, da "address!=0", liegt es evtl. daran, dass das keine gültige Adresse ist?
    Du also von 1 bis 2048 schreiben musst?
    MfG Lorcan

  10. #10
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    Dann sollte er aber wenigstens beim Schreiben eine Fehlermeldung bekommen. Deshalb wäre ja auch der Code zu den Funktionen mal interessant. Das ist auch der Grund warum ich ihn von 1 bis 2047 lesen lassen möchte nachdem von 2047 bis 1 geschrieben wurde.
    Ich bin bisher noch nicht so recht überzeugt, das die Rückwertsvariante 100%ig funktioniert.

    sast

    雅思特史特芬
    开发及研究

Berechtigungen

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

12V Akku bauen