Страница 1 из 1
Внутренний EEPROM tiny2313. hello, world ???!!???
Добавлено: Вс янв 06, 2013 23:32:39
ArtemKolesnikov
Всем привет.
Я новичок в МК и пытаюсь изучить работу с внутренней EEPROM. Начитавшись инета, написал нечто типа Hello World и пытаюсь заставить работать. Не комилится оно в AVR Studio 5.1. Хочу при запуске записать в память некое значение по некоему адресу,( а потом програматором посмотреть, записалось оно или нет. Тупо может быть, но мне так приятней.) Компилятор не понимает, что такое EEWE.
Код: Выделить всё
#define F_CPU 1000000UL // 1 MHz
#include <avr/io.h>
#include <avr/eeprom.h>
#include <util/delay.h>
int main(void) // начало основой программы
{
while(EECR & (1<<EEWE));//ждем установки бита EEWE
EEAR = 0x10;//устанавливаем адрес
EEDR = 0x10;//записываем байт данных
EECR |= (1<<EEMWE);//устанавливаем EEMWE
EECR |= (1<<EEWE);//устанавливаем EEWE
} // закрывающая скобка основной программы
Пытаюсь включить io2313.h, в котором описаны EEWE, компилятор ругается на двойное включение файла.
В чем проблема?
Re: Внутренний EEPROM tiny2313. hello, world ???!!???
Добавлено: Вс янв 06, 2013 23:34:09
blackx
Попробуйте EEPE.
Re: Внутренний EEPROM tiny2313. hello, world ???!!???
Добавлено: Вс янв 06, 2013 23:41:39
ArtemKolesnikov
blackx писал(а):Попробуйте EEPE.
Блин. Скомпилилось!
НО ПОЧЕМУ? Ведь везде, в т.ч в даташите везде описано EEMWE, EEWE????????????????
П.СЫЫЫЫ! Косяк я слепой невнимательный! В Даташите как раз описано EEPE! Вот зараза какая.
Тема закрыта, СПАСИБО blackx!!!
Re: Внутренний EEPROM tiny2313. hello, world ???!!???
Добавлено: Вс янв 06, 2013 23:44:56
blackx
Погуглил "AVR EEWE". Открыл первую же PDF-ку. На первой же странице прочитал
Note: In the latest devices the EEWE bit in EECR is called EEPE, and the EEMWE is
called EEMPE. Also in the latest devices the EECR consist of two extra bits to set the
Programming Mode, EEPM0 and EEPM1. These two bits needs to be initialized
before EEPE is set.

А ваш файлик, io2313.h, если в нем действительно определен EEWE - видимо просто устаревший, компилятор то может и другой юзать.
Re: Внутренний EEPROM tiny2313. hello, world ???!!???
Добавлено: Вс янв 06, 2013 23:49:41
ArtemKolesnikov
blackx писал(а):Погуглил "AVR EEPE". Открыл первую же PDF-ку. На первой же странице прочитал
Note: In the latest devices the EEWE bit in EECR is called EEPE, and the EEMWE is
called EEMPE. Also in the latest devices the EECR consist of two extra bits to set the
Programming Mode, EEPM0 and EEPM1. These two bits needs to be initialized
before EEPE is set.

А ваш файлик, io2313.h, если в нем действительно определен EEWE - видимо просто устаревший, компилятор то может и другой юзать.
Спасибо за ответ!. Да, точно, устаревший файл, я почему то склонен больше верить статьям и форумам, чем даташиту... Вот и напоролся...
p.s. Все получилось! В ячейку 0х10 записалось число 0х10 . изучаем чтение теперь.
Re: Внутренний EEPROM tiny2313. hello, world ???!!???
Добавлено: Пн янв 07, 2013 00:23:13
ILYAUL
Что самое интересное в обоих DS и 2313 и 2313A указан бит EEPE. Может сначала научится читать?
Re: Внутренний EEPROM tiny2313. hello, world ???!!???
Добавлено: Пн янв 07, 2013 00:34:19
ArtemKolesnikov
ILYAUL писал(а):Что самое интересное в обоих DS и 2313 и 2313A указан бит EEPE. Может сначала научится читать?
Скорее всего, вы правы. Просто пробежавшись по даташиту, осмотрев регистры (в частности EECR) и их описание, я не заметил того, что в даташите биты обозваны именно через букву P, в то время как в одной статье, которая вылазиет по гуглу при поиске AVR EEPROM (третья по счету) так красиво и привлекательно описывает эти же регистры - у автора этой статьи биты обозваны через букву W.
Привлек исходный код функций с комментариями, честно...
Re: Внутренний EEPROM tiny2313. hello, world ???!!???
Добавлено: Вт янв 08, 2013 19:01:45
YS
я почему то склонен больше верить статьям и форумам, чем даташиту...
Очень зря. Даташит, если нет совсем уж объективных фактов, надо считать последней инстанцией истины. Ошибки там, бывает, встречаются. Но бывает это очень редко.
Код: Выделить всё
#define F_CPU 1000000UL // 1 MHz
#include <avr/io.h>
#include <avr/eeprom.h>
#include <util/delay.h>
int main(void) // начало основой программы
{
while(EECR & (1<<EEWE));//ждем установки бита EEWE
EEAR = 0x10;//устанавливаем адрес
EEDR = 0x10;//записываем байт данных
EECR |= (1<<EEMWE);//устанавливаем EEMWE
EECR |= (1<<EEWE);//устанавливаем EEWE
} // закрывающая скобка основной программы
F_CPU надо указывать в настройках IDE, а не явным дефайном.
В avr/eeprom.h
есть функции eeprom_write_xxx() / eeprom_read_xxx().
У main в эмбеде не должно быть возвращаемого значения -
это не имеет смысла.
Программа для МК должна кончаться бесконечным циклом.
Re: Внутренний EEPROM tiny2313. hello, world ???!!???
Добавлено: Ср янв 09, 2013 08:22:04
ArtemKolesnikov