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

 
 
> PIC24JF64GA002 проблема с I2Cx
PoroHard
сообщение May 9 2008, 09:57
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 9-05-08
Из: Kiev
Пользователь №: 37 387



Подскажите пожалуста!

I2C2BRG = 78;
I2C2CON = 0xD200;

while (I2C2STATbits.TRSTAT); //Wait for bus Idle

I2C2CONbits.SEN = 1; //Generate Start COndition
while (I2C2CONbits.SEN); //Wait for Start COndition

После установки бита SEN на шынах SDAx, SCLx не выставляется занятие шыны.
I2C не работает.
Проблема одинаковая для I2C1 и I2C2.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
viael
сообщение May 9 2008, 14:31
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979



Цитата(PoroHard @ May 9 2008, 13:57) *
Подскажите пожалуста!

I2C2BRG = 78;
I2C2CON = 0xD200;

while (I2C2STATbits.TRSTAT); //Wait for bus Idle

I2C2CONbits.SEN = 1; //Generate Start COndition
while (I2C2CONbits.SEN); //Wait for Start COndition

После установки бита SEN на шынах SDAx, SCLx не выставляется занятие шыны.
I2C не работает.
Проблема одинаковая для I2C1 и I2C2.


Эррату на камень читал?

detected properly unless it is first held low for
150 ns after enabling the I2C module.
In Master mode, this error may cause a bus collision
to occur instead of a Start bit transmission.
Transmissions after the SDA1 pin has been held
low will occur correctly.

Я тоже по этим граблям ходил.Никакие воркэраунды не помогли.В итоге сделал софтварную реализачию.
Go to the top of the page
 
+Quote Post
PoroHard
сообщение May 9 2008, 15:22
Сообщение #3





Группа: Новичок
Сообщений: 8
Регистрация: 9-05-08
Из: Kiev
Пользователь №: 37 387



Цитата(viael @ May 9 2008, 17:31) *
Эррату на камень читал?

detected properly unless it is first held low for
150 ns after enabling the I2C module.
In Master mode, this error may cause a bus collision
to occur instead of a Start bit transmission.
Transmissions after the SDA1 pin has been held
low will occur correctly.

Я тоже по этим граблям ходил.Никакие воркэраунды не помогли.В итоге сделал софтварную реализачию.


Добрый день!
Эрату я читал, но решил что это касается только I2C1.
Софтовая реализация мне не подходит.
Go to the top of the page
 
+Quote Post
Ilya_A
сообщение May 12 2008, 05:30
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 1-12-05
Из: Иркутск
Пользователь №: 11 630



У меня с такими процедурами все работает нормально (I2C2):

Код
void InitI2C(void){    
      I2C2CON=0;  
    I2C2BRG = 0x0013;
    I2C2STAT = 0x0000;
    I2C2CON = 0x1200;
    I2C2RCV = 0x0000;
    I2C2TRN = 0x0000;
    I2C2CON = 0x9200;
    IdleI2C();    
}
void StartI2C(void){
    I2C2CONbits.SEN = 1;        
    while (I2C2CONbits.SEN);    
}
void StopI2C(void)
{
    I2C2CONbits.PEN = 1;        
    while (I2C2CONbits.PEN);    
}

void WrI2C(unsigned char byte)
{
    I2C2TRN = byte;                    
    while (I2C2STATbits.TBF);        
    IdleI2C();
}
unsigned char RdI2C(unsigned char ack)
{
    I2C2CONbits.RCEN=1;
    while (I2C2CONbits.RCEN==1);        
    AckI2C(ack);
    return I2C2RCV;
}
void IdleI2C(void)
{
    while (I2C2STATbits.TRSTAT);        
}
unsigned char ACKStatus(void)
{
    return (!I2C2STATbits.ACKSTAT);    
}
void AckI2C(unsigned char ack){
    I2C2CONbits.ACKDT = !ack;        
    I2C2CONbits.ACKEN = 1;
    while(I2C2CONbits.ACKEN);        
    I2C2CONbits.ACKDT = 0;        
}


ЗЫ: Подтяжки по 4,7К; порты настроены на вход;
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 18:37
Рейтинг@Mail.ru


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