ik wordt gek!

wat ik hier heb liggen is een atmega32 en een TC74 temperatuursensor. de sensor is aangesloten op de microcontroller. ik wil graag de temperatuur kunnen uitlezen via i2c alleen ik ben nogal een noob op dit gebied. via de datasheet van de atmega heb ik geprobeerd de goede bits hoog te zetten maar het werkt niet. hier eerst even mijn source.


void i2c (void)
{
int data;
char datas[7];
	TWCR = (1<<TWINT | 1<<TWSTA | 1<<TWEN); //start conditie
	while (!(TWCR & (1<<TWINT))) //wachten
	;
	
		TWAR = 0x9A;   //adres in TWAR register
	TWCR = (1<<TWINT) | (1<<TWEN);	//clear TWINT voor transmissie

	while(!(TWCR & (1<<TWINT)))   //wachten
	;
	data = TWDR;   //data ophalen uit TWDR register
	TWCR = (1<<TWINT) | (1<<TWEN);	//clear TWINT voor starten transmissie
	while(!(TWCR & (1<<TWINT)))  //wachten
	;

	TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);  //stop conditie

	itoa(data, datas, 9);
SendtoTerminal(datas);

}

dit werkt helaas niet. het adres wat ik stuur heb ik uit de datasheet van de TC74 en voor zover ik die begrijp wacht ie op een startbit, daarna wacht ie op het adres, en dan stuurt ie de data. ik weet niet meer wat ik fout doe. iemand suggesties, tips, voorbeeldcode?
alvast bedankt,

jaap

Pull-up weerstanden gebruikt ?

Heb de de TWI-klok (TWBR) ingesteld op iets bruikbaars?

Je code lijkt me verder OK. Hier staat wat TWI-code (die ik ook maar ergens gejat heb) om een blokje I2C-EEPROM aan te spreken. Dat werkt in ieder geval naar behoren. Wellicht kan je daar wat fout-dedectie regels uithalen.

Op 18 november 2008 16:47:37 schreef pros:
Hier staat wat TWI-code (die ik ook maar ergens gejat heb) om een blokje I2C-EEPROM aan te spreken. Dat werkt in ieder geval naar behoren. Wellicht kan je daar wat fout-dedectie regels uithalen.

Bah! Wat een smerige code!

De loop-variabele in een FOR-lus aanpassen.... brrrr.... Ik wil zoiets niet in mijn applicaties zien!

(Dit hoef ik niet door een MISRA code-analyser te halen :D)

FullPower