Lichti01
30.01.2018, 18:35
Hallo zusammen.
Ich stehe mal wieder vor einem neuen Problem.
Ich möchte im EEPROM mehrere Werte an verschiedenen Adressen speichern.
Ich arbeite im Moment mit dem ATtiny2313A. Im folgendem Code soll, nachdem der Taster an PD0 gedrückt ist, der Wert 5 an Adresse EEAR0 und der Wert 10 an Adresse EEAR1 geschrieben werden.
Wird der µC neu gestartet sollen diese beiden Werte wieder ausgelesen werden. Anhand des Programmteiles in dem die LED blinkt kann der Wert überprüft werden.
Leider ist es so, dass nur der Wert der in der Adresse EEAR0 steht richtig wiedergegeben wird. Die LED2 blinkt dauerhaft weiter.
Hier einmal der
#define F_CPU 1600000UL
#define S1 (PIND&0x01) //Taster definiert an PORTD bit0
#include <avr/eeprom.h>
#include <util/delay.h>
//"Einstellung" für das Blinken der LED
#define LED1 2
#define LED2 3
int i = 1;
int j = 1;
uint8_t myWriteByte = 1; //Variable myWriteByte anlegen und den Wert 1 laden.
uint8_t myReadByte; //Variable für den Wert der dann aus EEPROM gelesen wird.
uint8_t myWriteByte2 = 1;
uint8_t myReadByte2;
int main(void)
{
DDRB = 0b000001100; //PORT B2/3 als Ausgang setzen
DDRD= 0b11111111; //PORTD auf Output
myReadByte = eeprom_read_byte ((unsigned char *)EEAR0); //Wert aus EEAR0 lesen und in myReadByte schreiben
PORTD=myReadByte; //Wert aus myReadByte an PORTD übergeben
myReadByte2 = eeprom_read_byte((unsigned char *)EEAR1);
PORTD=myReadByte2;
while (1)
{
if (S1)
{
myWriteByte=5;
eeprom_write_byte((unsigned char *)EEAR0, myWriteByte); //Wert aus Variable myWriteByte in EEAR0 schreiben
myWriteByte2=10;
eeprom_write_byte((unsigned char *)EEAR1, myWriteByte2);
}
if (i<=myReadByte)
{
PORTB |= (1<<LED1);
_delay_ms(500);
PORTB &= ~(1<<LED1);
_delay_ms(500);
i = i + 1;
}
if (j <= myReadByte2);
{
PORTB |= (1<<LED2);
_delay_ms(500);
PORTB &= ~(1<<LED2);
_delay_ms(500);
j=j+1;
}
}
}
Hoffe ihr könnt mir auch in diese Fall wieder weiterhelfen.
Vielen Dank im voraus
Lichti01
Ich stehe mal wieder vor einem neuen Problem.
Ich möchte im EEPROM mehrere Werte an verschiedenen Adressen speichern.
Ich arbeite im Moment mit dem ATtiny2313A. Im folgendem Code soll, nachdem der Taster an PD0 gedrückt ist, der Wert 5 an Adresse EEAR0 und der Wert 10 an Adresse EEAR1 geschrieben werden.
Wird der µC neu gestartet sollen diese beiden Werte wieder ausgelesen werden. Anhand des Programmteiles in dem die LED blinkt kann der Wert überprüft werden.
Leider ist es so, dass nur der Wert der in der Adresse EEAR0 steht richtig wiedergegeben wird. Die LED2 blinkt dauerhaft weiter.
Hier einmal der
#define F_CPU 1600000UL
#define S1 (PIND&0x01) //Taster definiert an PORTD bit0
#include <avr/eeprom.h>
#include <util/delay.h>
//"Einstellung" für das Blinken der LED
#define LED1 2
#define LED2 3
int i = 1;
int j = 1;
uint8_t myWriteByte = 1; //Variable myWriteByte anlegen und den Wert 1 laden.
uint8_t myReadByte; //Variable für den Wert der dann aus EEPROM gelesen wird.
uint8_t myWriteByte2 = 1;
uint8_t myReadByte2;
int main(void)
{
DDRB = 0b000001100; //PORT B2/3 als Ausgang setzen
DDRD= 0b11111111; //PORTD auf Output
myReadByte = eeprom_read_byte ((unsigned char *)EEAR0); //Wert aus EEAR0 lesen und in myReadByte schreiben
PORTD=myReadByte; //Wert aus myReadByte an PORTD übergeben
myReadByte2 = eeprom_read_byte((unsigned char *)EEAR1);
PORTD=myReadByte2;
while (1)
{
if (S1)
{
myWriteByte=5;
eeprom_write_byte((unsigned char *)EEAR0, myWriteByte); //Wert aus Variable myWriteByte in EEAR0 schreiben
myWriteByte2=10;
eeprom_write_byte((unsigned char *)EEAR1, myWriteByte2);
}
if (i<=myReadByte)
{
PORTB |= (1<<LED1);
_delay_ms(500);
PORTB &= ~(1<<LED1);
_delay_ms(500);
i = i + 1;
}
if (j <= myReadByte2);
{
PORTB |= (1<<LED2);
_delay_ms(500);
PORTB &= ~(1<<LED2);
_delay_ms(500);
j=j+1;
}
}
}
Hoffe ihr könnt mir auch in diese Fall wieder weiterhelfen.
Vielen Dank im voraus
Lichti01