【问题标题】:RasPi and PIC I2C reading failRasPi 和 PIC I2C 读取失败
【发布时间】:2014-03-09 20:24:29
【问题描述】:

我尝试使用 I2C 接口在 RasPi(B 型)和 PIC16F877 之间进行通信。 RasPi 是主机,PIC 是从机。我可以顺利地将数据字节从 RasPi 发送到 PIC。但我需要在发送数据后得到图片的回复。

如果我在 python 上尝试bus.read_byte_data(address, 0x80) 命令,RasPi 会关闭 I2C 引脚。在此sudo i2cdetect -y 1 命令之后,总线上没有设备。

首先 PIC16F877 使用 5V。但我将电压更改为 3.3V(来自 RasPi)并重试。结果相同。

RasPi Python 代码

import smbus
import time

bus = smbus.SMBus(1)
DEVICE_ADDRESS = 0x18

bus.write_byte_data(DEVICE_ADDRESS, 0x00, 1)
time.sleep(0.1)
response = bus.read_byte_data(DEVICE_ADDRESS, 0x80) //IOError: [Errno 5] Input/output error in this line
print response

PIC16F877 CCS C 代码

#include <16F877.h>
#device ADC=16
#include <string.h>

#FUSES NOWDT                   
#FUSES PUT                      
#FUSES NOLVP                 
#FUSES NOPROTECT
#FUSES NOBROWNOUT

#use delay(crystal=20000000)
#use FIXED_IO( A_outputs=PIN_A5,PIN_A4,PIN_A3,PIN_A2,PIN_A1,PIN_A0 )
#use FIXED_IO( B_outputs=PIN_B7,PIN_B6,PIN_B5,PIN_B4,PIN_B3,PIN_B2,PIN_B1,PIN_B0 )
#use FIXED_IO( D_outputs=PIN_D7,PIN_D6,PIN_D5,PIN_D4,PIN_D3,PIN_D2,PIN_D1,PIN_D0 )
#use FIXED_IO( E_outputs=PIN_E2,PIN_E1,PIN_E0 )
#use i2c(Slave,Slow,sda=PIN_C4,scl=PIN_C3,force_hw,address=0x30)

char state,temp;
int son_islenen_pin;

void durum_led_iletisim(){
   output_high(PIN_B7);
   delay_ms(100);
   output_low(PIN_B7);
}

void cevap_gonder(int pin){
   i2c_write(input(pin));
}

void ac_kapa(int pin){
   output_toggle(pin);
}

void islem_yap(char data){
   switch(data){
         case 1:
            ac_kapa(PIN_A0);
            break;
         case 2:
            ac_kapa(PIN_A1);
            break;
         case 3:
            ac_kapa(PIN_A2);
            break;         
      }
}

#INT_SSP
void ssp_interrupt() 
{ 
   state = i2c_isr_state();
   durum_led_iletisim();

   if(state < 0x80)
   {
      temp = i2c_read()

      islem_yap(temp);
      son_islenen_pin = temp;
   } 
   else if(temp == 0x80)
   {
      i2c_write(input(son_islenen_pin));
   } 
}

void main()
{
   enable_interrupts(INT_SSP);
   enable_interrupts(GLOBAL);
}

问题的原因可能是什么?您会推荐什么解决方案?

【问题讨论】:

    标签: raspberry-pi pic i2c


    【解决方案1】:

    我在使用另一台设备(ADG715 开关矩阵 I2C)时遇到了同样的错误,我发现芯片上有一个 RESET 引脚悬空,因为数据表没有说明。引脚悬空时,sudo i2cdetect -y 1 会很好地检测到设备,当我写一个字节时,它通常会正确写入一次然后失去连接,python 会抛出相同的 IO 错误。一旦我把它拉起来,设备就会正常运行,python 停止抛出 IO 错误。你的芯片比我的复杂得多,但我仍然猜想你的问题出在交换的 PIC 方面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多