2016-04-03 4 views
1

У меня проблема: я могу прочитать EEPROM из моего ATtiny, но я не могу что-то написать в нем.ATtiny85 eeprom написать в arduino IDE

Вот мой код:

#include <EEPROM.h> 
    int addr = 0; 
    int val = 2; 

    void setup() 
    { 
    } 

    void loop() 
    { 
     EEPROM.write(addr, val); 

     addr = addr + 1; 
     if (addr == 512) 
     addr = 0; 
    } 

-Edit

Теперь мой код на запись:

#include <EEPROM.h> 

int addr = 0; 
int val = 2; 

void setup() 
{ 
} 

void loop() 
{ 
    EEPROM.write(addr, byte(val)); 

    addr = addr + 1; 
    if (addr == 512) 
    while(1); 
} 

И мой код чтения:

int address = 0; 
byte value; 

#include <SoftwareSerial.h> 

void setup() 
{ 
    SSerial.begin(9600); 
} 

void loop() 
{ 
    value = EEPROM.read(address); 

    SSerial.print(address); 
    SSerial.print("\t"); 
    SSerial.print(value, DEC); 
    SSerial.println(); 

    address = address + 1; 

    if (address == 512){ 
    address = 0; 
    delay(100000000); 
    } 
} 

Я всегда получаю только значение 255. На каждом адресе. Теперь я конвертирую свой int в байт. Мой int не будет превышать 255 в моем случае.

И кстати: могу ли я создать int в качестве байта? Поэтому я могу использовать его как обычный int, но могу написать его напрямую?

ответ

1

Вы пишете один байт, а int - это два байта. Вы можете использовать EEPROM.get() & EEPROM.put() для больших типов (чтение/запись обрабатывают только один байт).

#include <EEPROM.h> 
int addr = 0; 
int val = 2; 

void setup(){} 

void loop(){ 

    //Write value 
    EEPROM.put(addr, val); 

    //Read value 
    EEPROM.get(addr, val); 

    addr += sizeof(int); //Increment cursor by two otherwise writes will overlap. 

    if(addr == EEPROM.length()) 
    addr = 0; 
} 

как упомянуто Владимир Цыкуны, этот тестовый код может быть плох для EEPROM, как это будет петля много раз во время работы. Может быть, лучше остановить цикл после одной итерации:

+0

Я получил его для работы. Но почему мне нужно мое значение для чтения? С read() я получил только 255. – SPJS01Pro

+0

@ SPJS01Pro Вы должны использовать старую версию IDE, мой EEPROM lib заменил оригинал в версии 1.6.2 и выше. Сюда входят get, put и length. Что касается получения 255 для каждого чтения, это значение является значением по умолчанию/очищенным для ячейки EEPROM, поэтому оно не выглядит так, как будто все было написано. В вашем «написать эскиз» добавьте в 'SSerial.println (EEPROM.read (addr), DEC);' чтобы убедиться, что вы что-то написали. –

+0

Я попробую. Большое спасибо! – SPJS01Pro

0

Не пытайтесь писать eeprom в цикле, я полагаю, у eeprom ограниченное количество циклов записи/чтения. Вы должны показывать значения, которые вы читаете и записываете в терминал.

+0

Я пробовал в разделе setup(). :/Не работает. – SPJS01Pro

+0

Из вашего кода мы не можем знать, записана ли память или нет. –

+0

У меня есть код scond, где я читаю всю EEPROM. – SPJS01Pro

Смежные вопросы