Yo estoy tratando de enviar dos comandos para mi raspberry a través de puerto serie. Tengo el siguiente código:
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 8000000UL
#define BAUD 9600
int main( void )
{
// BAUD RATE (bits per second)
UBRR0 = ( ( F_CPU / 8 / BAUD ) - 1 ); // 01100111
// CONFIGURATION REGISTERS
UCSR0B = 0b00001000; // enable transmitter (TXEN0)
UCSR0C = 0b00000110; // set 8-bit data frame size
char buf[2][222] =
{
{ "AT" },
{ "AT+CWSAP=\"AVRAP\",\"abcd\",11,0" }
};
int i = 0;
int x = 0;
while( 1 )
{
if( x == sizeof( buf ) )
{
break;
}
if( i<strlen( buf[ x ] ) )
{
UDR0 = buf[x][i];
i++;
}
else
{
UDR0 = 13;
UDR0 = 10;
x++;
i = 0;
_delay_ms( 10000 );
}
_delay_ms( 50 );
}
return 0;
}
Y estoy usando el siguiente fichero makefile:
CC=/usr/bin/avr-gcc
MEGA=328p
CFLAGS=-g -Os -Wall -mcall-prologues -mmcu=atmega$(MEGA)
OBJ2HEX=/usr/bin/avr-objcopy
PROG=/usr/bin/avrdude
TARGET=serial
program : $(TARGET).hex
$(PROG) -c avrispv2 -p m$(MEGA) -P /dev/ttyACM0 -e -U lfuse:w:0xe2:m -U hfuse:w:0xd9:m
$(PROG) -c avrispv2 -p m$(MEGA) -P /dev/ttyACM0 -U flash:w:$(TARGET).hex
%.obj : %.o
$(CC) $(CFLAGS) $< -o $@
%.hex : %.obj
$(OBJ2HEX) -R .eeprom -O ihex $< $@
clean :
rm -f *.hex *.obj *.o
Tenga en cuenta que yo soy la configuración de los fusibles para uso interno de reloj, por lo que se debe ejecutar en 8Mhz:
-U lfuse:w:0x62:m
La velocidad de la CPU se define como 8Mhz la velocidad se establece a 9600, pero cuando voy a ejecutar el siguiente comando en mi raspberry, todo lo que veo es basura:
picocom /dev/ttyAMA0 -b 9600
picocom v1.7
port is : /dev/ttyAMA0
flowcontrol : none
baudrate is : 9600
parity is : none
databits are : 8
escape is : C-a
local echo is : no
noinit is : no
noreset is : no
nolock is : no
send_cmd is : sz -vv
receive_cmd is : rz -vv
imap is :
omap is :
emap is : crcrlf,delbs,
Terminal ready
�`�怘��`枆�~������▒�x�x�x�x�x�x�▒��▒�x�x�x�▒������怘�
No quiero correr el micro-controlador con oscilador externo, puedo usar la comunicación serial a reducir las tasas sin usarlo?