Henning12
20.07.2008, 13:49
Moin,
hm gleich mein erster post ist eine Frage. Ist vieleicht nicht die feine englische Art, aber das hol ich wieder auf :)
Ich probiere gerade an dem ATmega8 einen PCF8574 laufen zu lassen. Dazu habe ich mit diversen Quellen folgendes hinbekommen.
Nur leider kommt da nichts an beim PCF8574 an. Habe mal mit einem Oszilloskop den i2c bus angeschaut. Da geht nichts drüber. Also vermute ich mal auf einen Softwarefehler.
seht ihr den Bock hier im Quellcode ? Würde mich über ein paar Tips sehr freuen.
lg Henning
#include<util/delay.h>
int sendByte(unsigned char datenbyte, unsigned char adresse)
{
DDRC &= !((1<<DD4)|(1<<DD5));
PORTC = (1<<DD4)|(1<<DD5);
TWCR = ((1<<TWINT)|(1<<TWSTA)|(1<<TWEN)); //TWI aktivieren und Start auslösen
while(!(TWCR & (1<<TWINT))); // warten auf Start
TWDR = adresse & (0x40); // Adresse und Schreibbit ins Datenregister
TWCR = ((1<<TWINT)|(1<<TWEN)); // senden ...
while(!(TWCR & (1<<TWINT)));
TWDR=datenbyte; // Byte ins Datenregister
TWCR = ((1<<TWINT)|(1<<TWEN)); // senden ...
while(!(TWCR& (1<<TWINT)));
TWCR = ((1<<TWINT)|(1<<TWSTO)|(1<<TWEN)); // Stop
return 1;
}
void main (void)
{
unsigned char i;
i=0x01;
while(1)
{
if(i==0x80) i=0x01;
else i<<=1;
_delay_ms(150);
sendByte(i,0);
}
}
hm gleich mein erster post ist eine Frage. Ist vieleicht nicht die feine englische Art, aber das hol ich wieder auf :)
Ich probiere gerade an dem ATmega8 einen PCF8574 laufen zu lassen. Dazu habe ich mit diversen Quellen folgendes hinbekommen.
Nur leider kommt da nichts an beim PCF8574 an. Habe mal mit einem Oszilloskop den i2c bus angeschaut. Da geht nichts drüber. Also vermute ich mal auf einen Softwarefehler.
seht ihr den Bock hier im Quellcode ? Würde mich über ein paar Tips sehr freuen.
lg Henning
#include<util/delay.h>
int sendByte(unsigned char datenbyte, unsigned char adresse)
{
DDRC &= !((1<<DD4)|(1<<DD5));
PORTC = (1<<DD4)|(1<<DD5);
TWCR = ((1<<TWINT)|(1<<TWSTA)|(1<<TWEN)); //TWI aktivieren und Start auslösen
while(!(TWCR & (1<<TWINT))); // warten auf Start
TWDR = adresse & (0x40); // Adresse und Schreibbit ins Datenregister
TWCR = ((1<<TWINT)|(1<<TWEN)); // senden ...
while(!(TWCR & (1<<TWINT)));
TWDR=datenbyte; // Byte ins Datenregister
TWCR = ((1<<TWINT)|(1<<TWEN)); // senden ...
while(!(TWCR& (1<<TWINT)));
TWCR = ((1<<TWINT)|(1<<TWSTO)|(1<<TWEN)); // Stop
return 1;
}
void main (void)
{
unsigned char i;
i=0x01;
while(1)
{
if(i==0x80) i=0x01;
else i<<=1;
_delay_ms(150);
sendByte(i,0);
}
}