Foros del Web » Programación para mayores de 30 ;) » Programación General »

Comunicacion rs232 con ATMEGA32?

Estas en el tema de Comunicacion rs232 con ATMEGA32? en el foro de Programación General en Foros del Web. Hola amigos, normalmente programo con PIC y esto no me habria supuesto ningun problema, pero esto de practicas y aqui parece ser que impera ATMEL ...
  #1 (permalink)  
Antiguo 12/05/2013, 16:25
 
Fecha de Ingreso: diciembre-2008
Mensajes: 91
Antigüedad: 15 años, 4 meses
Puntos: 1
Comunicacion rs232 con ATMEGA32?

Hola amigos, normalmente programo con PIC y esto no me habria supuesto ningun problema, pero esto de practicas y aqui parece ser que impera ATMEL sobre PIC, con lo cual me veo obligado a adaptarme...

Necesito utilizar el sistema de comunicacion rs232 para comunicar el Micro Con la PC y viceversa, sin embargo no soy capaz de conseguirlo... tengo un programa he buscado y rebuscado en google pero no he sido capaz de adaptar un programa de por ahi a mi atmega32....

Con lo cual, necesito vuestra ayuda...

Aqui un enlaze con lo que he conseguido hasta ahora, Proteus+AVRstudio , es con el atmega 168, que no he logrado hacer funcionar en el atmega32, y ademas el pic solo emite, no recibe, es decir estoy bastante lejos de lograr mi objetivo...

Podria alguien pasarme un codigo de ejemplo???, por favooor jaja no tengo a quien recurrir.

Os lo agradezco mucho


Este codigo es uno de los mil que he probado y no funciona

Código:
#
Code:
include <avr/io.h>
#include <util/delay.h>
#define clear_bit(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define set_bit(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define toogle_bit(sfr, bit) (_SFR_BYTE(sfr) ^= _BV(bit))
#define USART_BAUDRATE 4800
#define BAUD_PRESCALE (F_CPU / 16 / USART_BAUDRATE - 1)
int main(void)
{
clear_bit(DDRD, DDD7);
set_bit(PORTD, PD7); //PD7 (pulsador)
set_bit(DDRD, DDD6); //PD6 (led)
clear_bit(PORTD, PD6); //led apagado
UCSRB |= (1 << RXEN) | (1 << TXEN); // Inicializa la USART para envio y recepción.
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Asincrónica, 8,N,1
UBRRH = (BAUD_PRESCALE >> 8);
UBRRL = BAUD_PRESCALE;
char mensaje[] = "Hola mundo AVR\r\n";
for (;;)
{
if (bit_is_clear(PIND, PD7))
{
_delay_ms(20);
if (bit_is_clear(PIND, PD7))
{
char *s = mensaje;
while (*s != 0)
{
while (( UCSRA & (1 << UDRE ) ) == 0) {};
UDR = *s++;
}
loop_until_bit_is_set(PIND, PD7);
}
}
if ( UCSRA & (1 << RXC ))
{
if (UDR == '0')
toogle_bit(PORTD, PD6);
}
}
}
Bueno llegar si que llega, pero solo simbolos extraños,

Supongo que es un conflicto entre el reloj del micro y baud rate pero no se, no he sido capaz de solucionar....

Aqui una imagen de uno dee mis intentos fallidos en proteus

https://docs.google.com/file/d/0BzzR...it?usp=sharing


Alguna sugerencia???
__________________
basqueelectronics.blogspot.com.es
Compartiendo diseños desde la semana pasada

Última edición por mesenier; 12/05/2013 a las 16:40

Etiquetas: serie
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:34.