Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola. me encuentro empezando a programar un atmega16 para poder comprar con los pics.. con el avrstudio y el winavr, de programador uso un avrisp mkii.
Le he hecho la conexión para ISP, y al intentar programar me pasa lo siguiente:
Entering programming mode.. OK!
Erasing device.. OK!
Programming FLASH .. OK!
Reading FLASH .. FAILED!
Leaving programming mode.. FAILED!
Me falla en la lectura, pero el programa aún así parece que lo graba bien.
El otro problema es con el programa, estoy utilizando un cristal de 16 MHz, y yo diría que el programa se está ejecutando mucho más lento. No sé si es que me selecciona algún oscilador interno o que pasa, ya que la salida que obtengo en el osciloscopio en el PORTA.0 es esta:
Con los 16 MIPS yo me esperaba algo más de esos 90 kHz x_x.
El código del programa no sé si me falla algo, ya que estoy dando palos de ciego con este compilador, tanto que me estoy pensando en cambiarme a otros de los que tengo libros basados en ellos./***************************************************
*
* Apagar y encender el PORTA.0
*
*****************************************************/
#include <avr> //falta la barra .io que me lo edita mal esto
void inicializar_puertos(void);
//Programa principal
int main(void)
{
inicializar_puertos();
while(1)
{
PORTA=0x00;
PORTA=0x01;
}
}
// Funciones
void inicializar_puertos(void)
{
DDRA=0x01;
PORTA=0x00;
DDRB=0x00;
PORTB=0x00;
DDRC=0x00;
PORTC=0x00;
DDRD=0x00;
PORTD=0x00;
}
Al hacer el build obtengo lo siguiente:
avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -DF_CPU=16000000UL -O0 -fsigned-char -MD -MP -MT led.o -MF dep/led.o.d -c ../led.c
avr-gcc.exe -mmcu=atmega16 led.o -o led.elf
avr-objcopy -O ihex -R .eeprom led.elf led.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex led.elf led.eep || exit 0
Device: atmega16
Program: 242 bytes (1.5% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings...
No sé que puede estar mal, ya que es de los primeros circuitos y programas que monto con esta familia, seguro que será cualquier tontería, alguna opción del avrstudio, o incluso el C que lo tengo bastante olvidado.
En la placa tengo montada la conexión de isp, alimentadas las vcc, gnd, avcc y agnd, y conectado el cristal de 16 MHz con sus dos condensadores de 22p.
En fin a ver si alguien sabe que me puede estar pasando, mañana le daré más vueltas y buscaré por internet, que habrá código y ejemplos para el winavr para aburrir.
Gracias. Saludos.
De AVRs no tengo ni idea... pero en otros micros (p.ej. los dspic) son algo raros con los puertos y tienes que dejar almenos un ciclo para que la salida se active, o sea, prueba con algo así:
porta=0;
nop();
porta=1;
nop();
Pero creo que tiene más pinta de ser algo del oscilador que no tengas bien configurado.
JM, Yo tampoco entiendo mucho de AVRs (el experto es beamspot) pero yo el código lo haría mejor utilizando la instrucción de inversión (complemento), y los latches (no se si el AVR los tiene) en vez del puerto A directamente.
while(1)
{
__asm;
CMP LATCHA
__endasm;
}
S2
Ranganok Schahzaman
Hola:
Siento tardar tanto en meterme, pero estoy de visita a mis padres en Manacor, donde no tengo internet. A ver si cuando vuelva a Vilanova puedo contestar con más amplitud.
A ver, primero: la elección del AVRISP MkII es muy acertada, así que no creo que tengas problemas con el. Pero hay un par de detalles, que debería explicar para todos, para trabajar con los AVR.
Por defecto, todos los AVR vienen programados para trabajar con el reloj interno a 1MHz.
Segundo, los fuses, que son los que controla el reloj y cuatro cosas importantes más, son lo primero a comprobar, pero...
Tercero, para trabajar con los AVR, hay que poner, lo primero de todo, y sobre todo con los micros 'virgenes' o que no sabemos como están, la frecuencia de trabajo del AVRISP a menos de 1/4 de la velocidad del reloj. Eso significa de 125KHz or 250KHz para los vírgenes.
Una vez hecho esto, leer los fuses del micro para comprobar que se leen correctamente. Otra alternativa es leer la 'signature' o identificación del micro, para comprobar que es el correcto.
Los fuses siempre es conveniente leerlos, para ver como están.
Luego, seleccionar el reloj adecuado, bien el oscilador externo, bien el interno, etc. Cuidado con equivocarse. Si seleccionais un reloj externo y no teneis ninguno puesto, no funcionará más el ISP. La solución, por suerte es sencilla, y pasa por inyectar una señal de un reloj externo, bien un generador de funciones, bien con un micro externo que genere la señal (un pic con un timer).
Por lo que comentas, si te trabaja más lento, tiene toda la pinta de ser el tipo de fallo habitual del novato (yo que trabajo comúnmente con ellos de vez en cuando lo cometo). Así que empieza por seguir mis recomendaciones y comprueba los fuses. Empieza poniendo la frecuencia del ISP más lenta, para leer los fuses. Luego selecciona el fuse de cristal externo, brown-out (BO?) activado, tiempo de arranque de 64ms, y vuelve a probar a programar. Debería funcionarte según lo previsto.
A ver si algún día puedo poner algun pequeño tutorial de 'empezar con estos chismes'. Mientras, pon tus dudas aquí, para que todos las puedan consultar. Miraré de tener el tema lo más actualizado posible, pero no prometo nada, que estas vacaciones 'off line' son muy relajantes.
Que os divirtáis, que haya suerte y séa esto lo (que creo será) que te pasa. Hasta pronto, y feliz campus a los que estéis.
Beamspot.
Pues era lo que has dicho, probando los fuses ya me cargue uno ayer al seleccionar reloj externo y no me deja reprogramarlo, voy a enchufarle una señal con el generador a ver si lo recupero.
Ahora seleccionando el cristal externo funciona 16 veces más rápido que antes, así que era el interno.
Lo de la frecuencia de isp a 150k funciona bien, yo le ponía más y con el valor que venía por defecto me daba tb error. Ya lo lee todo bien.
Bueno voy a ver si empiezo a encender leds con estos micros y voy acostumbrandone al avr studio, que con lo poco que llevo visto me están empezando a gustar estos micros, creo que nada de pics en los próximos proyectos.
Cuando esté un poco más suelto emepzaré con las comparativas del otro post.
Gracias por las respuestas a todos. Saludos.