Работа с внешней памятью

Здесь вопросы новичков
Ответить
Rent
Сообщения: 10
Зарегистрирован: 15 мар 2010, 15:33

Работа с внешней памятью

Сообщение Rent » 15 мар 2010, 15:41

Господа, окажите помощь новичку. нужно обратиться из микроконтроллера к внешней EEPROM памяти...типа 24С16...осуществить в ней поиск и редактирование. На С исходник если бы увидел был бы благодарен.

Аватара пользователя
Radioded
Site Admin
Сообщения: 184
Зарегистрирован: 07 ноя 2008, 02:47
Откуда: Москва
Контактная информация:

Re: Работа с внешней памятью

Сообщение Radioded » 16 мар 2010, 14:33

Вот код исходника для работы с внешней памятью at24c16 (по ссылке: http://nav2.livejournal.com/130205.html):

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

// Модуль работы с EEPROM AT24c16  (2Kb)
// -----------------------------------------------
#include <89c51rd2.h>

#define SDA P5_4
#define SCL P5_3

static void set_sda(void)
{
  SDA = 1;
}

static void clr_sda(void)
{
  SDA = 0;
}

static void set_scl(void)
{
  SCL = 1;
}

static void clr_scl(void)
{
  SCL = 0;
}

static void ee_del(void) 
{
  int i;
  for(i=0;i<20;i++) {};
}

static void ee_start(void)
{
  set_sda();
  ee_del();
  set_scl();
  ee_del();
	
  clr_sda();
  ee_del();
  clr_scl();
  ee_del();
}		

static void ee_stop(void)
{
  clr_sda();
  ee_del();

  set_scl();
  ee_del();

  set_sda();
  ee_del();
}

static void ee_ack(void)
{
  ee_del();

  set_sda();
  ee_del();

  set_scl();

  ee_del();
  ee_del();
  ee_del();
  ee_del();

  clr_scl();
  ee_del();
  ee_del();

}

static void ee_ack_w(void)
{
  ee_del();

  set_sda();
  ee_del();

  set_scl();

  ee_del();
  ee_del();
  ee_del();
  ee_del();

  while(SDA != 0 ) {}; // SDA

  clr_scl();
  ee_del();
  ee_del();
}

static void ee_wb(unsigned char wb)
{
  unsigned char i;
  unsigned char wwb;

  wwb = wb;

  for(i=0;i<8;i++)
     {
       if((wwb & (0x80>>i)) == 0 )
         {
           clr_sda();
         }
       else
         {
           set_sda();
         }

       ee_del();
       set_scl();
       ee_del();
       clr_scl();
       ee_del();
       
     }
}

static unsigned char ee_rb(void)
{
  unsigned char i;
  unsigned char ee_data;

  ee_data = 0;
  set_sda();

  for(i=0;i<8;i++)
     {
      set_scl();
      ee_del();

        ee_data = (ee_data << 1) | SDA; //| tmp_p8;                     /* 254 */

      clr_scl();
      ee_del();
      set_sda();
      ee_del();
     };

  return(ee_data);
}
/*-----------------------------------------------------------*/

void ee_write(unsigned int adr, unsigned char wb)
{
  unsigned char adrL;
  unsigned char adrH;
  unsigned int i;

  ee_start();

  adrL = adr & 0xff;
  adrH = (((adr >> 8) << 1) & 0x0E) | 0xA0;
  
  ee_wb(adrH);
  ee_ack();

  ee_wb(adrL);
  ee_ack();

  ee_wb(wb);
  ee_ack();
  
  ee_stop();

  for(i=0;i<5000;i++){}
}

/* ------------------------------------------------ */

unsigned char ee_read(unsigned int adr)
{
  unsigned char adrL;
  unsigned char adrH;
  unsigned char rb;
  
  ee_start();

  adrL = adr & 0xff;
  adrH = (((adr >> 8) << 1) & 0x0E) | 0xA0;

  ee_wb(adrH);
  ee_ack();

  ee_wb(adrL);
  ee_ack();

  ee_del();

  ee_stop();

  ee_del();

  ee_start();
 
  adrH = (((adr >> 8) << 1) & 0x0E) | 0xA1;

  ee_wb(adrH);
  ee_ack();

  ee_del();
  rb = ee_rb();
  ee_ack();
  ee_stop();

  return(rb);
}
Вложения
at24c16.rar
Исходник для работы с внешней памятью AT24C16
(764 байт) 577 скачиваний

Rent
Сообщения: 10
Зарегистрирован: 15 мар 2010, 15:33

Re: Работа с внешней памятью

Сообщение Rent » 16 мар 2010, 16:10

Спасибо!!!! Оперативно ответили :D Буду разбираться.

Аватара пользователя
Radioded
Site Admin
Сообщения: 184
Зарегистрирован: 07 ноя 2008, 02:47
Откуда: Москва
Контактная информация:

Re: Работа с внешней памятью

Сообщение Radioded » 16 мар 2010, 17:20

Сейчас глянул книжку, на полке стояла "Конструирование устройств на микроконтроллерах", автор Белов А.В.
В ней описана работа с внешней EEPROM памятью с интерфейсом I2C. Есть исходники, но правда на ассемблере. Я думаю, данная книга (особенно стр. 113-160) может очень помочь в освоении EEPROM памяти типа 24С***. ;)

