desktop

Programador USB para microcontroladores AVR atmel

mmm bueno, ya dejo de funcionar el metodo con el generador de señales (solo llega hasta 2MHz por las dudas), tendre que sacar el micro y poner otro sin cristal y grabar primero los fuses.....=(

pense que iba a ser mas sencillo esto con los avr

ahora una pregunta, si me compro el avrisp mkII o el jtagice mkII y armo la placa completa con cristal y todo podre grabarlos sin problema con isp??



ah y como me fijo esos datos del archivo makefile? no se mucho de eso.
 
Última edición:
Hola gonpa,

Te aclaro unas dudas con respecto a la programación por ISP: Los microcontroladores AVR de Atmel permiten programación serial por su interfaz SPI (con contadas excepciones), pero debes tener en cuenta algo: la frecuencia máxima de programación a través de la interfaz SPI depende de la frecuencia a la que esté funcionando el microcontrolador. Si lees con cuidado la hoja de datos del microcontrolador, verás que la frecuencia máxima de programación es 1/4 de la frecuencia del cristal, en algunos rangos de frecuencia puede ser hasta 1/6. Dicho de otra forma, si tienes funcionando el microcontrolador con un cristal de 8 MHz, la máxima frecuencia de programación será de 2MHz.

Con respecto a la recomendación de Moyano Jonathan, de programar primero el microcontrolador sin cristal y luego colocárselo, nunca he tenido esa necesidad, mis montajes los he realizado con cristal incluído y luego programo los Fusebits para que el micro utilice ese cristal. Supongo que Moyano habla desde su experiencia, porque no recuerdo haber visto esa recomendación en la hoja de datos. En mi experiencia, te puedo decir que no he tenido necesidad de realizar ese proceso.

Ahora, con respecto a las herramientas de desarrollo que mencionas, el AVRISP mkII es también un programador ISP, no creo que las cosas vayan a cambiar mucho, pero pues tienes la ventaja de que es la herramienta original del fabricante. El JTAGICE mkII es otro cuento, es una excelente herramienta no solo para programación sino también para depuración. Si tienes el dinero para comprarlo, adelante! No te arrepentirás. Eso sí, con esta herramienta programarías por el puerto JTAG del microcontrolador.

Por último, no te desanimes con los AVR de Atmel, son de lejos una de las mejores familias de microcontroladores de 8 bits. Ni me pongo a compararte la arquitectura de éstos con otras marcas conocidas como los HCS08 de Freescale o los PIC16 o 18. Creo que tienes que ponerte a estudiar más para aprenderlos a manejar y familiarizarte con las herramientas de desarrollo, haz un esfuerzo y verás que vale la pena.
 
gracia spor tu respuesta, se que los microcontroladores atmel son buenisimos, a mi me encanta programarlos pero bueno tengo estas complicaciones hoy.

te cuento estaba viendo otro proyecto mio, con tun atmega8, mis herramientas:
programador de moyano
una placa con un zocalo y su cristal con los dos capacitores de 33pF
el cristal es de 4Mhz
en mi placa del proyecto uso uno de 8Mhz
tengo el soft sinaprog2.0

con estas herramientas puedo cambiar la velocidad del microcontrolador? en el soft primero grabo los fuses? podrias darme unos pequeños pasos con este soft asi lo grabo sin quemarlo?


espero puedas y disculpa que sea tan pregunton pero son los ultimos pasos que em faltan aprender para saber grabarlos(avance mucno con la programacion pero no he grabado mucho :( ).


muchas gracias!!
 
Hola gonpa,

Veo un error en tu montaje, referente a los capacitores del cristal. Si miras en la hoja de datos del dispositivo, el rango recomendado es de 12 a 22 pF. 33pF se encuentra por fuera del rango, así que te recomiendo procedas con el cambio de esos componentes.

La recomendación para trabajar con micros Atmel es programar inicialmente los fusebits, para que no tengas confusiones más adelante y sepas que estás manejando el cristal externo para la temporización del micro. Los cristales externos son mucho más precisos que el oscilador interno, ya que éste es un circuito RC y por lo tanto es variable con la temperatura (aunque existen rutinas para calibrarlo, pero eso es otro asunto).

Las herramientas que mencionas son suficientes para trabajar con el microcontrolador, personalmente uso otro programador pero el de moyano según he leído soporta lo necesario para tu caso.

No tengo problemas con tus preguntas, para eso está este foro, para ayudarnos mutuamente.

Saludos,
 
Entonces podria soldar el cristal a mi placa del proyecto y primero seleccionar los fusebit y grabarlos para despue spoder grabar el programa?

con el sinaprog que opcion deberia tocar? yo quiero usar un cristal externo de 11.0592MHz
espero puedas explicarme los pasos para poder terminar de aprender a grabar estos micros smd

muchas gracias por todo!!!
 
Para mi lo que más me costo fue el tema de la configuración de los fusibles. Hay mucha literatura en inglés al respecto ..pero lo que me dió resultado fue leer las configuraciones automáticas de algunas páginas:
http://avr8-burn-o-mat.aaabbb.de/avr8_burn_o_mat_avrdude_gui_online.html
Esta página es la más exacta que encontre. En ella aprendí mucho sobre la configuración de los fusibles.

También te dejo una hoja de datos sobre los fusibles en español (y)

Para mi lo que más me costo fue el tema de la configuración de los fusibles. Hay mucha literatura en inglés al respecto ..pero lo que me dió resultado fue leer las configuraciones automáticas de algunas páginas:
http://avr8-burn-o-mat.aaabbb.de/avr8_burn_o_mat_avrdude_gui_online.html
Esta página es la más exacta que encontre. En ella aprendí mucho sobre la configuración de los fusibles.

También te dejo una hoja de datos sobre los fusibles en español (y)



En caso de que el tutorial no sea suficiente me tomé un minuto para realizar una guía en youtube :cool:

http://www.youtube.com/watch?v=XSkQwFQ_ko0&feature=youtu.be
 

Adjuntos

  • Tutorial de configuración de Fusibles para AVR.pdf
    656.8 KB · Visitas: 220
Última edición:
muchas gracias! osea que sueldo mi cristas de 11.0592MHz y coloco estos valores:
efuse=FF hfuse=DF lfuse=AF en el sina prog y deberia tomar el cristal externo sin ningun problema??

gracias por facilitarme la info moyano guiame si es que estoy bien..

saludos.
 
La configuración correcta es:

EFUSE: FF
HFUSE: DF
EFUSE: EF

Siempre y cuando sea para el attiny2313 a una frecuencia de operación de 11.0592MHz. Ahora por que un cristal tan rebuscado...no es mejor usarlo en 12Mhz...o 10Mhz ?

PD: El attiny2313 tiene que ser la versión 20PU (DIP20) o 20SU (SSOP20) Sino las otras versiones solo pueden trabajar hasta 10Mhz...o menos.

Un saludo !
 
Hola Moyano,

El cristal de 11.0592MHz es interesante para conseguir tasas de baudios bastante exactas, haz los cálculos en la UART y verás, errores por debajo del 2%, por eso son relativamente comunes.

Saludos,
 
No me había percatado de eso. Muchas gracias por el la info !
Consulta: Ahora los microcontroladores de la serie AT90USB...vienen cargados con el bootloader de fábrica DFU ? Vienen configurados para usarlos con un cristal de 16Mhz ?
La pregunta viene por que tengo pensado postear un entrenador que usa ese microcontrolador y me gustaría saber si ya viene cargado el bootloader o se lo tengo que cargar yo en conjunto con los fusibles para usar el cristal de 16Mhz.
 
Hola Moyano,

Vienen de fábrica con DFU, recuerda conectar el pin HWB a un pulsador, así como RESET, ya que el bootloader testea el estado de HWB para entrar al DFU. Indispensable la conexión de cristal de 8 o 16MHz, para que funcione correctamente la conexión por USB.
 
Muchas gracias por la data. Ahora cuando te referis al pin hwb a cual corresponde en el microcontrolador? Es necesario conectarle un pulsador o con el pulsador de reset es suficiente para entrar en el modo bootloader?
 
Son dos pulsadores, uno para reset y otro para HWB, que es activo bajo. Si se hace RESET cuando HWB está en bajo, entra a bootloader. Si se hace RESET con HWB en alto, ejecuta la aplicación programada en el micro. Ahora, para programarlos usas FLIP en Windows, o DFU-Programmer en Linux. El FLIP incluye los drivers de los micros, así que es necesario instalarlo previo a conectar el micro al PC, para que le des la ruta de los drivers. Eso está explicado en un manual que hice hace un rato. Te dejo la dirección del manual de FLIP que te puede ayudar:

http://www.naxuscolombia.com/descargas/documentacion/flip/

Lo puedes descargar también desde:

http://www.naxuscolombia.com/descargas/documentacion/
 
Hola! quiero darles mil gracias a Moyano Jonathan y alepusto en esta oportunidad por ayudarme tanto con este programador y los fusebits de los avr, ya aprendi como hacerlo y estoy utilizando mi placa entrenadora para el attiny2313 smd a 11.0592MHz! de verdad muchas gracia uno aprende muchisimo en esta comunidad con personas con tanta predisposición para enseñar y compartir.

me comprometo a subir todos los avances sobre este tema para el fin de semana para compartir lo poco que se.

Saludos!
 
Hola he subido mi avance por que he tenido problemas con la transmisión serial del atmega8 y no se si es que configuere mal los fusebit o es problema de codigo aunque lo saque de la hoja de datos y de otras fuentes....no se cual es el problema paso a explicarlo:

grabo en fusebit

hfuse C9
lfuse FF

ó

hfuse C9
lfuse EF

y tb

hfuse D9
lfuse FF

codigo:

#define F_CPU 8000000UL
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>

void initUART(unsigned int ubrr)
{
UBRRH = (unsigned char) (ubrr >> 8); //Guardo el bautrate en el registro
UBRRL = (unsigned char) ubrr; //si supera un byte el 2°byte se guarda en el byte alto
UCSRB = (1<< RXEN)|(1<<TXEN);//|(1<<RXCIE); //Habilito recepción, transmisión e interrupcion RX
UCSRC = (1<<UCSZ1)|(1<<UCSZ0); //bit de datos = 8
//Registro de estado de la UART
//UCSRA=|RXC|TXC|UDRE|FE|DOR|PE|U2X|MPCM|
}
int USART_Transmit(char data,FILE *stream )
{
if (data =='\n')
USART_Transmit('\r',stream);
while ( !( UCSRA & (1<<UDRE)) ); //Esperar transmision completa
UDR = data; //Guardo dato en el registro UDR
return 0;
}
int USART_Receive( FILE *stream)
{
unsigned char data;
while ( !(UCSRA & (1<<RXC)) ); //Espera recepcion
data = UDR;
//USART_Transmit(data,stream);
return data; //Retorno con el dato en el buffer data
}

FILE uart_str = FDEV_SETUP_STREAM(USART_Transmit, USART_Receive, _FDEV_SETUP_RW);

int main(void)
{
DDRB=0X00;
PORTB=0X00;
DDRD=0XFF;
PORTD=0X00;
stdout = stdin = &uart_str;
initUART(MYUBRR);

while(1)
{
printf("H");
_delay_ms(1000);
//TODO:: Please write your application code
}
}

lo programo con el programador de moyano quisas tenga algo que cambiar en el ide sinaprog por eso pregunto
saludos
 
Explicate mejor gonpa. Cuál es el problema que tienes con el código o el programador ? Yo he usado el mismo código que usas vos y funciona bien....en caso de que el mismo no te funcione, puede ser un problema de la configuración del baudrate de la USART.
 
Hola moyano, gracias por responder, tratare de explicarme, yo uso ese codigo en el attiny2313 y anda bien hace el calculo perfecto por el cristal. me comunico y veo todo con el term95. claro que segui el minitutorial de los fusebit para usarlo.

ahora cuando quiero hacerlo en un atmega8L a 8Mhz no funciona, configure el micro con el sinaprog siguiendo tutorial que subiste con el atmega8 lo configuro lo grabo pero no se comunica luego probe con la configuracion ext cryst del mismo sinaprog y tampoco se comunica.

probe invertir la señal del TX del atmega y nada.

meti el osciloscopio, veo los datos y todo. ahora hice una prueba de mandar una "H" a 9600baud 8bit de datos sin paridad 1bstop y ese mismo dato me dura en el osciloscopio unos 30ms......eso creo que esta mal,

ahora que puedo estar haciendo mal? revise el circuito y todo bien incluso despues del st3232 que es igual al max232 solo que varia algunas cosas no mas tb veo los datos osea creo yo:

manda los datos pero muy lento, o manda cualquier cosa.

alguna cosa mal configurada?



en el calculo del baudrate hago la formula....tal cual esta ahi hago con el attiny y en el atmega8 no anda :(
 
Última edición:
Hola como estás. Algunas cosas a tener en cuenta por experimentos que he hecho yo con los ATtiny2313.

1° - A veces los ATtiny2313 10-PU Soportan hasta un cristal de 8Mhz ofreciendo un funcionamiento estable ...si le ponía 10Mhz a veces presentaban fallos con el puerto SPI...nunca descubrí el porque. Al parecer el programa estaba tal cuál la hoja de datos y fallaba con 10Mhz pero con 8 no...En otro micros soportan hasta 12Mhz sin problemas, como le pasó a un usuario de este hilo que no tenía el ATtiny2313-20PU y lo hizo con un 10PU.

2° - Asegurate que con el cristal que vos estés usando no tengas mucho error de tiempos en RS232....eso puede afectarte el funcionamiento como lo mencionó alepusto en posts anteriores.

3° - Revisá bien el hardware que estás usando. A veces uno cree que está todo bien...y por un cablesito que quizás no está en su lugar, todo el circuito falla....me ha pasado y muchas veces :p

4° -

en el calculo del baudrate hago la formula....tal cual esta ahi hago con el attiny y en el atmega8 no anda :(

Fijate en la hoja de datos de cada familia, no valla a ser que lo estés configurando mal o tengas mucho error en los tiempos.

Luego de revisar esto...probá con otras frecuencias de cristal menores...tipo 4Mhz...oscilador interno. Para ver como se comporta el microcontrolador.
 
si lo programo con cristal interno hace falta que le saque el cristal que tiene puesto? o no hay problema puedo configurar los fusebit aunque tenga el cristal y sus capacitores?

asi hago ya no mas la prueba.
muchas gracias.
 
Atrás
Arriba