sábado, 31 de octubre de 2009

MINIFUENTE



martes, 27 de octubre de 2009

Ejercicios con pic16f84a

LIST p=16f84
a equ 0x0c
b equ 0x0d
r equ 0x0e

org 0x00
inicio
movlw 0x05;w <- 5
movwf a
movlw 0x02;w <- 2
movwf b
addwf a,w;a+w->w
movwf r;r <- w
end

;*************************************

LIST p=16f84
status equ 0x03
porta equ 0x05
portb equ 0x06

org 0x00
goto inicio
org 0x05

inicio
bsf status,5
movlw b'00000000';w <- 00
movwf portb
movlw b'00011111'
movwf porta
bcf status,5

bucle
movf porta,w; w<-porta
movwf portb
goto bucle
end


http://paginas.fisica.uson.mx/horacio.munguia/aula_virtual/Recursos/Introduccion%20PIC16f84.pdf

lunes, 26 de octubre de 2009

CONTADOR DE PULSOS


Fuente: http://www.pablin.com.ar/electron/circuito/mc/contador/index.htm

Código Asembler:

LIST P=16f84
radix hex

#include "p16f84.INC"

indo equ 00h ;registro de indireccion
pc equ 02h ;contador de programa
status equ 03h ;registro de estado
fsr equ 04h ;registro de seleccion
ptoa equ 05h ;puerto a
ptob equ 06h ;puerto b
rota equ 0fh ;variable para desplazamiento de display
trisa equ 85h ;configuracion puerto a
trisb equ 86h ;configuracion puerto b
dig1 equ 10h ;acumulador miles
dig2 equ 11h ;acumulador centenas
dig3 equ 12h ;acumulador decenas
dig4 equ 13h ;acumulador unidades
loops equ 1dh ;variables usadas en retardos
loops2 equ 1eh
z equ 02h ;flag de cero
ram equ 05h ;bit de seleccion de pagina de memoria
c equ 00h ;flag de acarreo
w equ 00h ;bit de destino a variable de trabajo

reset org 00
goto inicio
org 05h

retardo ;subrutina de retardo
movwf loops ;la variable de trabajo contiene la cant.
top2 movlw d'110' ;de ms a demorar
movwf loops2
top nop
nop
nop
nop
nop
nop
decfsz loops2 ;controla si termina 1mS
goto top
decfsz loops ;controla si termina el retardo completo
goto top2
retlw 0

s1000 ;rutina de incremento x 1000
clrf dig2 ;pone a cero las centenas
incf dig1 ;incrementa el contador de miles
movf dig1, w ;carga en work el conteo de los miles
xorlw 0ah ;si work era 10, entonces quedara en cero
btfsc status, z ;si es cero, el flag z queda alto
clrf dig1 ;inicializa los miles
return
s100 ;rutina de incremento x 100
clrf dig3 ;pone a cero las decenas
incf dig2 ;incrementa el contador de centenas
movf dig2, w ;carga en work el conteo de las centenas
xorlw 0ah ;si work era 10, entonces quedara en cero
btfsc status, z ;si es cero, el flag z queda alto
call s1000 ;incrementa los miles
return

s10 ;rutina de incremento x 10
clrf dig4 ;pone a cero las unidades
incf dig3 ;incrementa el contador de decenas
movf dig3, w ;carga en work el conteo de las decenas
xorlw 0ah ;si work era 10, entonces quedara en cero
btfsc status, z ;si es cero, el flag z queda alto
call s100 ;incrementa las centenas
return

subir ;rutina de incremento
incf dig4 ;incrementa el contador de unidades
movf dig4, w ;carga en work el conteo de las unidades
xorlw 0ah ;si work era 10, entonces quedara en cero
btfsc status, z ;si es cero, el flag z queda alto
call s10 ;incrementa las decenas
movlw d'250' ;retardo de 100ms
call retardo
return

tabla ;genera los numeros sobre el display
addwf pc ;agrega al cont. programa el valor de work
retlw b'00111111' ;genera el 0
retlw b'00011000' ;genera el 1
retlw b'01110110' ;genera el 2
retlw b'01111100' ;genera el 3
retlw b'01011001' ;genera el 4
retlw b'01101101' ;genera el 5
retlw b'01101111' ;genera el 6
retlw b'00111000' ;genera el 7
retlw b'01111111' ;genera el 8
retlw b'01111101' ;genera el 9

inicio ;programa principal
bsf status, ram ;selecciona el banco de memoria alto
movlw b'00010000' ;configura el puerto a
movwf trisa ;bit 4 entrada, demas bits salidas.
movlw 00h ;configura el puerto b
movwf trisb ;como salidas
bcf status, ram ;selecciona el banco de memoria bajo
clrf dig1 ;inicializa acumuladores
clrf dig2
clrf dig3
clrf dig4
movlw 00 ;envia ceros a los transistores para apagar
movwf ptoa ;todos los displays

empe btfss ptoa, 4 ;chequea el pulsador
call subir ;llama la rutina de incremento
movlw 08h ;iniciar un 1 en el registro de rotacion
movwf rota
movlw dig1 ;con el registro selector (fsr) se apunta
movwf fsr ;al primer dato que se va a mostrar
disp movlw 00h ;colocar en cero el dato del display
movwf ptob ;para apagarlos
movf rota, w ;pasa rotacion del 1 a la variable work
movwf ptoa ;enciende el transistor (display)
movf indo, w ;lee el dato del registro apuntado por fsr
call tabla ;genera el digito de 7 segmentos
movwf ptob ;envia el digito al puerto b
movlw 03h ;retardo de 3ms para visualizacion
call retardo
btfsc rota, 0 ;controla si terminaron las cuatro rotaciones
goto empe ;si termino, vuelve desde el comienzo
bcf status, c ;carry en cero para no afectar las rotaciones
rrf rota ;desplaza el 1 que enciende los displays
incf fsr ;incrementa el puntero. Apunta el proximo
goto disp ;digito a mostrar

end

jueves, 22 de octubre de 2009

CODIGO 5

:020000040000FA
:1000000001288316003086001F3085008312FE30E1
:1000100086003420FD3086003420FB3086003420FA
:10002000FB3086003420F93086003420F83086001A
:1000300034203420342005182428FC308600342055
:10004000FF30860034201B2885182D28F9308600C3
:100050003420FF30860034201B28F83086003420FE
:10006000FF30860034201B2820308C0040308D006B
:1000700060308E008E0B3A288D0B38288C0B36287A
:0200800000344A
:00000001FF

CODIGO 4

:020000040000FA
:1000000001288316003086001F30850083120518F2
:100010001028FC3086002020FF3086002020072892
:1000200085181928F93086002020FF30860020200E
:100030000728F83086002020FF308600202007287F
:1000400020308C0040308D0060308E008E0B2628D2
:0A0050008D0B24288C0B22280034AD
:00000001FF

CODIGO 3

:020000040000FA
:1000000001288316003086001F30850083120518F2
:10001000122885181928F83086002020FF30860025
:1000200020200728FC3086002020FF30860020207A
:100030000728F93086002020FF308600202007287E
:1000400020308C0040308D0060308E008E0B2628D2
:0A0050008D0B24288C0B22280034AD
:00000001FF

viernes, 16 de octubre de 2009

SECUENCIAL CON MICRO PIC16F84A

¡¡¡ ESTE PROYECTO FUNCIONA !!!



EL CÓDIGO EN ASEMBLER PUEDES DESCARGARLO DE LA PÁGINA DEL AUTOR

http://perso.wanadoo.es/luis_ju/proyect/cqpic.html

Las únicas precauciones que debes tener son:
* Revisar que las conexiones estén bien soldadas en la placa.
* Todos los pines del Pic16F84a deben estar conectadas, ya sea a tierra , a vcc , resistencias ó a pines de otros integrados.

sábado, 3 de octubre de 2009

LED 220 VOLTS AC


Hola!
Bueno, primero que todo, si lo que querés es que sea "bueno,bonito, barato" , la única forma razonable es la de la fuente capacitiva... No tuviste éxito esa vez debido a los "pequeños detalles" que son importantes en este caso , es decir, proteger los componentes contra los picos de tensión. Tal como decís, lo más fácil es conectar todos los LEDs en serie, ya que la corriente a manejar será mucho más pequeña, y por lo tanto, los componentes más baratos (aunque en serie significa que si un led se quema, todos se apaguen)

Adjunto el circuito (lo he calculado para 50 leds, a 50mA cada uno), y la simulación en LtSpice da que todo está bien...

Algunos comentarios sobre el mismo:
>Todos los capacitores son de 400volts de poliester (DEBEN ser no polarizados)
>Las resistencias normales de 1/4W no soportan más de 150voltios, luego se abren... Por eso uso 3 resistencias en serie en vez de una, para que puedan soportar los 310v en el peor de los casos... En funcionamiento, tienen mucha menos tensión entre los terminales... Lo que da margen de seguridad.
>V1 representa la tensión de la red de 220v (alterna,50hz)
>R1 representa los 50 leds en serie (cátodo hacia el lado de D4)
>C1 y C3 son 2 capacitores que forman uno de 2microfarads, pero a 400volts.
>R4,R5,R6 es la resistencia limitadora de corriente para los picos de tensión de la Red. Junto con C2 , limitan la corriente que llega a los leds a valores razonables para que no se quemen. Funcionan si los picos tienen poca
duración (lo que es más que razonable)
>D1,D2,D3,D4 es el puente rectificador de onda completa
>C2 es el capacitor de filtro, para que los LEDs estén encendidos todo el tiempo (alguna
pequeña variacion de brillo puede haber, pero es mucho más que razonable, la corriente en los leds varía de 70mA a 20mA, pero el promedio es 50mA, por lo que los LEDs no deben tener ningún problema)
>R2,R3,R7 es una resistencia de seguridad, descarga el capacitor C2 cuando se corta la energía, para que pueda manipularse el circuito en forma segura al desconectarlo. (Este circuito puede MATARTE si no tenés cuidado . Por el mismo motivo, y aunque se me olvidó de colocar, te aconsejaría que coloques en paralelo con C1 y C3 una resistencia formada por 3 en serie de 470K)
>Todas las resistencias serán de 1/4Watt

Espero que pueda servirte. Si cambias la cantidad de LEDs, o la conexión de los mismos, o la corriente de los mismos, habrá que recalcular los valores del circuito. Pero es simplemente cuestion de ajustar el capacitor C1,C3. Disminuir la cantidad de LEDs a la mitad implica reducir el valor de capacidad a la mitad, Disminuir la corriente de los LEDs a la mitad implica reducir el valor de capacidad a la mitad ....

DIODO LED A 220 VOLTS AC






Explicación:

C1 provoca una impedancia capacitiva equivalente a 14469? (1/(2p×50Hz×220nF))
C1 sería entonces tu resistencia limitadora de corriente.
De C1 surge la corriente constante de 14mA que mencionas.
Ahora, D1 consume absolutamente todo los 14mA, por corriente no se va a quemar.
La tensión sube lentamente gracias a C2 hasta llegar a la tensión de trabajo del LED y ahí se mantiene CONSTANTE.
C2 NUNCA alcanza a cargarse lo suficiente para alimentar por sí solo el LED ya que este último está practicamente en corto, la tensión que C2 ve es Vo del LED.
Se pueden colocar varios LEDs en serie con igual resultado, probé hasta con 3 (blancos de 3v)
pero se pueden poner mas de 100 cambiando el capacitor C2 por uno de 200v o más.

Si por algún motivo D1 se quema o el circuito se abre, C2 explota al superar su tensión de trabajo, acto seguido BR1 se quema
si supera su tensión de trabajo. Esto se podría evitar poniendo una resistencia en paralelo, lo cúal me dá una idea para explicar mejor el circuito que les detallo al final.
Oséa para pruebas entonces BR1 400v y C2 350v así les sale barato

La idea que les comentaba es reemplazar D1 por una resistencia tal, que consuma 14mA a X tensión. X tensión sería la de C2 para protejerlo, lo que me da:
R1=714,3? ˜ 680 ? (0,14 W)
Reemplazando D1 por R1 no hay riesgo de quemar nada ¿Estás de acuerdo? Midiendo la tensión entre bornes de R1 teóricamente debería ser:
V=9,5v

Al ser R constante se demuestra que I es constante e I<36mA, por lo tanto el LED no se va a quemar por la corriente.

Polarizado en directa la diferencia de potencial entre bornes del LED es, mas o menos, 2v, el puente BR1 y C2 aseguran que no se va a quedar
nunca inversamente polarizado, por lo tanto podemos asegurar que no se va a quemar por la tensión.

La potencia esta en el orden de los 10mW así que tampoco se va a quemar por temperatura.

Conclusión: NO SE QUEMA

Ahh, me olvidaba: Para protejer C2 de la apertura de D1 lo mejor es un zener y te queda igualito a la fuente sin transformador