реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> I2C Slave на PIC16F1823, То ли лыжи не едут... ;)
Velund
сообщение Dec 5 2011, 01:13
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 693
Регистрация: 19-11-04
Пользователь №: 1 177



Пытаюсь запустить I2C Slave на PIC16F1823 взяв за основу обкатанный на старых камнях 16 серии код. И вообще не могу понять что происходит.

То вдруг прочитав после получения SLA+R адрес из SSPBUF у меня оно при попытке положить в SSPBUF первый байт данных для передачи мастеру циклится по WCOL (с кем коллизия то может быть? BF не стоит, шина в клок стретче). То вдруг вместо первого байта данных, который я положил в SSPBUF мастер выгребает сдвинутый на 1 бит влево адрес слейва...

Ни разу не удалось увидеть чтобы после NACK со стороны мастера выставился бит ACKSTAT в SSP1CON2.. Если судить по нему у меня там вечный ACK...

Вообще, хоть кто то с этими Enhanced Core MidRange пиками возился плотно? В Errata вроде ничего про MSSP нет плохого... Но вот что то оно работать не желает как надо. Раздел даташита про MSSP "новой ревизии" зачитан до дыр... Просветлением и не пахнет.
Go to the top of the page
 
+Quote Post
dac
сообщение Dec 5 2011, 06:05
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482



PIC24FJ64GB002 (master) + PIC16F1936(slave) + i2c датчик температуры, все работает, проблем нет
Go to the top of the page
 
+Quote Post
Velund
сообщение Dec 5 2011, 08:47
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 693
Регистрация: 19-11-04
Пользователь №: 1 177



QUOTE (dac @ Dec 5 2011, 10:05) *
PIC24FJ64GB002 (master) + PIC16F1936(slave) + i2c датчик температуры, все работает, проблем нет


У меня мастером LPC1758, кроме пика на шине EEPROM (с ним никаких проблем) и сдвоенный потенциометр DS1803 (тоже никаких проблем). Шина 100 кГц, короткая (проводники порядка 7 см).

Что удручает - оно может работать нормально пару секунд, а потом начинаются глюки. Т.е. совсем явной ошибки в коде пика нет. Весь основной функционал в пике заблокирован, работатет только обмен по I2C и маленькая заплатка чтобы контрольные данные грузить в ответ для отладки. Начинаю подозревать дефектный чип, есть еще один образец, но он из того же источника (надо у снабженцев уточнить где брали).

Go to the top of the page
 
+Quote Post
dac
сообщение Dec 5 2011, 09:07
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482



для 16 го вот так
CODE
// инициализация
    SSPADD = SRVP_SLAVEADR;
    SSPCON1 = 0b00100110; // enable serial port
    SSPCON2 = 0b00000001;
    SSPIF = 0;
    SSPIE = 1;

static void interrupt isr(void)            // Here be interrupt function - the name is
{
    //**********************************************************
    // прерывания I2C
    //**********************************************************
    if (SSPIE && SSPIF)
    {
        if (R_nW)
        {        
            WREG = SSPBUF;
            SSPOV = 0;
            if (!D_nA)
            {
                i2cByteCounter = 0;
            }
            SSPBUF = ((char *)&slState)[i2cByteCounter++];
        }
        else
        {
            if (D_nA)
            {
                 // команда
            }
            WREG = SSPBUF;
        }
        CKP = 1;
        SSPIF = 0;
    }
}
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 19:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016