Funkce EEPROM u AVR

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Karel4
Příspěvky: 11
Registrován: 27 dub 2014, 02:00

Funkce EEPROM u AVR

#1 Příspěvek od Karel4 »

Zdravím všechny.
Potřeboval bych poradit, jak na funkce pracující s EEPROM u AVR. Samozřejmě jsem mrknul zde http://www.atmel.com/webdoc/AVRLibcRefe ... eprom.html, ale po napsání kódu v C a spuštění simulátoru Atmel studia 6 se hodnota v EEPROM neobjeví, respektive objeví, ale na zcela jiném místě a to hned dvakrát.
Měl byste někdo po ruce krátký kód, jak na to? Podotýkám, že jsem to zkoušel jen na simulátoru AVR Studia 6 a předpokládám, že by to v něm mělo chodit. Ohledně syntaxe funkce, zkoušel jsem ze zoufalství už i více variant, např.

Kód: Vybrat vše

#include <avr/eeprom.h>
   ........
//uint8_t  EEMEM adress ;
uint8_t adress = 0x00 ;
   ........
eeprom_write_byte(0x00,0xcc); 
eeprom_write_byte(&adress,0xcc);
Kód se vždy zkompiloval bez chyb. Díky za reakce k věci, Karel. :-)
Naposledy upravil(a) Karel4 dne 26 čer 2014, 20:14, celkem upraveno 1 x.

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#2 Příspěvek od AB1 »

Kód: Vybrat vše

uint8_t  EEMEM eevar; 
uint16_t adr2 = 0x05; 


int main()
{

// 1. zapíšeme do proměnné eevar (adresu určí překladač)
eeprom_write_byte(&eevar,0x11); 

// 2. zapíšeme na adresu 3
eeprom_write_byte((uint8_t*)0x03,0x22); 

// 3. zapíšeme na adresu uloženou v proměnné adr2
eeprom_write_byte((uint8_t*)adr2,0x33); 

Uživatelský avatar
Karel4
Příspěvky: 11
Registrován: 27 dub 2014, 02:00

#3 Příspěvek od Karel4 »

Tak jsem vyzkoušel doporučené a nic. Pokud jsem vložil

Kód: Vybrat vše

eeprom_write_byte((uint8_t*)adr2,0x33); 
, hodilo to dokonce hlášku
Warning 1 cast to pointer from integer of different size [-Wint-to-pointer-cast]
Bez tohoto kodu se to zkompilovalo bez varování, ale byte se objevil na zcela jiném místě v prvním řádku eeprom a dvakrát, viz obr.

EDIT: To varování zmizelo po definici proměnné

Kód: Vybrat vše

uint16_t adr2 = 0x05;
tedy byl problém v typu proměnné, ale nadále se byte dat ukládá jinam.
Přílohy
eeprom_avr.jpg
(283.78 KiB) Staženo 106 x

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#4 Příspěvek od AB1 »

U mne to chodí.
Máš v simulátoru nastavený správný typ Avr?
Přílohy
sim.PNG
(38.18 KiB) Staženo 109 x

Uživatelský avatar
Karel4
Příspěvky: 11
Registrován: 27 dub 2014, 02:00

#5 Příspěvek od Karel4 »

navolen mám ATmega8A, ale zatím to jen zkouším na simulátoru a bohužel, nadále to zapisuje na jiný pozice. Evidentně je něco špatně nastaveno :-( Co máš za Studio ?

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#6 Příspěvek od AB1 »

Avrstudio 4.17.666
Winavr 20100110
Mega88

Uživatelský avatar
Karel4
Příspěvky: 11
Registrován: 27 dub 2014, 02:00

#7 Příspěvek od Karel4 »

Tak sláva, už to chodí. Předchozí verze studia byla 6.1, v něm jsem kdysi vytvořil projekt. Pak jsem jednoho dne nainstaloval studio 6.2 a použil k vyzkoušení zápisu do eeprom projekt založený ve studiu 6.1. Zkoušel jsem ty funkce vložit zkušebně i v jiných projektech studia 6.1 a je to nefunkční. Stačí ovšem vytvořit nový projekt ve studiu 6.2 a vše pracuje správně. Dva dny v čudu. Pozitivní věc - na tohle už nikdy nezapomenu :roll: Každopádně díky za reakci.
Přílohy
avr_eeprom.png
(147.15 KiB) Staženo 97 x

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“