in

“¡Hola Mundo!” en C18 (con Bootloader)

En la actualidad existe una enorme variedad de lenguajes de programación para todo tipo de medios electrónicos capaces de interactuar con un usuario. Para un ordenador, un teléfono móvil, un automatismo y, por supuesto, para un simple y sencillo microcontrolador. Dentro de este vasto universo, siempre hay una etapa considerada “el inicio del aprendizaje”. La mayoría de las personas no comienzan sus experiencias desarrollando un programa capaz de controlar la ISS, sino que intentan partir de un objetivo (o logro) mínimo para luego escalar en complejidad sus conocimientos. En todo el mundo, a la primera experiencia en programación se la conoce como “¡Hola Mundo!”.  Gracias a la colaboración de Sebitronic y Jonbul (entre otros), iniciamos nuestro camino en C18. Y tú, ¿qué esperas para sumarte?

Una pequeña lámpara, un LED, un motor que gira gracias a una batería vieja que encontramos en algún cajón de trastos, o un LCD, cualquier artefacto al que podamos darle “vida” o actividad se transforma en nuestro “¡Hola Mundo!”, muchas veces, sin darnos cuenta. Ignorada por muchos, la historia de esta célebre frase nace en los Laboratorios Bell en un tutorial de introducción al lenguaje B (que luego sería reemplazado por el lenguaje C que hoy conocemos) escrito por Brian Kernighan en 1972. Por supuesto, todo esto en idioma inglés y con la frase “hello world”, escrita con minúsculas y sin los signos de admiración. El mundo de la programación la convirtió en la celebridad que es hoy y, como no podía ser de otra manera, en la programación de los microcontroladores también es muy común encontrarla. Sin embargo, llegar a dominar una visualización gráfica o alfanumérica que exprese estas palabras no es una tarea sencilla. Debido a esto, la tarea que puede realizarse y comprobarse con un microcontrolador durante los primeros pasos del aprendizaje es encender un LED.

La cartelería luminosa es un ¡Hola Mundo! multiplicado por decenas de veces

Lograr que un sencillo LED encienda y apague puede significar, para muchas mentes creativas, la piedra basal de un imperio de industrias electrónicas dedicadas a la construcción de balizas, luces intermitentes de advertencia y/o luces indicadoras de giro para cualquier tipo de vehículos. Es decir, para muchos, lo que puede parecer poco quizás resulte todo lo que se necesita para triunfar. Pero volviendo al mundo real, el mensaje que intentamos transmitirte es que, por más que te parezca una actividad menor o de poca importancia, lograr un “¡Hola Mundo!” puede llevarte tan lejos como nunca has imaginado. Es por esto que, gracias a la ayuda de amigos del foro NeoTeo, vamos a dar el primer paso en nuestro camino para aprender, practicar y progresar en este lenguaje de programación tan apasionante y poderoso como es C18. Asumimos, por supuesto, que ya has instalado en tu ordenador la última versión de MPLAB IDE y la versión de evaluación o estudiantil del MPLAB C Compiler for PIC18 MCUs. Existen muchos tutoriales en la Web sobre cómo instalar estos programas y, haciendo nuevamente referencia a los amigos del foro NeoTeo, puedes descargar desde aquí el completo Tutorial de C18 de Suky.

El Tutorial de C18 de Suky es una ayuda fundamental durante los primeros pasos en C18

Características a destacar del compilador C18
El MPLAB C18 es el compilador específico de Microchip para su línea de microcontroladores  PIC18 y tiene una sintaxis similar al lenguaje C convencional, con la salvedad de que se le han agregado diversas adaptaciones para transformarlo en una herramienta más apropiada para trabajar dentro del ambiente de programación de los PIC. Este compilador se maneja sin inconvenientes dentro del entorno visual del MPLAB, y sus características sobresalientes son:

  • Sólo sirve y está optimizado para los PIC 18.
  • Posee las funciones estándar del lenguaje C.
  • Permite la inclusión de trozos de lenguaje ASM.
  • Soporta interrupciones.
  • Contiene librerías para comunicaciones SPI, I2C, USART, y periféricos externos como LCD inteligentes.
  • Gracias a que utiliza el MPLAB, el entorno de programación es similar al utilizado en ASM.
  • Posee una versión estudiantil gratuita. Sólo basta con registrarse en la Web de Microchip para obtenerla. Además posee una versión de demostración de 60 días de evaluación.

Aspecto que presentará la entrenadora NeoTeo con la placa adicional de LEDs

Estas características convierten al compilador MPLAB C18 en una herramienta ideal para los desarrollos que podamos realizar con los PIC de la línea 18F y, en particular, el 18F2550 que utilizamos en nuestra entrenadora NeoTeo. Al instalar el MPLAB C18 en el ordenador, este se coloca por defecto en un directorio que el instalador genera y queda como C:/MCC18. Luego, se crean, entre otras, las siguientes carpetas que contienen los archivos necesarios para utilizar el compilador y que deben ser incluidos en los proyectos que intentemos construir:

  • h: Este directorio contiene los archivos de cabecera (Header Files) de la librería estándar de C y los archivos con las especificaciones del procesador PIC seleccionado (en nuestro caso, el 18F2550).
  •  lib: Contiene las librerías estándar del lenguaje C (clib.lib o clib_e.lib), las propias de los microcontroladores PIC (p18xxx.lib o p18xxx_e.lib donde xxx especifica el dispositivo) y los módulos start-up (c018.lib, c018_e.lib, c018i.lib, c018i_e.lib, c018is.lib, c018iz_e.lib)
  • lkr: Contiene los archivos que utilizará el enlazador del lenguaje (Linker Script File).
  • mpasm: Contiene los archivos de cabecera que utiliza el ensamblador MPASM para los dispositivos soportados por el compilador MPLAB C18.

Circuito del módulo de LEDs e interruptores

¿Con qué vamos a trabajar?
Lo primero que debemos construir es una pequeña placa que se pueda instalar de manera sencilla en la entrenadora NeoTeo (en el espacio reservado para el puerto B) y que incorpore al menos 8 LEDs, uno por cada pin de salida del puerto. En nuestro desarrollo, como puedes ver en la imagen superior, hemos incorporado, además, 2 pulsadores para ser utilizados en programas y actividades futuras, es decir, cuando comencemos a realizar rutinas más complejas ya que, dentro de un mismo puerto que encenderá LEDs, leeremos interruptores y aprovecharemos a darle más acción al puerto. Para facilitar el trabajo de carga y renovación de programas sobre el PIC, utilizaremos el sistema Bootloader, que ya hemos visto en artículos anteriores. Esto nos facilitará la tarea de realizar ensayos a granel con la sola conexión USB de la entrenadora, que le brindará alimentación y datos a nuestras prácticas.

Partimos de un programa básico
Para realizar las prácticas en C18 y comenzar con una base que funcione, te proponemos utilizar los archivos que se encuentran al final de este artículo que, como puedes comprobar en los videos, funcionan. A partir de ellos, tú podrás realizar las reformas y ampliaciones que quieras hasta lograr funcionamientos más elaborados. Por ejemplo, puedes realizar un contador que, al pulsar sobre el botón que se encuentra en la placa bootloader, provoque el cambio de LED que se encienda sobre la placa de muestra, o también puedes intentar hacer desplazar de un lado a otro un LED encendido y, por supuesto, encender todos los LEDs, apagar uno con el pulsador o hacer que uno apagado se mueva de un lado a otro de manera automática y miles de variantes que se te ocurran realizar con 8 LEDs.

Dentro de los ejemplos que te dejamos al final del artículo para que puedas descargar, no debes alterar las partes ubicadas al inicio del archivo “main.c”, donde se invoca la configuración de los “fuses” y el direccionamiento correcto de los vectores al usar el sistema bootloader. Si alteras alguno de esos valores, el sistema puede adoptar un comportamiento impredecible y puede suceder que debas cargar nuevamente el archivo bootloader para recomenzar el trabajo. Es decir, puedes llegar a corromper el bootloader dentro del PIC y esto provocaría una catástrofe que sólo se remedia comenzando todo de nuevo. No te alarmes si todo empieza a funcionar de manera escandalosa o sin sentido. Vuelve todo atrás, revisa tus pasos previos y allí encontrarás el error. Reinicia la carga de los archivos desde cero y todo vuelve a comenzar.

Por lo tanto, debes observar que hemos marcado de manera muy clara la línea divisoria desde donde puedes comenzar a trabajar. A partir de allí comienza tu magia. Recuerda que tienes todo un grupo de gente que está deseosa de ver tus avances y trabajos. En el foro NeoTeo hay un grupo importante de amigos que esperan aprender este lenguaje y tú puedes participar de manera activa con tus códigos. Observa bien lo que hemos hecho, cambia un bit de lugar, cambia un pulsador de lugar, intenta construir un contador, avanza un paso, el que quieras, el que puedas y compártelo. Enséñanos tú a nosotros. Busca mejorar nuestro código. ¿Nuestro código tiene defectos? ¿Cuáles, dónde, por qué? De eso se trata la idea, de avanzar poco a poco entre muchos hasta lograr desarrollos importantes en este programa. Te recomendamos, como siempre, que acompañes tus códigos o ensayos con videos donde se pueda apreciar y demostrar que el código funciona. Ahora tienes más herramientas: cuentas con el bootloader que te facilitará las prácticas y también cuentas con dos programas de ejemplos para dar el paso inicial. ¡Vamos amigo, te seguimos!

Reportar

¿Qué te pareció?

Escrito por Mario

18 Comments

Leave a Reply
  1. Mil gracias mario mañana tengo una prueba diagnostica (para saber cuanto sabemos) de C18 y como no se nada de nada este tutorial me a servido mucho mil gracias mario me has salvado el dia 😉

    Segui asi esperamos mas tutos de esto

  2. Hola Mario:
    Muy bueno comienzo con el C18, buenos ejemplos, y muy claros. Yo me estoy guiando por el manual que subio suky, el cual esta muy bueno.
    Espero que sigamos adelante con este lenguaje y seguir aprendiendo cada dia mas.

    Muchas gracias.

  3. Tradicionalmente se dice lo del hola mundo cuando tenemos una pantalla de saludo en que se LEA "hola mundo", no al prender un led asi que permitirme decirte que es bastante PELOTUDA tu descripcion de esto.
    Saludos

    • asumo por tu respuesta que no tenes idea del mundo generico de la informatica, no esclusivamente de las computadoras, cuando alguien dice hacer un hola mundo, se refiere a lo mas basico que se pueda hacer con ese "sistema" no es si a escribir un hola mundo textual, el hola mundo textual seria lo basico de programacion en informatica, pero el hola mundo o dicho de otra manera, lo mas basico en electronica o en pics seria encender un led…
      Igual te felicito, entraste como usuario, por lo menos ahi demostraste q al menos 1 dedo de frente tenes, sino te hubieras comido una bardeada terrible…igual segui con lo tuyo porq esto es obvio q no es para vos si no entendes algo tan simple como una metafora

    • Hey Fito, si vas a opinar sobre algo primero lee sobre le que vas a opinar:

      " El mundo de la programación la convirtió en la celebridad que es hoy y, como no podía ser de otra manera, en la programación de los microcontroladores también es muy común encontrarla. Sin embargo, llegar a dominar una visualización gráfica o alfanumérica que exprese estas palabras no es una tarea sencilla. Debido a esto, la tarea que puede realizarse y comprobarse con un microcontrolador durante los primeros pasos del aprendizaje es encender un LED."

      Ademas si no sabes de tema, pues quedas como un ignorante frente a los demas, ademas ten mas respeto frente a los demas, y si crees que es muy pelotuda la descripcion, pues hasla tu y miremos como lo haces.

  4. Gracias por esta iniciación a C18. Me resulta muy útil la punta del hilo del que tirar.

    Y para Fito, creo que deja claro en el artículo el porqué del "hola mundo". En programación es el primer mensaje que se hace para empezar, pero en microcontroladores, el escribir "hola mundo" en un LCD no es el montaje por el que se empieza. No es que sea demasiado complejo, pero sin embargo, el encendido y apagado de un led es el más sencillo montaje y por eso su equivalencia al "hola mundo".
    Un saludo.

  5. Los que están dando gracias a Mario Saco por la creación de este tutorial, solo deberían darle las gracias por presentarlo, por que este tutorial es de suki, un usuario celebre de todos los foros de microcontroladores mas famosos, todopic, ucontrol micropic.es, creo que antes del esplendido tutorial de suki tambien habria que agradecer a navaismo el cual creo un tutorial mas completo en la pagina encaminando c pero que no termino según el propio navaismo por que se lo piratearon, lastima que no continuo ya que nos prometió ensañarnos USB en los modos que no podemos hacerlo ni siquiera con ccs, y la comunicación Ethernet, esperemos que suki avance este tutoríal hasta donde navaismo no llego (USB, Ethernet) y lo que nos prometió pero no cumplio por culpa de un copion pirata. Quedamos a la espera de lo que va a hacer el gran Mario Saco. Gracias a todos.

    • Hola Kisu,
      Creo que esta sobreentendido que agradecemos por la presentacion aparte del buen trabajo de los videos y la claridad con la que Mario y gracias a NeoTeo que nos presentan temas tan interesantes como este. Ademas se esta trabajando tomando la placa entrenadora hecha por Mario en un articulo anterior, la cual tiene un trabajo para agradecerle mucho.

      Aqui nadie se esta tomando autoria de nada, por eso son los parrafos en el articulo como :

      "" Gracias a la colaboración de Sebitronic y Jonbul (entre otros), iniciamos nuestro camino en C18. Y tú, ¿qué esperas para sumarte?""

      "" El Tutorial de C18 de Suky es una ayuda fundamental durante los primeros pasos en C18""

      "" Existen muchos tutoriales en la Web sobre cómo instalar estos programas y, haciendo nuevamente referencia a los amigos del foro NeoTeo, puedes descargar desde aquí el completo Tutorial de C18 de Suky.""

      Mario se esfuerza por hacer cosas originales y presentarnos articulos para que gente como yo aprendamos cada dia cosas nuevas, y cuando no son originales Mario simpre cita el autor o de donde se baso para hacerlo.
      NeoTeo es un grupo muy serio de personas y los cuales hacen su mejor esfuerzo para publicar cosas nuevas, y no necesitan fusilar cosas de otros lados, por tal motivo respondo a su comentario y al de Fito.

      Un saludo

  6. Me gusta el C18, por conocer el lenguaje C. Hice algunos ejemplos del manual que subio suky simulándolos con Proteus, una forma económica de comenzar. Luego fui a la práctica, algo mas satisfactorio todavía.
    Espero seguir aprendiendo cada día mas.
    Muchas gracias.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

HRP-4: El reemplazo de humanos por robots

Frogger de Realidad Aumentada (Curiosidad)