This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ISO1228:ISO1228:nINT 引脚和断线位

Guru**** 2926660 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/isolation-group/isolation/f/isolation-forum/1650105/iso1228-iso1228-nint-pin-and-wirebreak-bits

器件型号: ISO1228

尊敬的 Sirs:

我尝试使用 nINT 引脚作为中断、连接到微控制器 (MCU) 上的引脚、
只在出现变化时读取输入状态。 但是、nINT 引脚始终为低电平。
该引脚是否需要上拉电阻器? 一旦 nINT 引脚在检测到变化后变为低电平、
如何将其恢复到高电平? 读取后是否应自动变为高电平?

关于断线寄存器、即使在相应的情况下、断线位也设置为 1 
引脚电平为 24V、引脚状态读取寄存器正确并设置为 1。 我这是什么
出问题了吗? 在我的 PCB 中、我遵循了开发板的设计。
 
我还注意到、当所有输入都为时、故障引脚变为电平 0(逻辑有效) 
悬空或接地、仅在所有输入均为时才变为 1(逻辑无效)
连接至 24V。 这看起来不是正确的行为、对吧? 此外、在第一种情况下、
故障寄存器的值为 0、它无法准确反映引脚的状态。
如电路图所示、我有两个芯片采用菊花链配置。 
您看到的波形对应于输入状态、断线寄存器、
和故障寄存器。 只有第一个芯片的第一个输入设置为 1、其余输入悬空。

我的讲座例程:

void dinputsLibDinputsReadStatus(){
  Uint8_t txValues[DINPUTS_CHIP_MAX_N * 3]={0、0、0、0、0、 0};
  uint8_t rxValues[DINPUTS_CHIP_MAX_N * 3]={0、0、0、0、 0};

  //读取(菊花链,在中设置 DINPUTS_CHIP_N)
  cliLibPrintDebugAsync(“DIG 输入读取状态\r\n“);

  #if DINPUTS_CHIP_N =1
  //对于第一个芯片
  txValues[0]= DINPUTS_SPI_ADDR_WIRE_BREAK | DINPUTS_SPI_MASK_READ;
  #elif DINPUTS_CHIP_N =2
  //对于第一个芯片
  txValues[0]= DINPUTS_SPI_ADDR_WIRE_BREAK | DINPUTS_SPI_MASK_READ;
  //对于第二个芯片
  txValues[1]= DINPUTS_SPI_ADDR_WIRE_BREAK | DINPUTS_SPI_MASK_READ;
  #else
  #error “请选择 DINPUTS_CHIP_N 的有效值“
  #endif

  if (spiLibMasterExchange (dinputsDev.spiIndex、dinputsDev.spiDev、txValues、rxValues、(DINPUTS_CHIP_N * 3)、 (DINPUTS_CHIP_N * 3)、0)){
    dinputsLibDinputsReadStatusUpdate(rxValues);
  }
  否则{
    dinputsLibDinputsReadStatusFail();
  }
}


静态 void dinputsLibDinputsReadStatusUpdate(uint8_t *values){

  cliLibPrintDebugAsync(“dinputs read status comm answered\r\n“);

  #if DINPUTS_CHIP_N =1
  //芯片 1(芯片 in1 -> PCB in1...)
  dinputsDev.inputs     =(uint16_t) values[0];
  dinputsDev.wireBreak   =(uint16_t) values[1];
  dinputsDev.fault[0]= values[2]   ;
  #elif DINPUTS_CHIP_N =2
  //芯片 1(芯片 in1 -> PCB in1...)
  //芯片 2(芯片 in1 -> PCB in16..)
  //菊花链、llegan antes los datos del chip 2.
  dinputsDev.inputs     =((uint16_t) reverse_bits (values[0])<< 8)|(uint16_t) values[1];
  dinputsDev.wireBreak   =((uint16_t) reverse_bits (values[2])<< 8)|(uint16_t) values[3];
  dinputsDev.fault[0]=   值[5];
  dinputsDev.fault[1]   =值[4];
  #else
  #error “请选择 DINPUTS_CHIP_N 的有效值“
  #endif
}

使用函数“reverse_bits“是因为第二个芯片的输入与编号的顺序相反。

ChA:SCLK、ChB:MOSI、CHC:MISO、CHD:CS。
clk.png

msio-PCB-16x DIGITAL INPUTS.pdf 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jose、

    看起来这是我们之前讨论过的重复帖子。

    让我们在一个地方继续讨论、以便更好地理解。

    此致
    Varun

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Varun:

    我重复了聊天,因为这是很长一段时间以来,你已经回答(没有冒犯). 
    如果您愿意、我们可以继续查看该主题。 我需要尽快解决这个问题;
    如果您能优先考虑它、我很感激。

    谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jose、

    道歉,但我错过了点击“回复“后,你的最后一个答复在这篇文章.

    我们继续。

    此致
    Varun