martes, 16 de julio de 2013

Configuración del USBDM en Windows 7


Este tutorial se centra en la configuración del USBDM para su uso en la programación del Microcontrolador Motorola HCS08.


Instalación del driver
Para la instalación del driver es necesario descargar tanto como la aplicación como su driver. Estos pueden descargarse aquí


Nota: los controladores fueron subidos a Mediafire para evitarles la busqueda igualmente pueden encontrarlos aquí

Al momento de instalarlos seguimos las instrucciones que nos indican. Una vez instalados conectamos nuestro BDM y el sistema debe detectarlo e instalarlo. de no hacerlo lo instalaremos de manera manual indicando que busque el driver en la siguiente dirección

C:\Program Files\pgo\USBDM Drivers 1.0.1\Drivers

Nota: la dirección puede variar dependiendo del del tipo de sistema

Una vez instalado el driver debemos actualizar el firmware del BDM esto lo realizaremos de la siguiente manera:
1.     Conectamos nuestro BDM
2.     Abrimos el programa USBDM Firmware Update

3.     Debe detectarnos automaticamente el BDM siendo asi damos clic en Program Flash,

4.     El programa buscara la actualizacion del firmware mas adecuada para el dispositivo, una vez instalada correra la verificación del mismo, esto rara vez da error, de ser asi unicamente reconectamos el BDM y corremos de nuevo la actualizacion.

5.     Una vez actualizado verificaremos que este pueda conectarse correctamente a nuestros microcontroladores. Para esto conectaremos nuestro BDM (sin conectarlo a la computadora) a nuestro microcontrolador conectando los pines de la siguiente manera

Pin 1. RESET
Pin 2. BKGD
Pin 3. VDD
Pin 4. GND

Nota: el orden de los pines es izquierda a derecha de acuerdo a la siguiente imagen

Para este ejemplo usare el microcontrolador MC9S08SE8CRL para la conexion de pines anexo su datasheed 
6.     Una vez conectado para la verificación abriremos el programa HCS08 Programmer,


El programa detectectará automáticamente nuestro BDM de no hacerlo simplemente daremos clic en Detect.
7.     Daremos clic en la pestaña Target 


Damos clic en el boton Detect Chip. el programa se conectara al microcontrolador y seleccionara el nombre del mismo
8.     En el caso de que nos marque la siguiente ventana


Significa que nuestro BDM no esta alimentando directamente al circuito, para esto debemos verificar si nuestro BDM tiene habilitado o no la alimentacion al objetivo, esto puede verificarse al momento de hacer DEBUG a nuestro programa nos dara la siguiente ventana


En caso de que no nos deje seleccionar voltaje al objetivo (TARGET VDD CONTROL) deberemos alimentar nuestro circuito de manera externa con un voltaje 3-5v.

Una vez hecho todo esto, abremos terminado de configurar nuestro BDM y ya podremos programar nuestros microcontroladores con los programas de desarrollo como CodeWarrior

martes, 11 de junio de 2013

Fuente de Voltaje Dual 19v - -19v

Este proyecto es de los mas básicos y necesarios de hacer para aquellos que acaban de iniciar en la carrera de ingeniería electrónica.

Esta fuente que desarrollaremos tendrá las siguientes características:



  • Voltaje en una de sus terminales regulable de 0 - 19v
  • Voltaje en una de sus terminales regulable de -19v - 0v
  • Voltaje acumulado en las terminales positivas de 0v - 36v
  • Una corriente de salida de 3.6A
Para este proyecto, lo aclaro desde un principio, se necesita varios materiales, ademas de que debemos saber soldar bien en circuito impreso dado a que si lo dejamos en una Protoboard o en un circuito impreso genérico, ademas de ocupar mucho espacio, se corre el riesgo de generar puentes y quemar reguladores o explotar los capacitores.


