|
|
  |
не пишится в EEPROM данные, Реально не пишится в EEPROM данные |
|
|
|
Apr 20 2007, 15:26
|
Участник

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711

|
Парни что реально не кто не сможет помочь ? Обидно
|
|
|
|
|
Apr 20 2007, 15:41
|

Местный
  
Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672

|
Полностью согласен с: Цитата(bodja74 @ Apr 10 2007, 18:52)  1 Есть такая волшебная строчка .include "C:\...\m8def.inc" она позволит заместь адрессов регистров и битов писать их имена,и никто не будет высматривать названия регистров по вашим адрессам в коде. .............................................. Возможно я еще что нибудь подсказал если приведете код в читабельный вид (п 1) ,...... А так разбирать Цитата Это просто дурной тон написания программ. В такой каше найти почему что-то не работает не тривиальная задача
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Apr 27 2007, 14:46
|
Участник

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711

|
А если так уже программа написана вся . Ведь это только один блок её. Блок то прост запись в одну ячейку потом во вторую и так 7 раз потом считываем что не понятного в моём коде ? для профи по моему тут с первого взгляда видно.
Подумал попробую его упростить написать подпрограммой запись в ячейку не влоб как я написал может что и получиться попробую всётаки разобраться хотя ни чего не понятно. Почему по разному записываються данные
|
|
|
|
|
May 2 2007, 10:17
|
Участник

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711

|
Спасибо за оптвет Александр Уже начал оформлять и запись и чтение процедурой думаю всё получиться . Напишу проверю результат на праздниках небыло времени.
|
|
|
|
|
May 2 2007, 11:29
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(Sholkin @ May 2 2007, 16:17)  Спасибо за оптвет Александр Уже начал оформлять и запись и чтение процедурой думаю всё получиться . Напишу проверю результат на праздниках небыло времени. Уважаемый Sholkin ! Начало обсуждения вашей программы в другой конференции: http://www.fulcrum.ru/cgi-bin/bbs/mess_sel...4592&page=1 датировано 21.06.2006, т.е. почти год назад. Ваш "проект" обсуждался под разными темами, но ответы на все ваши вопросы всегда сводились к просьбе привести программу в читабельный вид, используя мнемонические имена. Ваши ответы тоже всегда в стиле: "мне бы только ночь простоять, да день продержаться" - "вот допишу, отлажу, а потом всё переделаю, как вы советуете". Если за прошедшие 10 месяцев вы так и не воспользовались советом десятков участников конференции, стоит ли удивляться, что по прежнему не находится желающих вам помогать?
|
|
|
|
|
May 6 2007, 21:07
|
Группа: Новичок
Сообщений: 1
Регистрация: 6-05-07
Пользователь №: 27 552

|
Здорова всем! Проблема с EEPROM: Программирую для ATMEGA128 на С в AVRstudio 4. #include <avr/io.h> #define __nop __asm__ __volatile__ ("nop":  ; void eddyEEPROMwrite ( uint8_t ADDR, uint8_t DAT ) { while(EECR & (1<<EEWE)) ; EEAR = ADDR;//location EEDR = DAT;//byte /* Write logical one to EEMWE */ EECR |= (1<<EEMWE); /* Start eeprom write by setting EEWE */ EECR |= (1<<EEWE); __nop; __nop; } uint8_t eddyEEPROMread ( uint8_t ADDR ) { uint8_t getDAT; while(EECR & 0x02); EEAR = ADDR;//location; EECR |= (1<<EERE); while ( EECR & 0x01 ); getDAT=EEDR; return getDAT; } int main(void) { uint8_t ad, da, res; ad=0; da=1; eddyEEPROMwrite( ad, da ); res=eddyEEPROMread( ad ); while(1); } Кто-ниб может подсказать почему условие while(EECR & 0x02); не выполняется при том, что бит EEWE(0x02) в регистре EECR в нуле. Это первое. Второй вопрос: Кто-нибудь использовал стандартную библиотеку eeprom.h? Зачем там нужен дефайн: #define EEMEM __attribute__((section(".eeprom"))) и как его правильно использовать? Приведите, пожалуйста, проверенные примеры на С записи данных в ЕЕПРОМ для атмеге128 или других схожих МК. Заранее всем спасибо!
|
|
|
|
|
May 6 2007, 21:25
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(KamikFROMrussia @ May 7 2007, 01:07)  int main(void) { uint8_t ad, da, res; ad=0; da=1; eddyEEPROMwrite( ad, da ); res=eddyEEPROMread( ad ); while(1); } Во-первых, никогда не пишите в ячейку 0 EEPROM на AVR !!! Код Чтение: while(EECR & (1<<EEWE)); // запись закончена ? EEAR=EEAddr; // Адрес EECR |= (1<<EERE); // читаем tmp=EEDR; // данные
Запись: while(EECR & (1<<EEWE)); // запись закончена ? EEAR=EEAddr; // Адрес EEDR=tmp; // данные EECR |= (1<<EEMWE); // пишем EECR |= (1<<EEWE);
|
|
|
|
|
May 6 2007, 22:31
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(KamikFROMrussia @ May 7 2007, 01:07)  Кто-нибудь использовал стандартную библиотеку eeprom.h? Зачем там нужен дефайн: #define EEMEM __attribute__((section(".eeprom"))) и как его правильно использовать? Так eeprom.h и нужно использовать, а не изобретать велосипед. Проблема в этом коде: EECR |= (1<<EEMWE); /* Start eeprom write by setting EEWE */ EECR |= (1<<EEWE); Бит EEWE должен быть установлен в единицу не позже чем через 4 цикла после установки в единицу бита EEMWE. Во первых вы не отключаете прерывания, а оно спокойно может произойти между записью EEMWE и EEWE! Во вторых язык С не дает ни каких гарантий о времени исполнения операций!!!! Да, на уровне оптимизации -Os этот код исполниться меньше чем за 4 цикла. Но без оптимизации (-O0) может быть больше 4 циклов. Посмотрите ответ #5: http://electronix.ru/forum/index.php?showtopic=29366Там пример использования EEMEM и функций eeprom_write_block/eeprom_read_block. Также вы можете найти на своем диске файл 'avr-libc-user-manual.pdf' и посмотеть там описание функций eeprom_read_byte, eeprom_read_word, eeprom_write_byte и eeprom_write_word. Анатолий. PS: А вы знаете про вошебное слово: M103C?
Сообщение отредактировал aesok - May 6 2007, 22:45
|
|
|
|
|
May 7 2007, 12:35
|
Участник

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711

|
Здравствуйте. ae_ вы немного не правы тогда у меня была в другом проблема и помощи я просил по USART. Если прочитать у меня ни передовались данные в компр. Там мне отвичали не смотря на мой дурной тон написания . Проблема была в ни как написано а втом 1 была сосканирована документация с ошибко настройки USART были не правильно сделаны мне это указали сделал . Данные пошли но гонятся нули . Мне подсказали что нельзя сначала разряшить работу передатчика потом запретитьего разряшить работу приемника надо сразу разрешить и работу приёмника и передатчика я это сдела просто в силу своей неопытности не знал ни сталкивалься потом у меня не передовался данные первой ячейки с ошибками подсказали что нужно использовать внешний кварц а не внутрении так как у внутреннего частота ..... припоял внешний кварц всё стало работать идеально Так что всё эти ошибки на тон написания не влияют даже если бы я написал как вы пишити (опыта у вас побольше намного) то толку бы не было . Этот блок программы я использовал чтобы смотреть что происходит с еепромом Я так написал чтобы разобраться с процом как что куда икак пишиться куда нолик куда единичка. Это всё присказка к ae_ реально я от вас ни чего путного кроме ........ Может конечно я не прав новы профи вам видней а мы уш разьберёмся с USART. разобрался и ето добьём.
Теперь по делу с этим еепромом . Пошёл к человеку показал ему свой вот этот блок всё расписал. Вывод таков там всё правильно ошибок нет почему не пишиться пока трудно сказать. Он больше 2 ячеек еепрома не писал ку меня же надо записать 7 ячеек данных выше я уже описывал пишиться нулевая первая вторая на записи в третью встоёт прога колом. Я написал в нормальном тоне как выше совет болт проблема скорей не в ентом ..... и мой тон написания опять не причём. Попробую убрать USART из программы написать так если записалась зажечь стетодиот может в ентом проблема
для KamikFROMrussia сосвом уставом в чужой агород....... не похристиански создайте свою тему и тамм пи...... Извиняюсь за ранее
|
|
|
|
|
May 8 2007, 03:45
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(Sholkin @ May 7 2007, 21:35)  Теперь по делу с этим еепромом . Пошёл к человеку показал ему свой вот этот блок всё расписал. Вывод таков там всё правильно ошибок нет почему не пишиться пока трудно сказать. Уважаемый Sholkin ! Потрудитесь заменить абсолютные адреса и номера битов на символьные имена регистров в/в и названий битов, прокомментировать каждую строчку, а также обяснить, что вы этими инструкциями пытаетесь сделать вот в этом крошечном фрагменте вашей программы: ldi R20,0 ;чтение 1 цифры OUT $1E,R20 SBI $1C,0 REP0:SBIC $1C,0 RJMP REP0 IN R21,$1D sts $60,r21
|
|
|
|
|
May 10 2007, 06:09
|
Участник

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711

|
Здравствуйте . Код не могу привести вставляю тут нет такого шрифта кракозябы. Предоставлю попозже. Дело втом что читается с еепром у меня нормально у меня не пишиться убрал подпрограмму передачи через USART/. Борода тоже самое в первые 0 в 1 в 2 ячейку пишиться когда пытаюсь записать в 4 ячейку все привет в пкрвее 3 все нормально.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|