Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 07.05.2007, 15:36   #1
НиК
Junior Member
 
Регистрация: 07.05.2007
Сообщений: 2
Вес репутации: 100/0
НиК will become famous soon enoughНиК will become famous soon enough
Post Чтение из CE210

Всех с праздником!
Прошу поделиться советом.
Осваиваю контроллер CE210 и I2C интерфейс к нему, все управляется с помощью PIC18F452.
Передача вроде освоена - у CE210 программируются режимы, индикация.
При нажатии кнопки сигнал INT от CE210 уст. в 0. Начинаю чтение.
Все время считывается 0хFF не зависимо на какую кнопку нажали. Причем сигнал INT от СE210 после чтения cбрасывается, т.е. судя по datasheet (к CE210) чтение произошло.
Код:
void main(void)
{
 init();    //Иниц-я USART, I2C, CE210
 SendInCE210('0'); //Высвеч. '0' на индикатор
 while(1)
 {
  if(INT0IF) //ожидание прерывания от CE210
  {
   i2c_start(); 
   i2c_write(0x70); // адрес CE210
   i2c_write(0x81); // уст. адреса регистра клав-ры
   i2c_stop();
 
   i2c_start(); 
   i2c_write(0x71); // адрес чтения из CE210
   TXREG=i2c_read(0); // сч. номера нажатой кнопки и выдача по COM1
   i2c_stop();
   INT0IF=0;  // снимает флаг
  }
 } 
}
void SendInCE210(char byte) //// передача в CE210 ////
{
 i2c_start();
 i2c_write(0x70);
 i2c_write(byte);
 i2c_stop();
}
////////////////////////////////////////////////////////
void i2c_start()
{ 
 SEN = 1; 
 i2c_wait_idle();
}
////////////////////////////////////////////////////////
void i2c_stop() 
{
 PEN = 1; 
 i2c_wait_idle();
}
////////////////////////////////////////////////////////
void i2c_restart()
{
 RSEN = 1;
 i2c_wait_idle();
}
////////////////////////////////////////////////////////
void i2c_write(char data) 
{ 
 SSPBUF = data; 
 i2c_wait_idle();
}
////////////////////////////////////////////////////////
char i2c_read (unsigned char ack) 
{ 
 RCEN = 1; 
 i2c_wait_idle(); 
 if (ack)ACKDT=0; 
  else ACKDT=1; ACKEN=1;
 return SSPBUF; 
}
///////////////////////////////////////////////////////
void i2c_wait_idle()
{
 while((SSPCON2 & 0x1F) || RW); //Checks SEN,PEN,RSEN,RCEN,ACKEN
}
////////////////////////////////////////////////////////

Последний раз редактировалось НиК; 08.05.2007 в 12:02.
НиК вне форума   Ответить с цитированием
Старый 17.05.2007, 11:19   #2
НиК
Junior Member
 
Регистрация: 07.05.2007
Сообщений: 2
Вес репутации: 100/0
НиК will become famous soon enoughНиК will become famous soon enough
По умолчанию Решил сам

Вскоре методом научного тыка все заработало.

Вдруг кому понадобится:
В рабочем варианте при инициализации I2C порты RC3 и RC4 сделал как входы
Код:
init()
{
...
TRISC3=1; 
TRISC4=1;
...
}
В принципе в datasheet на Pic так и написано ,
но по началу при такой конфигурации I2C - он у меня и передавать не хотел.
НиК вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура чтения DS3235. Watcher Общетехнические вопросы 67 29.11.2010 08:42
Проблемы с пробуждением мк из sleep Troydon Продукция MICROCHIP 12 25.07.2008 20:36
Как правильно произвести чтение из таблицы Alexsandr Продукция MICROCHIP 23 28.02.2008 10:00
чтение из wg12864... очередные грабли alexdrv Продукция MICROCHIP 0 18.01.2008 18:53
Чтение из памяти программ(PIC18Fxxxx) electro_on Продукция MICROCHIP 3 09.06.2007 14:47


Часовой пояс GMT +3, время: 07:29.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot