Hola amigos!
Estoy aprendiendo a programar en C con el compilador winAVR, despues de hacer Test con los puertos y encendiendo led y usando pulsadores hata ahi muy bien, ahora quiero hacer una comunicacion UART con la pc y el Atmega16, pero al compilar el codigo me tira un erroro que desconoco, quizas alguein por aqui me echa una mano.
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#ifndef F_CPU
#define F_CPU 1000000
#endif
//set desired baud rate
#define BAUDRATE 9600
//calculate UBRR value
#define UBRRVAL ((F_CPU/(BAUDRATE*16UL))-1)
char n, //number numero
c; // mostramo el estado en pantalla
int main(void)
{
//ponemnos el Baud rate
UBRRL=UBRRVAL; //valor de Bytes bajos
UBRRH=(UBRRVAL>>8); //valor de Bytes altos
//ponemos el formatos de los Frame: asynchronous mode,no parity, 1 stop bit, 8 bit size poner tipo de formato de Dato
UCSRC=(1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)|
(0<<USBS)|(0<<UCSZ2)|(1<<UCSZ1)|(1<<UCSZ0);
// activamos transmisor y receptor
UCSRB=(1<<RXEN)|(1<<TXEN);
DDRA=0x00; //all A port pins as input todos los puertos A como entrada
PORTA=0xFF; //Enable internal Pull-Up resistors activamos la pull up interna
DDRB=0xFF; //All B port pins as output todos puertos B como salida
while(1)
{
c=1; //start with first LED iniciamos el primer led
while(PINA==0xFF) // esperamos para presionar
{
if (c==0) c=1; //if light passed all leds start over
PORTB=~c; //LED on
_delay_ms(100);//short delay
n++; // incrementamos el valor del numero
c=c<<1; //desplazamos los led
}
//esperamos por el vaciado del buffer de transmision
while (!(UCSRA&(1<<UDRE))){};
UDR=n; // enviamos el numero a la UART
PORTB=~n; //y mostramos el numero con led en (binary)
_delay_ms(200); // , delay largo
PORTB=0xFF; // apagamos todos los LED
}
return 0;
}