Запись в 24c256

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Аватара пользователя
Hispanus
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб мар 26, 2011 14:17:14
Откуда: Оренбург

Запись в 24c256

Сообщение Hispanus »

Здравствуйте! Прошу Вашей помощи! Мне нужно записать в 24с256 несколько числовых значений. Для этой цели в распоряжении есть программатор, но нет файла прошивки :(. Написал небольшой intel hex файл вот такого содержания:

:100000002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D20
:00000001FF.

Сохранил его в bin, вставил в 24с256 в протеусе, запустил моделирование и попытался прочитать содержимое ячейки 24с256 по адресу 0х00 (там где должно храниться 45 (0х2D)). В результате чтение дало совсем другое значение, а именно 63 (0х3F). Получается протеус не понял моего корявого intel hex файла или он настолько корявый, что даже не загружается в 24с256?

P.S. МК pic 16f877, связь организуется по протоколу i2c
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

[i]Лорд Кельвин, физик, 1899 г.[/i]
Smen
Грызет канифоль
Сообщения: 256
Зарегистрирован: Вт окт 08, 2013 07:38:59
Откуда: СПб

Re: Запись в 24c256

Сообщение Smen »

Hispanus писал(а):Сохранил его в bin
Если Вы просто сменили расширение, то ничего и не должно получится, ибо "Intel HEX", помимо данных, содержит ещё кучу служебной информации (погуглите спецификацию), а *.bin, это - чистый бинарник, т.е. "голые" данные.
Найдите какой-нибудь простенький HEX-редактор (полно бесплатных), создайте там дамп нужного размера (по объёму чипа памяти), и, по нужному адресу, измените содержимое ячейки.

P.S.: Вариант, что у Вас неправильно I2C организован, пока не рассматриваем.

P.P.S.: И учтите, что после того, как Вы измените содержимое дампа, необходимо, в Протеусе, удалить чип памяти, а затем вставить вновь. Иначе дамп не обновится. Наверное есть какой-нибудь и другой способ. :)
Аватара пользователя
Hispanus
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб мар 26, 2011 14:17:14
Откуда: Оренбург

Re: Запись в 24c256

Сообщение Hispanus »

Smen, спасибо Вам огромнейшее! Во-первых за то, что откликнулись, а во-вторых за то что Ваш совет мне очень помог. Без него я бы, наверное, не справился. В общем, открыл я hex редактор, записал туда несколько цифр, сохранил, закрыл. В результате появился файл без разрешения. Далее вставил это файл в память fm24c256 (перед этим удалив старый чип) и запустил моделирование в протеусе. На экране i2c дебаггера появилась история операций, среди которых я нашел то самое число, хранящееся в памяти fm24c256. Это число благополучно передается МК. Всё работает :)
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

[i]Лорд Кельвин, физик, 1899 г.[/i]
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Запись в 24c256

Сообщение urry »

Иначе дамп не обновится. Наверное есть какой-нибудь и другой способ.

debug->reset persistent model data
Аватара пользователя
Hispanus
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб мар 26, 2011 14:17:14
Откуда: Оренбург

Re: Запись в 24c256

Сообщение Hispanus »

Оказалось не всё так благополучно...Собрал схему из реальных деталей, попытался считать содержимое ячейки по адресу 0х00 из am24с256 и ничего не получается. Память не шлет бита подтверждения (проверял программным путем). Кроме того и программироваться она тоже не хочет, появляется ошибка - нет бита подтверждения (программатор - ExtraPic, программа - icprog). В чем может быть дело? Я себе всю голову сломал.
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

[i]Лорд Кельвин, физик, 1899 г.[/i]
Smen
Грызет канифоль
Сообщения: 256
Зарегистрирован: Вт окт 08, 2013 07:38:59
Откуда: СПб

Re: Запись в 24c256

Сообщение Smen »

Hispanus писал(а):проверял программным путем
Надо бы аппаратным.

Hispanus писал(а):и программироваться она тоже не хочет
А Вы там с адресами ничего не попутали?
Блокировку записи сняли?
Скорость допустимая?
Начиная с XP, IC-Prog может работать не корректно.
Аватара пользователя
Hispanus
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб мар 26, 2011 14:17:14
Откуда: Оренбург

Re: Запись в 24c256

Сообщение Hispanus »

Smen, запускаю icprog в режиме совместимости с win2000, МК она программирует нормально, а вот память не хочет. Вы имеете в виду скорость i2c или скорость программирования? Скорость i2c равна 400кГц, а скорость программирования стоит с задержкой 10 (не знаю какая это скорость). Моя проверка сводится к зажигаю светодиода, если память посылает бит подтверждения и его миганию, если прочитанный байт совпадает с тем, что записал МК. Так вот светодиод не зажигается и не мигает. Блокировку снял, притянул ножку Protect Write к земле.Адрес микросхемы 1010000, его и посылаю памяти, вместе с битом направления передачи (в протеусе все моделируется нормально). Может быть что то с питанием? Или нужно емкость куда то поставить? Моя модель памяти называется am 130 24c256 pi A. Не нашел ДШ конкретно для нее, но для всей серии напряжение питание равно 1.8-5.5 В. Я питаю свою 4.7 В. На всякий случай привожу собранную схему на макетке (выводы обозначил красным цветом):
Вложения
2014-08-01 20.59.38.jpg
Монтажная схема
(187.66 КБ) 974 скачивания
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

[i]Лорд Кельвин, физик, 1899 г.[/i]
Smen
Грызет канифоль
Сообщения: 256
Зарегистрирован: Вт окт 08, 2013 07:38:59
Откуда: СПб

Re: Запись в 24c256

Сообщение Smen »

Hispanus писал(а):Адрес микросхемы 1010000, его и посылаю памяти
Имелось ввиду: адрес в IC-Prog.
А вообще, если у Вас не W98, настоятельно рекомендую сменить на что-нибудь другое.
Аватара пользователя
Hispanus
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб мар 26, 2011 14:17:14
Откуда: Оренбург

Re: Запись в 24c256

Сообщение Hispanus »

Адрес в icprog задаю по вкладке i2c числом 160 (пробовал 161). Пробовал в WinPic - такой же результат, вернее его отсутствие :( . Но почему память не отвечает, когда я обращаюсь к ней через МК по протоколу i2c? Ведь схема же собрана правильно? И программа тоже, если в протеусе все работает...

P.S. Или адрес памяти не 160 (0b10100000), а 80 (0b01010000)?
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

[i]Лорд Кельвин, физик, 1899 г.[/i]
Smen
Грызет канифоль
Сообщения: 256
Зарегистрирован: Вт окт 08, 2013 07:38:59
Откуда: СПб

Re: Запись в 24c256

Сообщение Smen »

Hispanus писал(а):Адрес в icprog задаю по вкладке i2c числом 160
Как можно тремя двоичными разрядами задать число 160?
Вы даташит-то на м/сх смотрели?
Аватара пользователя
Hispanus
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб мар 26, 2011 14:17:14
Откуда: Оренбург

Re: Запись в 24c256

Сообщение Hispanus »

Тогда как нужно задавать адрес в icprog? Не понимаю о каких трех двоичных разрядах Вы говорите.

Изображение
Вложения
24c256.JPG
(68.52 КБ) 3376 скачиваний
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

[i]Лорд Кельвин, физик, 1899 г.[/i]
Smen
Грызет канифоль
Сообщения: 256
Зарегистрирован: Вт окт 08, 2013 07:38:59
Откуда: СПб

Re: Запись в 24c256

Сообщение Smen »

Hispanus писал(а):о каких трех двоичных разрядах Вы говорите
Ну, Вы даёте. :)
Говорю же, даташит гляньте.

Изображение

Изображение

Кстати, уточнение-поправка к предыдущему сообщению:
В адресации у 256-й участвуют только два пина. Третий не задействован.

