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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 06.02.2009, 21:34   #1
=DIMA=
Member
 
Регистрация: 28.02.2007
Сообщений: 46
Вес репутации: 100/49
=DIMA= will become famous soon enough=DIMA= will become famous soon enough
По умолчанию Пытаюсь соединить два 16F877 по I2c.

Всем добрый вечер!
Пытаюсь соединить два 16F877 по I2c мастер и слейф,
парюсь уже который день, стараюсь придерживаться правил
по документу DS00554c.
Вопрос по мастеру:
Код:
 
  movlw    B'00001000'       ; Мастер режим I2C,тактовая частота
  movwf    SSPCON            ; сигнала=Fosc/(4*(SSPADD+1))
  bsf      STATUS, RP0       ; банк 1.
  movlw    0x7F                ; Скорость генератора BRG.
  movwf    SSPADD
  movlw    B'10000000'       ; Стандартный режим(100кГц и 1мГц) 
  movwf    SSPSTAT           ;спецификация I2C.
  clrf     SSPCON2
  bsf      PIE1, SSPIE         ; Перерывания от SSP разрешено. 
  bcf      STATUS, RP0       ; банк 0. 
  bsf      SSPCON, SSPEN     ; Вкл. модуля MSSP.
Далее по таймеру TMR1 запускаю:
поднимаю SEN и жду когда опустится,
потом загружаю адрес в буфер и жду прерывания где я проверю
квитирование от слейфа и начну гнать данные.
На цифровом осц. хорошо видно что отсутствует старт!
При попытке вообще убрать SEN в проге ни чего не меняется.
Кроме того если в буфер внести 1 на старший бит то пропадают
сигналы SDA и SCL а вместо них короткий провал, из за этого
слейф не реагирует на адрес. Что делать не знаю!
И ещё вопрос: как правильно после ошибки поступать выкл. а
потом вкл. MSSP, или нужны ещё какие то манипуляции?

Последний раз редактировалось =DIMA=; 06.02.2009 в 22:24.
=DIMA= вне форума   Ответить с цитированием
Старый 07.02.2009, 04:49   #2
CERGEI1982
Senior Member
 
Регистрация: 02.03.2007
Возраст: 37
Сообщений: 345
Вес репутации: 151/52
CERGEI1982 has a spectacular aura aboutCERGEI1982 has a spectacular aura about
По умолчанию Ответ: Пытаюсь соединить два 16F877 по I2c.

Выложи обе прошивки,попробую их в протеусе прогнать.
CERGEI1982 вне форума   Ответить с цитированием
Старый 07.02.2009, 21:22   #3
Alex5
Senior Member
 
Регистрация: 05.10.2007
Сообщений: 244
Вес репутации: 205/49
Alex5 has a spectacular aura aboutAlex5 has a spectacular aura aboutAlex5 has a spectacular aura about
По умолчанию Ответ: Пытаюсь соединить два 16F877 по I2c.

Давно это было, тонкости позабылись, но, по-моему, ошибка здесь:
Код:
 
  movlw    B'00001000'       ; Мастер режим I2C,тактовая частота
  movwf    SSPCON            ; сигнала=Fosc/(4*(SSPADD+1))
Насколько я вижу, вы не включаете аппаратную часть порта I2C. У вас бит SSPEN (SSPCON,5) = 0. У меня это место выглядит так:
Код:
 
 movlw   b'00111000'            ; 
 movwf   SSPCON                 ; Master mode, SSP enable
Alex5 вне форума   Ответить с цитированием
Старый 11.02.2009, 23:49   #4
igorwdq
Senior Member
 
Регистрация: 25.02.2007
Адрес: Lvov
Возраст: 43
Сообщений: 253
Вес репутации: 140/51
igorwdq will become famous soon enoughigorwdq will become famous soon enough
Отправить сообщение для igorwdq с помощью ICQ
По умолчанию Ответ: Пытаюсь соединить два 16F877 по I2c.

Вот кусок кода на Си из рабочего проекта:
SSPCON=0;
Delay_100mks();
SSPCON2=0;
SSPSTAT=0b00100100; //Настройка модуля I2C
SSPADD=49; //(49)100 кГц
SSPCON=0b00101000;
BCLIF=0;
SEN=1; //Старт
CHECKED_SET_SSPIF(); //Подтверждение старта
if(Err==1)
{goto ind;} //Авария
SSPBUF=0b10011110; //Передача адреса+запись
........
void CHECKED_SET_SSPIF(void)
{
Err=0;
SSPIF=0;
TMR0=240; //Предустановка таймера//
TMR0IF=0;
do
{
CLRWDT();
if(TMR0IF==1)
{
Err=1;
break;
}
}
while(SSPIF==0);
}

