sefat
Newbie level 4
- Joined
- Nov 17, 2012
- Messages
- 6
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1,281
- Activity points
- 1,317
i'm using two atmega32 for i2c.
master will call a slave & send the address of the slave as data & the slave will show it on PORTA.
Master is transmitter and slave is receiver.
i'm not getting expected result.slave is not showing its address on PORTA.
where's the problem. plzz help.
master code:
slave code:
master will call a slave & send the address of the slave as data & the slave will show it on PORTA.
Master is transmitter and slave is receiver.
i'm not getting expected result.slave is not showing its address on PORTA.
where's the problem. plzz help.
master code:
Code:
#include <avr/io.h>
#include <util/delay.h>
void i2c_write(unsigned char data){
TWDR=data;
TWCR=(1<<TWINT)|(1<<TWEN);
while((TWCR&(1<<TWINT))==0);
}
void i2c_start(){
TWCR=(1<<TWINT)|(TWSTA)|(TWEN);
while((TWCR&(1<<TWINT))==0);
}
void i2c_stop(void){
TWCR=(1<<TWINT)|(TWEN)|(TWSTO);
}
void i2c_init(void){
TWSR=0x00;
TWBR=0x47;
TWCR=0x04;
}
int main(void)
{i2c_init();
_delay_ms(1000);
i2c_start();
i2c_write(0x11);
i2c_write(0x11);
i2c_stop();
while(1)
{
}
}
slave code:
Code:
#include <avr/io.h>
void i2c_initslave(unsigned char address){
TWCR=0x04;
TWAR=address;
TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWEA);
}
unsigned char i2c_receive(unsigned char islest){
if(islest==0)TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWEA);
else TWCR=(1<<TWINT)|(1<<TWEN);
while((TWCR&(1<<TWINT))==0);
return(TWDR);
}
void i2c_listen(){
while((TWCR&(1<<TWINT))==0);
}
int main(void)
{
DDRA=0xFF;
i2c_initslave(0x11);
i2c_listen();
PORTA=i2c_receive(1);
while(1)
{
}
return 0;
}
Last edited by a moderator: