|
Помогите советом. I2C, Мож кто сталкивался. |
|
|
|
 |
Ответов
|
Jun 18 2007, 22:42
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Код //Инициализация порта TWI void TWI_Init(void) { TWI_DDR &= ~(1<<SDA); // SDA на ввод TWI_PORT |= (1<<SDA); // подпереть TWI_DDR &= ~(1<<SCL); // SCL на ввод TWI_PORT |= (1<<SCL); // подпереть TWCR=TWI_OK; // Режим Slave } Код #pragma vector=TWI_vect // I2C __interrupt static void i2c(void) { uint8_t static AdrStatus; // Смещение внутри структуры
switch(TWSR & 0xF8){ case TWI_ADDR_W: // Приняли свой адрес Flag.ErrIIC=0; Flag.AdrIIC=1; break; case TWI_DATA_W: // Читаем Адрес структуры или саму структуру (Установка времени) if(Flag.AdrIIC){ // Читаем Адрес структуры Flag.AdrIIC=0; // Сбросили признак AdrStatus=TWDR & 0x1f; // установить смещение } else{ // Читаем саму структуру (Установка времени) if(AdrStatus>13){ AdrStatus=0; // Игнорировать ошибки break; // Недопустить запись в область ячеек памяти } *(&Status.Year+AdrStatus++)=TWDR; // Записать и перейти на следующий Flag.SetDay=1; // Был установлен день } break; case TWI_WP: // Стоп или повторный старт case TWI_STOP: // Стоп case TWI_A_STOP: // Стоп if(Flag.SetDay){ // Если было установлено время, то LastDay=LastDayOfMonth[Status.Month]; // Определим последний день месяца Flag.SetDay=0; // Сбросить признак } break; case TWI_ADDR_R: // Читаем case TWI_DATA_R: // Читаем TWDR= *(&Status.Year+AdrStatus++); // Прочитать и перейти на следующий if(AdrStatus>13)AdrStatus=0; // Игнорировать ошибки break; default: Flag.ErrIIC=1; // Иначе ошибка } TWCR=TWI_OK; // Подтвердить приём } Код //==== I2C ===== TWAR=0x16; // Адрес Slave = 16/17 Код #define FCLK 8000000 // Частота контроллера #define TCLK 125 // Частота контроллера в нс
#define VERSIJA 0x18 // Версия ПО 1.8
#define INT0 2 // Нога INT0 #define INT0_PIN PIND // Порт INT0
//======================================== //======== TWI =========== #define TWI_ADDR_W 0x60 // Передача "Адрес + W" #define TWI_DATA_W 0x80 // Передача "Записать данные" #define TWI_WP 0xa0 // Передача "Записать данные и стоп"
#define TWI_ADDR_R 0xa8 // Передача "Адрес + R" #define TWI_DATA_R 0xb8 // Передача "Читать данные" #define TWI_STOP 0xc0 // Передача "Читать стоп" #define TWI_A_STOP 0xc8 // Передача "Читать стоп"
#define TWI_OK 0xc5 // Подтверждение приёма
#define SDA 0x4 // Линия порта SDA #define SCL 0x5 // Линия порта SCL #define TWI_PORT PORTC // Порт I2C #define TWI_DDR DDRC // Порт I2C
#define PWR_BAT 0x1 // Включение батарейного питания #define BAT_PORT PORTC // Порт включения батарейного питания #define PWR_BAT_ON BAT_PORT |= (1<<PWR_BAT)// Подключить батарейку #define PWR_BAT_OFF BAT_PORT &= ~(1<<PWR_BAT)// Выключить батарейку
|
|
|
|
|
Jun 18 2007, 23:37
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(SasaVitebsk @ Jun 19 2007, 01:42)  default: Flag.ErrIIC=1; На первый взгляд никакого криминала нет. По дефолту попробуйте сделать переинициализацию шины TWCR = (1 << TWIE); // twen - 0 TWDR = 0; TWAR = SLAVE_ADDRESS; TWCR = (1 << TWEN) | (1 << TWIE) | (1 << TWINT) | (1 << TWEA); (и конечно же под отладкой поставить точку останова на default case и посмотреть когда туда попадает)
|
|
|
|
Сообщений в этой теме
SasaVitebsk Помогите советом. I2C Jun 17 2007, 13:20 singlskv Цитата(SasaVitebsk @ Jun 17 2007, 17:20) ... Jun 17 2007, 13:37 zltigo То:singlskv - насточтельная просьба избегать совер... Jun 17 2007, 14:04 singlskv Цитата(zltigo @ Jun 17 2007, 18:04) То:si... Jun 17 2007, 14:18  zltigo Цитата(singlskv @ Jun 17 2007, 17:18) Ну ... Jun 17 2007, 16:40   singlskv Цитата(zltigo @ Jun 17 2007, 20:40) У LPC... Jun 17 2007, 16:46    zltigo Цитата(singlskv @ Jun 17 2007, 19:46) Ну ... Jun 17 2007, 17:00     singlskv Цитата(zltigo @ Jun 17 2007, 21:00) Никак... Jun 17 2007, 17:24      zltigo Цитата(singlskv @ Jun 17 2007, 20:24) но ... Jun 17 2007, 18:13       singlskv Цитата(zltigo @ Jun 17 2007, 22:13) Норма... Jun 17 2007, 18:44        zltigo Цитата(singlskv @ Jun 17 2007, 21:44) ...... Jun 17 2007, 18:53         singlskv Цитата(zltigo @ Jun 17 2007, 22:53) А чег... Jun 17 2007, 19:31          zltigo Цитата(singlskv @ Jun 17 2007, 22:24) ...... Jun 17 2007, 19:36       singlskv Цитата(zltigo @ Jun 17 2007, 22:13) Норма... Jun 17 2007, 18:58        zltigo Цитата(singlskv @ Jun 17 2007, 21:58) есл... Jun 17 2007, 19:14 SasaVitebsk Экспериментировал от 1МГц до 100кГц. На высоких ск... Jun 17 2007, 16:15 singlskv Цитата(SasaVitebsk @ Jun 17 2007, 20:15) ... Jun 17 2007, 16:33 bodja74 А софтовый I2C следит за SCL при растяжке ACK слей... Jun 17 2007, 17:04 SasaVitebsk Цитата(bodja74 @ Jun 17 2007, 20:04) А со... Jun 17 2007, 18:54  Dog Pawlowa Цитата(SasaVitebsk @ Jun 17 2007, 21:54) ... Jun 17 2007, 20:38 SasaVitebsk Я, к примеру, совершенно не удивился сообщению zlt... Jun 17 2007, 20:23 zltigo Цитата(SasaVitebsk @ Jun 17 2007, 23:23) ... Jun 17 2007, 20:38  SasaVitebsk Цитата(zltigo @ Jun 17 2007, 23:38) Увы, ... Jun 17 2007, 20:46   zltigo Цитата(SasaVitebsk @ Jun 17 2007, 23:46) ... Jun 17 2007, 21:19    SasaVitebsk Цитата(zltigo @ Jun 18 2007, 00:19) Можно... Jun 17 2007, 21:55     zltigo Цитата(SasaVitebsk @ Jun 18 2007, 00:55) ... Jun 17 2007, 22:21      SasaVitebsk Цитата(zltigo @ Jun 18 2007, 01:21) Да, п... Jun 17 2007, 23:18       defunct Цитата(SasaVitebsk @ Jun 18 2007, 02:18) ... Jun 17 2007, 23:51       Dog Pawlowa Цитата(SasaVitebsk @ Jun 18 2007, 02:18) ... Jun 18 2007, 07:24       zltigo Цитата(SasaVitebsk @ Jun 18 2007, 02:18) ... Jun 18 2007, 07:37        SasaVitebsk Цитата(zltigo @ Jun 18 2007, 10:37) Нет, ... Jun 18 2007, 08:43        defunct Цитата(zltigo @ Jun 18 2007, 10:37) Какой... Jun 18 2007, 11:04         zltigo Цитата(defunct @ Jun 18 2007, 14:04) в пр... Jun 18 2007, 12:21          defunct Цитата(zltigo @ Jun 18 2007, 15:21) (а ме... Jun 18 2007, 22:06 SasaVitebsk Кое что прояснилось. Буду, конечно ещё дальше копа... Jun 18 2007, 21:35 singlskv 1. нужно обязательно добавить обработку состояния ... Jun 18 2007, 23:57 mrcashe Кстати говоря, на такой шине при поллинге надо обя... Jun 19 2007, 04:54 SasaVitebsk Цитата(mrcashe @ Jun 19 2007, 07:54) Кста... Jun 19 2007, 08:19  singlskv Цитата(SasaVitebsk @ Jun 19 2007, 12:19) ... Jun 19 2007, 08:41 SasaVitebsk Всем спасибо за участие. В любом случае я узнал но... Jun 30 2007, 00:37 defunct Цитата(SasaVitebsk @ Jun 30 2007, 03:37) ... Jun 30 2007, 01:07 Dog Pawlowa Цитата(SasaVitebsk @ Jun 30 2007, 03:37) ... Jun 30 2007, 04:15 sensor_ua ЦитатаМожно работать с массивами и указателями. Чт... Jul 1 2007, 06:26 mrcashe ЦитатаПодскажите спецы кто как работает в Си. Можн... Jul 1 2007, 08:35 defunct Цитата(mrcashe @ Jul 1 2007, 11:35) В раз... Jul 1 2007, 13:09  zltigo Цитата(defunct @ Jul 1 2007, 16:09) Для п... Jul 1 2007, 13:31 sensor_ua ЦитатаЭто что-то новое. Размер массива в Си, вообщ... Jul 1 2007, 10:36 SasaVitebsk Спасибо.
Доступно, внятно и чётко. Короче похоже э... Jul 1 2007, 15:47
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|