Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 21.10.2014, 18:35  
STrub
Прохожий
 
Регистрация: 14.02.2007
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STrub на пути к лучшему
По умолчанию I2C slave аппаратный на PIC16F873

I2C slave аппаратный на PIC16F873. У кого получилось реализовать в железе? Осваиваю шину I2C. Для начала только чтение, т.е. передача данных от подчиненного к ведущему (тоже PIC16F873). При совпадении адреса один раз все проходит нормально (т.е. после сброса и начальных установок). При повторном совпадении адреса в регистре SSPBUF оказывается записанным не адресный байт, а байт данных, загруженный последним при предыдущей передаче. В результате бит R/-W может оказаться ложным, и вместо передачи данных slave готовится их принимать и, естественно, зависает. Хотя в Протеусе в этом месте все в порядке; там другие заморочки со slave, которых нет в железе.
Реклама:
STrub вне форума  
Непрочитано 21.10.2014, 22:45  
DK
Почётный гражданин KAZUS.RU
 
Аватар для DK
 
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,528
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
DK на пути к лучшему
По умолчанию Re: I2C slave аппаратный на PIC16F873

Вот подпрограмма прерывания от аппаратного И2С
PHP код:
#INT_SSP
void  SSP_isr(void
{
    
state i2c_isr_state();
    if(
state ‹= 0x80)                      //Master is sending data
    
{
        if(
state == 0x80)
            
incoming i2c_read(2);          //Passing 2 as parameter, causes the function to read the SSPBUF without releasing the clock
        
else
            
incoming i2c_read();
    
        if(
state == 1)                      //First received byte is address
        
{
            
address incoming;
        }
        else if(
state ›= && state != 0x80)   //Received byte is data
        
{
            
buffer[address++] = incoming;
            
flag2 1;
        }
    }
    
    if(
state ›= 0x80)                      //Master is requesting data
    
{
        
i2c_write(buffer[0]);
        
i2c_write(buffer[1]);
        
i2c_write(buffer[2]);
    }
    
flag1 1;

PHP код:
#use delay(crystal=12000000)
#use i2c(Slave,Fast,sda=PIN_C4,scl=PIN_C3,address=0x24,  force_hw) 
CCS. Кусок точно рабочий. На флаги не обращай внимание, это у меня там дальше использовалось.
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
DK вне форума  
Непрочитано 22.10.2014, 11:03  
STrub
Прохожий
 
Регистрация: 14.02.2007
Сообщений: 7
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STrub на пути к лучшему
По умолчанию Re: I2C slave аппаратный на PIC16F873

Спасибо. Только я с ассемблером больше дружу. Но, попробую разобраться в логике.
STrub вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Mega 8 + TWI (I2C) Slave Помогите. west1111 Микроконтроллеры, АЦП, память и т.д 46 10.07.2013 01:40
I2C Slave в Proteus maxNTF Proteus 0 05.11.2010 14:55
Аппаратный SLAVE I2C в PIC16F877 SGordon Микроконтроллеры, АЦП, память и т.д 0 19.01.2010 15:32
pic18f452 i2c slave int9 Proteus 0 06.08.2008 11:46
Обмен МК со Slave устройствами по I2C EugVor Микроконтроллеры, АЦП, память и т.д 3 25.05.2006 11:39


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


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