martes, 25 de agosto de 2009

Linux

Bueno despues de recetarme algunos videos en el youtube, mientras platicaba con una amiga que por cierto dice que le gusta dormir, pero leo que mintio en ese aspecto, sino no habria de estar escribiendo unas notas ni estudiando, jojojoj es broma es una buena amiga y compañera del sistema, bueno pues mientras conversaba veia tambien unos videos que me parecieron muy buenos, espero les agraden.





lunes, 24 de agosto de 2009

Zoyatlcoponi, palma que florece

El trabajo de un grupo de mujeres artesanas de Huatlatauca, estado de Puebla, México.

Kakiwin Tutunaku

Centro ecoturístico que promueve la cultura Totonaca, abierto a toda clase de grupos que quieran participar de esta experiencia. Llame para reservar y disfrutar de la gastronomía indígena, música, danza regional y de la amabilidad de las mujeres totonacas

Mujeres bordadoras y tejedoras

El trabajo de un grupo de mujeres artesanas de Chachahuantla, estado de Puebla, México.

Xochimiahuetl - Flor que florece

La flor que florece es un reportaje sobre mujeres organizadas de la Sierra del estado de Puebla, ellas fabrican y venden sus productos, sin embargo, sus productos no se desplazan tan fácilmente,vean que tan bueno es el trabajo de las mujeres poblanas

Tamachij - chihualt, hecho a mano

Esta vez, presento una serie de videos donde se ven las artesanias que hacen las mujeres que se organizan en grupos comunitarios, cada una de ellas hacen un trabajo que está de más, decir que es excelente, sin embargo mal pagado, los videos me los recomendo mi hermana, son muy interesantes, veanlos.

drawtiming | Get drawtiming at SourceForge.net


Este post es de un programa en Linux que sirve para documentar tus circuitos a través de diagramas de tiempo, que son creados en un archivo gif.

Es realmente sencillo usarlo, ya que su sintaxis es facil de aprender :D, para quienes tienen GNU/Debian o alguna derivada en mi caso Ubuntu, pues unicamente usen

#apt-get install drawtiming

para ubuntu
$sudo apt-get install drawtiming

ya que este instaldo, crea una carpeta y en tu editor de textos planos favorito, crea un archivo txt que describa el funcionamiento de tu circuito.

para correr el programa, abre una consola ubicandola en la carpeta donde este tu archivo txt, y teclea el siguiente comando.

$drawtiming --output salida.gif entrada.txt

Puedes cambiarles los nombres :D como tu gustes.

Saludos!!

drawtiming | Get drawtiming at SourceForge.net

Shared via AddThis

sábado, 22 de agosto de 2009

Por fin me organizare mas

Bueno espero que esto no sea una llamarada de petate, como se dice en la jerga publica!!. pues la razon de mi anterior comentario es por lo siguiente, ya que soy una persona muy olvidadiza, pues tengo que generalmente anotar todo lo que hago, pues bueno y como ando en estas ondas de software libre, pues me puse a averiguar de que forma podria estar mas o menos al dia en mis actividades.

Bueno pues aunque tengo evolucion como calendario, como que no me gusta mucho, ademas de que presento el problemita de que no siempre tengo la lap encendida, pues bien primero que nada me puse a buscar un buen calendario y leyendo por la red me encontre que a la mayoria de las personas les gusta thunderbird de mozilla, sin embargo como que no me llama mucho la atención, así que me puse a indagar un poco mas y encontre Sunbird, un producto símil al anterior que pertenece incluso a la Mozilla, entonces lo revise y esta muy agradeble. lo pueden revisar en esta pagina

http://www.mozilla.org/projects/calendar/sunbird/screenshot.html

para instalar .- mike@nasty$ sudo apt-get install sunbird

Sin embargo como les comentaba, pues no siempre trae uno la lap prendida, y pues muchos de como yo supongo, su bateria no sirve!, y pues necesita alimentacion externa y bien eso es todo un rollo; entonces pues el celular tambien es una buena herramienta como recordatorio, pero es muy incomodo estar tecleando todo el tiempo en el para poner tus citas.

Al igual buscando en la red, me encontre con el siguiente link

http://www.esubuntu.com/sonyericsson_desde_linux_ubuntu

Ya que mi cel es un sony, w310i, pues me parecio perfecto y baje la aplicacion llamada wammu, que me sincroniza muy bien mi celular, y me deja organizar de una forma muy rapida mi cel y toda la info que tengo en el, pues ahora con esta aplicacion puedo estar trabajando mi cel con Wammu y mis citas en la lap con Sunbird.

Pero esto de trabajar con dos calendarios no es como que muy adecuado, así que lo mejor de esto es que puedo exportar los calendarios entre ambos programas y son muy compatibles!!!

Wammu <----> Sunbird
solo que el formato a exportar debe ser el ics en ambos casos, y eso te dará muy buenos resultados, asi, en caso no tener a la mano el cel, pero tengo la lap abierta, actualizo micalendario en Sunbird, y posteriormente cuando no use la lap, solo sincronizo el calendario con wammu, y en caso de no tener la lap, pues uso el celular, y cuando use la lap por mucho tiempo como el dia de hoy, unicamente sincronizo mi Sunbird con el cel y asi tendré mi informacion mas o menos al día.

Algo importante, cuando inicias Wammu por primera vez, yo opte por una autodeteccion, ya que no soy ducho en esto de los celulares, y pues me detecto muy bien el celular indicandole que estoy en una conexion USB, posteriormente, cuando ya me detecto el celular, me pide a que velocidad se piensa comunicar, ahi, muestra las velocidades de comunicacion, como si se tratase de un simple cable serial :D y bueno yo escogi la velocidad de 19600bps, que me parecio la mas adecuada, aunque tiene velocidades superiores, no quise abusar en esta prueba.

Ahora ya puedo usar mi cel no unicamente como memoria, sino tambien puedo controlar mi cel desde ubuntu.

Detalles
SO Ubuntu 9.04
RAM 2GB
dd 160GB
uP Intel Core2 duo T4300
instalar wammu
mike@nasty$ sudo apt-get install wammu

miércoles, 19 de agosto de 2009

El secreto de shamir

Bien pues este post lo lei en Blog Hacktivista, y pues me resulto muy interesante la forma en como un password es dividido en partes, para la seguridad del mismo y siempre y cuando este pass sea muy complejo y se te olvide. Lee el post esta muy interesante

El Secreto De Shamir. - Blog Hacktivista

Por cierto una amiga que es ing en sistemas, me comento sobre la navegacion anonima, sin embargo ya no le he visto conectada, supongo que le cacharon haciendo el tunel, pero no corrio riesgo su chamba por lo que se sigue trabajando bien (y).

Bueno me comento de privoxy y de pidgin que es lo que usaba en windows, ahora estoy por probar tor bajo ubuntu 9.04, alguien se anima. Aquí esta el vínculo para verificarlo.

Tor en Juanty

tomado del blog rm -rf / :D

Curso de aprendizaje basado en competencias ITST


Bueno aqui les presento unas fotos de nuestro curso de aprendizaje basado en compentencias desde el 17 al 20 de agosto de 2009. Arriba nuestra muy amable compañera de desarrollo académico de Libres, quién nos impartió el curso.






martes, 18 de agosto de 2009

Un poco aburrido

Bueno estas notas es solo para comentar que hoy estoy un poco aburrido y cansado pues hoy encontre unos módulos para un control cnc piratas :s

Esta situación, pues no me favorece en nada ya que la tarjeta de potencia de motores a pasos de un torno cnc pequeño, sigue sin funcionar,....

que poca!

viernes, 14 de agosto de 2009

PDF a RTF

Con esto de la web 2.0 y sus cosas, podemos visualizar este blog, pero no solo nos ofrece servicios de comunicación, sino también nos ofrece múltiples servicios. Uno de ellos la siguiente página nos ofrece de forma gratuita el subir un archivo pdf, que no este encriptado ni protegido por contraseña (hasta el momento esos son los que he probado) para convertirlos a un formato editable, como lo es Formato de Texto Enriquecido, comunmente llamado RTF, que podrás abrir y editar en tu procesador de textos favorito, como Word de Microsoft o Writer de Open Office.

Les dejo el link
PDF2Word Online: Convert PDF to Word for Free

Shared via AddThis

jueves, 13 de agosto de 2009

Por fin le entendi a lo del toolchain de piklab para integracion con sdcc








Por fin!

Mensaje maigke el Sáb 8 Ago 2009 - 8:32

Bueno despues de dejar esto de la integracion de piklab con el pickit2 y sdcc que tengo en casa Very Happy, pues ya despues de releer un buen Idea y bien debido a que soy lenton, pues ya comprendí!!

Lo unico que hize despues de volver sobre mis pasos, y encontrarme con los mismos problemas de hace un tiempo, decidí, reiniciar todo de nuevo. y lo único que agregue en Proyecto- Oopciones de Proyecto -- Toolchain --- Linker -- Camiarlo a personalizado, afortunadamente me quedaba con las opciones por defecto, bueno pues me coloque sobre la línea de texto y agregue la línea

libc18f.lib

y presione el boton de Add.

esto me dio el siguiente resultado!

sdcc -mpic16 -p18f2550 -V --debug -I/home/mike/PIC/reloj_test/ -c reloj.c
+ "/usr/bin/sdcpp" -nostdinc -Wall -std=c99 -I"/home/mike/PIC/reloj_test/" -Dpic18f2550 -D__18f2550 -DSTACK_MODEL_SMALL -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=280 -DSDCC_REVISION=5117 -DSDCC_pic16 -D__pic16 -I"/usr/bin/../share/sdcc/include/pic16" -I"/usr/share/sdcc/include/pic16" -I"/home/mike/PIC/reloj_test/" "reloj.c"
sdcc -mpic16 -p18f2550 -V --debug -Wl-c -Wl-m -I/home/mike/PIC/reloj_test/ -oreloj.hex reloj.o libc18f.lib
using default linker script "/usr/share/gputils/lkr/18f2550.lkr"
+ "/usr/bin/gplink" -I"/usr/bin/../share/sdcc/lib/pic16" -I"/usr/share/sdcc/lib/pic16" -c -m -w -r -o reloj.hex reloj.o crt0i.o libc18f.lib pic18f2550.lib libsdcc.lib
*** Éxito ***
Parsing COFF file: /home/mike/PIC/reloj_test/reloj.cof
Device name: "18F2550"

Otro error que habia cometido, es que en la parte izquierda en la barra de proyecto, agregue el codigo objeto generado cuando unicamente compile el archivo, en este caso se llama reloj.o.

Muchas gracias espero que a alguien mas le sea de ayuda

sunny

Ahora seguiremos con las lecturas de los demas post para el echar a andar el pickit2 en piklab

***************************************************************************************************************
Gracias a todos ya he podido hechar a andar mi programador pickit2 con piklab!!
programando en sdcc, bueno pues que sucedia, no tenia los devs del la libreria libusb, por eso mismo tenia problemas para instalar el pk2cmd
Hecho eso, de acuerdo a Risanti http://pic-linux.foroactivo.net/piklab-f3/pickit-2-firmware-1x-en-piklab-t87.htm?highlight=piklab , tenia que solo hacer un
$sudo make install, y bueno de cualquier forma modifique las variables de ambiente en el .bashrc, aunque creo que esta demas.
al igual, como indica Risanti,
Risanti escribió:Hola a todos..

Lo siguiente es cambiar el firmware del pickit 2 para lo cual podemos descargar las distintas versiones desde
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1960

además con el comando pk2cmd -d PK2V012000.hex 'actualizamos firmware tiene que ser 1.20
En piklab configuramos el programador FIRMWARE PICKIT 2 1.X .....comprobamos la conexion que este correcto.. y listo


