hallo m.a.r.v.i.n,
danke für deinen tollen Beitrag, habe es mit dem I2C Programmbeispiel des Asuro hinbekommen. \
/
Hier nochmal der Code um dem Thread einen schönen Abschluss zu geben (zwar kein Lauflicht aber eine einzelne Led des PCF1 blinkt und eine des PCF3 leuchtet).
Ebenfalls sind die Energiesparfunktionen des RNBFRA implementiert.
Code:
#include <avr/io.h>
#include <stdint.h>
#include <avr/delay.h>
#include "i2cmaster.h"
#define PCF1 0x72
#define PCF2 0x7E
#define PCF3 0x74
void warten(int t) //ermöglicht Pausen
{
//_delay_ms(200);
int h;
for (;t>0;t--)
{
for (h=1600;h>0;h--) {}
}
return;
}
int main(void)
{
unsigned char ret;
uint8_t i2cdaten; //Datenbyte für I2C
i2c_init(); // init I2C interface
/******************************************************
Für Energiesparfunktionen des RNBFRA (ab Version 1.2)*/
ret = i2c_start(PCF3+I2C_WRITE);
i2cdaten=0xC2;
i2c_write(i2cdaten);
i2c_stop();
_delay_ms(10);
/*******************************************************/
while(1)
{
ret = i2c_start(PCF1+I2C_WRITE); // set device address and write mode
if ( ret )
{
/* failed to issue start condition, possibly no device found */
i2c_stop();
warten(10);
}
else
{
/* issuing start condition ok, device accessible */
i2cdaten=0x08;
i2c_write(i2cdaten); // write data
i2c_stop();
warten(2000);
ret = i2c_start(PCF1+I2C_WRITE); // set device address and write mode
i2cdaten=0x00;
i2c_write(i2cdaten); // write data
i2c_stop();
warten(2000); // set stop conditon = release bus
}
}
return 0;
}
Lesezeichen