| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > PIC18F4620 пишет в EEPROM или нет |
| Автор: iPlay 20.2.2011, 09:58 | ||||
Есть схемка не большая которая с каждым тактом генерирует 8192 раза нолик или единичку, эта схемка подключена к микроконтроллеру PIC18F4620, задача на МК запомнить эти 8192 бита(ну и потом передать по сети, эту задачу еще не решал, может скорее всего перейду потом на PIC18 c Ethernet). Вообщем пишу программку под МК чтобы запомнить биты, которые приходят на ножку RA0.
Открываю в отладчике MPLAB чтобы посмотреть EEPROM, а там http://habreffect.ru/files/002/e632283be/sshshshhh.png Подумал что в EEPROM не произошла запись, написал код по проще:
Моделирую в Proteus, работает, на ножке RB0 появляется нолик, если указать нужный адрес и число. То есть в память пишет. Открываю отладчик EEPROM опять ничего Как быть? Я теперь просто не знаю пишет ли мой цикл, в коде выше, данные в eeprom или нет, думал вывести на LCD посмотреть, я еще пока с LCD не умею работать. |
| Автор: iPlay 20.2.2011, 11:42 |
| Может я не правильно EEPROM просматриваю в MPLAB??? |
| Автор: iPlay 20.2.2011, 14:20 |
| Проблема оказывается в том что я не могу считать значение с ножки RA0. http://habreffect.ru/files/d59/7d5d3fa3a/Снимasdfhsdfhsdок.png Прошлый пример проверил в память, в EEDATA регистр и EEADR пишется отлично, почему ничего нету в окне EEPROM не понятно, может не правильно схему собрал. Но всё таки я что не правильно считываю с RA0??? |
| Автор: iPlay 20.2.2011, 16:24 | ||
И так всё по правил до вот такого вида
В результате работы, все отлично заносится в регистры EEDATA и EEADR, только во окно EEPROM в MPLAB до сих пор показывает что в eeprom ничего нет, может я чёто не так делаю? |
| Автор: UniBomb 21.2.2011, 09:19 | ||
| iPlay, по заданному вопросу я ответить увы не смогу, т.к. с пиками никогда не работал и этот ваш MPLAB в глаза не видел. Но пару замечаний есть: 1. EEPROM очень капризная штука, поэтому записывать в эту память надо как можно реже. А вот читать можно сколько угодно раз. Поэтому перед записью делайте проверку - если в нужной ячейке хранится тоже самое значение, что вы хотите записать, то можно не записывать.
К тому же это позволит сэкономить чуток времени, т.к. операция записи в EEPROM длится довольно долго. 2. Если данные приходят извне и с ними надо работать оперативно, то незачем их сохранять в EEPROM. 3. Если верить описанию на ваш мк, то EEPROM у него всего 1024 байта. Вы же хотите записать в него в восемь раз больше. 4. Освойте логические побитовые операции. Сейчас вы храните каждый бит в одном байте, что является крайне избыточным вариантом. Такой массив даже в RAM не поместиться. Зато эти данные можно уложить в 1024 байта, что уже более-менее приемлимо. |
| Автор: UniBomb 21.2.2011, 09:36 | ||
| Ещё пачка замечаний: 1. Вы как-то должны отлавливать момент начала генерирования этих самых 8192 ноликов и единичек, иначе вы рискуете считать мусор. 2. Непонятно также что такое "с каждым тактом генерирует 8192 раза нолик или единичку". Такт - это время между двумя импульсами генератора, соответственно за один такт максимум можно выдать только одно значение. Может быть имелось в виду за какое-то определённое время? 3. Также вызывает сомнение участок кода, когда происходит захват значения и запись его в EEPROM:
Получается, что вы захватываете значение с частотой 4 раза в секунду. Что ну никак не вяжется с "с каждым тактом генерирует 8192 раза" |
| Автор: xvr 21.2.2011, 12:56 |
| Есть у меня подозрение, что окошко, с содержимым EEPROM, которое вы смотрите, показывает содержимое EEPROM в вашей прошивке, а не в контролере Хотя могу и ошибаться - последний раз в MPLab ходил несколько лет назад |
| Автор: UniBomb 21.2.2011, 13:54 |
| xvr, было бы странно, если бы среда в режиме отладки не симулировала бы EEPROM в этом своём окошке |