Вы не вошли.
Есть вопрос по сабжу
ATmega8, WinAVR
в коде есть такие строки:
.....
#include <avr/eeprom.h>
.....
#define EEPROM_ADR 0x00
.....
unsigned char temp;
.....
temp = eeprom_read_word(EEPROM_ADR);
.....
eeprom_write_word(EEPROM_ADR,temp);
.....
Если EEPROM_ADR = 0x00 , то чтение/запись не срабатывают как будто этих строк и нет, но все остальное нормально работает
Если EEPROM_ADR > 0x00 , то МК просто вешается и ни на что не реагирует :shock:
Причем в VMLab все работает как надо, а в железе- нет
В чем может быть проблема, подскажите плиз...
Вне форума
Так показали бы, что в этом eeprom.h написано. Я в WinAVR не работаю, а это явно его штучки. Дебагать надо, в AVRStudio, например. Кстати, а почему word из eeprom Вы читаете в unsigned char?
Вне форума
Возможно с типами переменных я запутался, мне надо сохранять 8bit (char), надо попробовать eeprom_read_byte / eeprom_write_byte
Хотя ничего фатального мне кажется быть не должно, во всяком компилятор не ругается на несоответствие типов
вот фрагмент из eeprom.h, целиком (12кб) сюда выкладывать наверное не стоит...
uint16_t eeprom_read_word (const uint16_t *addr)
{
uint16_t result;
asm (
XCALL " __eeprom_read_word_" _REG_LOCATION_SUFFIX CR_TAB
: "+x" (addr),
"=z" (result)
: );
return result;
}
void eeprom_write_word (uint16_t *addr,uint16_t value)
{
asm volatile (
#if __AVR_HAVE_MOVW__
"movw __tmp_reg__,%A1" CR_TAB
#else
"mov __tmp_reg__,%A1" CR_TAB
"mov __zero_reg__,%B1" CR_TAB
#endif
XCALL " __eeprom_write_word_" _REG_LOCATION_SUFFIX CR_TAB
: "+x" (addr)
: "r" (value)
: "memory"
);
}
Вне форума
Нифига не понятно. Остаётся дебагать.
P.S. Я сижу на IAR C, никаких проблем не встречал. Украсть IAR пока можно.
Вне форума
Я ориентировался на статью в РХ "микроконтроллерное управление звуком" ... вроде все правильно... и не работает
Может кто-то юзал WinAVR ?
Вне форума
Здравствуйте. Я микроконтроллеры начал изучать только 3 дня назад и пока что умею заставлять проц светодиодиками мигать максимум. Но, есть задача учебного характера, которая, к сожалению, мне пока не под силу... Не могла бы уважаемая аудитория хотя бы помоч разобраться.
Задание:
Организовать ввод данных (диапазон изменения кода 0 - 1Fh) и записать полученную инфу в память контроллера по адресу 5Fh. Сумму полученного числа и числа 06h так же сохранить в памяти по адресу 83. Передать код, сохранённый по адресу 83 через выходной порт. С периодичностью 30сек. инвертировать код и передать его в выходной порт.
Задание под асму, но можно и с помощью CodeVisionAVR писать. Трудности вызыват моё незнание организации подобного ввода и вывода. И что значит инвертирование в данном случае? Что откуда должно браться и КАК деваться?
Вне форума
И что значит инвертирование в данном случае? Что откуда должно браться и КАК деваться?
LDS Rd,$83 ;Загружаете в регистр из памяти
COM Rd ; Инвертируете
OUT Port ; Выводите
Типа того
Вне форума
Спасибо! Прогу все-таки осилил на С
Вне форума
.... - вот случайно надыбал, может и мелькала уже.
Удалил, раз такой нехороший энтот avr123.
Самому чтоль заняться...
Отредактировано pantelei4 (02.05.2007 17:19:04)
Вне форума
Ну, блин, эти чертовы курсы я и сам когда то читал - написано в таком стиле что фиг разберешься. Этого товарища avr123 уже вроде разок забанили на нашем форуме, за навязчивую рекламу и не зря.
Есть хорошая книга Евстифеева - Микроконтроллеры AVR семейств Tiny и Mega - с нее я начинал.
По сути это просто переводы даташитов с комментариями, но написана хорошо, читать и разбираться можно.
Вне форума
[ Сгенерировано за 0.048 сек, 10 запросов выполнено - Использовано памяти: 592.66 Кбайт (Пик: 643.02 Кбайт) ]