Hallo,
ich weiß: "Du sollst keine Threads ausgraben!"
Aber einen neuen aufmachen bringts auch nicht wirklich.
Ich hoffe jemand kann mir hier weiterhelfen, denn es muss sich ja fast zwangsläufig um einen typischen Neulingsfehler handeln.
Ich habe die Atmega8 mit SDA und SCK verbunden und die Leitungen mit zweimal 4,7k auf 5v gezogen.
Dem einen Controller habe ich die testdatei geschickt, dem Anderen eine Modifizierte Version des Masterbeispiels.
von hier.
Ich nehme einmal an i2c-master.c ist im Beispiel anstat *.h gemeint.
Allerdings geht die led trotzdem nicht an, was mache ich falsch?
Könnte mir bitte jemand ein komplettes Beispiel für beide Controller zukommen lassen?
Hier noch mein zusammengemixter code:
Code:
#include <avr/interrupt.h>
#include <avr/io.h>
#include "twislave.c"
#define SLAVE_ADRESSE 0x50 //Die Slave-Adresse
int main(void)
{
init_twi_slave(0x50);
txbuffer[0]=0xFF;
txbuffer[1]=0xFF;
txbuffer[2]=0xFF;
}
Code:
#include <avr/io.h>
#include <util/delay.h>
#include "i2cmaster.h" //I2C-Master-Routinen von Peter Fleury verwenden (siehe http://homepage.hispeed.ch/peterfleu...ware.html#libs)
#define SLAVE_ADRESSE 0x50
void warte (int loop) //loop: wartezeit in ms
{
int i;
for(i=0;i<loop;i++) _delay_ms(1);
}
int main (void)
{
uint8_t byte0;
uint8_t byte1;
uint8_t byte2;
DDRB = 0xFF;
PORTB = 0x00;
while(1){
if(!(i2c_start(SLAVE_ADRESSE+I2C_WRITE))) //Slave bereit zum lesen?
{
i2c_write(0x00); //Buffer Startadresse zum Auslesen
i2c_rep_start(SLAVE_ADRESSE+I2C_READ); //Lesen beginnen
byte0= i2c_readAck();
byte1= i2c_readAck();
byte2= i2c_readNak(); //letztes Byte lesen, darum kein ACK
i2c_stop();
if(byte0==0xFF){
PORTB = 0xFF;
}
else{
PORTB = 0x00;
}
}
warte(200);
}
}//Ende main()
Edit: Ich liefere auch gerne noch mehr Infos nach, weiß blos nicht so recht wo ich anfangen soll.
Meine IDE ist WINAVR portable V.:20070525.
oops fehler, da war statt 0x00 oben 0xff
Ich schreib ab hier immer wieder etwas dazu wenn mir was einfällt:
Die Atmegas laufen mit 4MHz internem Takt.
Lesezeichen