Estoy usando un atmega328p y escribiendo firmware para mostrar los datos que recibo a través de i2c en masilla.
Leí los datos que recibo de la siguiente manera:
/* Receive data from slave. */
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
while(!(TWCR & (1<<TWINT)));
libuart_send((char*)TWDR,1);
donde:
void libuart_send(unsigned char *data, int data_size)
{
for(int i = 0; i < data_size; i++)
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)) );
/* Put data into buffer, sends the data */
UDR0 = data[i];
}
}
Puedo ver con mi analizador lógico que recibo 0x00:
Sinembargo,cuandotratodeverlosdatoscorrespondientesconmasilla,soloobtengounsímboloextrañocomosiloestuvieraemitiendoincorrectamente:
He estado tratando de averiguar cómo se define el registro TWDR
para tratar de entender si estoy emitiendo algo incorrectamente, pero no encontré la información que estaba buscando. Tenga en cuenta que mi función libuart_send
funciona perfectamente bien cuando hago algo como esto libuart_send('A', 1);
, pero no cuando reemplazo el primer argumento por TWDR. En otras palabras, la velocidad en baudios está perfectamente bien.
¿Alguien sabe por qué estoy viendo este personaje extraño en lugar del número 0 en masilla?
Gracias