Autor Tema: Me decido por Atmel  (Leído 9533 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Me decido por Atmel
« en: 24 de Octubre de 2016, 23:38:59 »
Hola a todos.
Luego de volver a la vida microcontrolera  :D, y con la idea de hacer cosas interesantes, proyectos y demás, emepece a estudiar lenguaje C++, retomar los micros PIC, luego los Freescale sin éxito me decido por probar en forma los Atmel.
Las razones son las siguientes:
Uso solo linux, la distro Mint18 para ser exactos, el Mplab XC8 va bien pero con sus inconvenientes como no soporta algunos pequeños procesadores o dan inconvenientes, sin contar con la escasas librerías....Freescale parece que tiene olvidado el linux por que las últimas versiones del Code Warrior solo son para Wiindows sin contar con mi limitante para adquirir un buen programador  :oops:..
Asi que llevo unos buenos días leyendo aquí, allá, adquirí un Arduino uno y me ha gustado lo bien que trabaja el Atmega pero no me gusta no tener el control completo del microcontrolador para hacer travesuras  :D..vamos que todo masticado y sacrificando a lo mejor potencia por comodidad..uhmm como que no 8).
Asi que paso por aca para pedir ayuda recomendaciones, guías y demás para empezar con esta familia..en mi pais, Colombia, se consigue los Atmega, los attiny y otro AT89,90 a un buen precio si los comparo con los Freescale y los PICs, que programador me recomiendan que me pueda servir enn linux; y si alguien trabaja con esta familia en linux me gustaría leer su experiencia y ayuda por supuesto  ;-)..
Este programador me servirá para empezar?

http://dualtronica.com/microcontroladores/302-programador-atmel-avr-usbasp-usbisp.html

De antemano muchas gracias y espero poder iniciar bien con esta familia y no sentirme tan frustrado como me he sentido por estos días con las otras familias..
Un abrazo.

Saludos

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re:Me decido por Atmel
« Respuesta #1 en: 25 de Octubre de 2016, 03:50:06 »
Yo habia empezado con los pic y nunca pude hacer algo que me funcionara, siempre tenia que entrar al foro a buscar los problemas como lo hace otros muchos.

pero en fin cada loco con su Temas, el programador que pone en el Link, yo estuve problema con el y lo tire a la basura, le reclame al vendedor y me dijo que lo enviara al Distribuidor y deberia espera 2 semana, la cual descarte y lo tire a la basura, 

Yo te recomendaria este http://www.fischl.de/usbasp/

Features

    Works under multiple platforms. Linux, Mac OS X and Windows are tested.
    No special controllers or smd components are needed.
    Programming speed is up to 5kBytes/sec.
    SCK option to support targets with low clock speed (< 1,5MHz).
    Planned: serial interface to target (e.g. for debugging).




yo lo uso cuando tengo que quemar varios micro,  pero para experimentar uso mi STK500  :P
yo programo en Basic y uso Bascom AVR...

Saludos
« Última modificación: 25 de Octubre de 2016, 03:54:28 por stk500 »

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re:Me decido por Atmel
« Respuesta #2 en: 25 de Octubre de 2016, 11:20:43 »
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 258
Re:Me decido por Atmel
« Respuesta #3 en: 25 de Octubre de 2016, 13:06:20 »
El usbasp funciona en linux a través de avrdude o incluso a través del mismo IDE de Arduino

https://learn.sparkfun.com/tutorials/pocket-avr-programmer-hookup-guide/using-avrdude

para usar el programador usbasp en modo usuario añades un archivo en /etc/udev/rules.d cuyo contenido sea el siguiente

Código: [Seleccionar]
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", MODE="0666"

Con eso podrás programar por ejemplo un attiny85 con

Código: [Seleccionar]
avrdude -p t85 -B 4 -c usbasp -U flash:w:blink.hex

Con la opción -c seleccionas el tipo de programador

En el caso que cuentes con un arduino, puedes mantener el bootloader del arduino y subir tus programas con

Código: [Seleccionar]
avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyUSB0 -b 57600 -U flash:w:blink.hex

Este es un ejemplo para un arduino pro mini, sólo lo adaptas para al arduino que tengas

Para saber el bitrate te vas al directorio donde tienes instalado el arduino IDE y dentro de el te vas a hardware/arduino/avr

Código: [Seleccionar]
arduino-1.6.10/hardware/arduino/avr

Dentro de ese directorio te vas a encontrar 2 archivos:

Código: [Seleccionar]
programmers.txt
boards.txt

De ahí puedes obtener el bitrate para programar el arduino

Código: [Seleccionar]
## Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328
## -------------------------------------------------
pro.menu.cpu.16MHzatmega328=ATmega328 (5V, 16 MHz)

pro.menu.cpu.16MHzatmega328.upload.maximum_size=30720
pro.menu.cpu.16MHzatmega328.upload.maximum_data_size=2048
pro.menu.cpu.16MHzatmega328.upload.speed=57600    <------

pro.menu.cpu.16MHzatmega328.bootloader.low_fuses=0xFF
pro.menu.cpu.16MHzatmega328.bootloader.high_fuses=0xDA
pro.menu.cpu.16MHzatmega328.bootloader.extended_fuses=0x05
pro.menu.cpu.16MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328.hex

pro.menu.cpu.16MHzatmega328.build.mcu=atmega328p
pro.menu.cpu.16MHzatmega328.build.f_cpu=16000000L

Código: [Seleccionar]
## Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168
## -------------------------------------------------
pro.menu.cpu.16MHzatmega168=ATmega168 (5V, 16 MHz)

pro.menu.cpu.16MHzatmega168.upload.maximum_size=14336
pro.menu.cpu.16MHzatmega168.upload.maximum_data_size=1024
pro.menu.cpu.16MHzatmega168.upload.speed=19200  <------

pro.menu.cpu.16MHzatmega168.bootloader.low_fuses=0xff
pro.menu.cpu.16MHzatmega168.bootloader.high_fuses=0xdd
pro.menu.cpu.16MHzatmega168.bootloader.extended_fuses=0x00
pro.menu.cpu.16MHzatmega168.bootloader.file=atmega/ATmegaBOOT_168_diecimila.hex

pro.menu.cpu.16MHzatmega168.build.mcu=atmega168
pro.menu.cpu.16MHzatmega168.build.f_cpu=16000000L

Te dejo un makefile que usa como compilador el avr-gcc, junto con dos ejemplos que hacen D13 genere un tren de pulsos de periodo 100us

blink.c

Código: [Seleccionar]
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRB |= 0B00100000;
    while(1) {
        PORTB |= 0B00100000;
        _delay_us(50);
        PORTB &= 0B11011111;
        _delay_us(50);
    }
}


interrupt.c

Código: [Seleccionar]
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

void timer0_init()
{
//TCCR0B |= (1 << CS02)|(1<< CS00);
TCCR0B |= (1<< CS01) | ( 1 << CS00);
TCNT0 = 243;
TIMSK0 |= (1 << TOIE0);
sei();
}

ISR(TIMER0_OVF_vect)
{
PORTB ^= 0B00100000;
TCNT0 = 243;
}

int main(void)
{
    DDRB |= 0B00100000;
timer0_init();

    while(1) {}

}

Makefile (compila los dos proyectos al mismo tiempo)

Código: [Seleccionar]

all: blink.hex interrupt.hex

.SUFFIXES: .elf .hex .eep .lss .sym .upload .dsm

#CPU=m328p
CPU=atmega328p

XTAL=16000000 #Arduino 3.3v Pro
CFLAGS=-DTXBUFBITS=8 -DRXBUFBITS=8 -O

.elf.dsm:
avr-objdump --disassemble -S $^ >$@

.c.s:
avr-gcc $(CFLAGS) -Wall -mmcu=$(CPU) -S $^ -o $@

MAP=-Wl,"-Map" -Wl,"$@.map" -Wl,"--cref"

.c.o:
avr-gcc $(CFLAGS) -Wall -mmcu=$(CPU)  $< -o $@ -c

.elf.hex:
avr-objcopy -O ihex -R .eeprom $< $@

blink.elf: blink.o
avr-gcc $(CFLAGS) -Wall -mmcu=$(CPU)  $^ -o $@

interrupt.elf: interrupt.o
avr-gcc $(CFLAGS) -Wall -mmcu=$(CPU)  $^ -o $@

clean:
rm -rf *.o *.elf *.map *.hex


Desconectado Snaut

  • PIC12
  • **
  • Mensajes: 57
Re:Me decido por Atmel
« Respuesta #4 en: 25 de Octubre de 2016, 13:11:28 »
Buenas. Realmente aprovechando el bootloader de arduino no te hace falta ningún programador externo, desde el propio arduino puedes cargar programas vía USB/USART. Así que si lo que quieres es programar en C o asm no tendrás problemas. Tendrás que usar el avrdude para gestionar la carga de programas, para linux hay bastante info si tienes dudas coméntalo por aquí. Para compilar los programas en C necesitarás avr gcc.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Me decido por Atmel
« Respuesta #5 en: 25 de Octubre de 2016, 15:15:00 »
Para empezar con Atmel, lo mejor es una placa Arduino UNO:



Tiene programador integrado (comunicación USB-serial + Bootloader) y un precio buenísismo (en los chinos)

Además podrás encontrar todo tipo de ayuda desde lo más básico.


Si te gusta controlar todo, puedes programar la placa directamente con gcc (gratuíto, libre, muy potente y totalmente funcional) y avrdude.

Si quieres hacer algo rápido, con el IDE es muy sencillo.

Un saludo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Me decido por Atmel
« Respuesta #6 en: 25 de Octubre de 2016, 15:18:11 »
Para programar otros Atmel o programar un micro Atmega fuera de la placa Arduino, puedes utilizar una placa Arduino o, mejor aún, un USBAsp:



Es muy barato y para empezar tendrás más que suficiente.

Saludos.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Me decido por Atmel
« Respuesta #7 en: 25 de Octubre de 2016, 17:07:32 »
.

Mucho mejor un Teensy (Kinetis), que también lo puedes trabajar desde Arduino, y es mucho más potente. Hoy me ha llegado el nuevo Teensy 3.6, una pasada de bicho, también tengo el 3.2 y van geniales, ambos llevan bootloader, no necesitan programador.

Otra buena opción son los STM32.

« Última modificación: 26 de Octubre de 2016, 01:18:21 por planeta9999 »

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re:Me decido por Atmel
« Respuesta #8 en: 25 de Octubre de 2016, 18:04:47 »
Gua  :-) ((:-))u muchas gracias por las buenas respuestas y apoyo...
Mil gracias a todos a Picuino, Snaut,  tsk por el buen tutorial de comandos, a  PalitroqueZ por la sugerencia del arduino Uno como programador, stk500 por tu consejo ..mil gracias a todo, esta mañana estuve por mi ciudad buscando materiales y esto es lo que encontré, para empezar:







Y este



Y bueno en la parte de software instale el Eclipse con el AVR plugin siguiendo este tutorial:

https://www.youtube.com/watch?v=lP4BRa2VJFA

Bueno ahi voy, mañana trataré de escribir el hola mundo y comenzar, aca postearè mis inquietudes y resultados..de nuevo agradezco ejemplitos que hallan por ahí para ir trasteando..mi horario para dedicarle es de 8 a 10 am hora Colombiana.

Ahora en la noche hecharé una ojeada a todos los links que me han dado  ((:-))

Saludos.


« Última modificación: 25 de Octubre de 2016, 18:11:04 por marvicdigital »

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re:Me decido por Atmel
« Respuesta #9 en: 25 de Octubre de 2016, 22:47:31 »
Bueno sigo investigando un poco más y encontré esta página:

http://www.avr-tutorials.com

Hay muy buena  información  :-)

..sigo buscando..

Edit1: Bueno buscando encontré este valiosisimo tutorial hecho por nuestro amigo Felix, que de paso agradezco enormemente y lo mejor aún funciona el link.. ((:-)) ((:-)) ((:-)) ((:-)) Felix mil gracias.  ;-)

https://dl.dropboxusercontent.com/u/24861335/Felixls/tutoriales/TutorialAVRdesde0.pdf

saludos
« Última modificación: 25 de Octubre de 2016, 23:17:50 por marvicdigital »

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re:Me decido por Atmel
« Respuesta #10 en: 26 de Octubre de 2016, 12:50:29 »
Bueno, hola a todos.
Hoy primer dìa y queriendo hacer el primer hola mundo en Atmel  :mrgreen:..me han surgido algunos problemas y dudas, por ejemplo:

 tsk escribió:
Citar
Con eso podrás programar por ejemplo un attiny85 con

Código: [Seleccionar]
avrdude -p t85 -B 4 -c usbasp -U flash:w:blink.hex


Ya hice la prueba y agregue el archivo con la linea paraq que el avrdude me reconozca el usbasp, y hasta ahi todo va bien.
Conecto el usbasp a mi primer montaje con un Atmega16 que consiste en solo encender un led por el puerto D; acá el programa:

Código: [Seleccionar]
//#define F_CPU 10000000
#include <avr/io.h>
//#include <util/delay.h>
int main(void)
{
DDRD |= 0B00100000;
    while(1) {
        PORTD |= 0B00100000;
       // _delay_us(50);
        //PORTD &= 0B11011111;
       // _delay_us(50);

}
}


Como ven, comenté algunas lineas entre ellas la de la frecuencia del procesador ya que el compilador me daba un warning, investigué un poco el posible motivo y puedo suponer que tiene que ver con la configuración de los fusibles del micro, y según el tutorial de Felix por defecto el Atmega8 viene on osc interno a 1 MHZ, me imagino que con el que uso debería ser igual ya que en  el datasheet no veo nada especificado. Ahora las preguntas: :shock: :lol:

He leído que no es aconsejable usar el pin Reset como un puerto normal de salida ya que tendríamos que volver a programar los fuses del micro para volver a usarlo, esto es verdad? y como debo escribir la configuración de los fusibles en el programa o se hace aparte?

Hasta ahora no he querido programar el Atmega con el hex del ejemplo por temor a lo anterior.

Otra pregunta que tiene que ver con el Eclipse. lo instalé en mi portatil que tiene el mismo sistema operativo que este viejo PC,Linux Mint Sarah 64bits y lo curioso a la hora de crear un nuevo proyecto no me deja seleccionar el micro, sólo aparece la frecuencia del cristal, ya he desistalado el eclipse, reinstalado todo, los plugins y sigue igual, ya he investigado esto y parece que nadie ha podido solucionar esto, alguien sabe alguna sugerencia?

He estado leyendo el datasheet del Atmega16 y valla que es muy versatil para la época en la que salió y aún hoy en día  :mrgreen:..
Agradezco mucho sus buenos consejos y enseñanzas, una pena no haber comenzado con esta familia hace años...como me está gustando estos micros  ((:-))

Saludos
« Última modificación: 26 de Octubre de 2016, 12:54:33 por marvicdigital »

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re:Me decido por Atmel
« Respuesta #11 en: 26 de Octubre de 2016, 15:09:29 »
los fuses lo puede programar claro, el Reset si lo programa en el ISP, cuando lo vuelva a programa via ISP no te va a funcionar, yo siempre dejo el pin RESET con una Resistencia de 10K al +5v, buscate un Tutorial de AVR GCC,
Te aconsejo que use el buscador del Foro, y si la informacion esta perdida por algun link avisame y la busco o la subo, Tengo un Tutorial, pero subir a una pagina no me atrevo y hoy en dia no me gustaria hacerlo...

Saludos y nos comenta...

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re:Me decido por Atmel
« Respuesta #12 en: 26 de Octubre de 2016, 15:56:23 »
Ok Stk500, mil gracias me pongo en la tarea.

 :-)

Saludos

Desconectado Genaro Miranda

  • PIC10
  • *
  • Mensajes: 40
Re:Me decido por Atmel
« Respuesta #13 en: 26 de Octubre de 2016, 20:25:06 »
Hola!! Estuve leyendo en este tema para mi es mejor que intale studio7 estas muy buenos y es gratis en ATMEL. :-/ :-/
Para aprender y practicar el tutorial muy buenos te dejo en este link. :P
http://microcontroladores-mrelberni.com
Saludos!!

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4923
Re:Me decido por Atmel
« Respuesta #14 en: 27 de Octubre de 2016, 05:55:41 »
Ok Stk500, mil gracias me pongo en la tarea.

 :-)

Saludos

Aqui te pongo un Link en español, con el tutorial AVR GGC para Linux, aunque yo no uso Linux  ;-)
pero se' que te va a servir muchos y te saca de dudas
http://www.linuxfocus.org/Castellano/Archives/lf-2004_11-0352.pdf

Aqui te dejo un link para calcular los Fuses, asi sabra cuando le hace cambios a los Fuses y ponerlo en previo o DEFAULT..

http://www.engbedded.com/fusecalc/

Espero te sirva!!!

Saludos





 

anything