Irgendwie will mein I2C nicht...
BGX1 Display geht, die PCF8574 und PCF9591 bekomme ich nicht zum laufen...
Angeschlossen sind die Teile an X4 - SDA an direkt neben GND, SCL daneben. Hardwaretechnisch hab ich alles übeprüft - Spannung haben die ICs, SDA/SCL sind verbunden (ich seh auch die 5V an den I2C-Pins der ICs), A0-A2 sind an Masse.
Mein Code:
#include <nibobee/iodefs.h>
#include <nibobee/led.h>
#include <nibobee/i2cmaster.h>
#include <nibobee/base.h>
uint8_t i2c_transaction(uint8_t txsize, uint8_t rxsize) {
i2c_tx_size = txsize;
i2c_rx_size = rxsize;
if (i2c_start_transmission()==0) {
led_set(LED_L_RD, 0);
delay(300);
led_set(LED_L_RD, 1);
delay(300);
led_set(LED_L_RD, 0);
return 0;
}
if (i2c_wait_transmission()==0) {
led_set(LED_L_RD, 0);
delay(300);
led_set(LED_L_RD, 1);
delay(300);
led_set(LED_L_RD, 0);
delay(300);
led_set(LED_L_RD, 1);
delay(300);
led_set(LED_L_RD, 0);
return 0;
}
if (i2c_status()!=I2C_SUCCESS) {
led_set(LED_L_RD, 0);
delay(300);
led_set(LED_L_RD, 1);
delay(300);
led_set(LED_L_RD, 0);
delay(300);
led_set(LED_L_RD, 1);
delay(300);
led_set(LED_L_RD, 0);
delay(300);
led_set(LED_L_RD, 1);
delay(300);
led_set(LED_L_RD, 0);
delay(300);
return 0;
}
return 1;
}
uint8_t i2c_writePCF8591(uint8_t control, uint8_t value) {
i2c_buf[0] = 0x48;//I2C_TX(PCF8574_ADDR);
i2c_buf[1] = control;
i2c_buf[2] = value;
return i2c_transaction(3,0);
}
uint8_t i2c_writePCF8574(uint8_t value) {
i2c_buf[0] = 0x40;//I2C_TX(PCF8574_ADDR);
i2c_buf[1] = value;
return i2c_transaction(2,0);
}
void main() {
activate_output_group(IO_LEDS); // LED bits als Output
i2c_init();
delay(1000);
//if (i2c_writePCF8574(0x00)) {
if (i2c_writePCF8591(0x00,0x00)) {
led_set(LED_R_RD, 0);
delay(1000);
led_set(LED_R_RD, 1);
delay(1000);
led_set(LED_R_RD, 0);
} else {
led_set(LED_R_RD, 0);
delay(1000);
led_set(LED_R_RD, 1);
delay(1000);
led_set(LED_R_RD, 0);
delay(1000);
led_set(LED_R_RD, 1);
delay(1000);
led_set(LED_R_RD, 0);
}
while(1);
}
Status ohne Display:
Die linke led blinkt 2x, also hat wohl i2c_wait_transmission() ein Problem.
Status mit Display:
bei i2c_writePCF8574(0x00) geht das Display aus (mitsamt Hintergrundbeleuchtung), bei 0xFF wieder an?!
Sieht jemand meinen Denkfehler?
[edit] hat sich erledigt. Der PCF8574 ging schon, nur hat der Transistor danach nen kurzen verursacht -> Die Spannung ging runter -> zu wenig fürs Display... Es hats aber alles überlebt...
[/edit]