И Вы в курсе, что у данной памяти страничная организация записи?
Аватара пользователя
Hispanus
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб мар 26, 2011 14:17:14
Откуда: Оренбург

Re: Запись в 24c256

Сообщение Hispanus »

Так Вы про эти три двоичных разряда :) Я Вас просто не понял. Они у меня притянуты к земле, поэтому адрес м/cх - 0b1010000. Про то, что у этой памяти страничная организация памяти знаю, но ничего не мешает обращаться к каждому байту индивидуально:

AT24C128/256, 128K/256K SERIAL EEPROM: The 128K/256K is internally organized as256/512 pages of 64-bytes each. Random word addressing requires a 14/15-bit data wordaddress.


Я пока оставил попытки запрограммировать данную м/cх программатором, а пытаюсь получить от нее бит подтверждения при посылке ей её адреса. Но в ответ память предательски молчит. Может быть я что то напутал в программе? Если память формирует бит подтверждения вывод PORTB.0=1. Дальше я читаю содержимое ячейки по адресу 0х0000, где по идеи должно находится число 0хFF. Но программа доходит до ожидания бита подтверждения и зависает... :(

Код: Выделить всё

#include <16f877.h>
#use delay(clock=16000000)
#fuses HS,NOWDT


int8 data=0x00;
//Переменная для данных
   
int8 adr_byte1=0;
//Младший байт внутреннего регистра памяти
int8 adr_byte2=0;
//Старший байт внутреннего регистра памяти

int8 adr_write=0b10100000;
//Адрес м/cх с запросом на запись
int8 adr_read=0b10100001;
//Адрес м/cх с запросом на чтение

void init_ports()
//Настройка портов
{
   TRISA=0b00000000;
   PORTA=0b00000000;
   
   PORTB=0b00000000;
   TRISB=0b00000000;
   
   TRISC3=1;
   TRISC4=1;
   PORTC3=1;
   PORTC4=1;
   //Выводы модуля MSSP настроены на вход
}

void int_on()
//Настройка прерываний
{
   GIE=1;
   //Глобальное разрешение прерываний
   
   PEIE=1;
   //Разрешение прерываний от периферийных устройств
}

void init_i2c()
{   
   SSPSTAT=0b00000000;
   
   SSPCON2=0b00000000;
   
   SSPADD=0x09;
   //400 кГц
   
   SSPCON=0b00101000;

   //SSPEN=1;
   //Включить модуль MSSP
   
   //SSPM3=1;
   //SSPM2=0;
   //SSPM1=0;
   //SSPM0=0;
   //Ведущий режим
}

void start_i2c()
{
   SEN=1;
   //Сформировать старт
   
   while (!SSPIF)
   //Ждать пока не сформирутся старт (флаг прерывания от модуля MSSP)
      {
         
      }
   
   SSPIF=0;
   //Сброс флага прерывания от модуля MSSP
   
}

void send_i2c(int8 data)
{
   SSPBUF=data;
   //Запись в буфер
   
   while (!SSPIF)
   //Ожидание окончания передачи (флаг прерывания от модуля MSSP)
      {
         
      }
   
   SSPIF=0;
   //Сброс флага прерывания от модуля MSSP
   
   while (ACKSTAT)
   //Ожидание бита подтверждения от приемника
      {
         
      }
      PORTB=0b00000001;
}

void stop_i2c()
{
   PEN=1;
   //Сформировать бит стоп
   
   while (!SSPIF)
   //Ждать пока бит стоп не сформируется ((флаг прерывания от модуля MSSP))
      {
         
      }
     
   SSPIF=0;
   //Сброс флага прерывания от модуля MSSP
}

void restart_i2c()
{
   RSEN=1;
   //Сформировать бит повторный старт
   
   while (!SSPIF)
   //Ждать пока повторный бит старта не сформируется (прерывание от модуля MSSP)
      {
         
      }
   
   SSPIF=0;
   //Сброс флага прерывания от модуля MSSP
}

int8 receive_i2c()
{
   int8 receive_data=0b00000000;
   
   RCEN=1;
   //Разрешить прием от приемника
   
   while (!SSPIF)
   //Ждать пока приемник передаст байт (прерывание от модуля MSSP)
      {
         
      }
   
   SSPIF=0;
   //Сброс флага прерывания от модуля MSSP
   
   receive_data=SSPBUF;
   //Записать полученный байт
   
   ACKDT=1;
   
   ACKEN=1;
   //Сформировать бит подтверждения ACKDT
   
   while (!SSPIF)
   //Ждать пока подтвержение не сформируется
      {
         
      }
   
   SSPIF=0;
   
   return (receive_data);
}



void main (void)


   init_ports();
   //Настройка портов
   
   int_on();
   //Настройка прерываний
   
   init_i2c();
   //Инициализация i2c
   
    start_i2c();
    //Старт
   
    send_i2c(adr_write);
    //Отправка памяти ее адреса с запросом на запись
   
    send_i2c(adr_byte2);
    //Отправка старшего регистра внутренней памяти
   
     send_i2c(adr_byte1);
     //Отправка младшего регистра внутренней памяти
   
     restart_i2c();
     //Рестарт
   
     send_i2c(adr_read);
     //Отправка памяти ее адреса с запросом на чтение
     
     data=receive_i2c(); 
     //Прием байта от памяти
     
     stop_i2c();
     //Стоп
         
     PORTB=data;
   
}
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

[i]Лорд Кельвин, физик, 1899 г.[/i]
Аватара пользователя
Hispanus
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб мар 26, 2011 14:17:14
Откуда: Оренбург

Re: Запись в 24c256

Сообщение Hispanus »

Все дело было в самом чипе памяти. Купил другой (микрочиповский) и все заработало. Всем спасибо за помощь.
У радио нет будущего. Летательные аппараты тяжелее воздуха невозможны. Скоро выяснится, что рентгеновские лучи - мистификация.

[i]Лорд Кельвин, физик, 1899 г.[/i]
nirq
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Re: Запись в 24c256

Сообщение nirq »

И чем конкретно отличаются чипы?
Магия. Лотерея. Несерьёзно.

viewtopic.php?p=2077632#p2077632

"State machine" на всякий случай.
Или это слово ещё неизвестно в принципе, или просто не было настроения над ним задуматься. Потому что пока не нужно было задумываться.



Если нет логического анализатора известной китайской фирмы - никто не мешает отлаживаться даже светодиодами, тоже на всякий случай.
Ну день потратишь, ну два дня... ну изрисуешь карандашиком четыре листа бумаги или даже двенадцать листов... зато будешь понимать собственное изделие, а не угадывать... а так уже сколько дней потратил на "эксперименты" и с каким результатом?
Общение - смысл.

icprog... WinPic... в протеусе...
Это как чинить один неисправный осциллограф с помощью другого неисправного осциллографа (но если верить калькулятору, то оба осциллографа уже и так исправны).
Аватара пользователя
wangine
Родился
Сообщения: 19
Зарегистрирован: Пн авг 18, 2014 20:24:10
Откуда: Romania

Re: Запись в 24c256

Сообщение wangine »

Проблема с воспоминаниями, в основном, подтянуть. На практике scema резисторов на ПДД, SCL соответственно 2K2, 4k7, 10k, в зависимости от каждого производителя отсутствует в вашей схеме. многие компании также используют разные времена написания и определенную задержку между датой и часами. Для каждого должны найти библиотеки были найдены согласиться с этим IC.например, библиотеки для 24C08 / 24C16 / 24C64 24C32 идентичны, но даже если его предшественник 24C16 имеет отдельная библиотека немного поздно, чтобы начать с 2uS и остальным 4US. Это различие делает невозможным для записи все лучшее
Ответить

Вернуться в «Периферия»