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
#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
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?
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).
Ein Bild sagt mehr als 1000 Worte. Ganz rechts beim letzten Transfer sagt der Slave dem Master 'das wars soweit' -> NAK.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.