Estoy probando I2C para conectar el ATmega32 con la placa Arduino Mega2560 sin éxito.
La placa Arduino está configurada para ser la Lectura maestra.
El Atmega32 está configurado para ser Slave Write.
He conectado los cables como en la imagen a continuación:
ElcódigoparaATmega32enAtmel6:
#include<avr/io.h>#include"I2C_slave.h"
void i2c_initSlave(unsigned char slaveAddress)
{
TWCR = 0x04;
TWAR = slaveAddress;
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
}
//*************************************************
void i2c_send(unsigned char data)
{
TWDR = data;
TWCR = (1<<TWINT) | (1<<TWEN);
while ((TWCR & (1<<TWINT))== 0);
}
//*************************************************
void i2c_listen()
{
while ((TWCR & (1<<TWINT)) == 0);
}
int main(void)
{
int PIN = 0x02;
DDRC &= ~PIN;
i2c_initSlave(0x90);
i2c_listen();
i2c_send("G");
while(1)
{
return 0;
}
}
El Código para el Arduino Board:
#include <Wire.h>
#define TRANCEIVER_ADDRESS 0x90
void setup()
{
Wire.begin(TRANCEIVER_ADDRESS); // join i2c bus (address optional for master)
Serial.begin(115200); // start serial for output
}
void loop()
{
Serial.println("HALLO");
Wire.requestFrom(TRANCEIVER_ADDRESS, 2);
while(Wire.available()) // slave may send less than requested
{
char c = Wire.read(); // receive a byte as character
Serial.print(c); // print the character
}
delay(500);
}
Como se describe en el código, uso Dirección 0x90 para establecer la conexión y enviar el carácter "G" de ATmega32 a Arduino. La salida que obtuve en la ventana SerialCommand en Arduino IDE es como en la imagen a continuación:
Eso significa NO CONEXIÓN !!!
¿Alguien podría detectar el problema? Creo que el problema está en el código ATmega32.
¿El DDRC y el PORTC están configurados correctamente para el MASTER READ?
DDRC=0xFF;
PORTC=0x00;
No estoy seguro. O debería ser el PORTC
PORTC=0xFF;
¿Podría alguien explicarme?