Последний раз редактировалось igorwdq; 11.02.2009 в 23:57.
igorwdq вне форума   Ответить с цитированием
Старый 14.02.2009, 19:56   #5
=DIMA=
Member
 
Регистрация: 28.02.2007
Сообщений: 46
Вес репутации: 100/49
=DIMA= will become famous soon enough=DIMA= will become famous soon enough
По умолчанию Ответ: Спасибо большое всем кто откликнулся!

Спасибо большое всем кто откликнулся!
С этим я разобрался. Ошибка была в двух местах:
1. С начало вкл. MSSP а потом делать настройки.
2. Я как то не внял формуле в документации, а она
гласит при 4мГц. и 100кГц. скорости I2c SSPADD=9.
А я по своей наивности очень хотел получше рассмотреть
сигнал на осцеле. и поставил предел:

Код:
 movlw   0x7F                ; Скорость генератора BRG.
movwf    SSPADD

Как я понимаю логика аппаратной части MSSP зависит
от скорость самого проца.
С мастера на слэв передаю данные, а вот со слэва на
мастер возникла проблема!
Ну это уже другая история.
=DIMA= вне форума   Ответить с цитированием
Старый 16.02.2009, 17:17   #6
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 49
Сообщений: 4,100
Вес репутации: 1883/107
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию "а давай не так" (с)УП

Цитата:
Сообщение от =DIMA= Посмотреть сообщение
Всем добрый вечер!
Пытаюсь соединить два 16F877 по I2c мастер и слейф,
парюсь уже который день, стараюсь придерживаться правил
по документу DS00554c.
Вопрос по мастеру:
Код:
 
  movlw    B'00001000'       ; Мастер режим I2C,тактовая частота
  movwf    SSPCON            ; сигнала=Fosc/(4*(SSPADD+1))
  bsf      STATUS, RP0       ; банк 1.
  movlw    0x7F                ; Скорость генератора BRG.
  movwf    SSPADD
  movlw    B'10000000'       ; Стандартный режим(100кГц и 1мГц) 
  movwf    SSPSTAT           ;спецификация I2C.
  clrf     SSPCON2
  bsf      PIE1, SSPIE         ; Перерывания от SSP разрешено. 
  bcf      STATUS, RP0       ; банк 0. 
  bsf      SSPCON, SSPEN     ; Вкл. модуля MSSP.
Далее по таймеру TMR1 запускаю:
поднимаю SEN и жду когда опустится,
потом загружаю адрес в буфер и жду прерывания где я проверю
квитирование от слейфа и начну гнать данные.
На цифровом осц. хорошо видно что отсутствует старт!
При попытке вообще убрать SEN в проге ни чего не меняется.
Кроме того если в буфер внести 1 на старший бит то пропадают
сигналы SDA и SCL а вместо них короткий провал, из за этого
слейф не реагирует на адрес. Что делать не знаю!
И ещё вопрос: как правильно после ошибки поступать выкл. а
потом вкл. MSSP, или нужны ещё какие то манипуляции?
Вопрос прагматический, почему именно I2C? Если есть ещё устройства которые аппаратно работают только с I2C, то можно понять, а если нет? ради связи двух камней, тогда не лушчий выбор, может вообще посмотреть в сторону применения более крупного камня?
IgorV вне форума   Ответить с цитированием
Старый 17.02.2009, 05:25   #7
masterzx
Senior Member
 
Аватар для masterzx
 
Регистрация: 21.09.2007
Адрес: Барнаул
Возраст: 34
Сообщений: 1,507
Вес репутации: 826/69
masterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to behold
Отправить сообщение для masterzx с помощью ICQ
По умолчанию Ответ: "а давай не так" (с)УП

Цитата:
Сообщение от IgorV Посмотреть сообщение
Вопрос прагматический, почему именно I2C? Если есть ещё устройства которые аппаратно работают только с I2C, то можно понять, а если нет? ради связи двух камней, тогда не лушчий выбор, может вообще посмотреть в сторону применения более крупного камня?
Я немного добавлю, лучше spi использовать для этих целей
__________________
Если проблему можно решить за деньги, то это не проблема, это расходы. Еврейская мудрость.
masterzx вне форума   Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как согласовать по напряжению два микроконтроллера I2C с 5 В и 3 В kotlyara Продукция MICROCHIP 10 11.09.2008 17:30
Управление TDA7342 по шине I2C Beer100 Общетехнические вопросы 33 12.08.2008 17:44
Как соединить два контроллера от одного кварца? Lunatic Продукция MICROCHIP 4 21.12.2007 19:30
Вопрос-уточнение по спецификации i2c e_glu Продукция MICROCHIP 11 02.11.2007 11:25
PIC16f873 + 3 PIC19f818 по I2C Kotopuz Продукция MICROCHIP 3 26.03.2007 09:33


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


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