Material necesario

  • Switch. 110v, monopolar, foco piloto
  • Fusible europeo 1 amp c/portafusible
  • Transformador 24v - 3amp
  • 4 diodos MR510
  • 2 Capacitores 2200 µf
  • 2 Capacitores 10 µf
  • 2 Capacitores .01 µf
  • 4 diodos 1N4004
  • 2 resistencias 1.5 kΩ
  • 2 potenciometros 5 kΩ
  • 2 potenciómetros 1 kΩ
  • 2 resistencias 270 Ω
  • 2 resistencias 1.2 kΩ
  • Transistor de potencia 2N3055
  • Transistor de potencia MJ2955
  • Regulador de voltaje LM317
  • Regulador de voltaje LM337
  • 4 plugs banana
  • Conector de Alimentación
  • Cable CA
  • Tablilla fenolica virgen
  • Caja de Proyecto
  • 2 Disipadores de Calor
  • Micas Termicas
  • Grasa Disipadora
  • Aislantes

Esquema del circuito eléctrico


Nomenclatura
D1-D4. Diodos MR510
C1-C2. Capacitor electrolítico 2200 µf
D5-D8. Diodos 1N4004
R1-R2. Resistencias 1.5 KΩ
VR1-VR4. Potenciómetro 5 KΩ
VR2-VR3. Potenciómetro 1 KΩ
R3-R4. Resistencia 270 Ω
C3-C4. Capacitor electrolítico 10 µF
C5-C6. Capacitor cerámico 0.01 µF
R5-R6. Resistencia 1.2 KΩ
Q1. Transistor de Potencia 2N3055
Q2. Transistor de Potencia MJ2955
RG1. Regulador de Voltaje LM317
RG2.Regulador de Voltaje LM337

Desarrollo

Para este proyecto, como dije anteriormente, lo mas recomendable es realizarlo en circuito impreso, ya que esto nos dara un resultado mas estético, ademas de que nos sirve como practica para realizar circuitos impresos mas detallados en el futuro

Para el diseño del circuito impreso, recomiendo proteus, ya que este programa realiza un auto-arreglo de nuestro circuito, ademas de que incluye el tamaño del componente fisico a soldar, o igual nos da opcion de diseñarlo en el momento

Resultado Final





Nota: estas fotos son de mi fuente Propia, como ven les añadí terminales esto para poder desarmar la fuente sin tener que desoldar nada, los cables están soldados únicamente a los componentes externos o manipulables, como los potenciometros, transistores, entrada del transformador y salidas a plugs




martes, 21 de mayo de 2013

Sensor de Temperatura con ADC

Objetivo

Nuestro objetivo en este proyecto es la aplicación simple del Convertidor Analógico-Digital de nuestro Microcontrolador MC9S08SE8.
La forma de Aplicación será a través de un sensor de temperatura de precisión, dicha interpretación de la entrada análoga se hará por medio de 2 display en un formato decimal.

Material

  • Microcontrolador MC9S08SE8
  • USBDM
  • TTL 7448 (decodificador a 7 segmentos)
  • Display Catodo Comun
  • Sensor LM35-TO92 (sensor termico de presición)

Desarrollo

Para este programa se diseñara en una salida al Puerto B de nuestro Microcontrolador y configurado el canal 1 como la entrada analógica de nuestra implementación.
Para esto también configuraremos nuestro Microcontrolador para que los datos enviados al puerto B sean en el sistema decimal, esto para que nuestros drivers puedan mostrarnos en el display la información explícita.

Programación




;-------------------------------------------------------------------------------------------------------
;Inicializamos nuestras variables a Utilizar
;-------------------------------------------------------------------------------------------------------

ExampleVar: DS.B   1
Corregido:  equ     $83
Convertido: equ     $84
Comparador: equ     $85
Tope:       equ     $86


            ORG    ROMStart
