Archivo de la categoría: CPU

Raspberry Pi 2, nueva plaqueta mini-computadora

La nueva plaqueta Raspberry Pi 2 incluye un CPU ARM de 900 MHz Cortex-A7 de cuatro núcleos (~ 6x rendimiento), 1 GB de SDRAM LPDDR2 (2x memoria), total compatibilidad con Raspberry Pi 1. Debido a que tiene un procesador ARMv7, puede correr la gama de distribuciones ARM GNU/Linux, incluyendo Snappy Ubuntu Core, así como Microsoft Windows 10

BCM2836 y Raspberry Pi 2

Nos comenta Eben Upton, fundador de raspberrypi.org, que desde que lanzaron la original Raspberry Pi Modelo B, allá por el 2012, realizaron una enorme cantidad de trabajo de software para sacar lo mejor del procesador BCM2835 de Broadcom y el CPU ARM11 de 700 MHz. “Hemos gastado mucho dinero en la optimización de una amplia variedad de bibliotecas y aplicaciones de código abierto, incluyendo WebKit, LibreOffice, Scratch, Pixman, XBMC/Kodi, libav y PyPy. Al mismo tiempo, el proyecto Raspbian, dirigido por Peter Green y Mike Thompson, nos ha proporcionado una reconstrucción de Debian compatible con ARMv6 con soporte de hardware de punto flotante, y Gordon, Dom y Jonathan [miembros del equipo de desarrollo de Raspberry Pi] han gastado miles de horas de trabajo en el firmware y soporte de la tarjeta para hacer Raspberry Pi la computadora en una plaqueta más estable del mundo. Vale la pena ir y ver una imagen de la vieja tarjeta SD de 2012 para tener una idea de lo lejos que hemos llegado”.

Sin embargo, llega un momento en que ya no hay nada más por hacer para seguir adelante que tener más memoria y un mayor rendimiento de la CPU. “Nuestro desafío era encontrar la manera de conseguirlo sin lanzar a la nada nuestra inversión en la plataforma ni echar a perder todos esos proyectos y tutoriales que se basan en los detalles precisos del hardware de Raspberry Pi. Afortunadamente para nosotros, Broadcom estuvo dispuesto a dar un paso adelante con un nuevo SoC (Sistema en un chip, o System on a Chip en inglés), el BCM2836. Conserva todas las características del BCM2835, pero cambia el ARM11 de 700MHz único con un complejo ARM de cuatro núcleos Cortex-A7 de 900 MHz: todo lo demás se mantiene igual, por lo que no se da una transición dolorosa o una disminución de la estabilidad”.

Una vez que estuvieron seguros de que BCM2836 funcionaba como se esperaba, diseñaron una serie de prototipos hasta llegar a la Raspberry Pi 2 Modelo B, que se acaba de lanzar el lunes (2 de febrero de 2015). Tiene una forma idéntica a la existente Raspberry Pi 1 Modelo B+, pero se las arregla para contener tanto el nuevo BCM2836 y un 1 GB de SDRAM de Micron. Todos los conectores están en el mismo lugar y tienen la misma funcionalidad, y la tarjeta todavía se puede ejecutar conectada a un adaptador de corriente micro-USB de 5V.

Raspberry Pi 2 está disponible para su compra desde los socios del fabricante element14 y RS Components. Su precio de venta es de u$s 35 (el mismo precio que el modelo B+ existente). Se requiere un NOOBS (New Out Of the Box Software) actualizado, la imagen Raspbian, incluyendo el kernel ARMv7 y módulos, que se pueden descargar gratuitamente. Al lanzamiento, se está utilizando el mismo espacio de usuario ARMv6 Raspbian tanto en la Raspberry Pi 1 como en la 2; pero en los próximos meses ellos investigarán si pueden obtener un mayor rendimiento con el Debian ARMv7, o si pueden reemplazar selectivamente una pequeña cantidad de bibliotecas para obtener lo mejor de ambos mundos. Ahora que están usando un núcleo ARMv7, también se puede ejecutar Ubuntu: ya está disponible un Snappy Ubuntu Core y estará disponible un paquete NOOBS en el próximo par de semanas.

Windows 10

Durante los últimos seis meses han estado trabajando estrechamente con Microsoft para producir el próximo Windows 10 para Raspberry Pi 2. Microsoft tendrá mucho más para compartir en los próximos meses. La versión de Windows 10 compatible con Raspberry Pi 2 estará disponible en forma gratuita para los creadores.

Indican que se debe visitar WindowsOnDevices.com para participar en el Programa de Desarrollo de Windows para IoT (Internet of Things, Internet de las Cosas) y recibir actualizaciones a medida que estén disponibles.

Preguntas frecuentes

¿Se descontinuará los Raspberry Pi 1 Modelo B y B+?

No. Tenemos una gran cantidad de clientes industriales que querrán seguir con el Raspberry Pi 1 por el momento. Vamos a seguir construyendo Raspberry Pi 1 Modelo B y el Modelo B+, siempre y cuando haya demanda de ellos. Ambas placas se seguirán vendiendo por u$s 35.

¿Qué pasa con el Modelo A+?

El modelo A+ sigue siendo el Raspberry Pi para iniciarse con un valor de u$s 20. Aunque la nueva plaqueta se llama Raspberry Pi 2 Modelo B, no tenemos planes para introducir una Raspberry Pi 2 Modelo A antes del final de 2015.

¿Qué pasa con el Módulo de Cálculo?

Esperamos introducir un módulo de cálculo basado en el BCM2836 en el mediano plazo, pero por ahora estamos enfocados en el lanzamiento de Raspberry Pi 2 Modelo B.

¿Todavía usa VideoCore?

Sí. VideoCore IV 3d es el único núcleo de gráficos 3d públicamente documentado para SoCs basados en ARM, y queremos mantener Raspberry Pi abierto.

¿De dónde viene la cifra “rendimiento 6x”?

El aumento de velocidad varía entre aplicaciones. Hemos visto pruebas de referencia de la CPU con un único subproceso que acelera por lo menos 1,5 veces, mientras que Sunspider resulta alrededor de 4 veces más rápido, y los códecs de vídeo NEON habilitados para multinúcleo pueden ser más de 20 veces más rápidos. 6x es un número típico para una prueba de comparación de CPU multi-hilo como SysBench.

¿Es esta una versión completa de Windows 10?

Por favor, consulte WindowsOnDevices.com.

Especificaciones Raspberry Pi 2

  • Procesador de cuatro núcleos Broadcom BCM2836 ARM Cortex-A7
  • GPU VideoCore IV doble núcleo con soporte OpenGL ES 2.0, aceleración por hardware OpenVG, 1080p 30 frames, H.264
  • 1 GB LPDDR2 SDRAM
  • Salida de vídeo 1080p
  • Salida vídeo compuesto (PAL / NTSC)
  • Salida de audio estéreo
  • Ethernet 10/100 Base
  • HDMI 1.3 y 1.4
  • Audio compuesto jack 3,5 mm
  • 4 puertos USB 2.0
  • MPI CSI-2
  • Socket MicroSD
  • Conector Serie
  • GPIO 40 pines




Precio y disponibilidad Raspberry Pi 2

RS, uno de los dos distribuidores principales, ya tiene a la venta el nuevo modelo. El precio es idéntico al anterior: 35 dólares, ofreciendo entonces más potencia al mismo precio en esta mini-computadora con base ARM y sistema operativo Linux en formato de placa única.

Fuente: RaspberriPi.com


Algunas notas sobre programación del robot didáctico programable

En esta publicación: Robot Programable: Diagrama Básico en Bloques prometo, al final, que voy a continuar con los detalles de circuito y de programación. En la entrada: El microcontrolador “cerebro” del robot programable (básico) hay mucho de circuito (hardware), ya que el artículo contiene una descripción bastante detallada de las secciones del chip microcontrolador que utilizamos por ahora, y también detalles de configuración y uso del chip que tienen una enorme relación con la programación.

Concretamente, que algo he cumplido de la promesa.

Los artículos hasta ahora venían más o menos sincronizados con el avance de las clases, pero para esta fecha obviamente estamos en receso de verano y no hay actividad, ni la habría aunque me lo propusiera, ya que por suerte los chicos asisten a una colonia de verano. A mí tampoco el calor me favorece mucho para mover las neuronas, por eso estuve dedicando algunos artículos a la mecánica, a la búsqueda de soluciones para abaratar la construcción de la base mecánica del robot.

De eso aún falta, me quedan algunas cosas por solucionar, y me dedico casi diariamente al tema. Ya les contaré.

El robot programableRobot programable

Pero hay un programa básico ya escrito con el que hemos trabajado en clase, haciendo mover al robot. Este programa (escrito en assembler, o ASM) permite ordenar una secuencia de movimientos al robot. El programa tiene tres niveles: 1) las instrucciones básicas para mover los motores en el lenguaje del microcontrolador (son las mismas para toda la familia PIC16F, y se podrían utilizar en todos los modelos disponibles, si bien nuestro chip elegido es el PIC16F876A), 2) la inclusión posterior de las instrucciones básicas dentro de subrutinas a las que se puede llamar programando con palabras en castellano en lugar de con los mnemónicos de la programación ASM, lo cual facilita la comprensión, y finalmente 3) la conversión de estas subrutinas en macros.




Utilizando macros se programa directamente con la palabra que hemos definido para el comando; ni siquiera hace falta utilizar la instrucción CALL de ASM que se necesita para hacer correr una subrutina.

Voy a explicar poco a poco la programación, en todos los pasos.

Primero que nada: la configuración inicial del chip

Recordemos primero el diagrama en bloques, ya que hay que definir las funciones de las patas del chip teniendo en cuenta este circuito.

Diagrama básico en bloquesDiagrama en bloques
Veamos las instrucciones ASM en la parte de configuración:


        list P = 16F876a       ; indica el modelo de microprocesador a usar
        include "P16f876a.inc" ; provee declaraciones necesarias para el chip

        ERRORLEVEL 1;-302      ; para evitar los mensajes de cambio de
                               ; banco en el resultado del compilador

        ; Declaraciones que definen el funcionamiento básico del chip
        __config  _CP_OFF & _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _BODEN_OFF

        CBLOCK 0x20            ; Declarar las variables
          d1 ; usada en Retardos
          d2 ; usada en Retardos
          d3 ; usada en Retardos
        ENDC
;
; -----------
; INICIALIZAR
; -----------
        org 0x0000              ; Indica la dirección de origen del programa
        clrf STATUS             ; limpia el registro de estado
        movlw 0x00              ; valor cero 00
        movwf PCLATH            ; al contador de programa = comienzo 
        goto Comienzo           ; Salto a comienzo
;
Comienzo
; BANCO
        bcf STATUS,RP0          ; Prepara
        bcf STATUS,RP1          ; RAM Página 0, en pág 0 están los registros
                                ; de salida de los puertos
; ------------------------------------
; PUERTOS
        movlw 0x00      
        movwf PORTA             ; Inicializar valores del PORT A
        movlw 0x00
        movwf PORTB             ; Inicializar valores del PORT B
        movlw 0x80
        movwf PORTC             ; Inicializar valores del PORT C 
; ------------------------------------
; BANCO
        bsf STATUS,RP0          ; RAM Page 1, en pág 1 están los registros
                                ; de configuración de los puertos y
                                ; otros módulos del microcontrolador
; ---------------------------------------------------------------
; FUNCION DE LAS PATAS DE LOS PORTS
; ---------------------------------------------------------------
        movlw b'00000000'
        movwf TRISA             ; Todas las patas port A como salidas
        movlw b'00000000'
        movwf TRISB             ; Todas las patas port B como salidas
        movlw b'10111111'
        movwf TRISC             ; Todas las patas port C como entradas excepto RC6/TX
        movlw 0x06              ; Todas las patas del puerto entrada/salida digital
        movwf ADCON1            ; esto es necesario para el buen funcionamiento
                                ; de los puertos que tienen 
                                ; opciones analógicas (convertidor A/D)
;
; -----------------------------------------------------------
; BANCO
        bcf STATUS,RP0          ; Página RAM 0, la operación normal se realiza
                                ; en la página 0 de RAM
; -----------------------------------------------------------

 

Es conveniente que vayamos explicando las líneas de instrucciones por partes:


; -----------------------------------------------------------
        list P = 16F876a       ; indica el modelo de microprocesador a usar
        include "P16f876a.inc" ; provee declaraciones necesarias para el chip
; -----------------------------------------------------------

La indicación list P es muy directa, con ella se le dice al programa de compilación que vamos a trabajar en un programa para el PIC16F876A.

La indicación include incluye en el programa, en el momento de compilarlo, todo el texto que se encuentra dentro del archivo que se indica a continuación P16f876a.inc. En estos archivos (provistos por el fabricante) se definen nombres en letras para todas las partes del microcontrolador, que de otro modo deberían estar indicadas en el programa con números hexadecimales. Esta práctica evita el trabajo de estar memorizando o buscando en una tabla estos números, y facilita la comprensión al leer el programa, y permite un fácil intercambio de programas (migración) entre diferentes microprocesadores.

Por ejemplo, dentro de P16f876a.inc define así al puerto A: PORTA EQU H’0005′. Podríamos cambiar la declaración dentro de este archivo y llamar al puerto con un nombre en español, por ejemplo: PuertoA EQU H’0005′. Luego podríamos programar utilizando este nombre y funcionaría correctamente.


; -----------------------------------------------------------
        ERRORLEVEL 1;-302      ; para evitar los mensajes de cambio de
                               ; banco en el resultado del compilador
; -----------------------------------------------------------

Esta línea no es imprescindible y se utiliza para evitar molestas indicaciones de aviso cuando se cambia de banco de RAM en el programa. Las indicaciones no son necesarias si en el programa hemos realizado correctamente los cambios de banco.



; -----------------------------------------------------------
        ; Declaraciones que definen el funcionamiento básico del chip
        __config  _CP_OFF & _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _BODEN_OFF
; -----------------------------------------------------------

Los microcontroladores poseen una serie de configuraciones que se fijan por única vez al principio de la operación y definen ciertas partes esenciales de su funcionamiento. En el ejemplo:

_CP_OFF (Code Protection) define que no protegeremos el código de ser leído desde la memoria de programa del chip. Es posible definir _CP_ON cuando ya tenemos un programa totalmente probado en un equipo que vamos a entregar y no deseamos que alguien se lo copie leyéndolo desde la memoria de programa del microcontrolador.

_XT_OSC define el modo de oscilador de reloj del chip. En este caso, la opción _XT_OSC indica que se utilizará un cristal o resonador conectado al chip para definir la frecuencia de trabajo.

_WDT_OFF está relacionado con la función de “Despertador” (“Watchdog timer” en inglés) que se utiliza en aquellos casos en que se desea que el microcontrolador sea “despertado” de posibles estados en que haya quedado detenido, sea porque quedó esperando una señal de activación externa o porque falló su programa o porque se lo puso intencionalmente en ese estado por programa. El watchdog timer (WDT) puede producir un reinicio del microcontrolador PIC cada cierto período de tiempo, y recomenzar la ejecución del programa. Esto es para evitar que el dispositivo entre en un lazo infinito (se “cuelgue”), o se quede en una espera muy prolongada por un determinado evento que no ocurre. Durante la operación normal, el watchdog timer (en español “perro guardián” o “despertador”) genera un reinicio del microcontrolador PIC después del final de su período WDT. También cumple la función de sacar al dispositivo del modo Sleep (“Dormir”). En este caso el watchdog timer ocasiona que se despierte el microcontrolador PIC y continúe con la operación normal (sin producir reinicio), lo que se conoce como despertar WDT. No lo utilizamos en este programa en particular, de modo que fijamos _WDT_OFF, o sea, Watchdog Timer apagado.

_PWRTE_ON (Power-up Timer) Habilita un temporizador que se dispara en el encendido y permite que, durante su espera, se estabilicen todos los circuitos antes de comenzar a correr el programa.

_LVP_OFF define el modo en que se puede programar el chip. Esta definición en OFF determina que no se puede programar el chip utilizando un sistema de programación de bajo voltaje. Los programadores de PICs utilizan un voltaje de 12 volts en la pata MCLR del chip para poder escribir en su memoria de programa. Al definir el estado OFF de esta configuración se previene una programación accidental (que modificaría el programa y dejaría no operativo al microcontrolador) con los voltajes estándar de funcionamiento en sus patas.

_BODEN_OFF El bit BODEN (Brown Out Reset) en la configuración define la activación o no de una detención del microcontrolador por un descenso de voltaje de alimentación. Puede ser útil, pero no lo utilizamos en este diseño, por eso lo definimos en OFF.


; -----------------------------------------------------------
        CBLOCK 0x20            ; Declarar las variables
          d1 ; usada en Retardos
          d2 ; usada en Retardos
          d3 ; usada en Retardos
        ENDC
; -----------------------------------------------------------

En este bloque se declaran las variables que necesitaremos utilizar (y se reservan sus espacios en la memoria RAM). Por defecto, las variables son bytes (8 bits).



; -----------------------------------------------------------
; INICIALIZAR
; -----------
        org 0x0000              ; Indica la dirección de origen del programa
        clrf STATUS             ; limpia el registro de estado
        movlw 0x00              ; valor cero 00
        movwf PCLATH            ; al contador de programa = comienzo 
        goto Comienzo           ; Salto a comienzo
;
Comienzo
; BANCO
        bcf STATUS,RP0          ; Prepara
        bcf STATUS,RP1          ; RAM Página 0, en pág 0 están los registros
                                ; de salida de los puertos
; ------------------------------------
; PUERTOS
        movlw 0x00      
        movwf PORTA             ; Inicializar valores del PORT A
        movlw 0x00
        movwf PORTB             ; Inicializar valores del PORT B
        movlw 0x80
        movwf PORTC             ; Inicializar valores del PORT C 
; ------------------------------------
; BANCO
        bsf STATUS,RP0          ; RAM Page 1, en pág 1 están los registros
                                ; de configuración de los puertos y
                                ; otros módulos del microcontrolador
; ---------------------------------------------------------------
; FUNCION DE LAS PATAS DE LOS PORTS
; ---------------------------------------------------------------
        movlw b'00000000'
        movwf TRISA             ; Todas las patas port A como salidas
        movlw b'00000000'
        movwf TRISB             ; Todas las patas port B como salidas
        movlw b'10111111'
        movwf TRISC             ; Todas las patas port C como entradas excepto RC6/TX
        movlw 0x06              ; Todas las patas del puerto entrada/salida digital
        movwf ADCON1            ; esto es necesario para el buen funcionamiento
                                ; de los puertos que tienen 
                                ; opciones analógicas (convertidor A/D)
;
; -----------------------------------------------------------
; BANCO
        bcf STATUS,RP0          ; Página RAM 0, la operación normal se realiza
                                ; en la página 0 de RAM
; -----------------------------------------------------------

Las líneas de inicialización en este bloque están ampliamente explicadas con comentarios. En la última parte, debo aclarar que los registros TRIS son los que definen si una pata de entrada/salida es una entrada o una salida. Hay un registro TRIS para cada puerto: TRISA, TRISB y TRISC. Un 0 las define como salidas, un 1 las define como entradas. Por último, los microcontroladores con puertos cuyas patas se pueden definir como entradas al módulo Convertidor Analógico Digital (Analog/Digital Converter, o ADC, en inglés) tienen un registro de configuración en el que se debe definir si se utilizarán o no esas patas como entradas analógicas. Esto lo define el registro ADCON1 y el valor a definir para utilizar todas las patas como entrada/salida digital (tal como las utilizaremos por el momento) es 0x06 (hexadecimal 06).

Esencial: La parte del programa en sí

Observando el diagrama en bloques del robot programable, y con una lectura al artículo de apoyo sobre el chip de manejo de motores, podemos determinar que uno de los motores, el derecho, se maneja a través de dos patas del puerto A, RA0 y RA1, y el otro (izquierdo) a través de las patas RA2 y RA3 del puerto A.

La tabla de señales de control para los motores es como sigue:

     MOTOR DERECHO     
|
       MOTOR IZQUIERDO       
    RA0     RA1     ACCIÓN | RA2 RA3 ACCIÓN
    1     0     AVANCE | 0 1 AVANCE
    0     1     RETROCESO | 1 0 RETROCESO
    0     0     DETENIDO | 0 0 DETENIDO
    1     1     DETENIDO | 1 1 DETENIDO


Por lo tanto, las instrucciones de manejo de los motores se pueden definir del siguiente modo:

;------------
; SUBRUTINAS
;------------

DerechoAdelante
        bsf PORTA,0        ; PORTA 0 = 1 - Motor derecho ad.
        bcf PORTA,1        ; PORTA 1 = 0 - Motor derecho ad.
return
;-------------------------------------

DerechoAtras
        bcf PORTA,0        ; PORTA 0 = 0 = Motor derecho atr.
        bsf PORTA,1        ; PORTA 1 = 1 = Motor derecho atr. 
return
;-------------------------------------

DerechoDetenido
        bcf PORTA,0        ; PORTA 0 = 0 = Motor derecho det.
        bcf PORTA,1        ; PORTA 1 = 0 = Motor derecho det.
return
;-------------------------------------

IzquierdoAdelante
        bcf PORTA,2        ; PORTA 2 = 0 = Motor izquierdo ad.
        bsf PORTA,3        ; PORTA 3 = 1 = Motor izquierdo ad.
return
;-------------------------------------

IzquierdoAtras
        bsf PORTA,2        ; PORTA 2 = 1 = Motor izquierdo atr.
        bcf PORTA,3        ; PORTA 3 = 0 = Motor izquierdo atr.
return
;-------------------------------------

IzquierdoDetenido
        bcf PORTA,2        ; PORTA 2 = 0 = Motor izquierdo det.
        bcf PORTA,3        ; PORTA 3 = 0 = Motor izquierdo det.
return
; -----------------------------------------------------------

Para realizar un movimiento necesitamos definir tiempos, y para eso, para empezar, podemos utilizar un simple rutina de “pérdida de tiempo” (el microcontrolador se queda “perdiendo tiempo” dentro de esta subrutina, y no hace ninguna otra cosa). La rutina la calculé utilizando los servicios del sitio Delay Code Generator donde se puede crear un código de retardo para PICs definiendo algunos parámetros (en el futuro usaremos un módulo TIMER del microcontrolador, pero cada cosa a su tiempo).

La rutina de pérdida de tiempo es:

;------------
Retardo1seg
        movlw d'0'
; Frecuencia de reloj = 4 MHz
; Retardo real = 1 segundo = 1000000 ciclos
; Error = 0 %
                ;999997 ciclos
        movlw        d'8'        ; 0x08
        movwf        d1
        movlw        d'47'        ; 0x2F
        movwf        d2
        movlw        d'3'        ; 0x03
        movwf        d3
Retardo_01
        decfsz        d1, f
        goto        $+2
        decfsz        d2, f
        goto        $+2
        decfsz        d3, f
        goto        Retardo_01
                ; 3 ciclos más
        goto        $+1
        nop
        return
; -----------------------------------------------------------

Veamos entonces cómo es un programa que utilice estas subrutinas para ordenar al robot un movimiento en L.

; -----------------------------------------------------------
Principal
        call DerechoAdelante
        call IzquierdoAdelante
;
        call Retardo1seg
;
        call DerechoAdelante
        call IzquierdoDetenido
;
        call Retardo1seg
;
        call DerechoAdelante
        call IzquierdoAdelante
;
        call Retardo1seg
;
        call DerechoDetenido
        call IzquierdoDetenido
;
; las siguientes llamadas al retardo son para que el robot 
; se detenga unos segundos antes de moverse nuevamente en 'L'
; y repetir esta secuencia constantemente...
        call Retardo1seg 
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
;
        goto Principal

; -----------------------------------------------------------

El programa completo en ASM con el método de llamado a subrutinas es el que sigue. Más abajo encontrarán un enlace para bajarse el archivo en formato TXT con el programa completo en ASM listo para compilar. En el próximo artículo presentaré la conversión del programa al método de programación con MACROS y una serie de ejemplos de programas con distintas rutinas de movimiento.

;************************************************************************
; Procesador: PIC16F876 con Xtal 4 MHz
; Función: Manejo del robot programable
; Hardware: Protoboard
; Archivo: 01
; Autor: Eduardo J. Carletti 
; Fecha: 21 septiembre 2014
;
; Historia: El robot avanza formando una L   
;    
;*************************************************************************

        list P = 16F876a
        include "P16f876a.inc"

        ERRORLEVEL 1;-302        ; para evitar los mensajes de cambio de
                                ; banco en el resultado del compilador

        __config  _CP_OFF & _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _BODEN_OFF

        CBLOCK 0x20        ; Declarar las variables
          d1 ; usada en Retardo1seg
          d2 ; usada en Retardo1seg
          d3 ; usada en Retardo1seg
        ENDC
;
; -----------
; INICIALIZAR
; -----------
;
        org 0x0000                ; Indica la dirección de origen del programa
        clrf STATUS                ; limpia el registro de estado
        movlw 0x00                ; valor cero 00
        movwf PCLATH                ; al contador de programa = comienzo 
        goto Comienzo                ; Salto a comienzo
        org 0x0004                
;
Comienzo
; BANCO
        bcf STATUS,RP0
        bcf STATUS,RP1                  ; RAM Página 0
; ------------------------------------
        movlw 0x00      
        movwf PORTA                ; Inicializar PORT A
        movlw 0x00
        movwf PORTB                ; Inicializar PORT B
        movlw 0x80
        movwf PORTC                ; Inicializar PORT C 
;
; ------------------------------------
; BANCO
        bsf STATUS,RP0                ; RAM Page 1
; ---------------------------------------------------------------
; FUNCION DE LAS PATAS DE LOS PORTS
; ---------------------------------------------------------------
;
        movlw 0x00
        movwf TRISA                ; Todas las patas port A salida
        movlw 0x00
        movwf TRISB                ; Todas las patas port B salida
        movlw b'10000000'
        movwf TRISC                ; Todas las patas port C salida excepto RC7/RX

        movlw 0x06                ; Todas las patas entrada/salida digital
        movwf ADCON1
;
; -----------------------------------------------------------
; BANCO
        bcf STATUS,RP0        ; Página RAM 0
; -----------------------------------------------------------
; -----------------------------------------------------------
; PRINCIPAL
; -----------------------------------------------------------

Principal
        call DerechoAdelante
        call IzquierdoAdelante
;
        call Retardo1seg
;
        call DerechoAdelante
        call IzquierdoDetenido
;
        call Retardo1seg
;
        call DerechoAdelante
        call IzquierdoAdelante
;
        call Retardo1seg
;
        call DerechoDetenido
        call IzquierdoDetenido
;
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
        call Retardo1seg
;
        goto Principal
;
;-------------------------------------
; SUBRUTINAS
;-------------------------------------

DerechoAdelante
        bsf PORTA,0        ; PORTA 0 = 1 - Motor derecho ad.
        bcf PORTA,1        ; PORTA 1 = 0 - Motor derecho ad.
return
;-------------------------------------

DerechoAtras
        bcf PORTA,0        ; PORTA 0 = 0 = Motor derecho atr.
        bsf PORTA,1        ; PORTA 1 = 1 = Motor derecho atr. 
return
;-------------------------------------

DerechoDetenido
        bcf PORTA,0        ; PORTA 0 = 0 = Motor derecho det.
        bcf PORTA,1        ; PORTA 1 = 0 = Motor derecho det.
return
;-------------------------------------

IzquierdoAdelante
        bcf PORTA,2        ; PORTA 2 = 0 = Motor izquierdo ad.
        bsf PORTA,3        ; PORTA 3 = 1 = Motor izquierdo ad.
return
;-------------------------------------

IzquierdoAtras
        bsf PORTA,2        ; PORTA 2 = 1 = Motor izquierdo atr.
        bcf PORTA,3        ; PORTA 3 = 0 = Motor izquierdo atr.
return
;-------------------------------------

IzquierdoDetenido
        bcf PORTA,2        ; PORTA 2 = 0 = Motor izquierdo det.
        bcf PORTA,3        ; PORTA 3 = 0 = Motor izquierdo det.
return
;-------------------------------------

Retardo1seg
        movlw d'0'
; Frecuencia de reloj = 4 MHz
; Retardo real = 1 seconds = 1000000 cycles
; Error = 0 %
                ;999997 cycles
        movlw        d'8'        ; 0x08
        movwf        d1
        movlw        d'47'        ; 0x2F
        movwf        d2
        movlw        d'3'        ; 0x03
        movwf        d3
Retardo_01
        decfsz        d1, f
        goto        $+2
        decfsz        d2, f
        goto        $+2
        decfsz        d3, f
        goto        Retardo_01
                ; 3 ciclos más
        goto        $+1
        nop
        return

; ----------------------------

        END

El archivo ASM se puede bajar de AQUÍ.

El microcontrolador "cerebro" del robot programable (básico)

Como se puede observar en el artículo sobre el diagrama básico del robot programable, utilizamos como unidad central de control un microcontrolador PIC16F876A de Microchip, en encapsulado DIP de 28 patas.

PIC16F876Apic16f876

Características de los microcontroladores PIC16F87xA

PIC16F87xA es una familia de 4 microcontroladores de Microchip: PIC16F873A, PIC16F874A, PIC16F876A y PIC16F877A. Se diferencian entre ellos por la cantidad de memoria disponible y la cantidad de conexiones al exterior, que dependen del modelo de su encapsulado, básicamente dos modelos en formato DIP (Dual In Line Package) los de 28 patas y los de 40 patas. También hay formatos de montaje de superficie: los de 28 en SOIC y SSOP, y los de 40 QFP (Quad Flat Package), de 44 patas, y PLCC (Plastic Leaded Chip Carrier), de 40 patas, con las mismas prestaciones que en el caso de cápsula DIP de 40.

EncapsuladosCápsulas

En la tabla que sigue, donde está remarcado el microcontrolador que controla en este momento el robot programable, podemos observar los siguientes datos:

FAMILIAFamilia

La primera columna (Micro controlador) lista los microcontroladores que componen esta familia.

Las columnas segunda (Progr bytes) y tercera (Progr words) indican los bytes de memoria de programa y la cantidad de words equivalentes (palabras de 14 bits en la arquitectura de estos microcontroladores, tamaño que ocupa cada instrucción de programa) que posee el microcontrolador para alojar el programa de usuario.

La columna (RAM bytes) indica el espacio de memoria RAM (memoria de acceso aleatorio) disponible.

La columna (EEPROM) indica el espacio de memoria EEPROM (memoria de sólo lectura modificable eléctricamente) disponible.

La columna (E/S) indica la cantidad de Entradas y Salidas de ese microcontrolador.

La columna (ADC 10bit) indica la cantidad de entradas al convertidor analógico digital de 10 bits de resolución.

La columna (CCP) indica la cantidad de módulos para comparar y capturar pulsos.

La columna (SPI) indica si existe un módulo de interfaz serie para periféricos.

La columna (I2C) indica si existe un módulo de interfaz serie inter-integrados.

La columna (USART) indica si existe un módulo universal de recepción/transmisión serie asincrónica.

La columna (TIMER 8/16) indica la cantidad de temporizadores de 8 y de 16 bits.

La columna (Comp) indica la cantidad de comparadores.

Los microcontroladores PIC16F87x de Microchip pertenecen a una gran familia de microcontroladores con un bus de datos de 8 bits, que tienen las siguientes características generales que los distinguen de otras familias:

Arquitectura Harvard
Tecnología RISC
Tecnología CMOS
– Sólo posee 35 instrucciones que aprender
– Todas las instrucciones se ejecutan en un ciclo de reloj, excepto los saltos, que requieren dos ciclos
– Frecuencia de operación de 0 a 20 MHz (desde CC a 200 ns de ciclo de instrucción)
– Hasta 8K x 14 bits de memoria FLASH para el programa
– Hasta 368 bytes de memoria de datos de acceso aleatorio (RAM)
– Hasta 256 bytes de memoria de datos EEPROM
– Hasta 14 fuentes de interrupción en los de 28 patas y 15 en los de 40 patas
Pila (Stack) de hardware de 8 niveles
– Reset de encendido (POR)
– Temporizador de encendido (PWRT)
– Temporizador de arranque del oscilador (OST)
– Sistema de vigilancia Watchdog Timer (temporizador “despertador”).
– Se puede programar una protección de código
– Modo SLEEP (dormido) de bajo consumo de energía
– Diversas opciones para el oscilador
– Programación y depuración serie (ICSP, In Circuit Serial Programming = Programación Serie En Circuito) a través de dos patas
– El CPU puede realizar lectura/escritura de la memoria FLASH de programa
– Rango de voltaje de operación de 2,0 a 5,5 volts
– Puede entregar alta corriente en una pata de salida: 25 mA
– Rangos de temperatura: Comercial, Industrial y Extendido
– Bajo consumo de potencia:
    . Menos de 0,6 mA a 3 V, 4 MHz
    . 20 µA a 3 V, 32 KHz
    . Menos de 1µA de corriente en estado latente (stand by).

Estas características se conjugan para lograr un dispositivo altamente eficiente en el uso de la memoria de datos y programa, y por lo tanto en la velocidad de ejecución.

El PIC16F876, utilizado en el robot programable, maneja hasta 14 posibles fuentes de interrupción.

Los módulos CCP pueden comparar y capturar la duración de pulsos. La captura se efectúa con una precisión de 12,5 ns y una resolución de 16 bits, mientras que la comparación con igual resolución alcanza una precisión de 200 ns. Además, la sección PWM varía el ancho de los pulsos con una resolución máxima de 10 bits, técnica muy empleada en la regulación de los motores de CC (corriente continua).

La USART está orientada a la comunicación entre sí de subsistemas o máquinas (RS-232), y el MSSP (Master Synchronous Serial Port = Puerto Sincrónico Serie Maestro; el módulo que implementa la comunicación I2C y SPI) está destinado a la comunicación entre diversos circuitos integrados, admitiendo los protocolos I2C y SPI.

En los PIC de esta familia con 40 patas (16F874 y 16F877) está disponible el protocolo PSP (Parallel Slave Port, o Puerto Paralelo Esclavo), que es más veloz que la comunicación serie pero consume muchas líneas de E/S: 8 del puerto D y 3 de control del puerto E. Sin embargo, es muy importante su existencia porque estos puertos permiten comunicarse con memorias y periféricos de acceso paralelo utilizados ampliamente en el mundo de los microprocesadores.

En todos los PIC 16F87X existe un conversor A/D de 10 bits, con 5 canales de entrada en los de 28 patas y 8 canales en los de 40.




Conexiones al exterior del microcontrolador PIC16F876A

Diagrama en bloques del microcontrolador PIC16F876A utilizado en el robot programable de los Robots Didácticos

SocialesDiagrama en bloques

Parámetros generales a tener en cuenta

Los microcontroladores que produce Microchip cubren un amplio rango de dispositivos cuyas características pueden variar como sigue:

– Encapsulado desde 8 patitas hasta 68 patitas
– Tecnología de la memoria incluida EEPROM, EPROM, ROM, FLASH
– Voltajes de operación desde 2,0 V hasta 6,0 V
– Frecuencia de operación hasta 20 MHz

En el caso de nuestro microcontrolador, el que controla el robot programable, los parámetros indicados son:

– Cápsula de 28 patas
– Memoria RAM, EEPROM y FLASH
– Voltaje de operación de 2 V a 5,5 V
– Frecuencia máxima de operación de 20 MHz

Encapsulado

El microcontrolador de nuestro robot está disponible en cápsulas DIP, SOIC y SSOP de 28 patas, que se pueden observar en las figuras de encapsulados que mostramos a continuación y en los diagramas de patas ubicados al comienzo.

Encapsulado DIP, SOIC y SSOPCápsulas

Por el momento utilizamos la cápsula DIP de 28 patas.

Parte del montaje del robot didáctico programableMicrocontrolador en el robot

Diagrama de entradas y salidas del PIC16F876A en formato DIP 28PIC16F876A

Oscilador

Los PIC de rango medio permiten hasta 8 diferentes modos de funcionamiento para el oscilador. El usuario puede seleccionar alguno de estos modos programando 3 bits de configuración en el dispositivo denominados: FOSC2, FOSC1 y FOSC0. En algunos de estos modos el usuario puede indicar que se genere o no una salida del oscilador (CLKOUT) a través de una pata de Entrada/Salida.

Los modos de operación se muestran en la siguiente lista:

LP Baja frecuencia (y bajo consumo de potencia)
XT Cristal / Resonador cerámico externos (frecuencia media)
HS Alta velocidad (y alto consumo de energía) cristal/resonador
RC Resistor/Capacitor externos (lo mismo que EXTRC con salida CLKOUT)
EXTRC Resistor/ capacitor externos
EXTRC Resistor/Capacitor externos con CLCKOUT
INTRC Resistor/Capacitor internos para una frecuencia de operación de 4 MHz
INTRC Resistor/Capacitor internos para operación a 4 MHz con CLKOUT

Los modos LP, XT y HS requieren un cristal o resonador externo.

Cristal externo: En los tres modos se puede utilizar un cristal o un resonador cerámico externo.

Circuito RC externo: En los modos RC y EXTRC, el PIC puede generar su señal de oscilación basada en un conjunto RC (Resistor/Capacitor) externo conectados al microcontrolador.

Este modo sólo se recomienda cuando la aplicación no requiera una gran precisión en la medición de tiempos.

Rangos

La frecuencia de oscilación depende no sólo de los valores del resistor Rext y el capacitor Cext, sino también del voltaje de la fuente, Vdd. Los rangos admisibles para el resistor y capacitor son:

Rext: de 3 a 100 Kohms
Cext: mayor de 20 pf

Oscilador externo

También es posible conectarle al microcontrolador una señal de reloj generada en un oscilador externo a través de la pata OSC1 del PIC. Para ello el PIC deberá estar en uno de los tres modos que admiten cristal (LP, XT o HS).

Oscilador interno de 4 MHz

En el modo INTRC, el PIC utiliza un conjunto RC interno que genera una frecuencia de 4 MHz con un rango de error calibrable de ± 1,5%. Para calibrar el error de oscilación se usan los bits CAL3, CAL2, CAL1 Y CAL0 del registro OSCCAL.

Calibración del oscilador interno

El fabricante ha colocado un valor de calibración para estos bits en la última dirección de la memoria de programa. Este dato se ha guardado en la forma de una instrucción RETLW XX. Si no se quiere perder este valor al borrar el PIC (por ejemplo en versiones EPROM con ventana) primero se deberá leer esta memoria y copiar el valor en un resguardo. Es una buena idea escribir el valor en la cápsula empaquetado antes de borrar la memoria.

En la siguiente figura se muestran las conexiones en cada uno de los modos:

Modos de oscilador de relojOsciladores

En nuestro robot programable utilizamos un cristal de 4 MHz en modo XT.

Periféricos

Timer0 : Contador/Temporizador de 8 bits con pre-escalador de 8bits
Timer1 : Contador/Temporizador de 16 bits con pre-escalador
Timer2 : Contador/Temporizador de 8 bits con pre-escalador y post-escalador de 8 bits y registro de periodo.
– Dos módulos de Captura, Comparación y PWM
Convertidor Analógico/Digital: de 10 bits, hasta 8 canales (en nuestro robot, hasta 5 canales)
Puerto Serie Síncrono (SSP)
Puerto Serie Universal (USART/SCI).

Descripción de la CPU (Central Processing Unit = Unidad Central de Proceso)

La CPU es la responsable de la interpretación y ejecución de la información (instrucciones) guardada en la memoria de programa. Muchas de estas instrucciones operan sobre la memoria de datos. Para operar sobre la memoria de datos, además, si se van a realizar operaciones lógicas o aritméticas, se debe usar la Unidad Lógica y Aritmética (Arithmetic Logic Unit = ALU). La ALU controla los bits de estado (Registro STATUS). Los bits de este registro se alteran dependiendo del resultado de algunas instrucciones.

Ciclo de instrucción

El registro Contador de Programa (Program Counter = PC) es gobernado por el ciclo de instrucción. En cada ciclo de instrucción la CPU lee la instrucción guardada en la memoria de programa que está apuntada por el PC (ciclo Traer = Fetch) y al mismo tiempo ejecuta la instrucción anterior, esto debido a una cola de instrucciones que le permite ejecutar una instrucción mientras lee la próxima:

Cada ciclo de instrucción (Tcy) se compone a su vez de cuatro ciclos del oscilador (Tosc). Cada ciclo Q provee la sincronización para los siguientes eventos:

– Q1: Decodificación de la instrucción
– Q2: Lectura del dato (si lo hay)
– Q3: Procesa el dato
– Q4: Escribe el dato

Debido a esto cada ciclo de instrucción consume 4 ciclos de reloj, de manera que si la frecuencia de oscilación es Fosc, Tcy será 4/Fosc.

Registros de la CPU

Registro PC (Program Counter o Contador de Programa)

Es un registro de 13 bits que siempre apunta a la siguiente instrucción a ejecutarse.

Registro de Instrucción

Es un registro de 14 bits. Todas las instrucciones se colocan en él para ser decodificadas por la CPU antes de ejecutarlas.

Registro W

Registro de 8 bits que guarda los resultados temporales de las operaciones realizadas por la ALU

Registro STATUS (Estado)

Es un registro de 8 bits. Cada uno de ellos (denominados Banderas) es un indicador de estado de la CPU o del resultado de la última operación.

Banderas en el registro de Estado

Z – Este bit se pone (= 1) para indicar que el resultado de la última operación fue cero, de lo contrario se limpia (= 0)

C – Bit de Acarreo/Préstamo de la última operación aritmética (en el caso de resta, se guarda el préstamo invertido.

CD – Acarreo/Préstamo proveniente del cuarto bit menos significativo. Funciona igual que el bit C, pero para operaciones de 4 bits.

Posibilidad de direccionamiento indirecto

Este modo de direccionamiento permite acceder una localidad de memoria de datos usando una dirección de memoria variable, a diferencia del direccionamiento directo, en que la dirección es fija. Esto puede ser útil para el manejo de tablas de datos.

Funcionamiento básico de los puertos de Entrada/Salida

Ejemplo: el Puerto A (PORTA)

El puerto A posee 6 líneas bidireccionales. Los puertos tienen asociados registros que regulan su funcionamiento. En el caso del Puerto A hay 3 registros asociados a él, que son:

Registro PORTA (05H)

Registro de estado del Puerto A. Cada uno de los 6 bits menos significativos (RA5 a RA0) de este registro están asociados a la línea física correspondiente del puerto. Al hacer una lectura este registro se lee el estado de todas las patas del puerto. Todas las escrituras al registro son operaciones del tipo “lee-modifica-escribe”, es decir, toda escritura al puerto implica que el estado de las patas es leído, luego es modificado y posteriormente se escribe al registro de datos del puerto.

Registro TRISA (85H)

Cada bit de este registro configura la dirección en que fluye la información de la pata correspondiente del puerto A: entrada o salida.

Bit n de TRISA = 1 configura la patita RAn del puerto A como Entrada
Bit n de TRISA = 0 configura la patita RAn del puerto A como Salida

Los puertos de un microcontrolador son muy variados entre sí. Tienen características muy similares –si no idénticas– cuando se utilizan como entradas o salidas, pero además la mayoría de las patas de un microcontrolador, a veces todas, poseen otras funciones. Estas funciones adicionales, que se seleccionan por medio de un registro de configuración, a veces condicionan algunas características de entrada/salida de la pata.

Las patas del puerto A poseen diodos de protección conectados a Vdd (para proteger de altos voltajes de entrada) y a Vss (para proteger contra voltajes negativos). Manejan niveles de entrada tipo TTL y como salida poseen transistores tipo CMOS. La pata RA4, tiene tres excepciones a la regla de las entradas/salidas este puerto: como entrada posee un disparador Schmitt (Schmitt Trigger) y como salida la configuración de transistores es de drenaje abierto. Además RA4 sólo posee diodo de protección conectado a Vss.

El Registro ADCON1 (9FH)

Las patas RA0, RA1, RA2, RA3 y RA5 se pueden conectar a las entradas analógicas AN0 a AN4. Debemos configurar en este registro si serán usadas como entradas analógicas o como entradas/salidas digitales. Para seleccionar la segunda opción (entradas/salidas digitales) se debe colocar en la mitad menos significativa de este registro un 0110 (es decir, un 06h).

Registros del Puerto APuerto A

Todos los detalles sobre este y los otros puertos de entrada/salida, y del microcontrolador en general, se pueden buscar en la hoja de datos original de Microchip, o en esta traducción al castellano.





Robot Programable: Diagrama Básico en Bloques

El robot programable de nuestras clases posee un microcontrolador PIC16F876A como centro de control, un integrado L293D de manejo de potencia para los motores y circuitos auxiliares.

En el momento de introducir la programación al robot se inserta un módulo de comunicación USB/USART que convierte las señales de nivel USB que salen de la PC al nivel TTL utilizado en el microcontrolador.

Diagrama básico en bloquesDiagrama en bloques

La comunicación se establece entre un programa de carga de datos en la PC y el módulo de comunicaciones serie del microcontrolador (USART o Universal Serial Asynchronous Receiver / Transmiter = Receptor / Transmisor Asincrónico Serie Universal), que es controlado en el microcontrolador por un pequeño programa de carga de datos llamado “bootloader“, o cargador inicial.

Este programa se ocupa de tomar los datos que componen nuestro programa a través del puerto serie del microcontrolador (USART), y grabarlos en la memoria de programa. Describiré con más detalles este proceso en el próximo artículo.

En este caso, el microcontrolador PIC16F876A trabaja a una velocidad de reloj de 4 MHz (puede hacerlo hasta 20 MHz). Esto lo determina un cristal conectado a sus patas de oscilador. El cristal, como es habitual, tiene dos capacitores auxiliares en su circuito. Para los observadores, en la imagen que sigue verán otro chip (el que maneja la corriente de los motores), un regulador de voltaje, capacitores y resistores auxiliares, una llave de encendido (de color negro), una llave de reinicio (de color rojo), y hacia la parte baja de la imagen un conjunto de pequeñas llaves deslizantes (llamado DIP switch, también de color rojo y con las llavecitas en blanco) que utilizo para ingresar indicaciones al microcontrolador. Estos indicadores se pueden comprobar en el programa a través de unas entradas y seguir, según su posición, diferentes acciones. En un principio, con las primeras 6 llavecitas se eligen partes del programa que realizan diferentes secuencias de movimiento.

En las imágenes que siguen se puede observar el montaje del robot a nivel de prueba (con plaqueta base de prototipo, o protoboard), primero con la conexión USB-USART inserta, luego el robot libre (tal como funciona al ponerlo en marcha), y el mismo montaje visto de abajo.Robot con cable
Robot sin cable
Robot de abajo


Esta imagen muestra de cerca la parte de circuito de control.

Detalle del área del controlÁrea de control

En la imagen de abajo se observa un detalle del área del microcontrolador, el cristal con sus capacitores, y la llave que se utiliza para reiniciar (reset) al momento de programar o de reponer el funcionamiento del robot a sus condiciones iniciales.

Detalle del área del microcontroladorÁrea del microcontrolador

El microcontrolador maneja los motores derecho e izquierdo utilizando un amplificador de potencia L293D. Las señales de control son 4, dos para cada uno de los motores, y permiten seleccionar tres estados: marcha adelante, marcha atrás y detención.

Detalle del L293D y su conexión con el microcontrolador.Área del control de motores

El arranque de los motores puede generar bajones de tensión en los 6V que aportan 4 pilas recargables tamaño AA de 1,5V. Por eso entre las pilas y la alimentación del microcontrolador se insertó un regulador de voltaje LM2940CT-5.0 que lleva los 6V a 5V, y que tiene a su salida un capacitor electrolítico de alto valor que ayuda, con su carga, a mantener estable el voltaje de la parte de control en los momentos en que los motores producen bajones de tensión al arrancar. La parte de los motores se alimenta directamente con 6V, en la etapa previa a la regulación.

En la imagen, un detalle de la parte de regulación de voltaje.Área de regulación de voltaje

El microcontrolador recibe su programación a través de dos señales, RX, o recepción, y TX, o transmisión. Esto configura la comunicación serie entre el microcontrolador del robot y el programa en la PC que envía los datos a programar.

Detalle de la conexión entre el módulo adaptador entre el puerto USB de la PC y el puerto USART del microcontrolador.Área de interconexión con la PC

El módulo tiene 4 contactos enchufables, y se desenchufa para operar el robot dejándolo moverse libremente.

Se observan en el circuito unos pequeños capacitores azules de 0,1 uF, llamados capacitores de desacople, que sirven para filtrar los ruidos de alta frecuencia producidos por las chispas de las escobillas de los motores, que podrían interferir con el funcionamiento del microcontrolador.

La imagen señala la posición de estos capacitores.Capacitores de filtro

Aquí se observan una cantidad de módulos comerciales de adaptación
del puerto USB de la PC al puerto USART de un microcontrolador.
Módulos

Continuaré con más detalles de circuito y de programación en los próximos artículos.






Pruebas con el robot programable (1)

El robot programable de nuestras clases posee dos motores de corriente continua con reducción a engranajes y encoder de ranuras, un circuito integrado L293D para el manejo de la corriente de los motores y un microcontrolador PIC16F876A con bootloader como centro de control. Utiliza 4 pilas recargables de 1,5V

El primer montaje en las pruebas originales sobre una placa de prototipo, con un cableado “desprolijo”Versión desprolija

La placa de prototipo con el cableado prolijo, que asegura la comprensión visual y evita fallas por el movimiento del cableadoVersión desprolija

Fue construido sobre una base estándar comprada en China a través de e-Bay, con dos motores con reducción, encoder de ranura y rueda, rueda loca y portapilas. Este kit se compra en eBay por entre 10 y 17 dólares, dependiendo de los proveedores y de las ofertas, y con envío gratis. En la aduana argentina se paga un 50% sobre el valor del envío (yo pagué 5 kits a un valor de us$13 cada uno, así que puestos aquí me costaron 13 + 6,5 = us$ 19,5 o $166 [la cotización del día que escribo esto es $8,50 por 1 dólar, si no se dispone de dólar a precio oficial, pagando con tarjeta el valor es de alrededor de $12 por dólar]). Si lo buscan en Mercadolibre (Argentina) lo encontrarán a $525, o sea, un precio unas 3 veces superior.




Sigue leyendo