Ich habe mir einen kleinen Entfernungssensor gebaut, der soweit auch schon gut funktioniert. Jetzt habe ich den Ausgang des Sensor an die RP6 Base angeschlossen. Wenn ich die Werte über den UART an den PC sende sind diese vollkommen korrekt. Wenn ich jedoch versuche via I2C den vom ADC0 gemessenen Wert am Display von dem M32 Erweiterungsboard anzuzeigen, bekomme ich nur Schrott angezeigt.
Anbei mein Code der Basis und der Erweiterung. Ich kann zwar keinen Fehler darin entdecken aber vllt findet jemand von euch einen.
Code:#include "RP6RobotBaseLib.h" #include "RP6I2CmasterTWI.h" void I2C_transmissionError(uint8_t errorState) { writeString_P("\nI2C ERROR - TWI STATE: 0x"); writeInteger(errorState, HEX); writeChar('\n'); } int main(void) { initRobotBase(); powerON(); writeString_P("Hallo"); //UART Test writeChar('\n'); I2CTWI_initMaster(200); //I2C Master initialisieren I2CTWI_setTransmissionErrorHandler(I2C_transmissionError); while(1) { uint16_t adc0 = readADC(ADC_ADC0); //ADC auslesen writeInteger(adc0, DEC); // Wert via UART senden writeChar('\n'); while(I2CTWI_isBusy()) // warten bis I2C frei ist { } if(!I2CTWI_isBusy()) { I2CTWI_transmit2Bytes(10 ,adc0, (adc0 >> 8 )); //ADC Wert in Lowbyte und Highbyte teilen und via I2C senden writeString_P("I2C hat was gesendet"); // Kontrolle dass etwas gesendet wurde writeChar('\n'); } } return 0; }Code:#include "RP6ControlLib.h" #include "RP6I2CslaveTWI.h" int main(void) { initRP6Control(); initLCD(); //Display initialisieren setLEDs(0b1010); I2CTWI_initSlave(10); // Slave mit der Adresse 10 initialisieren writeString_P("I2C Init"); //UART testen writeChar('\n'); showScreenLCD("Hallo","ADC:"); // Display testen uint16_t adcwert; uint8_t highbyte = 0; uint8_t lowbyte = 0; while(true) { if(I2CTWI_writeRegisters[0] && !I2CTWI_writeBusy) { lowbyte = I2CTWI_writeRegisters[0]; //lowbyte auslesen highbyte= I2CTWI_writeRegisters[1]; //highbyte auslesen } adcwert = ((highbyte << 8 ) | lowbyte); // wieder zusammensetzen setCursorPosLCD(1,4); writeIntegerLCD(adcwert, DEC); // auf dem display ausgeben setCursorPosLCD(1,4); writeInteger(adcwert , DEC); writeChar('\n'); } return 0; }







Zitieren

Lesezeichen