;-------------------------------------------------------------------------------------------------------
;Configuramos los registros para habilitar el ADC de nuestro Microprocesador con salida a puerto B
;-------------------------------------------------------------------------------------------------------
_Startup:
            LDHX   #RAMEnd+1        ; initialize the stack pointer
            TXS
            CLI                     ; enable interrupts
           ;-------------------------------------------------------------------------------------------------------             
           ;Declaramos Puerto B como Salida
           ;-------------------------------------------------------------------------------------------------------
            LDA #$FF          
            STA PTBDD         ;lo colocamos en el registro PTBDD para hacer PTBD la Salida
            
           ;-------------------------------------------------------------------------------------------------------
           ;Configuracion del ADC
           ;-------------------------------------------------------------------------------------------------------
            LDA #$90          ;Cargamos $90=10010000
            STA ADCCFG        ;Colocamos en registro ADCCFG con la siguiente configuracion
                              ;Bajo Poder, clock /1,largo tiempo muestreo, resolucion 8 bits, 
             
            LDA #$00
            STA ADCSC2       
             
            LDA #$21          ;$21=00100001, COCO y AIEN desactivados, Activada conversion continua, Canal 1 seleccionado
            STA ADCSC1
             
           ;-------------------------------------------------------------------------------------------------------
           ;Inicializamos nuestras variables
           ;-------------------------------------------------------------------------------------------------------
            LDA #$00
            STA Corregido
            STA Convertido
            STA Comparador
            STA Tope
;-------------------------------------------------------------------------------------------------------
;Programa Principal
;-------------------------------------------------------------------------------------------------------
MainLoop:
            BSR ConvertidorAD       ;Realizamos la adquision de datos del canal 1              
            BSR Conversor           ;Realiza la conversion del sistema hexagesimal a decimal
            LDA Corregido           ;Carga nuestro valor corregido 
            STA PTBD                ;Manda la Informacion al puerto B
            BSR Retardo             ;Llama al ciclo de retardo para la apreciación de datos en tiempo real
            feed_watchdog
            BRA MainLoop
;-------------------------------------------------------------------------------------------------------
;Programa convertidor
;-------------------------------------------------------------------------------------------------------
ConvertidorAD:
            LDA ADCSC1              ;Se carga el contenido de ADCSC1 para verificar COCO
            CMP #$A1                ;Comparamos con $A1=%10100001 si igual Z=1,(COCO activado, AIEN desactivado, Conversion continua activada, Canal 1), 
            BNE ConvertidorAD       ;si COCO no esta activado (Z=0), regresa (Branch) a main, con COCO debe ser: 
            LDA ADCRL               ;Cargamos la entrada convertida del Canal 1 
            STA Convertido          ;La mandamos a variable para realizar el arreglo decimal
            feed_watchdog
            RTS
;-------------------------------------------------------------------------------------------------------
;Programa que realiza la conversion del sistema hexagesimal al decimal
;-------------------------------------------------------------------------------------------------------
Conversor:
            LDA Convertido
            ADD #$A
            STA Tope 
             
            LDA #$00
            STA Corregido
            STA Comparador
             
for:
            feed_watchdog
            LDA Comparador
            CMP Tope
            BEQ Salir_Ciclo
            LDA Corregido
            ADD #$01
            DAA
            STA Corregido
            INC Comparador
            BRA for
             
Salir_Ciclo:
            RTS                      
            
;-------------------------------------------------------------------------------------------------------
;Programa de Retardo
;-------------------------------------------------------------------------------------------------------                 
Retardo:
            LDA #$A            
            STA $100
            STA $101
            STA $102
             
Retardomain:
             
            feed_watchdog
            LDA $100             
            CMP #$00
            BEQ Retorno
            DECA                
            STA $100
            LDA #$78            
            STA $101
             
Subretardo_1:
            feed_watchdog 
            LDA $101
            CMP #$00
            BEQ Retardomain
            DECA
            STA $101
            LDA #$78
            STA $102            
             
Subretardo_2:
             
            LDA $102
            CMP #$00
            BEQ Subretardo_1
            DECA
            STA $102
            BRA Subretardo_2
             
 Retorno:
            RTS     





Como se puede apreciar, este programa es una aplicación básica del ADC, la cual puede servir como base para proyectos futuros. Esto porque no es exclusiva del diseño, sino es una programación general del ADC, es posible conectar casi cualquier entrada análoga para su cuantización digital.
Otra aplicación adicional es que puede programarse alguna entrada de control para procesos de automatización.

miércoles, 8 de mayo de 2013

Secuencia Auto Increíble

Descripción 

Una efecto de luces muy conocido es la de KITT, el auto increible, el cual se distinguia por asemejar un haz de luz que recorria toda la parte inferior de su cofre de lado a lado y luego formada dos haces que se cruzaban y asi sucesivamente 

Material necesario

  • Interfase BDM
  • Microcontrolador MC9S08SE8
  • 8 LEDs (preferiblemente rojos dado a que ese es el color original)

Programación

Para esta secuencia se realizara un deslizamiento del bit activo hacia un lado y luego hacia el otro y posteriormente dos haces de luz que se cruzaran 2 veces

Codigo:

_Startup:
            LDHX   #RAMEnd+1        ; initialize the stack pointer
            TXS
            CLI                     ; enable interrupts
            
            MOV #$FF,PTBDD          ;Habilitar puerto PTBD como salida
            CLR PTBD
            
mainLoop:
            LDA #$C0
            BSR CICLO_1
            LDA #$03
            BSR CICLO_2
            BSR CICLO_3
            BSR CICLO_3
            feed_watchdog
            BRA    mainLoop
                        
CICLO_1:
            STA PTBD
            BSR RETARDO
            LSRA
            BNE CICLO_1
            RTS
CICLO_2:
            STA PTBD
            BSR RETARDO
            LSLA
            BNE CICLO_2
            RTS
CICLO_3:     
            LDA #$81
            STA PTBD
            BSR RETARDO
            LDA #$42
            STA PTBD
            BSR RETARDO
            NSA
            STA PTBD
            BSR RETARDO
            LDA #$18
            STA PTBD
            BSR RETARDO
            LDA #$24
            STA PTBD
            BSR RETARDO
            NSA
            STA PTBD
            BSR RETARDO
            LDA #$81
            STA PTBD
            BSR RETARDO
            RTS
             
RETARDO:
            CLR $80
            CLR $81
            MOV #1,$82              ; Podemos acelerar el proceso de conteo cambiando "MOV #[numero],$82"
            
            VOLVER:
            DBNZ    $80,VOLVER
            feed_watchdog
            DBNZ    $81,VOLVER
            feed_watchdog
            DBNZ    $82,VOLVER
            feed_watchdog
             
            RTS

Conclusion

Como se puede apreciar solo con ver el codigo es una secuencia muy sencilla, mas que nada nos ayuda a practicar el uso de llamado de subrutinas, manipulación y movimiento de bits con un menos numero de instrucciones.

Lo ideal es que ustedes tomen este código e intenten innovarlo, ya sea desarrollando secuencias mas conplejas, usando los demas puertos o simplificandolo y asi ahorrandonos espacio en la memoria, lo cual a la larga sera de gran ayuda en proyectos futuros.

Contador 0-99 con Conexion Directa a Display

Descripción

Como se vio en el proyecto Contador 0-99 usando CI 7448 se realizara un circuito que realice la misma función; sin embargo, en esta ocasión relizaremos una conexion directa de nuestro microcontrolador a ambos Display de 7 segmentos.

Material necesario

  • Interfase BDM
  • Microcontrolador MC9S08SE8
  • 2 Display a 7 segmentos (Cátodo Común)

Programación

En esta ocasión utilizaremos las memorias disponibles para almacenar el codigo hexagesimal que se requiere para activar los segmentos correspondientes de nuestro display para que proyecte los numeros.

