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:
Bueno llegar si que llega, pero solo simbolos extraños, # 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); } } }
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???