Отговори на тема  [ 1 мнение ] 
Въпроси за устройство за i2c мониторинг 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Съб Сеп 08, 2007 5:10 pm
Мнения: 1
Мнение Въпроси за устройство за i2c мониторинг
Здравейте,
трябва да направя устройство за I2C мониторинг, но започнах да се съмнявам дали ще заработи въобще.Приложил съм и схемата накрая.

Идеята ми е такава:
Използвам PIC16f876A с MSSP модул. Конфигурирам MSSP като "Slave mode (7-bit address) with Start and Stop bit interrupts enabled" когато приемам, когато предавам си е Master.
Конфигурирам INT0 да се генерира при преход от ниско към високо ниво.
Трябва да мога да чета съобщенията изпращани до всички адреси което правя така - след като получа прекъсване при наличие на Start bit чета I2C шината през RB2 при всеки преход 0->1 на RB0 и преди да се извърши сравняване на приетия адрес от I2C с този записан в SSPADD на PIC16f876A аз записвам в SSPADD резултатите от RB2 - на всяко ново съобщение променям записания в моята схема адрес и после оставям работата на хардуера за данните.

А ето и псевдо код за да е по ясно (надявам се:))

Код:
int8 temp_address = 0, temp_count = 0;

//interrupt vector
if(i2c_start bit){        //ако имаме I2C Start бит (ще се предава адрес)
   SetSlave;          //правя устройството Slave
   EnableExternalInterrupt;        //разрешавам INT0                     
   ClearI2CInterrupt;        //Чиситя I2C Interrupt flag         
}
if(ExternalInterrupt){        //ако имам INT0 (преход 0->1 на SCL)      
   temp_address |= ReadPortB2;        //чета PortB2 (т.е. чета SDA при преход 0->1 на SCL)
   temp_address <<= 1;        //и записвам съответния бит в temp_addres
   if(temp_count++ == 6){        //ако сме прочели 7 бита
      SSPADD = temp_address;        //записвам temp_addres в регистър SSPADD
      DisableExternalInterrupt;        //забранявам INT0
      temp_address = 0;      
      temp_count = 0;   
   }               
   ClearExternalInterrupt;        //чистя INT0 flag                  
}
//other interrupt conditions
   ...

main(){

initialize_rs232();
initialize_i2c();
clear_all_interrupts();

while(1){

i2cToRS232();        //пращам данните от I2C към RS232. Устройството е Slave

RS232toI2c();       //правя устройството Master и започвам да пращам
                       //данни от RS232 към I2C
ManipulateCommandsFromUser();   
BlinkLED();
}


Ето ги и моите тревоги :)
1.Значи не можах да намеря никакъв документ за режима "Slave mode (7-bit address) with Start and Stop bit interrupts enabled" и мога само да съдя индиректно за него от Master mode та ако може някой да помогне.

2.Дали като чета SCL и SDA шините през други портове (RB0 и RB2) не им променям нивата, тоест дали ще чета коректни данни и дали ще влияя на I2C шината. А и дали няма да товаря много RB0 и RB2. В I2C спецификацията нУлата е дефинирана между -0.5V и 1.5V а единицата между 3V до 5+V което отговаря на TTL за 0 и 1 но не съм сигурен.

3.Ако работи няма да мога да постигна някаква забележителна скорост (надявах се на 400kb/s но уви) а на мен ми трябва да е по стандарт и се надявам ако някой е работил повечко с PIC и I2C да даде съвет за оптимизация.

4.Дали ще изникнат някакви проблеми при постоянното превключване между Master/Slave.

5.Не можах да симулирам I2c устройство в Proteus7.1sp4 въпреки че изчетох наличния за него help.Просто слагам i2c модула без да променям нищо, той си работи като master, обаче като използвам симулацията да пращам адрес и данни нищо не става.

Ще се радвам на всякакви критики, корекции и забележки по темата:)


Прикачени файлове:
i2c.PNG
i2c.PNG [ 21.32 KiB | Прегледано 506 пъти ]
Съб Сеп 08, 2007 5:23 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 1 мнение ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни