Hallo Ich möchte gerne eine Fehlermeldung generieren, wenn der I2C Bus nicht funktioniert -> sprich der abgefragte Slave nicht anwortet. Mein Problem ist, dass mein Programm nicht weiter abgearbeitet wird wenn der Bus nicht fehlerfrei funktioniert. Ich habe mir schon gedanken über dieses NACK bit gemacht. Aber dieses kann der Master ja nicht erhalten, wenn der Slave nicht antwortet. Oder wie funktioniert das??? Stehe echt im dunkeln und weiß nicht wie ich das Problem lösen kann. Gruß Martin
Gast
#2927209
#pragma vector = USCI_B0_VECTOR
__interrupt void USCI_B0_ISR(void)
{
switch(__even_in_range(UCB0IV, 12))
{
case 0:
break;
case 2:
break;
case 4: //NACK IFG
UCB0CTL1 |= UCTXSTP;
lcd_clrScr();// Transmit a stop
//lcd_setCursor(0,0);
uart_A0_tx_str("I2C_ERROR_NOT_CONNECTED!\r");
uart_A1_tx_str("I2C_ERROR_NOT_CONNECTED!\r");
//lcd_setCursor(0,0);
lcd_putStr("SMBUS_ERROR:");
lcd_setCursor(1,0);
lcd_putStr("NOT_CONNECTED ");
UCB0IFG &= ~UCNACKIFG;
break;
case 6:
break;
case 8:
break;
case 10: //RXIFG
RXByteCtr--;
if (RXByteCtr){
*PRxData++= UCB0RXBUF;
}
else{
*PRxData= UCB0RXBUF;
}
if (RXByteCtr == 1){
//while(UCB0CTL1 & UCTXSTT);
UCB0CTL1 |= UCTXSTP;
//lcd_setCursor(0,0);
//lcd_putStr("I2C_GOO:");
//lcd_setCursor(1,0);
//lcd_putStr("NO_ERROR");
}
break;
case 12: //TXIFG
if (TXByteCtr){
UCB0TXBUF = command;
TXByteCtr--;
}
else{
UCB0CTL1 &= ~UCTR;
UCB0IFG &= ~UCTXIFG;
UCB0CTL1 |= UCTXSTT;
if(byte){
while(UCB0CTL1 & UCTXSTT);
UCB0CTL1 |= UCTXSTP;
}
}
break;
default:
break;
}
}
So kann man das z.B mit der ISR machen. Wenn der SLave nicht antwortet
wird die NACKIFG ausgelöst. Ist für nen MSP430F5529.
glgl
Gast
#2927241
Du solltest zuerst mal nennen, mit welchem MSP du arbeitest. Nicht jeder hat ein vollständiges Hardware-I²C drin. Hast du ein USI-Modul oder ein USCI?
Gast
#2927852
Also der Master bekommt das NAK-Bit schon. Bei einer I2C-Übertragung werden immer 9 Takte übetragen. Der 9. ist dann das ACK (Slave zieht den Pegel auf low) oder NAK (Slave macht garnix -> Pegel bleibt auf high).
Gast
#2927868
Ein Bild sagt mehr als 1000 Worte. Ganz rechts beim letzten Transfer sagt der Slave dem Master 'das wars soweit' -> NAK.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