Para esta programación realizaremos las siguientes asignaciones de puertos:

  • Puerto B se conectara al display de las decenas
  • Puerto C se conectara al display de las unidades
Código

; variable/data section
;
            ORG    RAMStart         ; Insert your data definition here
ExampleVar: DS.B   1
unidades:    equ $A0
decenas:     equ $A1
unidadesbcd: equ $A2
decenasbcd:  equ $A3
limite:      equ $A4

;
; code section
;
            ORG    ROMStart

_Startup:
                        LDHX   #RAMEnd+1        ; initialize the stack pointer
            TXS
            CLI                     ; enable interrupts
            
PROG_PORTS:            
            MOV   #$FF,PTBDD         ;puerto B salida (DECENAS)
            MOV   #$FF,PTCDD         ;puerto C salida (UNIDADES)
                       
            CLR   unidades
            CLR   decenas
            CLR   unidadesbcd
            CLR   decenasbcd
            CLR   limite
;---------------------------------------------------------------------------------            
;SE ENVIAN LOS SIGUIENTES CODIGOS DE ACOMODO DE PINES A LAS TERMINALES B Y C
;ESTO PARA NO TENER MAYOR PROBLEMA AL MOMENTO DE LA IMPLEMENTACION
;---------------------------------------------------------------------------------
            ;PUERTO B
            ;--------------------------------------
            MOV   #%01111110,$80      ;ajuste del 0
            MOV   #011000,$81      ;ajuste del 1
            MOV   #%10110110,$82      ;ajuste del 2
            MOV   #%10111100,$83      ;ajuste del 3
            MOV   #%11011000,$84      ;ajuste del 4
            MOV   #%11101100,$85      ;ajuste del 5
            MOV   #%11101110,$86      ;ajuste del 6
            MOV   #111000,$87      ;ajuste del 7
            MOV   #%11111110,$88      ;ajuste del 8
            MOV   #%11111000,$89      ;ajuste del 9
            ;--------------------------------------
            ;PUERTO C
            ;--------------------------------------            
            MOV   #%10011111,$90      ;ajuste del 0
            MOV   #000110,$91      ;ajuste del 1
            MOV   #%10101101,$92      ;ajuste del 2
            MOV   #101111,$93      ;ajuste del 3
            MOV   #110110,$94      ;ajuste del 4
            MOV   #111011,$95      ;ajuste del 5
            MOV   #%10111011,$96      ;ajuste del 6
            MOV   #001110,$97      ;ajuste del 7
            MOV   #%10111111,$98      ;ajuste del 8
            MOV   #111110,$99      ;ajuste del 9
            ;--------------------------------------
           
            
main:
            BSR   CUENTA_UNIDADES
            BSR   BUSQUEDA_UNIDADES
            LDA   unidadesbcd
            STA   PTCD
            BSR   BUSQUEDA_DECENAS
            LDA   decenasbcd
            STA   PTBD 
            BSR   RETARDO             
                     
            BRA    main
;-------------------------------------------
            
; ESTA SUBRUTINA LLEVA A CABO LA CUENTA 0-99
;-------------------------------------------
CUENTA_UNIDADES:
            INC unidades  
            LDA unidades
            CMP #$A
            BEQ CUENTA_DECENAS
            RTS
            
CUENTA_DECENAS            
            MOV #$00, unidades
            INC decenas
            LDA decenas
            CMP #$A
            BEQ REINICIO
            RTS

REINICIO:
            MOV   #$00,unidades
            MOV   #$00,unidadesbcd
            MOV   #$00,decenas
            MOV   #$00,decenasbcd
            RTS
;--------------------------------------------------------            

;ESTA SUBRUTINA REALIZA LA CONVERSION BCD DE LAS UNIDADES
;--------------------------------------------------------
BUSQUEDA_UNIDADES:
            LDHX  #$90
            MOV   #$90,limite
            LDA   unidades
            ADD   limite
            STA   limite

