-         

Ergebnis 1 bis 3 von 3

Thema: EEPROM/UART-eingabe Atmega162

  1. #1

    EEPROM/UART-eingabe Atmega162

    Anzeige

    Hi

    ich beschäftige mich zurzeit mit dem Atmega162 und dessen EEPROM Speicher.
    Nach dem lesen etlicher Seiten im Internet und auch des Datenblattes, habe ich nun so eine wage Ahnung was man mit dem EEPROM so alles machen kann.
    Ich habe Codebeispiele aus dem Datenblatt genommen und auch schon die Standard Libary (avr/eeprom.h bei AVR Studio) probiert. Eigentlich scheint das alles zu funktionieren, aber irgendwie komme ich mit der Eingabe nicht zurzecht.
    ALso ich will einen Wert eingeben und diesen dann vom EEPROM lesen und wieder ausgeben. Meine UART funktioniert also da bin ich mir sicher, aber ich denke es hängt am korrekten einlesen/auswerten der eingegebenen Werte.

    uint8_t eingabeaufforderung(void)
    {
    char buffer[6], udata;
    int8_t u=0, toLate=0;

    udata = uart_getchar();

    if(udata!=0xff) // Zeichen ungleich 0?
    {
    while(1)
    {
    if(udata!=0xff) // erneut testen ob Zeichen gütlig ist
    {
    buffer[u]=udata;
    u++;
    if(udata=='\r'||udata=='\n') break; // auf Endzeichen prüfen
    if(u>6)
    {
    printf("Fehler! Zuviele Zeichen.\n"); // Fehlerausgabe bei Bufferoverflow
    break;
    }
    }else
    {
    toLate++; // Fehlerausgabe bei zulanger Wartezeit
    if(toLate==10)
    {
    printf("Time out.");
    break;
    }
    _delay_ms(500);
    }
    udata= uart_getchar(); // Zeichen empfangen

    }
    if(u>0 && u<=6)
    {

    eepromVal=*buffer;
    u=0;
    return 1;
    }else
    {
    printf("Fehler! Fehlerhafte Eingabe.\n");
    uart_putchar('\n');
    }
    }


    return 0;
    }
    Ich gebe einen Wert ein und gebe ihn direkt wieder aus. Es ändert immer nur die ersten 4 Bits und der Rest bleibt immer gleich. Also zB ist eine 9 eine 57, eine 8 eine 56 usw. Die ersten 4 Bits sind bei den Zahlen gleich aber Bit 5 u 6 sind immer 1, egal ob Neustart oder irgendwas.

    Ich hab scho probiert mit

    uart_gestring(&udata);

    if(udata!=0xff)
    { eepromVal=udata; usw ..


    funktionierte aber nicht.

    in der main schleife siehts dann so aus


    if(eingabeaufforderung()==1)
    {
    EEPROM_write(eepromAd, eepromVal);
    eeprom_busy_wait();
    printf("\n Jetzt lesen des Wertes vom EEPROM. \n");
    eepromVal2=EEPROM_read(eepromAd);
    printf("Der gelesene Wert betraegt: %i", eepromVal2);
    }

    Hat jemand eine Idee oder sieht einen Fehler oder kennt vielleicht irgendein Codebeispiel? Ich wäre sehr dankbar.


    Gruss

  2. #2
    Benutzer Stammmitglied Avatar von KR-500
    Registriert seit
    26.12.2007
    Alter
    22
    Beiträge
    91
    Hi,

    ohne mit deinen Code jetzt genau angescheut zu haben, hier ist ein gutes tut:
    http://www.mikrocontroller.net/artic...utorial#EEPROM
    Ich mache das auch so wie dort beschrieben und es klappt wunderbar

    Viele Grüße
    KR-500

  3. #3
    das hier hat sich geklärt, ich habe den EEPROM ausgiebig getestet

Ähnliche Themen

  1. ATMEGA162 EEPROM
    Von Bumbum im Forum C - Programmierung (GCC u.a.)
    Antworten: 11
    Letzter Beitrag: 09.07.2009, 21:12
  2. Eeprom speichern/lesen und über uart daten an excel senden
    Von Eistee im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 10.09.2008, 14:17
  3. Usart0 von Atmega162
    Von homedom im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 02.05.2008, 13:44
  4. ATMega162
    Von CodeX im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 10.08.2006, 10:21
  5. ATMEGA162V-8PI vs. Atmega162
    Von Nikolce im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 26.07.2005, 22:48

Berechtigungen

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