TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Mario en 02 de Agosto de 2004, 12:29:00
-
Hola,
Yo soy nuevo aquí.
Llevo con los PICs desde el 2002 y he hecho algunas cosas (para la escuela y trabajos aparte).
Desde Agosto del 2003 que se adquirió el PBP 2.44 he estado desarrollando programas en Basic en conjunto con ensamblador.
He visto que aquí se hace referencia a PBPlus, Proteus, C, y demás compiladores (¿lenguajes?).
La pregunta es:
¿Qué diferencias existen entre uno y otro?
Como se está familiarizado con PBPro, conozco (aunque no mucho) sus alcances y limitaciones en torno a programación.
Si me gustaría que se hiciera referencia entorno al Pic Basic Pro Compiler, ya que es el que se conoce.
Gracias de ante mano.
Mario
Mexicali, Baja California, México.
-
Por lo que yo se el PBP tiene bastantes limitaciones pero por contra lo pueden usar gentes que no sepan casi como funciona el micro en concreto.
Para empezar hay que centrar el compilador en su nacimiento. Principalmente este compilador sale como un entorno para programar facilmente micros peque~os y ese objetivo lo cumplio perfecfectamente. Luego han ido saliendo micros mas y mas potentes con lo que ahora ha quedado un poco "chico" para los micros mas potentes.
1.- Los tipos de datos que maneja son muy escasos: bit, byte, word. No hay distincion sobre mas tipos como con signo, sin signo y punto flotante.
2.- Otra limitacion: no hay string
3.-Una pesima implementacion en las funciones de presentacion en LCD. Un muy bajo rendimiento del codigo generado. Por contra es facil de realizar una aplicacion basica.
4.- Como consecuencia de la no implementacion de punto flotante, a veces te ves y te deseas , para realizar algunos calculos.
5.- Las funciones que tiene implementadas para I2C, puerta serie, shiftin ... funcionan muy bien y te eliminan much trabajo.
6.- Hay bastantes ejemplos en la web de como funcionan las diferentes funciones.
7.-Buen soporte de la herramienta: frecuentes actualizaciones y soporte para casi todos los micros.
8.- Se le puede sacar partido a la herramienta junto al ensamblador.
9.- El manejo de interrupciones es muy lento y ha de hacerse con asm.
---------------------
Mi opinion personal es que hay que irse al C para hacer desarrollos de cierta envergadura, pues ASM no sirve para desarrollos grandes (no por potencia sino por antieconomico, tiempo empleado en depuracion, etc,etc) y basic es muy simple y no da capacidad para algunas cosas. El lenguaje optimo para proyectos es el C. Es alto nivel y te deja una cierta libertad cercana al hardware.
Saludos
Ricky
Madrid-Espa~a
-
Gracias por lo mencionado.
Se de primera mano que el PBP no es el mejor para lo que se refiere a operaciones donde el punto decimal es crítico.
Sobre las interrupciones, es cierto lo que se menciona, son MUY LENTAS (5 o 9 µsegundos es una eternidad en programación). Es por eso que se utiliza siempre ensamblador.
Sobre la situación del soporte de µicros más potentes, ahi si tendré que coincidir que soporta una cantidad respetable de µicros de la serie 18FXXX (se está utilizando un 18F448 para un proyecto en este tiempo).
Volviendo, si se me hace la recomendación de programar en C, ¿Cuál sería el compilador apropiado?
NOTA: Tengo que aclarar que C casi no se (es rídicula la cantidad de C que poseo, por eso adquirí el PBP).
Gracias por los comentarios.
Si ven la hora no se asusten, es que yo vivo en México, casi llegando a Tijuana (en Mexicali) y son varias horas de diferencia. Cuando yo me conecto (después del trabajo) ya casi no hay nadie.
-
Estoy interesado por el mismo tema que tu ya que veo las limitaciones del basic.
El C de un micro Pic no es como el C++ de los PC, pero si da bastante más juego que el basic.
He estado mirando algunas comparativas y creo que la mejor opción es CCS (www.ccsinfo.com)
Hay otros modelos como el Hitech o hay una herramienta C muy buena de IOR (creo recordar). Pero estos C generan un código C menos compacto que CCS (según he poddio leer en comparativas de internet). Aquí hay un foro de C en el que puedes preguntar a expertos en C.
Los C que te comento con ANSI C y el CCS se aleja en algunos casos del ANSI, por lo tanto esto le da ciertas desventajas de portabilidad entre unos micros y otros, pero gana en campactación de código. Como dice el fabricante CCS: es muy raro el tener que pasar código de un motorola a un PIC o a un Atmel, es más, con la dependencia que tienen los compiladores con los recursos hardware del micro es conveniente pensar cada aplicación para cada micro. Esto no es así en máquinas grandes como los PC, en los que la tendencia es generar código para cualquier máquina y cualquier sistema operativo (lease JAVA). Pero en sistemas tan minusculos como un 16F628 o de la serie 10F creo que CCS es una buena opción.
Saludos
Ricky
Madrid-España
-
Pues yo también estoy pensando en aprender algo de C, que todavía no lo he usado nunca pero no hago más que escuchar alabanzas.
Creo que deberíamos abrir un hilo en el subforo de C del estilo de "Microchip cursillo" pero llamado "C cursillo".
Además, con los expertos que hay por aquí seguro que aprendemos.
-
Aqui hay unos link:
- Compiladores de C
- www.htsoft.com C de HiTech
-www.bknd.com CC5X, Compilador C
- http://www.ccsinfo.com/picc.shtml C de CCS
- Compiladores varios
- http://oase.uci.kun.nl/~mientki/PIC/Pic_frame.htm compilador JAL (como pascal), es free
- http://www.voti.nl/jal/ Compilador JAL. Es como pascal
- http://web.gramlich.net/projects/electronics_projects.html uCL
- http://www.picant.com/p2c/p.html Un tipo de Pascal
-www.nipple.com herramienta visual gráfica.
-www.actum.com herramienta visual para programación.
- www.embedded.com.ar para otras herramientas de programación.
- www.iar.com embeded C++ para PIC y otros micros, herramientas visuales. Representa en España Novatronic
-www.microladder.com, programar un pic como un autómata, sin C, sin assembler, sin basic.
Saludos
Ricky
Madrid-España
-
Hola,
Antes de ir a trabajar tuve la oportunidad de observar la página de CCS.
Me resulta interesante el hecho de que el compilador se encargue por completo de asegurar las variables a la hora de surgir una interrupción.
Se ve MUY COMPLETO y poderoso pero, lo que no entendí muy bien es esto: ¿Debo comprar la licencia para cada serie? .
Si es así, me resultaría un MUCHO INCONVENIENTE ya que se pretende dar asesorías en la escuela y si bien es cierto que casi nunca se manejan series diferentes a las 16FXXX, se desea incluir los µicros que se han utilizado (16F628, 16F872, 18F448) para que no se queden con uno solo (es una de las ventajas de seguir a µicrochip, sus µicros cambian pero solo en las funciones adicionales).
El hecho de tener que pagar licencia y/o adquirir un compilador para un número específico de µicro (en lo personal) no me atrae.
No quiero que me malinterpreten, el PBPro se compró (mis buenos 250 dlls me costó, aquí en donde el dólar está a 12 pesos x 1) para evitarme problemas de piratería. Debido a esto se han podido solucionar problemas que tenían algunos compañeros que bajaron el PBP y al parecer no les compilaba algunos programas grandes (principalmente los que tenían mucho la instrucción LCDout), fueron conmigo y se compiló sin problemas.
Perdón que se haga referencia al PBP, después de ver las virtudes que se tiene frente al ensamblador resulta una maravilla; el hecho es que de un compilador a otro, al parecer, es algo inferior y por eso la razón de este foro.
Tengo que reconocer que me vi influenciado por los proyectos realizados con este compilador, principalmente los de Karl Williams http://www.thinkbotics.com// (del cual tengo todos sus libros, 3), y por la página que creo estarán familiarizados RENTRON http://www.rentron.com// ya que fue aquí donde se adquirió el PBPro 2.44 y se planea actualizar a 2.45.
Para que me cambie de compilador (como lo hice con cada µicro) deberé estar seguro que se domina (si no al 100%) bastante para poder soportar el cambio y no estresarme porque no me salgan las cosas con el nuevo (si no puedo con el nuevo, siempre podré regresar al viejo).
Pero si me agradaría cambiar (para conocer más).
Se les agradece el tiempo para explicarme las diferencias y como ven, se están tomando en cuenta.
Atte:
Mario
-
Hay varias versiones, pero la buena es la ..WH. W indica que tiene IDE integrado y la H significa que abarca todos los micros hasta los 18 (bueno, no se si todos, todos, pero si muchisimos). Las otras versiones que tienen además de ser para menos micros son para trabajar en linea de comandos sin entorno de desarrollo. El problema de este compilador es que te cobran un mantenimiento anual si quieres actualizarlo un poco abusivo.
Yo estoy acostumbrado al PBP y me resulta muy difícil pasar al C. La sintaxis no es la misma, se programa con módulos y cada dispositivo tiene su driver o te lo tienes que hacer. Bueno creo que será cuestion de practicar. Lo que tengo claro es que es más potente, pero también más difícil de manejar y esto al principio puede llegar a desesperar. Con PBP sale tirando todo a la primera, pero con C no es así. Hay que tener mucho cuidado con los tipos de variables. Luego están los punteros que le dan una potencia enorme, pero que hasta que te acostumbras te fastidia un poco. Tambien tiene estructuras de datos. Bueno no tiene nada que ver.
Por otra parte también se le puede meter ASM en línea igual que al PBP, por si hiciese falta alguna vez. Genera un código compacto, tiene string, etc.
Lo que no estoy enterado es si la gestión de interrupviones la hace bien o tiene mucha latencia como el PBP. Esto es un interrogante para mi. Habrá que preguntarselo a Pocher.
Realmente si piensas adquirir un paquete de este tipo puedes probar antes con las demos que tienen, que aunque restringidas te puedes hacer a la idea el funcionamiento antes de gastarte el dinero. Pienso que aprender este tipo de lenguaje lleva más tiempo que aprender PBP. Pero todo se aprende con teson y ganas.
Saludos
Ricky
Madrid-España
-
Ayer me instalé el PCW y tiene una pinta acojonante, con un montón de utilidades muy curiosas y un IDE bastante logrado.
Además, he estado bicheando por los ejemplos y están muy bien comentados, por lo que facilitará bastante su aprendizaje. No los he contado, pero hay ejemplos de todo tipo.
Tiene muy buena pinta y, aunque seguro que al principio nos cuesta más Ricky, creo que va a merecer la pena.
Lo que no sé es si será mejor intentarlo con PCW o con CCS. ¿Qué dices tú Pocher?
-
Creo que hay que intentarlo.....y conseguirlo.
Pero (siempre hay un pero) es necesario ir aprendiendo con calma y sin pausa es una tarea árdua que dará sus resultados.
Animo y a por ello.
Saludos
Ricky
Madrid-España
-
RGL no entiendo muy bien a qué te refieres con lo de la "latencia" de interrupciones.
Nocturno con lo que dices: "Lo que no sé es si será mejor intentarlo con PCW o con CCS" supongo que te referirás a realizar el código fuente y compilar desde el entorno integrado o bien desde fuera de él. Yo particularmente no uso el entorno de CCS, uso el Ultraedit.
Un saludo
-
Pues no lo sabía. Creí que eran compiladores distintos y, por lo que dices, deduzco que PCW es un IDE para CCS.
En ese caso mejor, así no tenemos que aprender dos variantes.
-
En PBP si activas las interrupciones y se est´´a ejecutando el programa por ejemplo con la intrucción
PAUSE 10000 "Espera 10 segundos
Pues hasta que no acaba de ejecutarse esta instrucción no salta la interupción y en este caso son 10 segundos. Ese es el tiempo de latencia el tiempo que tarda en saltar a la ISR desde que la interrupción se produce. Vosotros en C no teneis este problema.??
Saludos
Ricky
Madrid-España
-
Pués con la instrucción delay_ms(10000) pasaría lo mismo, hasta que no acaba la temporización no atiende la interrupción. Una vez me pasó esto, era un móvil que tenía que girar hacia la derecha durante 15s, pero si durante esos 15s tocabamos el pulsador de paro debía pararse. No tuve más remedio que incluir un bloque de sentencias en ensamblador para que me realizara la temporización y al mismo tiempo se atendiese al estado del pulsador de paro.
Un saldo
-
En este aspecto entonces nos quedamos igual.
Pero no en otros.
Saludos
Ricky
Madrid-España
-
Lo que mencione sobre las interrupciones en el CCS es porque al parecer uno no necesita guardar los registros importantes, lo hace el mismo código al atender la interrupción (eso es lo que leí en la página de CCS).
Como uno ha estado con los de la serie 16FXXX, uno debe guardar los registros (W,STATUS,PCLATH,etc.); aún no me he metido de lleno con los de la serie 18 (en cuestión de interrupciones), se que existen interrupciones prioritarias y que los registros de importancia los almacena solo.
En cuanto al retardo en la utilización de las interrupciones en BASIC (o en cualquier otro lenguaje), como se comenta en el foro, es poco práctico si la aplicación está basada en uno o varios eventos que son prioritarios para el sistema, por eso se comentó que las interrupciones (por lo menos en mi caso y por experiencia propia) se realizan en ensamblador.
A mi también me sucedio algo muy similar a lo que se comenta sobre el carrito, debía dar vuelta pero si escuchaba algo (un comparador al PORTB.0) se pararía y haría sonar un buzzer.
Lo único diferente es que lo hice en ensamblador (aún no adquiría el PBP) pero de todas maneras necesitaba estar preguntando por ese sonido, fue entonces donde me decidí optar por la interrupción (que le batalle un mucho para que funcionara y después para sensibilizar el comparador).
Un claro ejemplo es una aplicación que unos compañeros del área de biomédica en la escuela querian: un espirómetro digital.
Como el sensor era algo complicado (no se contaba con hoja de especificaciones), se observó el comportamiento y se determinó que era posible utilizar una interrupción para ver cuántas veces pasaba de alto a bajo el estado del sensor (dependía de la intensidad de la respiración) y con eso, en base a una ecuación plantearon las respiraciones por minuto y están en proceso de determinar el volumen (densidad) de la respiración (esto es de biomédica, ellos saben de eso, yo soy de comunicaciones, solo se les ayudó en la programación).
La parte que me tocó desarrollar es la siguiente: está basada en la interrupción en el puerto B e incrementa una fila cada vez que la interrupción surge (cada vez que pasa de bajo a alto y viceversa).
@ DEVICE XT_OSC,LVP_OFF,WDT_OFF,PROTECT_OFF
led VAR PORTB.1
reg VAR BYTE $40 system
wsave VAR BYTE $20 system
wsave1 VAR BYTE $A0 system
ssave VAR BYTE bank0 system
psave VAR BYTE bank0 system
DEFINE INTHAND ISR
"***** Rutina de Interrupción *****
Asm
; Salvando W, STATUS y PCLATH
ISR bcf INTCON,GIE ; desabilitando las interrupciones
btfsc INTCON,GIE ; asegurando la desactivación
GoTo ISR
movwf wsave ; salvando W
swapf STATUS,W ; STATUS->W
clrf STATUS ; regresando al banco cero
movwf ssave ; salvando STATUS
movf PCLATH ; PCLATH->W
movwf psave ; salvando PCLATH
clrf PCLATH ; regresando a la página 0
EndAsm
"aqui pones lo que quieras
led = 1
led = 0
led = 1
"en basic
Asm
;*** Regresando W, STATUS y PCLATH (originales) ***
fInt movf psave,W ; PCLATH (original)->W
movwf PCLATH ; W->PCLATH
swapf ssave,W ; STATUS (original)->W
movwf STATUS ; W->STATUS
swapf wsave,F ; Regresando W original
swapf wsave,W ; antes de la interrupción
bcf intcon,intf ; borrando la(s) bandera(s) de interrución
incf reg
RETFIE ; Reactiva las interrupciones
EndAsm
inicio:
TRISB = $01
reg = 0
INTCON = %10010000 "habilitando las interrupciones
option_reg = %01000000 "habilitando interrupción en flanco positivo
primera:
IF reg == 1 Then segunda
led=0 "lo que sea
IF reg == 0 Then primera
segunda:
IF reg == 2 Then tercera
led=0 "lo que sea
IF reg == 1 Then segunda
tercera:
IF reg == 3 Then final
led=0 "lo que sea
IF reg == 2 Then tercera
final:
PORTB.7= 1
pause 2000
End
Quizá no les dé una idea clara ya que se tuvo que hacer que el TMR0 se inundara y con ese tiempo comparar el registro reg y otras cosas mas que me pidieron mis compañeros, este es solo un ejemplo sobre las interrupciones (aunque al parecer, está demás porque creo que ya lo saben).
Con la información que se ha adquirido creo que lo mejor será seguir con el PBP hasta que considere que lo domine y después cambiarme.
Les agradezco su tiempo para explicarme las diferencias entre compiladores.
¿Cómo le hago para cerrar este espacio?
(para que alguien mas lo ocupe)
Nota: el programa fue hecho para el µicro 16F872.
Gracias
Mario
-
No hay que hacer nada más. Cuando se acaba un tema se deja estar.
Saludos
Ricky