sábado, 9 de enero de 2016

MICROCONTROLADORES

La situación actual en el campo de los microcontroladores se ha producido gracias al desarrollo de la tecnología de fabricación de los circuitos integrados. Este desarrollo ha permitido construir las centenas de miles de transistores en un chip. Esto fue una condición previa para la fabricación de un microprocesador. Las primeras microcomputadoras se fabricaron al añadirles periféricos externos, tales como memoria, líneas de entrada/salida, temporizadores u otros. El incremento posterior de la densidad de integración permitió crear un circuito integrado que contenía tanto al procesador como periféricos. Así es cómo fue desarrollada la primera microcomputadora en un solo chip, denominada más tarde microcontrolador. 

Microcontrolador contra microprocesador




Los principiantes en electrónica creen que un microcontrolador es igual a un microprocesador. Esto no es cierto. Difieren uno del otro en muchos sentidos. La primera y la más importante diferencia es su funcionalidad. Para utilizar al microprocesador en una aplicación real, se debe de conectar con otros componentes, en primer lugar con la memoria. Aunque el microprocesador se considera una máquina de computación poderosa, no está preparado para la comunicación con los dispositivos periféricos que se le conectan. Para que el microprocesador se comunique con algún periférico, se deben utilizar los circuitos especiales. Así era en el principio y esta práctica sigue vigente en la actualidad.

Por otro lado, al microcontrolador se le diseña de tal manera que tenga todas las componentes integradas en el mismo chip. No necesita de otros componentes especializados para su aplicación, porque todos los circuitos necesarios, que de otra manera correspondan a los periféricos, ya se encuentran incorporados. Así se ahorra tiempo y espacio necesario para construir un dispositivo.


MICROCONTROLADOR PIC


El nombre verdadero de este microcontrolador es PICmicro - controlador de interfaz periférico (Peripheral Interface Controller), conocido bajo el nombre PIC. Su primer antecesor fue creado en 1975 por la compañía  General Instruments.  Este chip denominado PIC1650 fue diseñado para propósitos completamente diferentes. Aproximadamente diez años más tarde, al añadir una memoria EEPROM, este circuito se convirtió en un verdadero microcontrolador PIC. 

JUEGO DE INSTRUCCIONES

El juego de instrucciones para los microcontroladores 16F8XX incluye 35 instrucciones en total. La razón para un número tan reducido de instrucciones yace en la arquietectura RISC. Esto quiere decir que las instrucciones son bien optimizadas desde el aspecto de la velocidad operativa, la sencillez de la arquitectura y la compacidad del código. La desventaja de la arquitectura RISC es que se espera del programador que haga frente a estas instrucciones. Por supuesto, esto es relevante sólo si se utiliza el lenguaje ensamblador para la programación. Este libro se refiere a la programación en el lenguaje de alto nivel Basic, lo que significa que la mayor parte del trabajo ya fue hecho por alguien más. Así, sólo se tienen que utilizar instrucciones relativamente simples.

TIEMPO DE EJECUCIÓN DE INSTRUCCIONES

Todas las instrucciones se ejecutan en un ciclo. La únicas excepciones pueden ser las instrucciones de  ramificación condicional o las instrucciones que cambian el contenido del contador de programa. En ambos casos, dos ciclos de reloj son necesarios para la ejecución de la instrucción, mientras que el segundo ciclo se ejecuta como un NOP (No operation). Las instrucciones de un ciclo consisten en cuatro ciclos de reloj. Si se utiliza un oscilador de 4 MHz, el tiempo nominal para la ejecución de la instrucción es 1mS. En cuanto a las instrucciones de ramificación, el tiempo de ejecución de la instrucción es 2µS.
Juego de instrucciones de los microcontroladores PIC de 14 bits:
INSTRUCCIÓNDESCRIPCIÓNOPERACIÓNBANDERACLK*
Instrucciones para la transmisión de datos
MOVLW kMover literal a Wk -> w
1
MOVWF fMover el contenido de W a fW -> f
1
MOVF f,dMover el contenido de f a df -> dZ11, 2
CLRWBorrar el contenido de W0 -> WZ1
CLRF fBorrar el contenido de f0 -> fZ12
SWAPF f,dIntercambiar de nibbles en ff(7:4),(3:0) -> f(3:0),(7:4)
11, 2
Instrucciones aritmético - lógicas
ADDLW kSumar literal a WW+k -> WC, DC, Z1
ADDWF f,dSumar el contenido de W y fW+f -> dC, DC ,Z11, 2
SUBLW kRestar W de literalk-W -> WC, DC, Z1
SUBWF f,dRestar W de ff-W -> dC, DC, Z11, 2
ANDLW kAND W con literalW AND k -> WZ1
ANDWF f,dAND W con f W AND f -> dZ11, 2
IORLW kOR inclusivo de W con literalW OR k -> WZ1
IORWF f,dOR inclusivo de W con fW OR f -> dZ11, 2
XORWF f,dOR exclusivo de W con literalW XOR k -> WZ11, 2
XORLW kOR exclusivo de W con fW XOR f -> dZ1
INCF f,dSumar 1 a ff+1 -> fZ11, 2
DECF f,dRestar 1 a ff-1 -> fZ11, 2
RLF f,d
Rotar F a la izquierda a través del bit de Acarreo

C11, 2
RRF f,dRotar F a la derecha a través del bit de Acarreo
C11, 2
COMF f,dComplementar ff -> dZ11, 2
Instrucciones orientadas a bit
BCF f,bPoner a 0 el bit b del registro f0 -> f(b)
11, 2
BSF f,bPoner a 1 el bit b del registro f1 -> f(b)
11, 2
Instrucciones de control de programa
BTFSC f,bSaltar si bit b de registro f es 0Skip if f(b) = 0
1 (2)3
BTFSS f,bSaltar si bit b de reg. f es 1Skip if f(b) = 1
1 (2)3
DECFSZ f,dDisminuir f en 1. Saltar si el resultado es 0.f-1 -> d skip if Z = 1
1 (2)1, 2, 3
INCFSZ f,dIncrementar f en 1. Saltar si el resultado es 1.f+1 -> d skip if Z = 0
1 (2)1, 2, 3
GOTO kSaltar a una direcciónk -> PC
2
CALL kLlamar a una subrutinaPC -> TOS, k -> PC
2
RETURNRetornar de una subrutinaTOS -> PC
2
RETLW kRetornar con literal en Wk -> W, TOS -> PC
2
RETFIERetornar de una interupciónTOS -> PC, 1 -> GIE
2
Otras instrucciones
NOPNo operaciónTOS -> PC, 1 -> GIE
1
CLRWDTReiniciar el temporizador perro guardián0 -> WDT, 1 -> TO, 1 -> PDTO, PD1
SLEEPPoner en estado de reposo0 -> WDT, 1 -> TO, 0 -> PDTO, PD1
*1 Si un registro de E/S está modificado, el valor utilizado será el valor presentado en los pines del microcontrolador.
*2 Si la instrucción se ejecuta en el registro TMR y si d=1, el pre-escalador será borrado.
*3 Si el contador de programa está modificado o el resultado de prueba es un uno lógico (1), la instrucción tiene una duración de dos ciclos. El segundo ciclo se ejecuta como un NOP

DIAGRAMA DE BLOQUES DE LA ARQUITECTURA PIC


Arquitectura de los microcontroladores PIC de 8 bits. Cuáles de estos módulos pertenecerán al microcontrolador, dependerá del tipo de microcontrolador.

martes, 8 de diciembre de 2015

PROGRAMAR EN C

Lenguaje C

El lenguaje C dispone de todas las ventajas de un lenguaje de programación de alto nivel (anteriormente descritas) y le permite realizar algunas operaciones tanto sobre los bytes como sobre los bits (operaciones lógicas, desplazamiento etc.). Las características de C pueden ser muy útiles al programar los microcontroladores. Además, C está estandarizado (el estándar ANSI), es muy portable, así que el mismo código se puede utilizar muchas veces en diferentes proyectos. Lo que lo hace accesible para cualquiera que conozca este lenguaje sin reparar en el propósito de uso del microcontrolador. C es un lenguaje compilado, lo que significa que los archivos fuentes que contienen el código C se traducen a lenguaje máquina por el compilador. Todas estas características hicieron al C uno de los lenguajes de programación más populares.

Ventajas de lenguajes de programación de alto nivel

A pesar de todos los lados buenos, el lenguaje ensamblador tiene algunas desventajas:

  • Incluso una sola operación en el programa escrito en ensamblador consiste en muchas instrucciones,
  • haciéndolo muy largo y difícil de manejar.

  • Cada tipo de microcontrolador tiene su propio conjunto de instrucciones que un programador tiene que
  • conocer para escribir un programa
  • Un programador tiene que conocer el hardware del microcontrolador para escribir un programa

Los lenguajes de programación de alto nivel (Basic, Pascal, C etc.) fueron creados con el propósito de superar las desventajas del ensamblador. En lenguajes de programación de alto nivel varias instrucciones en ensamblador se sustituyen por una sentencia. El programador ya no tiene que conocer el conjunto de instrucciones o características del hardware del microcontrolador utilizado. Ya no es posible conocer exactamente cómo se ejecuta cada sentencia, de todas formas ya no importa. Aunque siempre se puede insertar en el programa una secuencia escrita en ensamblador.
Si alguna vez ha escrito un programa para un microcontrolador PIC en lenguaje ensamblador, probablemente sepas que la arquitectura RISC carece de algunas instrucciones. Por ejemplo, no hay instrucción apropiada para multiplicar dos números. Por supuesto, para cada problema hay una solución y este no es una excepción gracias a la aritmética que permite realizar las operaciones complejas al descomponerlas en un gran número operaciones más simples. En este caso, la multiplicación se puede sustituir con facilidad por adición sucesiva (a x b = a + a + a + ... + a). Ya estamos en el comienzo de una historia muy larga. No hay que preocuparse al utilizar uno de estos lenguajes de programación de alto nivel como es C, porque el compilador encontrará automáticamente la solución a éste problema y otros similares. Para multiplicar los números a y b, basta con escribir a*b.

jueves, 8 de octubre de 2015

PROGRAMAR EN ASSEMBLER


Programar en assembler tiene sus ventajas y desventajas y se podría decir que es algo obsoleto ya en la actualidad, habiendo una cantidad muy grande de lenguajes de programación, como por ejemplo, entre los más conocidos, C, o Visual Basic. Sin embargo, este lenguaje de bajo nivel, es excelente cuando se necesita programar algo muy minucioso y preciso. Por ejemplo, cuando se programa un microcontrolador PIC, y se necesitan ahorrar tiempos, es un excelente lenguaje de programación a utilizar. Ahora entonces empezaremos a detallar las ventajas y desventajas de programar en assembler.



Ventajas de programar en assembler:

  • Es posible realizar el programa con mucho más detalle teniendo en cuenta los tiempos. Por ejemplo, en la electrónica, el tiempo es algo muy importante y poder aprovecharlo al máximo es una gran ventaja. Entonces, se puede decir que se trabaja mucho mejor con el tiempo sin desaprovecharlo.
  • Se ve la programación en si, bien estructurada, y con esto se aprende a programar en lenguaje máquina. Esta es una gran ventaja de este lenguaje de programación.
  • Otra ventaja de assembler es la flexibilidad entre los diferentes sistemas operativos que andan circulando en la informática. Por ejemplo, si programamos un software para Microsoft, lo podremos ejecutar también en UNIX. Esta es una gran ventaja del lenguaje máquina, a comparación de los       lenguajes de alto nivel.

Desventajas de programar en assembler:



  • La gran desventaja es que se trabaja a muy bajo nivel y cuando se programa es necesario detallar cada característica a tener en cuenta. No podemos obviar nada porque de lo contrario el programa no funcionará.
  • Los comandos no son tan fáciles a comparación de un lenguaje de programación de alto nivel, ya que estos están hechos para que la interpretación sea más didáctica.
  • Se está mucho tiempo programando algo que podría ser mucho más fácil en un lenguaje de alto nivel.
  • Al final de cuentas, se escriben muchas más líneas de código y esto puede resultar molesto cuando se realiza el programa.