CONVERSION_BCD1:
            CPX   limite
            BEQ   SALIDA_UNIDADES
            INCX
            BRA   CONVERSION_BCD1

SALIDA_UNIDADES
            LDA ,X
            STA unidadesbcd
            RTS

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

;ESTA SUBRUTINA REALIZA LA CONVERSION BCD DE LAS DECENAS
;-------------------------------------------------------- 
BUSQUEDA_DECENAS:
            LDHX  #$80
            MOV   #$80,limite
            LDA   decenas
            ADD   limite
            STA   limite

CONVERSION_BCD2:
            CPX   limite
            BEQ   SALIDA_DECENAS
            INCX
            BRA   CONVERSION_BCD2

SALIDA_DECENAS
            LDA ,X
            STA decenasbcd
            RTS
;---------------------
            
;SECUENCIA DE RETARDO  
;---------------------
RETARDO:
            CLR $A5
            CLR $A6
            MOV #2,$A7              ; Podemos acelerar el proceso de conteo cambiando "MOV #[numero]"
            
            VOLVER:
            DBNZ    $A5,VOLVER
            feed_watchdog
            DBNZ    $A6,VOLVER
            feed_watchdog
            DBNZ    $A7,VOLVER
            feed_watchdog
            RTS 


Implementación

Si se habrán dado cuenta, el código de salida a los Display es diferente al usual, esto es por que se ajustaron para que al momento de la implementación no cruzar cables y nuestro proyecto quede mas estético.

Les anexo el arreglo de los pines entre el Microcontrolador y los Display


Contador 0-99 Usando CI 7448

Descripcion

En este proyecto Básico de programación se realizara un contador binario con salida en el puerto B de nuestro microcontrolador, dicha salida ira a dar a dos CI 7448 conectados a 2 display de 7 segmentos. 

El programa realizara un conteo de forma decimal de 0 al 99 y reiniciándose al terminar la cuenta. Por ser un programa básico de programación lo realizará de manera automatica al correrlo.

Material Necesario

  • Protoboard
  • Microcontrolador MC9S08SE8
  • CI 7448 (datasheed)
  • Display a 7 segmentos de cátodo común(datasheed)

Programación


_Startup:
            LDHX   #RAMEnd+1        ; initialize the stack pointer
            TXS
            CLI                     ; enable interrupts
           
            LDA #$FF
            STA PTBDD               ; se declara PTBD como salida
            CLR PTBD
            LDA #$FF
            CLR $83
            
            
; Insert your code here
Conteo: LDA $83 ; se utilizara registro 0x10000011=$83 como almacen del conteo ADD #$1 ; se realiza la suma sin acarreo al acumulador A DAA ; se corrige la salida hexagesimal a decimal STA $83 ; se guarda operación en el registro $83, esto para guardar el conteo LDA $83 ; se carga acumulador A con el dato guardado en el registro $86 STA PTBD ; se carga el acumulador A en la salida PTBD JSR RETARDO ; llama a secuencia de retardo RETARDO: CLR $80 CLR $81 MOV #1,$82 ; Podemos acelerar el proceso de conteo cambiando "MOV #[numero],$82" VOLVER: DBNZ $80,VOLVER feed_watchdog DBNZ $81,VOLVER feed_watchdog DBNZ $82,VOLVER feed_watchdog NOP BRA Conteo

Implementación

Para la implementación del proyecto únicamente realizaremos las conexiones del BDM al Microcontrolador, de ahí conectaremos las salidas [3:0] al primer CI que nos indicara las unidades y las salidas[4:7] al segundo CI que actuara como las decenas. 

Realizamos las conexiones necesarias a los display y corremos el programa normalmente.

Nota: no hay que olvidar conectar la resistencia de 330 ohm al cátodo común de cada unos de los display, de preferencia alimentar el circuito con una fuente externa de 5v, esto para evitar baja corriente en el circuito