martes, 29 de noviembre de 2011

CORSI FINAL

Como habíamos explicado en la entrada anterior, nuestro proyecto final de Laboratorio II es un tablero de CORSI. Para la presentación en el laboratorio la haremos con el protoboard y para la entrega en el CESNI se hará con la PC.
Les dejamos el link del programa para 3 niveles:
Descargar programa en C
y también el tp en formato .PDF:
Descargar tp en PDF
Además agregamos la simulación en Proteus:
Descargar la Simulación

Diseño del circuito Esquemático en Protel 99:
Descargar Protel

jueves, 22 de septiembre de 2011

Comparación de Microcontroladores


En esta entrada vamos comparar, explicando las ventajas y desventajas, de los distintos microcontroladores de distintas empresas. Vamos a comparar Atmel (con su micro ATMEGA8), FreeScale (con su micro GP32) y Microchip (con su micro PIC16F84).


Para comenzar, los micro-controladores ATMEL son más difíciles de conseguir, pero son más económicos.
Mientras  que los microcontroladores de FreeScale son 100 veces más rápidos que otros microcontroaldores. Es fácil de programar y reprogramar.
Los microcontroladores de Microchip ya han sido desarrolados en el blog.



Microcontroladores ATMEL
Los microcontroladores ATMEL son:

  • TinyAVR (8 bits):
    • Son muy pequeños
    • utilizan poca RAM
    • Utilizan poca Flash
    • Limitación de periféricos: Una instrucción por ciclo
    • Rápidos
    • Hasta 20MHz
    • Min: 0,7V
    • Uso general
    • De 0,5 a 8k de flash 

  • MegaAVR
    • Mejor que el TinyAVR
    • Función de Ahorro de Energía
    • Uso general (Ej. LCD)
    • Mejores periféricos y opciones
    • Desde 4 hasta 256k de memoria flash
  • 8/16BitsxMEGA 
    • Muy Grandes
    • Uso General
    • Rendimiento Extremo
    • USB
    • Con soldado superficial
    • Posibilidad de mover datos rápidamente de un periférico a otro
  • 32BitsxMEGA (Como los PIC32F)
    • Uso General
    • Conexión Ethernet
    • Hasta 66MHz
    • 1.5Mps/Instrucción
    • Ultrapotentes
  • Para Usos especificos
    • Manejo de Baterias
      • Control de Temperatura
      • Cortocircuitos
    • Para los Automóviles
  • ATMEGA8 (Equivalente al PIC12f873)




    • En Arg: ATM Mega8 L.
    • En US.: ATM Mega8 A.
    • 8Mhz / 16Mhz
    • 130 Instrucciones (Muchas)
    • RISC Avanzada
      • Muchas Instrucciones
      • Una Instrucción por Clock
      • Rápido
    • Compacto
    • 8k de Flash
    • 1k de RAM (GPR en Microchip)
    • 23 Pines de entrada/Salida
    • 18 Interrupciones
    • Lenguaje C
    • Comparador Analógico
    • 0,5 de EEPROM


Es importante resaltar que a diferencia de los PIC, los microcontroladores ATMEL no tienen bancos. La memoria RAM está dividida en 2 Registros y direcciones y a continuación de los registros los I/O registers.

Herramientas:
  • Programadores
    • AVRDUDE
    • PONYPROGE
  • Compiladores
    • GNUToolChain
  • Simlación:
    • SimulAVR + GDB
  • Entornos Gráficos
    • Code::Bocks
    • Eclipse Plugin AVR (Java)


La tensión máxima que puede soportar es de 6V
Alcaración: No hay que superar los 300mA entre la suma de todos los puertos.
BOOTLOADER: Sirve para que el microcontrolador.se autoprograme.

MOTOROLA - FREESCALE
Antiguamente la empresa que los fabricaba era Motorola, actualmente la empresa se llama FreeScale

Microcontrolador Utilizado: GP32
  • Ventajas
    • 100 Veces más rapido
    • Facilidad al programar y reprogramar
    • 8/16Bits
    • Posibilidad de multiplicar y dividir
    • Tiene una alta performance
    • Facilidad de comunicación con otros micro-controladores
    • Funciona entre -40C  a 85°C
    • 512Mb de memoria RAM
    • Memoria EEPROM de 32K
    • Modo Stand-By
    • Conversores A/D
    • Puerto SERIE
    • Tiene una memoria continua (Sin bancos)
    • Sencillo
    • Utiliza arquitectura Von Neumann
      • Memoria de Datos y Memoria de Programa en el mismo lugar:
      • Se congestiona el BUS.
    • Memoria Flash: 32K
    • Motorola es como una PC
    • Divide por 4 la frecuencia del oscilador
    • Para poner un literal: #[          --------- En pic es Movlw

    • Ejemplo: LDA $50 = movf 0x50,W (En PIC)
    • Ejemplo: mov $00,$F0 ---------- En pic hay que pasar SIEMPRE por el W.


 Archivo resultante del compilador:
  • ATMEL
    • .elf
  • Motorola
    • .S19
  • Microchip
    • Directamente el .Hex sin pasos posteriores.


Tiendas de Eléctrónica en Argentina:

Intek: No comercializan el GP32
           No tienen el ATMega8, pero ofrecen el ATMega88: (http://atmel.com/dyn/resources/prod_documents/8161S.pdf). Su valor es de $43,03.


MicroElectrónicaSH:

GP32:      $86,48
Atmega8: $23,04



A continuación, una tabla de comparación entre las tres empresas:


miércoles, 14 de septiembre de 2011

Programa LCD: "Hola Mundo"

Este programa, para el PIC16F84A, servirá para mostrar en un LCD (LM016L), la palabra "Hola Mundo"
Este programa utilizará las subrutinas del libro PIC16F84.

El programa es el siguiente:


BANK1
movlw b'11111'
movwf TRISA       ;todo el PORTA como entrada
movlw b'00000000'
movwf TRISB       ;todo el PORTB como salida
BANK0
;====================================================================
; Programa principal
;====================================================================
call LCD_Inicializa           ;Se inicializa el LCD
call Retardo_1ms

movlw 'H'
call LCD_Caracter

movlw 'o'
call LCD_Caracter

movlw 'l'
call LCD_Caracter

movlw 'a'
call LCD_Caracter

movlw ' '
call LCD_Caracter

movlw 'M'
call LCD_Caracter

movlw 'u'
call LCD_Caracter

movlw 'n'
call LCD_Caracter

movlw 'd'
call LCD_Caracter

movlw 'o'
call LCD_Caracter
 
goto $

include <RETARDOS.inc>
include <LCD_4BIT.inc>

Aclaración:
En la subrutina retardos.inc se realizó un cambio y se agregó un nuevo retardo para que el lcd funcione
con una frecuencia de 250k:

Luego podemos simularla en proteus, y nos quedará de la siguiente manera:


jueves, 8 de septiembre de 2011

Proyecto Final: Tablero de Corsi

El proyecto final de la materia del grupo será un tablero de CORSI. Un tablero de CORSI es como el popular juego "SIMON". Este tablero consta de 8 luces (Correspondientes a las letras A - H). Estas luces están conectadas a 8 pulsadores. Las secuencias están en la imagen al final de esta entrada. Cada luz tendrá que estar encendida por 2 segundos y apagadas por un segundo. Nuestro proyecto final es armar un programa que realicen las secuencias pactadas anteriormente. También va a tener un LCD, que le dirá al usuario la próxima instrucción a realizar. También tendrá una conexión para guardar los datos en una PC (USB  ó SERIE) que además podrá ver errores típicoscomo por ejemplo que se prendan más luces que las necesarias, menos que las necesarias, etc.
Funcionamiento del programa:

  • Al prender el equipo se seteará el LCD y luego dirá "Bienvenido" y luego "CESNI"
  • Luego el LCD esperará a que se presione un botón de START. En ese momento el display dirá NIVEL 1.
  • Las luces empezarán a prenderse y a apagarse según la tabla.
  • El usuario tendrá que repetir la secuencia. Si por alguna razón no la recuerda tendrá un botón para pasar a una segunda secuencia (Grupo 2).
  • Al realizar esto el display mostrará nivel 2 y mandará los datos vía PC.
  • Esto seguirá así con los demás niveles
Componentes necesarios para la realización del proyecto:
  • 1 LCD
  • 8 pulsadores
  • 8 luces
  • Conector USB ó SERIE
  • 1 pulsador "START"
  • 1 pulsador para tener otra secuencia del mismo nivel.
  • 1 llave de encendido

Este proyecto será destinado al CESNI (Centro de Estudios Sobre Nutrición Infantil) para que puedan completar su investigación.
SI SE REALIZA ALGÚN CAMBIO EN EL PROYECTO SERÁ CAMBIADO EN ESTA ENTRADA



miércoles, 24 de agosto de 2011

Inexado_02

*Diseñar un programa para controlar el nivel del deposito de líquido. El depósito tiene:

  • Tres sondas detectoras ( SV - Sonda de Vacío, SLL - Sonda de Llenado, SR - Sonda de Rebose.
  • Dos bombas de llenado: BOMBA1 y BOMBA2
  • 5 Indicadores: Vacío, Llenandose, Lleno, Rebose, ALARMA
Funcionamiento:
  • Cuando ninguna de las sondas está activada, se entiende que el depósito está vacío y se accionarán las 2 bombas. El indicador VACÍO se  iluminará.
  • Cuando el nivel de líquido toca "SV" se seguirá llenando con ambas bombas. El indicador "Llenandose" se ilumina.
  • Cuando el indicador "SLL" se activa, la BOMBA2 se apaga, sólo queda activa la BOMBA1. El indicador "Lleno" se encenderá.
  • Cuando el indicador "SR" se activa, la BOMBA1 se apaga, El indicador "Rebose" se encenderá.
  • Cuando se produce un fallo o un mal funcionamiento la alarma se encenderá.
EN ASM:
Primero armamos una tabla de verdad para  ayudarnos en el trabajo:


;TABLA DE VERDAD
;====================================================================
;SV SLL SR VACIO LLENANDOSE LLENO REBOSE ALARMA B1 B2
;0 0 0 1 0 0 0 0 1 1  (VACIO1)
;0 0 1 0 0 0 0 1 0 0  (ALARMA1)
;0 1 0 0 0 0 0 1 0 0  (ALARMA2)
;0 1 1         0 0 0 0 1 0 0  (ALARMA3)
;1 0 0              0 1 0 0 0 1 1 (LLENANDOSE1)
;1 0 1 0 0 0 0 1 0 0  (ALARMA4)
;1 1 0 0 0 1 0 0 1 0  (LLENO1)
;1 1 1 0 0 0 1 0 0 0  (REBOSE1)


Definimos el PORTA como entrada y el PORTB como salida:


Main
;====================================================================
        BANK1

movlw b'11111'
movwf TRISA       ;todo el PORTA como entrada
movlw b'00000000'
movwf TRISB       ;todo el PORTB como salida
BANK0


Ppal
movf PORTA,W
andlw b'00000111'
addlw PCL,F              ;Cargo los bits correspondientes a los sensores
goto VACIO1   ;para que siga la tabla de verdad descripta
goto ALARMA1   ;anteriormente
goto ALARMA2
goto ALARMA3
goto LLENANDOSE1  
goto ALARMA4
goto LLENO1
goto REBOSE1


VACIO1
movlw b'10000110'
movwf PORTB

ALARMA1
movlw b'00001000'
movwf PORTB

ALARMA2
movlw b'00001000'
movwf PORTB

ALARMA3
movlw b'00001000'
movwf PORTB

LLENANDOSE1
movlw b'01000110'
movwf PORTB

ALARMA4
movlw b'00001000'
movwf PORTB

LLENO1
movlw b'00100100'
movwf PORTB

REBOSE1
movlw b'00010000'
movwf PORTB
;====================================================================
END ;Directiva que indica la finalización del pgm



lunes, 15 de agosto de 2011

Actividad 4. Experiencia 2

Amplificador no inversor y buffer.

Para realizar esta experiencia utilizaremos el siguiente circuito:


Para comprobar que este circuito es un amplificador no inversor realizamos tres mediciones. Además comprobamos que la ganancia de tensión es igual a R2/R1 + 1.

Av = R2/R1 + 1 = 100K/6,8K + 1 = 15,7

Primera medición:



Av = Vo/Vs = 2,98V/188mV = 15,85


Segunda medición:

Av = 5,88V/372mV = 15,8

Tercera medición:


Av = 9,36V/600mV = 15,6

Para comprobar que la impedancia de entrada de este amplificador (Ri) es muy grande, lo que hicimos fue conectar es serie a esta otra resistencia de 270 KOhm.




Realizando las mediciones adecuadas pudimos conocer la caída de tensión en la resistencia de 270 KOhm, y asi calcular Ri de la siguiente manera:

i = (288mV - 232mV)/270KOhm = 20uA (Ley de Ohm)

Ri = 232mV/20uA = 1,1MOhm (Ley de Ohm)

Luego comprobamos que retirando R1 y haciendo un cortocircuito entre las terminales del resistor R2 convertimos el circuito en un buffer:

Circuito en PCB:



domingo, 14 de agosto de 2011

Actividad 4. Experiencia 1

Amplificador Inversor.

El primer paso en esta experiencia sera armar el amplificador, para ello utilizaremos el siguiente circuito:

Parte A - Comportamiento en continua.

Una vez armado el circuito anterior quitaremos el puente J1 y mediremos los valores máximos y mínimos que estregara el divisor resistivo (Va).
A continuación se mostaran, arriba los valores calculados, y abajo los valores medidos:
Vmin = -1.44V Vmax = 1.44V
Vmin = -1.32V Vmax = 1.32V

Luego conectaremos el puente J1 y tomaremos 11 mediciones: 5 positivas, 5 negativas y la última se hará desconectando J1 nuevamente y conectando la entada (Vs) a masa.

La ganancia de tensión de ese circuito es:
- Vo/Vs = - 3.4V/200 mV = - 17 veces
en dB -> -(20 log 17) = - 24,6 dB


También se realizaron mediciones del circuito en distintos valores de Vs, para ver el valor de Vo resultante:
ACLARACIÓN: Para Vs = 0, se conecto Vs a GND.
Luego volcamos toda esa información en un gráfico en excel:
Podemos afirmar que es un amplificador INVERSOR, ya que a valores positivos de Va, Vo es negativo y viceversa.

Si se varia la tensión de alimentación no varia la ganancia, ya que la misma depende de R1 y R2.

La tensión de alimentación mínima con la cual el circuito deja de funcionar es 1V.

Si se aumenta la resistencia R2 a 220 Kohm la ganancia de tensión sube a - 25,36 veces:

Y si se disminuye el valor de R1 a 5600 Ohm la ganancia también sube (46,15 veces):

También se probo sacando Rl, la ganancia no cambio.
Estas experiencias sirvieron para verificar que la ganancia de tensión depende de R1 (siendo inversamente proporcional a la esta) y R2 (siendo directamente proporcional a la misma).

Si se conecta el pin 4 a masa, en vez de -12V el circuito deja de funcionar como amplificador.

Si se disminuye R1 a 390 Ohm el circuito deja de funcionar, ya que la impedancia de entrada es muy chica.


Parte B - Comportamiento en alterna.

En esta parte de la actividad, como dice el titulo, se va a estudiar el comportamiento del amplificador en alterna, para ello le inyectaremos en Vs una señal igual a 288 mV y 1KHz:


Si se aumenta la tensión de entrada, en un momento la señal de salida se va a recortar, el valor máximo de entrada para que no recorte es (pico a pico) 18,4V
Si se aumenta la tensión de alimentación este valor va a aumentar, mientras que si baja este va a bajar.
Por ejemplo, para alimentación igual a 13V la tensión pico a pico con que recorta será 20,2V, mientras que si esta alimentación es 6V la tensión de recorte será 7,36V.
En la siguiente imagen se puede ver el valor máximo que puede tener Vo antes de que sea recortada por la alimentación de la fuente.


Recorte con 6V:                     










 Recorte 13V:











Ahora reemplazaremos el LM741 por el TL081, y veremos que la ganancia de tensión sigue respondiendo a - (R2/R1):

R2 = 150 K Ohm ; R1 = 10 K Ohm
- (150/10) = Av = - 15

- (Vo/Vs) = Av = -(840mV/56mV) = -15



Si se aumenta la frecuencia baja la ganancia y el circuito va dejando de ser inversor ( a partir de los 45KHz aproximadamente).
La siguiente imagen es con una frecuencia de 1MHz (Ya deja de ser amplificador inversor):

Circuito en PCB:

Desafio: Observar en el osciloscopio el mismo gráfico realizado en el punto anterior. Capturar la imagen y explicar la manera que se realizó la medición.
Ayuda: Usar el osciloscopio en modo X - Y. Colocar un generador de señales en la entrada Vs. Ajustar su salida con los siguientes parámetros: Triangular, Vpp = 2V, f = 1 KHz:


jueves, 11 de agosto de 2011

Lista de Materiales

Listado materiales Actividad N°5:
Todos los componentes de este trabajo fueron comprados en MicroElectrónica: http://www.microelectronicash.com/ - Paraná 180 - Buenos Aires, Argentina

jueves, 4 de agosto de 2011

Ejercicios del Capitulo 8 PIC16f84


Ejercicios Capitulo 8:
Elemental_1.asm: Por el puerto B se obtiene el dato de las 5 líneas del puerto A, al que está conectado un array de interruptores, sumándole un valor de una constante, por ejemplo 74 decima. Es decir (PORTB) = (PORTA) + Constante.
En ASM:
Loop
                movf     PORTA,W
                addlw   b'1001001'
                movwf PORTB
                goto    Loop
En C:
void main(){
   int valor;
   int valor2;

   while(1) {
   valor = input_A();
   valor2 = valor + 1001001;
   output_B(valor2);
   }
 }
Elemental_2.asm: Por el puerto B se obtiene el dato del puerto A multiplicando por 2. Es decir (PORTB) = 2 * (PORTA) = (PORTA) + (PORTA).
En ASM:
Loop
                movf     PORTA,W
                addwf   PORTA,W
                movwf PORTB
                goto      Loop
En c:
void main(){
   while (1){
      output_B(input_A()+ input_A());
      }
}

Elemental_3.asm: Por el puerto B se obtiene el dato introducido por el puerto A, pero los bits pares de la salida se fijan siempre a “1”. El orden de los bits será “b7 b6 b5 b4 b3 b2 b1 b0”, siendo los pares b6 b4 b2 b0. Por ejemplo, si por el Puerto A se introduce el dato  “----01100”, por el puerto B se visualiza “----11101”. Observá que
·         Los bits pares están a “1”, efectivamente (Puerto B) = “---1x1x1”
·         Los bits impares permanecen con el dato del puerto de entrada, efectivamente: (Puerto A) = “---x1x0x” y (Puerto B) = “---x1x0x”

En ASM:
Loop
                movf     PORTA,W
                addlw   PORTA
                movwf PORTB
                bsf                         PORTB,6
                bsf                         PORTB,4
                bsf                         PORTB,2
                bsf                         PORTB,0
                goto      Loop

En C:
void main(){
while(1){
output_B(input_A());
output_high (PIN_B0,PIN_B2,PIN_B4,PIN_B6);
}
}

Elemental_04.asm: Por el puerto B se obtiene el contenido del Puerto A, pero los bits impares de la salida se fijan siempre a “0”. El orden de los bits será “b7 b6 b5 b4  b3 b2 b1 b0”
En Asm:
Loop   
            movf    PORTA,W
            movwf PORTB
            bcf                   PORTB,7
            bcf                   PORTB,5
            bcf                   PORTB,3
            bcf                   PORTB,1
            goto     Loop
En C:

void main(){
   while(1){
      output_B(input_A());
      output_low (PIN_B1,PIN_B3,PIN_B5,PIN_B7);
}
}

Elemental_05.asm: Por el puerto B se obtiene el contenido del Puerto A, pero invirtiendo los unos y los ceros. Por ejemplo, si por el puerto A se obtiene el dato “---11001”, por el puerto B se obtendrá el dato “xxx00110”. (No importa el estado de los 3 bits superiores del puerto B.)
En Asm:
Loop
            movf  PORTA,W
            xorlw b'11111'
            movwf          PORTB
            goto   Loop
En C:
void main(){
   while(1){
      output_B(input_A() ^11111);
   }
}
Elemental_06.asm: Por el puerto B se obtiene el contenido del Puerto A, pero intercambiando los nibbles alto y bajo.  Por ejemplo, si por el puerto A se obtiene el dato “---11001”, por el puerto B se obtendrá el dato “1001xxx1”.
En ASM:
Loop 
            movf    PORTA,W
            swapf            W,PORTB
            goto   Loop
En C:
void main(){
   int  valor;
   while(1){
   valor = input_A();
   swap (valor);
   output_B(valor);
}
}

Elemental_07.asm: Por el puerto B se obtiene el contenido del Puerto A, desplazando un bit hacia la izquierda. Por la derecha entrará un “1”..  Por ejemplo, si por el puerto A se obtiene el dato “---11001”, por el puerto B se obtendrá el dato “xx110011”.
En ASM:
Loop 
            rlf                   PORTA,W
            andlw            .1
            movwf          PORTB          
            goto   Loop
EN C:
void main(){
   int valor;
   while(1){
   valor=input_A();
   rotate_left(valor,1)
   output_B(valor | 1);
   }
}

Elemental_08.asm: Por el puerto B se obtiene el contenido del Puerto A, desplazando un bit hacia la derecha. Por la izquierda  entrará un “0”.  Por ejemplo, si por el puerto A se obtiene el dato “---11001”, por el puerto B se obtendrá el dato “0x1100”.

En ASM:
Loop 
            rrf                   PORTA,W
            bcf                  W,7
            movwf          PORTB
            goto   Loop
En C:
void main(){
   int valor;
   while(1){
   valor=input_A();
   rotate_right(valor,1);
   bit_clear(valor,7);
   output_B(valor);
   }
}

Elemental_09.asm: Por el puerto B se obtiene el contenido del Puerto A, invirtiendo los bits pares. Los bits impares se dejan como en la entrada.
En ASM:
Loop
            movf  PORTA,W
            xorlw b'01010101'
            movwf          PORTB
            goto   Loop

EN C:

void main()
{
   while(1){
   output_B(input_A() ^01010101);
   }
}


Elemental_10.asm: Por el puerto B se obtiene el contenido del Puerto A, invirtiendo los bits pares. Los bits impares se dejan como en la entrada.
En ASM:
movf  PORTA,W
movwf          PORTB
SLEEP

En C:
void main(){
   output_B(input_A());
   sleep();
}

martes, 5 de julio de 2011

Actividad 3 Parte C.

En esta parte de la actividad armaremos un circuito con el PIC12F683 que servirá como astable, y monoestable, según que programa se use:



Para utilizar este circuito como astable se programo el PIC12F683 con el programa AST_40K.hex.
Los valores medidos de la señal con este programa fueron:
Tiempo de estado en alto, tanto como el tiempo de estado en bajo fue de 12.4us.
La frecuencia fue igual a 40KHz.
Y la tensión a 5V.

Para utilizar este circuito como monoestable se programo de vuelta el PIC, pero esta vez con el programa MST_5s.hex.
Para este caso la duración del pulso fue de 5s, la frecuencia de 200 mHz y la tensión de 5.n V.

Es preferible utilizar este circuito a los utilizados en las partes A y B, ya que con menos componentes, y por lo tanto menos espacio y costo económico, se pueden obtener los mismos resultados.
Ademas para cambiar los valores de las señales utilizadas no es necesario hacer cálculos, basta con modificar el programa a utilizar.


Circuito en PCB - Protel

lunes, 20 de junio de 2011

Tutorial: Grabación Microcontroladores

El software utilizado es el MPLAB, de microchip para la grabación de microcontroladores PIC. Si se desea grabar un PIC que se encuentra grabado en C, habra que utilizar el mismo procedimiento.

Luego de haber finalizado nuestro proyecto, teniendo el archivo resultante .hex

Conectaremos nuestro microcontrolador en el grabador, cuidadosamente y lo ajustaremos con la pequeña palanca que tiene a un costado, conectaremos a 9V en el power del grabador y un cable serie desde el grabador hasta el puerto Serie (DB9 - COM1) de nuestra pc.
Al conectar la alimentación se encenderá el primer led que nos indicará que el grabador tiene energía
abrir el MPLAB y seleccionar en el menu File - Import

Luego abriremos nuestro archivo .hex, que queremos grabar.


Nos aparecera que el archivo fue cargado:


Seleccionaremos el programador PICSTARTPLUS:





Luego iremos a Program Enable programmer, para habilitar el programador, aqui verificará la correcta conexión con el grabador.





Y de nuevo programmer, pero ahora haremos clic en program, aqui grabá el micro.
En el grabador se encenderá el segundo led, si todo funciona correctamente, ese led se apagará y en la pantalla verémos que el programa se ha grabado correctamente.

jueves, 9 de junio de 2011

Microcontroladores: Programación II

Esta entrada es la continuacion de Microcontroladores: Programación I.
En esta entrada explicaremos las caracteristicas basicas y los procediietos y algunas instrucciones..
La primera parte debemos poner una descipcion de lo que sera el programa.Todas las descripciones empiezan y terminan con";".
La primera parte se llama Header, aqui pondremos el nombre de programa, la fecha,  la version de programa, la compañia, etc.:
Ej:
    Filename:        led.asm                                         
;    Date:             9\6\11                                        
;    File Version:  0.1                                    
;                                                                    
;    Author:           GDD                                       
   Company:         CUBA                                                           




Files Required: P16F684.INC        este archivo relaciona nombres fantasia con posciones de memoria ya est
ablecidas.
de

__CONFIG: Es un registrode configuracion especial, hace que el micro funcione de tal manerau

Luego de config
_CP_OFF &  _WDT_OFF  &   PWRTE_ON  &    RC_OSC

CP: Code Protection, proteje el codigo contra lecturas indeseables (cp = 0: se puede leer perfectamente, cp=1 el micro no se puede leer)

WDT: Watch Dog Timer: Si en un tiempo determinado no realiza una instruccion muy precisa se auto-resetea.

B
PWRTE: Poer up timer: tiempo que sorroe toma el micro para iniciar la apliacacion (72mS)

RC_PSC: Elegimos el cloc de micro

VARIABLE DEFINITIONS
En este sector se definen las variables, la forma mas ordenada es mediante la instruccion CBLOCK, aqui pondremos en que direccion empieza a guardar variables en la memoria GPR
Ej:
CBLOCK 0X0C
w_temp
status_tem
ENDC
PROGRAMA
Para empezar el programa usamos la instruccion ORG
ORG 0X000
CLRW ;  Borro el registro W


movf  status_temp,w ; (lleva esa variable al registro W)
movwf  Status           ; (deja el registro que estba en W en el STATUS)


END ; (Termina el programa)


Aclaracion: Este programa es solo una muestra para explicar, no realiza ninuguna accion siginificativa, mas adelante en blog publicaremos nuevos programas mas complejos.

Microcontroladores: Programación I

Para la programación de los pic se utiliza el software MPLAB de Microchip, se puede descargar desde su web: http://www.microchip.com , deberemos instalarlo en nuestra PC.
Vamos a comenzar nuestro proyecto, teniendo como base una plantilla (Template) que Microchip nos brinda. Para ello iremos a Project -Project Wizard
Ahora nos abrira un asisente, comenzado por la pantalla de bienvenida que deberemos seguir las instrucciones, haciendo clic en siguiente:
Ahora debemos seleccionar el microcontrolador a utilizar (ej: pic16F84A)




Ahora elegiremos con que programa interno vamos a utililizar para ensamblarm en este caso vamos autilizar el assambler dentro del MPASM ToolSuite



Luego elegirmeos la plantilla que vamos a usar,la plantilla es una base que nos da Microchip para empezar a programar, podemos eencontrar la misma dentro de la carpeta C:\Archivos de programa\Microchip\MPASM Suite\Template\Object y seleccionamos nuestro pic. Hacemos clic en Add y aparecera en la ventada de la derecha con una A (A de ADD, que significa agregar), pero  nosotros no quereremos agregar  sino copiar,entonces tendremos que hacer clic en la A, hasta llegar a la C (Copy)
Ahora debemos elegir donde guardara los archivos que genere. Ej: 
C:\LEDII\LEDII
Es conveniente nombrar la carpeta y el archivo con el mismo nombre y directo en la raiz del disco. 
    
Ahora cuando  hagamos clic en siguiente nos dara un breve resumen del proyecto hasta ahora.
Nos abrira una nueva ventana con carpetas, con una carpeta abierta,(Source) con un archivo con extension .ASM, le haremos doble clic y ya podemos empezar a programar.
Las caracteristicas basicas de programacion estaran en la entrada Microcontroladores: Programacion II