Rent
Сообщения: 10
Зарегистрирован: 15 мар 2010, 15:33

Re: Работа с внешней памятью

Сообщение Rent » 16 мар 2010, 23:05

нашел книгу белова...спасибо за подсказку...асма так асма :) расскажу если что получится

Rent
Сообщения: 10
Зарегистрирован: 15 мар 2010, 15:33

Re: Работа с внешней памятью

Сообщение Rent » 25 мар 2010, 20:43

Здравствуйте, коллеги!! с кодом вроде разобрался с вашей помощью...помогли книги Белова в том числе. Дошла очередь до сборки. в общем надо соединить attiny2313 (остановился на нем, потому что программатор готовый есть) и eeprom 24C16. понимаю что надо соединить соответсвующие выводы SDA и SCL друг с другом и подать питание.... может посоветуете как сделать правильно

Аватара пользователя
Radioded
Site Admin
Сообщения: 184
Зарегистрирован: 07 ноя 2008, 02:47
Откуда: Москва
Контактная информация:

Re: Работа с внешней памятью

Сообщение Radioded » 26 мар 2010, 00:41

Ножки микросхемы памяти 24C16 надо подключать к микроконтроллеру ATtiny2313 следующим образом:
SDA к 17 ножке микроконтроллера (PB5),
SCL к 19 ноге (PB7).
Вот и все, начинайте писать исходник. Если будут вопросы - задавайте.

Rent
Сообщения: 10
Зарегистрирован: 15 мар 2010, 15:33

Re: Работа с внешней памятью

Сообщение Rent » 26 мар 2010, 08:38

Понятно....к 4 и 8 ножке eeprom подаю питание, а ножки 1,2,3 и 7 остаются неподключенными. к микроконтроллеру подаю питание к 20 и 10 ножке,а остальные не подключенные. так? кварц наверно можно использовать встроенный?

Аватара пользователя
Radioded
Site Admin
Сообщения: 184
Зарегистрирован: 07 ноя 2008, 02:47
Откуда: Москва
Контактная информация:

Re: Работа с внешней памятью

Сообщение Radioded » 28 мар 2010, 14:29

Да, кварц проще использовать встроенный (точнее RC-цепочку).
Судя по даташиту на память от фирмы ATMEL - AT24C16.
Ножки A0, A1, A2 (1-3 ноги микросхемы) лучше подтянуть к напряжению питания или к земле (насколько я помню они позволяют адресовать несколько микросхем памяти на одной шине I2C).
Ножка WP (седьмая нога) должна быть подключена к земле, для разрешения записи в память.
Всё это по даташиту: http://www.datasheetcatalog.org/datashe ... 469_DS.pdf
(смотрел на сайте http://www.datasheetcatalog.com/datashe ... 4C16.shtml)

Rent
Сообщения: 10
Зарегистрирован: 15 мар 2010, 15:33

Re: Работа с внешней памятью

Сообщение Rent » 05 апр 2010, 20:00

при программировании возникла одна проблемка. в PonyProge изменил значение фьюза CKSEL...он используется для настройки источника тактового сигнала. после этого программатор совсем перестал видеть микроконтроллер. пришлось заливать hex с установленными по умолчанию значениями. У Белова написано что при работе с eeprom частоту надо использовать небольшую. Как мне все таки установить фьюзы (и какие) и не допустить чтобы микроконтроллер перестал "пропадать" для программатора? Заранее спасибо за консультации

Rent
Сообщения: 10
Зарегистрирован: 15 мар 2010, 15:33

Re: Работа с внешней памятью

Сообщение Rent » 13 апр 2010, 19:47

Заработало!!!!!!!!!!!!!!!!!!! :D :D :D

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей