jueves, 29 de mayo de 2014

Arduino - Programar Arduino o uC AVR con Gambas

Bueno siguiendo con mi idea de realizar un IDE grafico tipo ladder o lenguaje de escaleras para arduino se me ocurrio usar gambas por el "drag and drop", o en python, pero la idea del formato va a ser simil al RS-logix5.
Para los que no conocen el ladder es un lenguaje utilizado para programar PLC industriales como Allen-Bradley, sinceramente limitado en cuanto a PID y tuning mi punto de vista, anda miles de veces mejor la libreria PID para arduino, no hay nada mejor que el C o ASM, pero el ladder al ser grafico y orientado a contactos de rele simplifica el uso, para un tecnico electrico-electronico.




 Hay otra version nueva que utiliza lenguaje funcional para el PLC-Controllogix



Buscando por la red ya algo sabia por los PIC el cual habia que realizar el codigo en ensamblador y compilarlo en un hex y quemarlo o subirlo al PIC el arduino hace algo igual el IDE ARDUINO hecho en java utiliza unas librerias en C pero termina creando un codigo en C intermedio con macros en ASM, pero con intrucciones mas heavy.

Ejemplo del blink.c optenido de la web del ingeniero balau

Lo unico modificado es el parpadeo. :) podemos usar asm en linea y vi otros codigo todo en ASM pero es muy largo y no quiero estar toda la vida programando un blink.

**************ARD_.C************************************************


 ****************************************************************************

Ahora como lo compilamos desde gambas bueno ARDUINO IDE utiliza el compilador AVR-GCC y para cargarlo usa AVR-DUDE nada mas desde la terminal seria algo asi:

sudo avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o /home/pablo/pru23/ard_.o ard_.c

sudo avr-gcc -mmcu=atmega328p /home/pablo/pru23/ard_.o -o /home/pablo/pru23/ard_
 

sudo avr-objcopy -O ihex -R.eeprom /home/pablo/pru23/ard_ /home/pablo/pru23/ard_.hex

sudo avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:/home/pablo/pru23/ard_.hex


 la explicacion de todo esto seria
avr-gcc es el compilador o sea toma el .C y genera un .O luego se ensambla hasta llegar al .HEX y con AVR-DUDE lo sube a la memoria flash.

ard_.c --> ard_.o --> ard_ -->ard_hex -->sube a la flash del atmega328P  de la familia AVR, usado en arduino uno..


******************contenido del hex*****************************
 :100000000C9434000C9451000C9451000C94510049
:100010000C9451000C9451000C9451000C9451001C
:100020000C9451000C9451000C9451000C9451000C
:100030000C9451000C9451000C9451000C945100FC
:100040000C9451000C9451000C9451000C945100EC
:100050000C9451000C9451000C9451000C945100DC
:100060000C9451000C94510011241FBECFEFD8E026
:10007000DEBFCDBF11E0A0E0B1E0E2EDF0E002C0F4
:1000800005900D92A030B107D9F711E0A0E0B1E0E2
:1000900001C01D92A030B107E1F70E9453000C94FB
:1000A00067000C940000259A20E931E02D9A80E148
:1000B00097E2F9013197F1F70197D9F72D9880E18F
:1000C00097E2F9013197F1F70197D9F7EFCFF8945B
:0200D000FFCF60
:00000001FF
 ****************************************************************
es un quilombo son direciones de memoria e instrucciones en hexadecimal pero entendible por el micro AVR, mi no entender por ahora jeje.


Foto de lo generado






en Gambas seria asi es una prueba, hay que mejorarlo muchooo, donde dice contraseña va su contraseña de ROOT para poder usar los programas.


PUBLIC SUB Form_Open()
DIM buf, res AS String

SHELL ("echo contraseña | sudo -S avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o /home/pablo/pru23/ard_.o ard_.c")
 

SHELL ("echo contraseña | sudo -S avr-gcc -mmcu=atmega328p /home/pablo/pru23/ard_.o -o /home/pablo/pru23/ard_")
 

SHELL ("echo contraseña | sudo -S avr-objcopy -O ihex -R.eeprom /home/pablo/pru23/ard_ /home/pablo/pru23/ard_.hex")

 

SHELL ("echo contraseña | sudo -S avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:/home/pablo/pru23/ard_.hex")
 

END




 y subio el codigo jeje que alegria jejeje








bueno como sigue todo esto primero mejorar la interfaz grafica, editor de codigo y sintaxis de color, armar algo como el ladder y que genere el codigo en macro asm-c.

muy buen material aun no lo leo todo :)
http://www.ladyada.net/learn/avr/programming.html
http://www.arduino.cc/en/Reference/PortManipulation
http://www.engbedded.com/fusecalc
http://www.avrfreaks.net/


Sldoss.


************************actualizacion 30-05-14*******************************
Va tomando forma :P




:)



No hay comentarios.:

Publicar un comentario