Ich habe den Code umgeschrieben, ist jetzt funktionsfähig. Ich post ihn mal hier, vielleicht kann er ja für andere hilfreich sein.
Code:
/*-------+---------+---------+---------+---------+---------+---------+---------+
* #include-Dateien
*--------+---------+---------+---------+---------+---------+---------+---------+*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <util/delay.h>
#include "lcd.h"
#include "i2cmaster.h"
/*-------+---------+---------+---------+---------+---------+---------+---------+
Prototypen():
---------+---------+---------+---------+---------+---------+---------+---------+*/
void Fehler(uint8_t Schritt);
/*-------+---------+---------+---------+---------+---------+---------+---------+
Funktionen():
---------+---------+---------+---------+---------+---------+---------+---------+*/
//-------+---------+---------+---------+---------+---------+---------+---------+
// void Fehler(uint8_t Schritt):
/** @brief gibt eine Fehlermeldung aus */
/** @param (Programm-)Schritt in der der Fehler aufgetreten ist */
/** @return keinen Rückgabewert */
//-------+---------+---------+---------+---------+---------+---------+---------+
void Fehler(uint8_t Schritt)
{
switch(Schritt)
{
case 1:
lcd_gotoxy(0,2); lcd_puts("ERR: 1. Start"); lcd_command(LCD_CLEAR_RESTLINE);
break;
case 2:
lcd_gotoxy(0,2); lcd_puts("ERR: 1. Ad. HByte"); lcd_command(LCD_CLEAR_RESTLINE);
break;
case 3:
lcd_gotoxy(0,2); lcd_puts("ERR: 1. Ad. LByte"); lcd_command(LCD_CLEAR_RESTLINE);
break;
case 4:
lcd_gotoxy(0,2); lcd_puts("ERR: READ-Modus"); lcd_command(LCD_CLEAR_RESTLINE);
break;
case 5:
lcd_gotoxy(0,2); lcd_puts("ERR: 2. Start"); lcd_command(LCD_CLEAR_RESTLINE);
break;
case 6:
lcd_gotoxy(0,2); lcd_puts("ERR: 2. Ad. HByte"); lcd_command(LCD_CLEAR_RESTLINE);
break;
case 7:
lcd_gotoxy(0,2); lcd_puts("ERR: 2. Ad. LByte"); lcd_command(LCD_CLEAR_RESTLINE);
break;
case 8:
lcd_gotoxy(0,2); lcd_puts("ERR: Schreiben"); lcd_command(LCD_CLEAR_RESTLINE);
break;
default:
lcd_gotoxy(0,2); lcd_puts("unbekannter Fehler."); lcd_command(LCD_CLEAR_RESTLINE);
}
i2c_stop();
while(1);
}
//-------+---------+---------+---------+---------+---------+---------+---------+
// main(void)
/** @brief LCD initialisieren. \n
I2C Kommunikation initialisieren. \n
Wert aus Speicherstelle 0x05 auslesen, \n
um Eins erhöhen, \n
und an die gleich Stelle zurückschreiben.
Beide Werte dann auf dem LCD darstellen. \n*/
/** @param keine Übergabeparameter */
/** @return 0 */
//-------+---------+---------+---------+---------+---------+---------+---------+
int main(void)
{
/** @brief Adresse der zu lesenden bzw. beschreibenden Speicherstelle */
uint16_t Adresse;
uint8_t HByte;
uint8_t LByte;
// Adresse willkürlich gewählt; nur zum Testen
Adresse = 0x4321;
LByte = Adresse;
HByte = (Adresse >> 8);
/** @brief Returnwert aus den Funktionen zur Fehlerkontrolle */
uint8_t ret;
/** @brief aus dem Speicher ausgelesen bzw. zurück geschriebene
Werte. */
uint8_t WertAlt;
uint8_t WertNeu;
/** @brief Zwischenspeicher für Ausgabe */
char Ausgabe[13];
// LCD initialisieren
lcd_init(LCD_DISP_ON); lcd_command(LCD_BACKLIGHT_ON);
// initialize I2C library
i2c_init();
// read value from EEPROM
i2c_start_wait(Dev24C512+I2C_WRITE); // set device address and write mode
/* oder auch
ret= i2c_start(Dev24C512+I2C_WRITE); // set device address and write mode
if ( ret ) Fehler(2);
*/
ret = i2c_write(HByte); // write address hbyte
if ( ret ) Fehler(2);
ret = i2c_write(LByte); // write address lbyte
if ( ret ) Fehler(3);
ret = i2c_rep_start(Dev24C512+I2C_READ); // set device address and read mode
if ( ret ) Fehler(4);
WertAlt = i2c_readNak(); // read one byte from EEPROM
i2c_stop();
WertNeu = WertAlt + 1;
// write value to EEPROM (Byte Write)
i2c_start_wait(Dev24C512+I2C_WRITE); // set device address and write mode
/* oder auch
ret= i2c_start(Dev24C512+I2C_WRITE); // set device address and write mode
if ( ret ) Fehler(5);
*/
ret = i2c_write(HByte); // write address hbyte
if ( ret ) Fehler(6);
ret = i2c_write(LByte); // write address lbyte
if ( ret ) Fehler(7);
ret = i2c_write(WertNeu); // write value
if ( ret ) Fehler(8);
i2c_stop(); // set stop conditon = release bus
// Ausgabe der Werte auf dem LCD
lcd_gotoxy(0,1); lcd_puts("Adresse: ");
utoa(HByte, Ausgabe, 16); lcd_puts("0x"); lcd_puts(Ausgabe);
utoa(LByte, Ausgabe, 16); lcd_puts(" "); lcd_puts(Ausgabe); lcd_command(LCD_CLEAR_RESTLINE);
lcd_gotoxy(0,2); lcd_puts("Alt: "); utoa(WertAlt, Ausgabe, 10); lcd_puts(Ausgabe); lcd_command(LCD_CLEAR_RESTLINE);
lcd_gotoxy(0,3); lcd_puts("Neu: "); utoa(WertNeu, Ausgabe, 10); lcd_puts(Ausgabe);lcd_command(LCD_CLEAR_RESTLINE);
while(1);
return 0;
}
Die erste Speicherstelle hat die Adresse 0x0000, Adressierung hat die Form Hbyte, LByte.
Dann kann ich den Thread jetzt als "Erledigt" kennzeichnen. 
Nochmals Vielen Dank.
Uwe
Lesezeichen