batti112
30.12.2004, 16:41
Hi!
Ich baue gerade einen I2C Bus auf, dank der vielen wirklich guten Tutorials scheint das sehr einfach zu sein. Allerdings habe ich noch nichts gefunden wo ein Master vom Bus liest.
Ich habe mal angefangen mir die wichtigsten Funktionen zu bauen,
aber gerade bei der lese-Funktion bin ich mir doch sehr sehr unsicher...
Würde mich sehr freuen wenn sich jemand das mal ansieht, und mich vll. berichtigt, oder mir vll. ne gute Seite empfielt...
Gruss
Bastian
#include <avr/twi.h>
#include <avr/io.h>
void i2cStart()
{
// TWINT = Enables the TWI Interrupt Flag
// TWSTA = Writes the TWI Start Condition Bit into the Bus (Master)
// TWEN = Enables the TWI Hardware
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT))); //wait until the Bus is not ready
}
void i2cStop()
{
// TWINT = Enables the TWI Interrupt Flag
// TWSTO = Writes the TWI Stop Condition Bit into the Bus (nolonger Master)
// TWEN = Enables the TWI Hardware
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //Send Stop
}
void i2cSendData(unsigned char address,unsigned char data)
{
TWDR = address << 1; //load Slave Address + Write in TWDR
TWCR = (1<<TWINT)|(1<<TWEN); //clear Bits to start transmission
while (! (TWCR & (1<<TWINT))); //wait until the Bus is not ready
TWDR = data; //load data in TWDR
TWCR = (1<<TWINT)|(1<<TWEN); //clear Bits to start transmission
while (! (TWCR & (1<<TWINT))); //wait until the Bus is not ready
}
//????????????????????????????????????????????
unsigned char i2cReadData(unsigned char address)
{
TWDR = (address << 1) + 1; //load Slave Address + Read in TWDR
TWCR = (1<<TWINT)|(1<<TWEN); //clear Bits to start transmission
while (! (TWCR & (1<<TWINT))); //wait until the Bus is not ready
TWCR = (1<<TWINT)|(1<<TWEN); //clear Bits to start transmission
while (! (TWCR & (1<<TWINT))); //wait until the Bus is not ready
return TWDR; //return TWDR
}
Ich baue gerade einen I2C Bus auf, dank der vielen wirklich guten Tutorials scheint das sehr einfach zu sein. Allerdings habe ich noch nichts gefunden wo ein Master vom Bus liest.
Ich habe mal angefangen mir die wichtigsten Funktionen zu bauen,
aber gerade bei der lese-Funktion bin ich mir doch sehr sehr unsicher...
Würde mich sehr freuen wenn sich jemand das mal ansieht, und mich vll. berichtigt, oder mir vll. ne gute Seite empfielt...
Gruss
Bastian
#include <avr/twi.h>
#include <avr/io.h>
void i2cStart()
{
// TWINT = Enables the TWI Interrupt Flag
// TWSTA = Writes the TWI Start Condition Bit into the Bus (Master)
// TWEN = Enables the TWI Hardware
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT))); //wait until the Bus is not ready
}
void i2cStop()
{
// TWINT = Enables the TWI Interrupt Flag
// TWSTO = Writes the TWI Stop Condition Bit into the Bus (nolonger Master)
// TWEN = Enables the TWI Hardware
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //Send Stop
}
void i2cSendData(unsigned char address,unsigned char data)
{
TWDR = address << 1; //load Slave Address + Write in TWDR
TWCR = (1<<TWINT)|(1<<TWEN); //clear Bits to start transmission
while (! (TWCR & (1<<TWINT))); //wait until the Bus is not ready
TWDR = data; //load data in TWDR
TWCR = (1<<TWINT)|(1<<TWEN); //clear Bits to start transmission
while (! (TWCR & (1<<TWINT))); //wait until the Bus is not ready
}
//????????????????????????????????????????????
unsigned char i2cReadData(unsigned char address)
{
TWDR = (address << 1) + 1; //load Slave Address + Read in TWDR
TWCR = (1<<TWINT)|(1<<TWEN); //clear Bits to start transmission
while (! (TWCR & (1<<TWINT))); //wait until the Bus is not ready
TWCR = (1<<TWINT)|(1<<TWEN); //clear Bits to start transmission
while (! (TWCR & (1<<TWINT))); //wait until the Bus is not ready
return TWDR; //return TWDR
}