Aunque
la he probado con algunos pic funciona bien.. no se si sera un problema
de la version 1.20 del pickit pero no puedo programar pic 16F88. pero
otros los pogramos sin problemas...

Para programar 16F88 estoy usando pickit con version 2.32 conjuntamente con pikdev http://pic-linux.foroactivo.net/otros-f19/pickit-2-trabajando-pikdev-v-110-t86.htm#199



Atte.
Risanti

Mis resultados obtenidos ya por el piklab fueron estos

Conectando Firmware PICkit2 1.x en Puerto USB con el dispositivo 18F2550...
Versión de firmware es 1.20.0
set Vdd = 5 V and Vpp = 12 V
Establecer destino auto alimentado: false
Target Vdd = 4.99519 V
Target Vpp = 11.924 V
Conectado.
Enter normal mode
Already in requested mode.
Id leída: 18F2550 (rev. 5)
Programando memoria de dispositivo...
protected: code=false data=false
Borrando dispositivo
Escribir memoria: Memoria de código
start=0x000000 nbWords=0x004000 total=0x004000 force=false varOffset=false varSize=false
Verificar memoria: Memoria de código
start=0x000000 nbWords=0x004000 total=0x004000 force=false varOffset=false varSize=false
Escribir memoria: Datos EEPROM
Verificar memoria: Datos EEPROM
Escribir memoria: User IDs
Verificar memoria: User IDs
Escribir memoria: Bits de configuración
Verificar memoria: Bits de configuración
Programación exitosa.

maigke
Participante
Participante

Cantidad de envíos: 24
Fecha de inscripción: 12/04/2009
Edad: 31
Localización: Mexico


Volver arriba

comandos pk2cmd para programar pics desde linux

Respuesta enviada por el compañero Arcachofo
***************************************************************************************
Hay algo que no entiendo, y es por que hay que poner un 1 como argumento de la funcion del 1000 ciclos de retardo???

Hay varias funciones de delay, delay1ktcy(); es 1kilociclos, osea 1000 ciclos, pero hay otras, creo que 1tcy es un ciclo, 10tcy 10 ciclos y así, aunque nosé si estas que he mencionado existen, pero la lógica es esa.

Respecto a los comandos de pk2cmd para "custom programmer" en Piklab, partimos de la base de que tienes pk2cmd instalado y funcionando; los comandos son estos:

Read:
pk2cmd -P -GFtemp.hex

Erase:
pk2cmd -P -E

Program:
pk2cmd -P -M -Fnombre_archivo.hex

Verify:
pk2cmd -P -Y -Fnombre_archivo.hex

Blank:
pk2cmd -P -C

Run:
pk2cmd -P -W -R

Stop:
pk2cmd -P

Donde pone "nombre_archivo.hex" hay que poner el nombre del archivo a grabar o verificar, y esto es un problema, porque hay que cambiarlo cada vez que se graba o verifica un archivo distinto, no he encontrado la manera de automatizar esto, las variables de Piklab tipo: %I no funcionan...
Esto es un problema... si alguien sabe como solucionarlo que lo comparta porfavor.. Smile

Saludos.

Respuestas a la duda del toolchain de sdcc por pikitin

bueno aqui la respuesta que nos dejo el buen amigo Arcachofo
**************************************************************************************
Hola maigke... bienvenido al foro y gracias por participar... Smile

El problema que tienes con los delay creo que es más sencillo... bueno, el tema de incluir la librería en el linker hay que hacerlo, pero fíjate que el fallo te lo dá en el primer paso... ni siquiera ha llegado al linker.
Creo que estás usando un nombre de función que no existe:

delay1kcy();

Yo diría que el nombre correcto es este:

****Jojojojojojo Aqui me equivoque por no leer bien!*******
delay1ktcy();

No estoy seguro 100%, pero creo que por ahí va la cosa.

Respecto al Pickit2 hay un problema con Piklab y es que Las últimas versiones del firmware no están soportadas por Piklab:
La versión de firmware (2.32.0) es más alta que la versión probada con Piklab (2.10.0). Podría experimentar problemas.


Esto se puede solucionar cargando en el Pickit2 una versión soportada por Piklab o bién usar la posiblidad del Piklab 0.15.4 de añadir un programador personalizado, solo tienes que poner las lineas de comando del pk2cmd en las casillas correspondientes y mandar a grabar con este programador.
Avisa si necesitas ayuda con los comandos para pk2cmd.

Saludos y suerte con tus proyectos.

Duda al modificar el toolchain de sdcc

Este es otro post que coloque en el Foro activo de herramientas Linux para programacion de PICS
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Saludos a toda la comunidad, me presento y agradezco de antemano los esfuerzos que son realizados por la comunidad para manejar micros desde totalmente S.L. bounce

Bien mi duda es la siguiente, estoy comenzando a trabajar con un PIC18F2550, con piklab y un programador Pickit2, pues bien la comunicación entre el piklab y el pickit2 esta muy bien y reconoce y lee muy bien el micro que tengo, ahora bien, leyendo en el foro, me encontre con el caso siguiente


Problema con la libreria delay en los 18F


Fernan el Vie 9 Ene 2009 - 19:38Si uso la libreria Include con el 18f4520 :
#include "pic18f4520.h"
#include "delay.h"

// initialize board
void init_board(void) {
ADCON1=0x7; // PORTA used for digital I/O
TRISBbits.TRISB0=0; // configure PORTB0 for output (right LED)
TRISBbits.TRISB1=0; // configure PORTB1 for output (right LED) ....




bien vi que habia un problema con la libreria libc18f.lib, el compañero arcachofo le recomendo lo siguiente


De todas formas fíjate en la linea de ejecución del linker.. creo que
los delays estan en libc18f.lib, si no aparece quizás tengas que
añadirla para que la incluya, para esto en: opciones del proyento -
toolchain -linker, tendrías que añadir una linea para que incluya
libc18f.lib



Bien pues entre ahi, y en efecto, el toolchain del linker permite dos opciones una automatica, la cual permite añadir carpetas y una que es personalizada; en el caso de la personalizada la linea de comandos del piklab me pone la siguiente línea


-m%FAMILY -%DEVICE -V --debug -Wl-c -Wl-m $LKR(-Wl-s%LKR) -I$(SRCPATH) -o%O %OBJS %LIBS



de lo que vi en la ayuda, los parametros que se pasan son la familia, el dispositivo a usar, el linker a usar, incluir el lugar del codigo fuente dar las salidas, los archivos objeto y las librerias extras Rolling Eyes

Sin embargo al dar clik en Construir- compilar archivo lo que obtengo es lo siguiente


sdcc -mpic16 -p18f2550 -V --debug -I/home/mike/PIC/reloj_test/ -c reloj.c
reloj.asm:20: error: Symbol not previously defined (_delay1kcy).
reloj.asm:311: error: Symbol not previously defined (_delay1kcy).
reloj.asm:311: error: Symbol not previously defined (_delay1kcy).

+ "/usr/bin/sdcpp" -nostdinc -Wall -std=c99 -I"/home/mike/PIC/reloj_test/" -Dpic18f2550 -D__18f2550 -DSTACK_MODEL_SMALL -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=280 -DSDCC_REVISION=5117 -DSDCC_pic16 -D__pic16 -I"/usr/bin/../share/sdcc/include/pic16" -I"/usr/share/sdcc/include/pic16" -I"/home/mike/PIC/reloj_test/" "reloj.c"
reloj.c:41: warning 112: function 'delay1kcy' implicit declaration
reloj.c:41: warning 84: 'auto' variable 'delay1kcy' may be used before initialization
reloj.c:41: warning 84: 'auto' variable 'delay1kcy' may be used before initialization

+ "/usr/bin/gpasm" -DSDCC_MODEL_SMALL -Dpic18f2550 -D__18F2550 -DSTACK_MODEL_SMALL -g -c "reloj.asm" -o "reloj.o"
+ "/usr/bin/gpasm" -DSDCC_MODEL_SMALL -Dpic18f2550 -D__18F2550 -DSTACK_MODEL_SMALL -g -c "reloj.asm" -o "reloj.o" returned errorcode 256

*** Salida con estado: 1 ***

confused confused confused confused confused

segui leyendo el hilo y pues vi que habria que integrar en la linea de comando del toolchain a la libreria a utilizar, de acuerdo a arcahofo y continuando con la lectura, nuestro compañero Fernan logro echar a funcionar su programa, y ya que ellos modificaron el toolchain, pues fui de nuevo a las opciones de proyecto del piklab y esta vez elegí la opción personalizada para el toolchain.


"/usr/bin/gplink" -I"/usr/bin/../share/sdcc/lib/pic16"
-I"/usr/share/sdcc/lib/pic16" -c -m -w -r -o led.hex led.o crt0i.o
libc18f.lib pic18f4520.lib libsdcc.lib



modificandola por esta, que no se si este bien, bueno de hecho no esta bien por que los resultados obtenidos al construir el proyecto, no fueron satisfactorios Sad


"/usr/bin/gplink" -I"/usr/bin/../share/sdcc/lib/pic16"
-I"/usr/share/sdcc/lib/pic16" -c -m -w -r -o%O %OBJS
libc18f.lib pic18f2550.lib libsdcc.lib



Sin embargo el resultado que obtengo es el mismo



sdcc -mpic16 -p18f2550 -V --debug -I/home/mike/PIC/reloj_test/ -c reloj.c
reloj.c:41: warning 112: function 'delay1kcy' implicit declaration
reloj.c:41: warning 84: 'auto' variable 'delay1kcy' may be used before initialization
reloj.c:41: warning 84: 'auto' variable 'delay1kcy' may be used before initialization
reloj.asm:20: error: Symbol not previously defined (_delay1kcy).
reloj.asm:311: error: Symbol not previously defined (_delay1kcy).
reloj.asm:311: error: Symbol not previously defined (_delay1kcy).

+ "/usr/bin/sdcpp" -nostdinc -Wall -std=c99 -I"/home/mike/PIC/reloj_test/" -Dpic18f2550 -D__18f2550 -DSTACK_MODEL_SMALL -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=280 -DSDCC_REVISION=5117 -DSDCC_pic16 -D__pic16 -I"/usr/bin/../share/sdcc/include/pic16" -I"/usr/share/sdcc/include/pic16" -I"/home/mike/PIC/reloj_test/" "reloj.c"
+ "/usr/bin/gpasm" -DSDCC_MODEL_SMALL -Dpic18f2550 -D__18F2550 -DSTACK_MODEL_SMALL -g -c "reloj.asm" -o "reloj.o"
+ "/usr/bin/gpasm" -DSDCC_MODEL_SMALL -Dpic18f2550 -D__18F2550 -DSTACK_MODEL_SMALL -g -c "reloj.asm" -o "reloj.o" returned errorcode 256

*** Salida con estado: 1 ***



Bien el sistema que tengo actualmente es ubuntu 9.04, el piklab que tengo es 0.15.4, es sdcc es el que viene por defecto en ubuntu
sdcc -v
SDCC : avr/pic16/pic14/xa51 2.8.0 #5117 (Jun 2 2008) (UNIX)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Saludos, bien pues siguiendo con esto, Very Happy segui con la investigación, y aún no me es posible echar a andar el problema que tengo, sin embargo en la red me encontre la siguiente pagina,AQUI y en esta da una explicacion buena sobre sdcc y propone un ejemplo sencillo para un PIC18F452, y bueno supongo que ya tiene mucho tiempo, puesto que hace un uso de la captura de un archivo ctr0.o y luego hay que implementar un make file, esta paso a paso. pero bueno, el caso es que probe este código para el micro que estoy usando y quedo el código de la siguiente manera
Código:

//hello.c
// fuente: http://www.freenet.org.nz/sdcc/
//
// Este es un pequeño programa que parpadea un led

//Configuracion
//-----------------------------
//Cambia si tienes otro pin diferente a RA1
#include
#ifndef LED_TRIS
#define LED_TRIS TRISAbits.TRISA1
#endif

#ifndef LED_PIN
#define LED_PIN LATAbits.LATA1
#endif

//El siguiente include, jala a los correctos registros
//del archivo de definiciones

#include

//-------------------------------
//Una función de retardo simple

void delay_ms(long ms){
long i;
while(ms--){
for(i=0;i<330;i++)
;
}
}

//Nuestro punto de entrada
void main(void){
//poniendo como salida
ADCON1=0x07; // El puerto A se usa como I/O digital
LED_TRIS =0;
//generando un loop infinito
for(;;){
LED_PIN=0;
delay_ms(250);
LED_PIN=1;
delay_ms(250);
}
}


Lo curioso es que deje las opciones que por defecto trae el piklab y pues lo compilo bien Very Happy Very Happy cheers

sdcc -mpic16 -p18f2550 -V --debug -I/home/mike/PIC/hola_mundo/ -c led.c
+ "/usr/bin/sdcpp" -nostdinc -Wall -std=c99 -I"/home/mike/PIC/hola_mundo/" -Dpic18f2550 -D__18f2550 -DSTACK_MODEL_SMALL -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=280 -DSDCC_REVISION=5117 -DSDCC_pic16 -D__pic16 -I"/usr/bin/../share/sdcc/include/pic16" -I"/usr/share/sdcc/include/pic16" -I"/home/mike/PIC/hola_mundo/" "led.c"
sdcc -mpic16 -p18f2550 -V --debug -Wl-c -Wl-m -I/home/mike/PIC/hola_mundo/ -ohola_mundo.hex led.o
using default linker script "/usr/share/gputils/lkr/18f2550.lkr"
+ "/usr/bin/gplink" -I"/usr/bin/../share/sdcc/lib/pic16" -I"/usr/share/sdcc/lib/pic16" -c -m -w -r -o hola_mundo.hex led.o crt0i.o pic18f2550.lib libsdcc.lib
*** Éxito ***
Parsing COFF file: /home/mike/PIC/hola_mundo/hola_mundo.cof
Device name: "18F2550"

ahora estoy en las pruebas de quemado y probar este pic albino

Bueno en esta etapa, ya no se tuvo éxito Crying or Very sad Crying or Very sad

Conectando Firmware PICkit2 2.x en Puerto USB con el dispositivo 18F2550...
Versión de firmware es 2.32.0
La versión de firmware (2.32.0) es más alta que la versión probada con Piklab (2.10.0). Podría experimentar problemas.
Read id for family 16X: 0x0
Read id for family 18F: 0x1246
Id leída: 18F2550 (rev. 6)
Establecer destino auto alimentado: true
Target Vdd = 4.99512 V
Target Vpp = 7.1042 V
Conectado.
Enter normal mode
Already in requested mode.
Programando memoria de dispositivo...
protected: code=false data=false
Borrando dispositivo
Escribir memoria: Memoria de código
start=0x000000 nbWords=0x004000 total=0x004000 force=false varOffset=false varSize=false
Verificar memoria: Memoria de código
start=0x000000 nbWords=0x004000 total=0x004000 force=false varOffset=false varSize=false
Memoria de dispositivo no coincide con archivo hex (en Memoria de código en dirección 0x000000: leído 0x000E esperando 0xEFE6).

martes, 11 de agosto de 2009

Tengo un nuevo escritorio!!

Bueno hace unos minutos me puse a toquetear un poco mi Linux, y pues como resultado obtuve esto :D



Linux Ubuntu 9.10 Intel Core2 Duo T5300 1.73GHz, 2GB RAM
Manejador de Temas Emerald
Laptop Gateway

domingo, 9 de agosto de 2009

Reduccion EMI en distribuciones de Reloj (Sistemas Digitales TI)

Este video explica de una manera muy buena como reducimos la interferencia Electromagnetica que es generada en un sistema de distribucion de señales de reloj

Resumen:
1.- Reducción de la amplitud de la señal
2.- Frenando los tiempo de subida/bajada de la señal de reloj
3.- Utilizando una señal de ruteo diferencial
4.- Realizando buenas técnicas para la construcción del Layout

Lin Wu
Gerente de Marketing de productos de Temporizado

sábado, 8 de agosto de 2009

Agradecimiento

Bueno esta entrada es para agradecer a toda la comunidad, ya que gracias a ellos, hemos aprendido mucho, han habido muchos topes de cabeza, lo seguirá habiendo, pero lo importante es no dejarse vencer, entre los foros qu quiero agradecer es a

PIC LINUX foro de debate y recursos compartidos
Foro TODO PICS
UCONTROL
JVMBOTS
Ubuntulife
GNUEletronica
El blog de Maverick
MicroPIC
Taringa (O_O)!!!

y a mis alumnos, que me han forjado a superarme cada día mas, para no caer en el obsoletismo
GRACIAS MIL!!!!


RS232 GAMBAS PIC prueba

Probando el ejemplo que trae GAMBAS

Bien, como sabran, gambas trae un ejemplo base Smile (de hecho a mi se me hizo muy completo!!), del manejo del puerto serial, para esto, probe la tarjeta que mostre en el anterior post, pero ya con la maquina.

Antes que nada el ejemplo si lo instalas en ubuntu, lo vas a encontrar en la siguiente ruta

/usr/share/gambas2/examples/Networking/SerialPort

copia esta carpeta a lugar donde desees de tu home, esto hace que al colocarla en otro lugar, ahora esta carpeta, junto con su contenido te pertenezcan alien

bueno, ahora aqui tuve un gran problema. probe mi tarjeta con la aplicacion minicom, y pues funciona perfecto, con cada caracter que recibe el micro, este modifica el ancho de pulso del servo que esta controlando, por lo tanto su posicion.

Sin embargo al trabajar con el ejemplo que trae gambas, pues nada que me reconocia el caracter, y es que en el programa del micro que tengo, pasa lo siguiente

*lee el caracter desde el buffer del puerto serial
* lo convierte a mayuscula
* usa switch y case para definir como va a tratar al dato recien llegado
* genera las interrupciones adecuadas para modificar el ancho del pulso
Código:

do{

if(comando!='\0')

{ //solo entra aqui si comando es diferente a nulo

//comando = toupper(comando);

ComandoValido=0;

printf("%c\r\n",comando);

//delay_ms(1000);

switch(comando){
case '1':{

printf("> S_1 +\r\n");

Servo_PWM[0]+=20;

ComandoValido=1;

}break;

case 'A':{

printf("> S_1 -\r\n");

Servo_PWM[0]-=20;

ComandoValido=1;

}break;

case '2':{

printf("> S_2 +\r\n");

Servo_PWM[1]+=20;

ComandoValido=1;

}break;

case 'B':{

printf("> S_2 -\r\n");

Servo_PWM[1]-=20;

ComandoValido=1;

}break;
default:{

printf("<%c>no se encontro \n",comando);

ComandoValido=0;

disable_interrupts(int_rda);

delay_ms(10);

enable_interrupts(int_rda);

//delay_ms(10);

}break;

}

if(ComandoValido==0) {

if(comando== '\0'){printf("EOL\n");}

else

printf("*%c \n",comando); }

comando='\0';

//delay_ms(1);

}

//delay_ms(50);

}while(1);

imprimiendo entre cada etapa, ahora, pasa algo extraño Question , el caracter recibido, si me lo imprimia, pero no me lo reconocía, es como si lo borrara. bueno anduve de arriba para abajo con esto.

Sin embargo no me di cuenta de algo!!, despues de unas horas Embarassed , que el problema no era tanto el codigo del micro, si no mas bien el codigo de gambas, ya que en una parte hace lo siguiente
Código:

PUBLIC SUB Button2_Click()

IF Sport.Status = Net.Inactive THEN
Message("Open port first!")
ELSE
'Cuando damos clic al boton 2, lee el texto que hay en txtSend y lo manda por el flujo Sport
' Pero ademas de eso envia dos caracteres mas, un Retorno de Carro y Alimentacion de Línea
'Esto me daba en la torre (T_T)
PRINT #Sport, txtSend.Text; Chr$(13); Chr$(10);
END IF

END


En efecto, ahora como pude evitar eso, pues la forma mas sencilla y más rapida que se me ocurrio fue la siguiente.

Si el primer caracter me lo detecta, pero tambien el segundo y hace lo que quiere la tarjeta
Pues entonces, mandale 2 caracteres iguales!!!, pero ambos deben ser mayusculas!!, ya que el programa únicamente
recibe el primer dato, y lo transforma, pero aun no averiguo que diablos le hace al segundo, ya que este ultimo mencionado
es el que acepta. affraid
Bueno aqui les coloco unas imagenes y un video, espero sea de su agrado, algo que se me hizo interesante, deje funcionando la aplicacion un buen de horas y con todo conectado y nunca se trabo, o tuve que cerrar el puerto o abrirlo




Pikitin, la funcion de lectura es la siguiente:

Código:

PUBLIC SUB SPort_Read()
DIM s AS String 'Variable donde se almacena lo recibido por el buffer
READ #Sport, s, Lof(Sport) 'Leer el stream del puerto, almacenarlo en s y medir su tamaño
TextArea1.Text = TextArea1.Text & s 'manda el texto recibido por el puerto paralelo a un textArea
END

Funcionamiento de la tarjeta controladora de servos

Saludos de nuevo, aqui como siempre de noctambulo Cool

Bueno le he avanzado un poco al tema, y bueno espero que les gusten los avances,

He probado el funcionamiento de la tarjetita, por el momento en esta prueba no le meti nada por el puerto serial, unicamente es la tarjeta alimentada, y la estamos monitoreando a través de un osciloscopio de dos canales,

bueno pero menos palabras y mas imagenes
Circuito Funcionando
Dos canales cercanos en la tarjeta

La dos señales mas alejadas.

Rediseño de la interfaz

Saludos a todos!!, de nuevo por aqui en el foro, ya hace tiempo que no me paraba por aqui, puesto que ando con un buen de chamba, bueno

Ahora las actualizaciones.

Debido a que la tarjeta controladora de los servos, para mover cada servo utiliza un caracter, cada caracter que recibe por el puerto serie del micro, hace que el servo se mueva un grado.

Pues bien, rediseñe (mas bien hice un poco mas fea Razz ) la interfaz, para cuestiones de prueba, bueno, pues los sliders ahora van de 0 a 180 junto con los spinners, almacena la posicion y no deja que se graben mas de dos posiciones, una a la que llamo posicion final del servo y otra posicion inicial, bueno ahora lo interesante es que mueva cada servo por "pasos" de un grado, pues el problema que se plantea es el siguiente

Si un servo esta en la posición de 30° por ejemplo, y lo queremos mover a una posicion de 150°, moveriamos el slider correspondiente de la posicion 30 a 150 (o bien tambien se puede hacer con el spinner) ahora la tarjeta tendria que recibir un caracter por cada grado, es decir la simple resta entre el valor inicial y el valor final, pero si queremos que ahora se mueva de 150° a 120° entonces ahora notamos que la diferencia es negativa, bueno ¿cómo arreglamos esto? hacemos uso del valor absoluto!, con la instruccion abs(argumento) obtenemos el valor absoluto de la diferencia.

Otro detalle, pero que es mas simple, es lo siguiente, si el movimiento del servo es en el sentido positivo, pues debera enviar un numero, y si es negativo deberá enviar una letra, bueno esa parte es sencilla, solo con un if, bueno aqui presento el codigo de la parte que menciono.

Código:

vfin5 = sldServo5.Value
tempo = 0
tempo = Abs(vfin5 - vini5)
IF (vfin5 - vini5) < 0
lblpossld_5.Text = ("Manda letras " & tempo & " a")
ELSE
lblpossld_5.Text = ("Manda numeros " & tempo & " 1")
ENDIF
vini5 = vfin5


ya comenze a entender el funcionamiento de las librerias del puerto serial en gambas, y la neta esta muy bueno!, espero pronto publicar mas avances con este tema.

Coloco a continuacion el codigo que he generado, disculpen las faltas al programar, pero ya queria avanzar y asi se me hizo muy rapido, sin uso de funciones.




Código:


' Gambas class file
'http://www.alcancelibre.org/staticpages/index.php/introduccion-a-gambas-datos-variables

PUBLIC flag AS Boolean = FALSE ' variable global para meter datos en los labels
PUBLIC flag2 AS Boolean = FALSE
'Vaiables para saber cuantos pasos hubo de diferencia entre la posicion actual y la previa
PUBLIC vini1 AS Integer
PUBLIC vfin1 AS Integer
PUBLIC vini2 AS Integer
PUBLIC vfin2 AS Integer
PUBLIC vini3 AS Integer
PUBLIC vfin3 AS Integer
PUBLIC vini4 AS Integer
PUBLIC vfin4 AS Integer
PUBLIC vini5 AS Integer
PUBLIC vfin5 AS Integer

'Variable temporal para realizar los calculos, este valor será usado para enviar los
'caracteres por el puerto serial
PRIVATE tempo AS Integer



PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()
DIM flag AS Boolean = FALSE
vini1 = 0 'Damos un valor inicial = 0 con este numero inicia el sld
vini2 = 0
vini3 = 0
vini4 = 0
vini5 = 0




END

PUBLIC SUB Button2_Click()

ME.Close

END

PUBLIC SUB sldServo1_Change()
spnServo1.Value = sldServo1.Value
vfin1 = sldServo1.Value
tempo = 0
tempo = Abs(vfin1 - vini1)
IF (vfin1 - vini1) < 0
lblpossld_1.Text = ("Manda letras " & tempo & " a")
ELSE
lblpossld_1.Text = ("Manda numeros " & tempo & " 1")
ENDIF
vini1 = vfin1
END

PUBLIC SUB btnSalir_Click()

ME.Close()

END

PUBLIC SUB btnGraba_Click() ' graba las posiciones de los servos



IF flag = FALSE AND flag2 = FALSE THEN
lblS1a.Text = lblS1a.text & " " & spnServo1.Value
lblS2a.Text = lblS2a.text & " " & spnServo2.Value
lblS3a.Text = lblS3a.Text & " " & spnServo3.Value
lblS4a.Text = lblS4a.Text & " " & spnServo4.Value
lblS5a.Text = lblS5a.Text & " " & spnServo5.Value
flag = TRUE
ELSE IF flag = TRUE AND flag2 = FALSE
lblS1b.Text = lblS1b.Text & " " & spnServo1.Value
lblS2b.Text = lblS2b.Text & " " & spnServo2.Value
lblS3b.Text = lblS3b.Text & " " & spnServo3.Value
lblS4b.Text = lblS4b.Text & " " & spnServo4.Value
lblS5b.Text = lblS5b.Text & " " & spnServo5.Value
flag2 = TRUE
ELSE
Message.Warning("No puedes grabar mas de dos posiciones pulsa LIMPIAR")
END IF
END

PUBLIC SUB sldServo2_Change()

spnServo2.Value = sldServo2.Value
vfin2 = sldServo2.Value
tempo = 0
tempo = Abs(vfin2 - vini2)
IF (vfin2 - vini2) < 0
lblpossld_2.Text = ("Manda letras " & tempo & " a")
ELSE
lblpossld_2.Text = ("Manda numeros " & tempo & " 1")
ENDIF
vini2 = vfin2

END

PUBLIC SUB sldServo3_Change()

spnServo3.Value = sldServo3.Value
vfin3 = sldServo3.Value
tempo = 0
tempo = Abs(vfin3 - vini3)
IF (vfin3 - vini3) < 0
lblpossld_3.Text = ("Manda letras " & tempo & " a")
ELSE
lblpossld_3.Text = ("Manda numeros " & tempo & " 1")
ENDIF
vini3 = vfin3

END

PUBLIC SUB sldServo4_Change()

spnServo4.Value = sldServo4.Value
vfin4 = sldServo4.Value
tempo = 0
tempo = Abs(vfin4 - vini4)
IF (vfin4 - vini4) < 0
lblpossld_4.Text = ("Manda letras " & tempo & " a")
ELSE
lblpossld_4.Text = ("Manda numeros " & tempo & " 1")
ENDIF
vini4 = vfin4

END

PUBLIC SUB sldServo5_Change()

spnServo5.Value = sldServo5.Value
vfin5 = sldServo5.Value
tempo = 0
tempo = Abs(vfin5 - vini5)
IF (vfin5 - vini5) < 0
lblpossld_5.Text = ("Manda letras " & tempo & " a")
ELSE
lblpossld_5.Text = ("Manda numeros " & tempo & " 1")
ENDIF
vini5 = vfin5

END

PUBLIC SUB btnLimpia_Click() 'este boton pone en falso la flag para iniciar una nueva grabacion de posiciones

flag = FALSE
flag2 = FALSE
lblS1a.Text = "Pos="
lblS1b.Text = "Pos="
lblS2a.Text = "Pos="
lblS2b.Text = "Pos="
lblS3a.Text = "Pos="
lblS3b.Text = "Pos="
lblS4a.Text = "Pos="
lblS4b.Text = "Pos="
lblS5a.Text = "Pos="
lblS5b.Text = "Pos="

END

PUBLIC SUB spnServo1_Change()

sldServo1.value = spnServo1.Value

END

PUBLIC SUB spnServo2_Change()

sldServo2.Value = spnServo2.Value

END

PUBLIC SUB spnServo3_Change()

sldServo3.Value = spnServo3.Value

END

PUBLIC SUB spnServo4_Change()

sldServo4.Value = spnServo4.Value


END

PUBLIC SUB spnServo5_Change()

sldServo5.Value = spnServo5.Value

END


PUBLIC SUB lblpossld_1_MouseDown()




END

PUBLIC SUB radioCierraPuerto_Click()

IF SerialPort1.Status = Net.Active THEN
CLOSE SerialPort1
Message.Info("El puerto ha sido cerrado")
ELSE
Message.Info("El puerto no ha sido abierto")
ENDIF

END

PUBLIC SUB radioAbrePuerto_Click()

IF SerialPort1.Status = Net.Active THEN
Message.Info("El puerto ya esta abierto")
ELSE
Message.Info("Abriendo el puerto")
ENDIF

END

PUBLIC SUB ToolButton1_Click()

IF radioCierraPuerto.Value = TRUE
Message.Info("Da clic en la opcion abre el puerto")
ELSE
'Aqui viene lo de la apertura del puerto serial
'tomando los valores seleccionados de los combo box
'Me base en el ejemplo que trae la documentacion de gambas

Message.Info("Abriendo el puerto serial NOW!")
ENDIF

END




tambien les coloco una foto de la nueva placa que armamos y un juego de engranes donde esta acoplado uno de los servos a controlar, esa parte no la hago yo, pero esta quedando muy cool:!:

[img=]

[img=]
Por cierto, debido a que se usa un gusano sinfin, y una corona, el servo no podrá mover un amplitud grande al eje principal, por lo que se ha optado por la siguiente solución, quitarle el freno mecanico del servo, y adaptar con un engranaje con igual relacion, al eje principal el potenciometro del servo, de esta forma, el servo queda libre de giro, pero el sensado, será en el eje principal, por lu cual, digamos que se hace una extension de la caja de engranes del propio servo a la que se ve en la fotografia.

Cabe aclarar que yo no soy quien diseña la parte mecánica, sino es mi compañero ruben, aquien le agradezco su trabajo y que ademas trabaja muy bien con el torno y la fresa.

Dejenme sus comentarios, espero no desorientarlos tanto, y pues en el caso de las partes mecanicas, pues lo poco que se, con gusto se los comparto, pero si tienen preguntas un poco mas avanzadas, pues le preguntaré a Ruben y les dire bounce

Gambas manejo de spinbox Sliders y labels

Bueno después de darle un poquito al código tengo el siguiente resultado
Se agregó un botón extra que se llama limpia para borrar después de grabar la posición inicial como final en las etiquetas, después serán las de los servos Very Happy
Ademas fueron usadas dos variables globales Laughing que denominé flag y flag2 para el control de envio de datos a los labels que contienen la informacion de posicion inicial y de posicion final, y que no grabara mas de dos posiciones; si el usuario intenta grabar mas de dos posiciones, aparecerá una ventana de advertencia que debe ser presionado el botón de Limpiar si se desean grabar mas posiciones.

En la imagen se verá un pantallazo del como quedó el programa!! cyclops
Aún le falta un boton más para que envié los datos "almacenados" al microcontrolador Idea
Se me olvidaba, si modifico el valor del spinner no se mueve aún el slider correspondiente eso ya lo haré al ratin Sleep , pero si se guarda en los labels la posicion del spinbox!! Twisted Evil
Así como configurar el puerto serial entre otras cosas!!, espero sus comentarios para ir mejorando este pequeño proyecto, gracias! por los comentarios de los listeros



cheers cheers cheers cheers cheers


aqui les presento el código que se implemento!
Código:

' Gambas class file
PUBLIC flag AS Boolean = FALSE ' variable global para meter datos en los labels
PUBLIC flag2 AS Boolean = FALSE

PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()
DIM flag AS Boolean = FALSE
END

PUBLIC SUB Button2_Click()

ME.Close

END

PUBLIC SUB sldServo1_Change()

spnServo1.Value = sldServo1.Value

END

PUBLIC SUB btnSalir_Click()

ME.Close()

END

PUBLIC SUB btnGraba_Click() ' graba las posiciones de los servos



IF flag = FALSE AND flag2 = FALSE THEN
lblS1a.Text = lblS1a.text & " " & spnServo1.Value
lblS2a.Text = lblS2a.text & " " & spnServo2.Value
lblS3a.Text = lblS3a.Text & " " & spnServo3.Value
lblS4a.Text = lblS4a.Text & " " & spnServo4.Value
lblS5a.Text = lblS5a.Text & " " & spnServo5.Value
flag = TRUE
ELSE IF flag = TRUE AND flag2 = FALSE
lblS1b.Text = lblS1b.Text & " " & spnServo1.Value
lblS2b.Text = lblS2b.Text & " " & spnServo2.Value
lblS3b.Text = lblS3b.Text & " " & spnServo3.Value
lblS4b.Text = lblS4b.Text & " " & spnServo4.Value
lblS5b.Text = lblS5b.Text & " " & spnServo5.Value
flag2 = TRUE
ELSE
Message.Warning("No puedes grabar mas de dos posiciones pulsa LIMPIAR")
END IF
END

PUBLIC SUB sldServo2_Change()

spnServo2.Value = sldServo2.Value

END

PUBLIC SUB sldServo3_Change()

spnServo3.Value = sldServo3.Value

END

PUBLIC SUB sldServo4_Change()

spnServo4.Value = sldServo4.Value

END

PUBLIC SUB sldServo5_Change()

spnServo5.Value = sldServo5.Value

END

PUBLIC SUB btnLimpia_Click() 'este boton pone en falso la flag para iniciar una nueva grabacion de posiciones

flag = FALSE
flag2 = FALSE
lblS1a.Text = "Pos="
lblS1b.Text = "Pos="
lblS2a.Text = "Pos="
lblS2b.Text = "Pos="
lblS3a.Text = "Pos="
lblS3b.Text = "Pos="
lblS4a.Text = "Pos="
lblS4b.Text = "Pos="
lblS5a.Text = "Pos="
lblS5b.Text = "Pos="

END