TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: piriots en 16 de Junio de 2004, 11:38:00

Título: Contador con PIC16F84
Publicado por: piriots en 16 de Junio de 2004, 11:38:00
HOla a to2.

Necesito ayuda para realizar lo siguiente.

Tengo k hacer un circuito que cuente de 0 asta 8 con un 16F84

He pensado utilizar las ocho lineas el puerto B como entradas de la señal, el PIC deberia sumar el numero de "1" que hay en el puerto B, en el momento k alguna de las entradas pase de 1 a 0, hay que repetir la suma. Para representarlos se enviaria  al puerto A ( que debe estar configurado como salida) en codigo binario, luego con un BCD a siete segmentos se representara el numero resultante de la suma en un display de 7 segmentos de catodo comun.

Esto circuito lo quiero pk me cuente el numero de interruptores que tengo encendidos.

A ver si alguien me puede hachar una mano con el programa xk estoy mas perdido k un hijo puta en el dia del padre.

Salu2

Título: RE: Contador con PIC16F84
Publicado por: Leonsport en 16 de Junio de 2004, 13:31:00
i        var byte
valor var byte
         trisb=0
loop: for i=0 to 8
         valor=i
         gosub   bin2seg
         pause   1000
         poke    portb,valor
         next i
         goto loop
bin2seg: Lookup valor,  [$40,$79,$24,$30,$19,$12,$02,$78,$00,$18],portb
         Return
Este programa cuenta de 0 a 8 y lo representa en un display 7 segmentos.
salu2
Título: RE: Contador con PIC16F84
Publicado por: piriots en 16 de Junio de 2004, 13:50:00
Muchas gracias x tu ayuda xo con este programa se conecta el display al PIC y si es asi no puedo usar el puerto B para introducir los "1" que haran k el PIC sume.

Si me equivoco correjeme.

Seria pedir mucho k el programa fuera en asm??

Salu2
Título: RE: Contador con PIC16F84
Publicado por: piriots en 17 de Junio de 2004, 11:25:00
El esquema seria este.
http://piries.webcindario.com/conta8pic.jpg

Se podria hacer con una tabla de verdad y una subrutina k sacara la informacion como indica la tabla?? saldria una tabla imensa.
Hay otra manera de hacerlo??

El valor de las resistencias de RB es correcto??

La he calculado teniendo en cuenta k como el puertoB esta a nivel bajo, entre todos les puede entrar un maximo de 150mA

Lo que hecho es 140/8 =17mA para saber la intensidad que puede entrar en cada patilla, he utilizado 140 para dejar un margen de seguridad.

Con la ley de ohm 12-5/0.017 = 411 ohm==> valor comercial=430 ohm.
Título: RE: Contador con PIC16F84
Publicado por: migsantiago en 17 de Junio de 2004, 12:03:00
Agrégale las definiciones y demás cosas que le falten al programa:
-----------


resultado equ 0x10

; declara entradas y salidas y lo que falte

...

bucle clrf resultado
btfsc portb,0
incf resultado
btfsc portb,1
incf resultado
btfsc portb,2
incf resultado
btfsc portb,3
incf resultado
btfsc portb,4
incf resultado
btfsc portb,5
incf resultado
btfsc portb,6
incf resultado
btfsc portb,7
incf resultado
movf resultado,0
movwf porta
goto bucle

----------

Lo que hace es preguntar si se oprimió en botón en RB0; si sí se hizo incrementa resultado, si no, se va a preguntar RB1. Cuando termina las 8 entradas pasa el resultado al puerto A y vuelve a testear los botones.

No olvides poner resistencias pull-up en los botones, para que cuando cualquier botón esté abierto no haya estado de alta impedancia. Eso se hace así:

Título: RE: Contador con PIC16F84
Publicado por: Leonsport en 17 de Junio de 2004, 12:32:00
bueno lo q dice el amigo migsantiago seria correcto, pero yo añadiria un condensador al pulsador para eliminar rebotes.
salu2
Título: RE: Contador con PIC16F84
Publicado por: piriots en 17 de Junio de 2004, 12:33:00
Muchas gracias!!!!! sois fantasticos, pues me pongo a definir entradas, salidas y esto y lo posteo, y si la e cagafo x ai me correjis.

X cierto es correcto es eskema que he puesto??

Es k no ay botones, a las distintas entradas del pic les llega una señal de 12voltios, provinente de otro circuito con interuptores de palanca y demas.

X cierto como se hace para postear fotos??
Título: RE: Contador con PIC16F84
Publicado por: Leonsport en 17 de Junio de 2004, 13:23:00
Con 5v t vale pa lo q quieres hacer.
el esquema t lo ha puesto el amigo migsantiago.
Donde pone Vdd son 5v..ademas puedes añadirle un condensador para los rebotes q se puedan producir.
salu2
Título: RE: Contador con PIC16F84
Publicado por: piriots en 17 de Junio de 2004, 13:54:00
Se k con 5v hay bastante, pero utilizo 12 por la siguiente razon.

La señal que excita el PIC proviene de un circuito con 8 interruptores de palanca de 6 patillas y 3 posiciones.

En la parte superior del interruptor hay conectados +12 y massa, la salida son 12v.

En la parte inferior hay conectados +12 y -5, con lo que la salida son 7v.

La linea de 12v esta conectada a la patilla del medio del interuptor, de esta forma, mandara señal al pic tanto si el interruptor esta arriba como abajo.

Me he explicado bien?.

El circuito tiene que ser como lo he puesto yo, xo con los errores corregidos, pk seguro k ay + de uno.

http://piries.webcindario.com/conta8pic.jpg

Lo del bcd a 7 segmentos no toy mu seguro, xo es la unica forma de poderlo representar en el display no?? pk utilizar un pic + grande, pues como k no pk ya andaria perdido del todo.

Salu2
Título: RE: Contador con PIC16F84
Publicado por: piriots en 17 de Junio de 2004, 13:57:00
Ahi va el programilla "terminado" y lo pongo entre comillas pk no se si tara ok lo k e echo.



;***************************contador0_8.asm**************************
;
;
;ZONA DE DATOS*************************************************

   LIST   P=16F84      ;El ucontuolador utilizado

;ETIQUETAS DE PROGRAMA*********************************************

RESULTADO    EQU   0x10

;zona de codigos*****************************************************

   ORG   0      ;El programa empieza en la direccion 0

INICIO   
   bsf           STATUS,RP0     ;Me situo en el banco 1
   clrf   TRISA      ;Las 5 lineas del Puerto A se configuran como salida
   movlw   b"11111111"   ;Las 8 lineas del Puerto B se configuran como entrada   
   movwf   TRISB
   bcf   STATUS,RP0   ;Acceso al Banco 0

PRINCIPAL    
   clrf    RESULTADO   ;Borra resultado
   btfsc    PORTB,0                    ;Testea RB0, si =0 salta al siguiente
   incf    RESULTADO    ;Si RB0= 1 incrementa el resultado
   btfsc    PORTB,1                    ;Testea RB1, si =0 salta al siguiente      
   incf    RESULTADO    ;Si RB1= 1 incrementa el resultado
   btfsc    PORTB,2                    ;Testea RB2, si =0 salta al siguiente
   incf    RESULTADO    ;Si RB2= 1 incrementa el resultado
   btfsc    PORTB,3                    ;Testea RB3, si =0 salta al siguiente
   incf    RESULTADO    ;Si RB3= 1 incrementa el resultado
   btfsc    PORTB,4                    ;Testea RB4, si =0 salta al siguiente
   incf    RESULTADO    ;Si RB4= 1 incrementa el resultado
   btfsc    PORTB,5                    ;Testea RB5, si =0 salta al siguiente
   incf    RESULTADO    ;Si RB5= 1 incrementa el resultado
   btfsc    PORTB,6                    ;Testea RB6, si =0 salta al siguiente
   incf    RESULTADO    ;Si RB6= 1 incrementa el resultado
   btfsc    PORTB,7                    ;Testea RB7, si =0 salta al siguiente
   incf    RESULTADO    ;Si RB7= 1 incrementa el resultado
   movf    RESULTADO,0    ;??????
   movwf    PORTA       ;envia el resultado al Puerto A
   goto    PRINCIPAL    ;crea un bucle cerrado

   END         ;fin de programa
Título: RE: Contador con PIC16F84
Publicado por: Leonsport en 17 de Junio de 2004, 14:46:00
A simple vista está todo ok.
Simulalo a ver que tal y cuentas que tal.
salu2
Título: RE: Contador con PIC16F84
Publicado por: piriots en 17 de Junio de 2004, 14:53:00
Simularlo en mi caso es un gran problema, uso el simulador de mplab, xo no se si es pk es pc es mu rapodo o lo k sea k cuando simulo un programa no puedo ver nada. Solo veo numeros k se mueven a una velocidad de vertigo, imposible de saber k es lo k esta pasando. No se si desenpolvar mi viejo pc y hacerlo con ese. El pc k tengo ahora es un p4 3.2 ghz el viejo es un p2 a 350mhz.

Alguien k tenga un pc rapido le pasa lo mismo k a mi??
Título: RE: Contador con PIC16F84
Publicado por: piriots en 17 de Junio de 2004, 15:09:00
No puedo simularlo bien, xo me de muchos errores de ensamblado.


Error[108]  : Illegal character (*)
Error[113]  :Symbol not previously defined (STATUS)
Error[113]  : Symbol not previously defined (RP0)
Error[113]  : Symbol not previously defined (TRISA)
Error[113]  : Symbol not previously defined (TRISB)
Error[113]  : Symbol not previously defined (STATUS)
Error[113]  : Symbol not previously defined (RPO)
Error[113]  : Symbol not previously defined (PORTB)
Error[113]  : Symbol not previously defined (PORTB)
Error[113]  : Symbol not previously defined (PORTB)
Error[113]  : Symbol not previously defined (PORTB)
Error[113]  : Symbol not previously defined (PORTB)
Error[113]  : Symbol not previously defined (PORTB)
Error[113]  : Symbol not previously defined (PORTB)
Error[113]  : Symbol not previously defined (PORTB)
Error[113]  : Symbol not previously defined (PORTA)
Halting build on first failure as requested.
BUILD FAILED: Thu Jun 17 22:00:08 2004
Título: RE: Contador con PIC16F84
Publicado por: Leonsport en 17 de Junio de 2004, 16:14:00
Claro se me habia pasao....tienes q definir los registros status y demas.
status equ 03
porta  equ 05
portb  equ 06
yo no utilizo a mplab pero supongo q podrás simularlo paso a paso, porque se supone q t lo simula a la misma frecuencia de reloj del pic.


Título: RE: Contador con PIC16F84
Publicado por: Leonsport en 17 de Junio de 2004, 16:17:00
otra cosilla: date cuenta q t sale un error q t dice illegal caracter *.
eso es porque tienes q separar los comentarios con punto y coma.
por ejemplo...
;*************contador0_8.asm*************
y así con los demás.
suerte
Título: RE: Contador con PIC16F84
Publicado por: piriots en 17 de Junio de 2004, 16:27:00
ostias pues me he olvidado el; otra cosa es k he puesto STATUS,RPO y tiene que ser STATUS,RP0
Título: RE: Contador con PIC16F84
Publicado por: piriots en 17 de Junio de 2004, 17:53:00
Título: RE: Contador con PIC16F84
Publicado por: pocher en 18 de Junio de 2004, 00:14:00
Cuidado con los 12V, tu amigo puede pasar a mejor vida. Máxima tensión 5V.
Título: RE: Contador con PIC16F84
Publicado por: migsantiago en 18 de Junio de 2004, 09:05:00
Bueno ahí te van unas correcciones:

- Para evitar errores de variables no declaradas pon:

LIST P=16f84
include "p16f84.inc"

En el archivo inc se definen los registros más usados (STATUS, PORTA, etc.)

- No es necesario poner capacitor o hacer una subrutina de tiempo para eliminar rebotes. El PIC no va a contar cuántas veces se pulsa un Push Button, sino que va a contar el número de PB que están oprimidos al mismo tiempo.

- movf RESULTADO,0 ;??????
Esa cosa significa mueve el contenido de RESULTADO al acumulador W (0 significa W, 1 significa F)

- Para evitar problemas de los 12V te recomiendo usar un optoacoplador 4N25 para cada entrada al pto B. La resistencia que has de poner junto con los 12V de entrada es de 510ohms (no 180ohms como en el dibujo), con esto le das 20mA más o menos al LED dentro del 4N25. Del otro lado la conexión queda igual, ahí Vdd es igual a 5V.

Checa la imagen:
http://picserver.org/view_image.php/H4L2F7373NPC/p.jpeg

Título: RE: Contador con PIC16F84
Publicado por: Leonsport en 18 de Junio de 2004, 13:21:00
claro esas resistencias es para cada uno de los leds que posee el display, es pura ley de ohm.
salu22
Título: RE: Contador con PIC16F84
Publicado por: piriots en 18 de Junio de 2004, 13:27:00
Pues ai va el esquema con los optoacopladores y las resistencias y todo. El simbolo del optoacoplador y el display lo he tenido k hacer a mano pk el express sch no los tiene.A ver si ta todo ok.....
Título: RE: Contador con PIC16F84
Publicado por: piriots en 18 de Junio de 2004, 20:38:00
Hay una cosa que no veo clara del todo, volviendo al programa  me puedes explicar como le estas mandando al 4511 por ejemplo esto 00101111 si yo muevo a la puerta a y corrigeme si me equivoco qeu seguro qeu si esa suma seria 11111000 segun el programa no? pero por la puerta 1 solo saldria 1111 qeu pasa con el resto?

No habria que utilizar una subrutina que convirtiera los 8 bits a BCD??
Título: RE: Contador con PIC16F84
Publicado por: Leonsport en 19 de Junio de 2004, 03:30:00
De eso ya se encarga el integrado 4511 que es para decodificar los bits q le llegan por el puerto A y los manda al display.
salu2
Título: RE: Contador con PIC16F84
Publicado por: piriots en 19 de Junio de 2004, 05:20:00
I como sabe el pic k lo tiene que mandar al PORTA con codigo binario de 4 bits (BCD)??

EL 4511, lo que hace es "traducir" el codigo BCD a un codigo de 7 segmentos para k el display lo pueda representar.

 SAlu2
Título: RE: Contador con PIC16F84
Publicado por: Leonsport en 19 de Junio de 2004, 07:41:00
tu contador es de 0 a 8 no? con 3 bits contarias de 0 hasta 7 solamente, por tanto necesitas 4 bits(contarias hasta 15).
Y esos 4bits  son los q pilla el decodificador a 7segmentos y los representa en el display.
Segun ese programa el resultado lo almacena en una variable y esa variable será un numero de 0 a 8 q t lo sacará por portA en binario.
salu2
Título: RE: Contador con PIC16F84
Publicado por: piriots en 19 de Junio de 2004, 07:59:00
ok pues ahora ya lo tengo todo claro!!!!!!!!

Muchas gracias leonsport y migsantiago x vuestra ayuda!!!!!!

Salu2 a to2
Título: RE: Contador con PIC16F84
Publicado por: migsantiago en 19 de Junio de 2004, 21:48:00
Bueno, si llegas a tener problemas con el decoder, usa el 74LS47 para un display ánodo común o el 74LS48 para uno de cátodo común.

También esa parte te la puedes evitar haciendo un "barrido" de los leds. Primero prendes 4 leds del display (con 4 salidas de porta), pones una subrutina de 20ms más o menos y luego prendes los otros 4 leds y pones la subrutina. Así engañas al ojo humano haciéndole creer que los leds están prendidos al mismo tiempo. Sólo usas la quinta salida para indicar qué leds estás comandando en ese momento.
Título: RE: Contador con PIC16F84
Publicado por: piriots en 20 de Junio de 2004, 10:46:00
El 4511 me puede dar problemas?? El 7448 me ira mejor?? Esto es mejor aclararlo ahora pk si cuando tenga toda la pcb echa, no me rula tendre que repetirla, y habra a parte de esto el circuito de los led de kit, otro para representar el voltage de las distintas salidas del cuadro de mandos, en displays de 7seg. Y si lo tengo k repetir todo sera una putada.

Salu2  
Título: RE: Contador con PIC16F84
Publicado por: Micom en 21 de Junio de 2004, 00:39:00
Y si hay mas de una entrada activada???? como lo muestra en el display????                
Título: RE: Contador con PIC16F84
Publicado por: migsantiago en 21 de Junio de 2004, 08:51:00
Calma, calma... yo lo decía como sugerencia. Lo que pasa es que nunca he usado el 4511 y no sé cómo funciona. Pero si sabes usarlo pues no hay problema .

Micom, no entiendo tu pregunta . Se supone que el circuito indica cuántas entradas en el puerto B están a "1", las suma y las saca en binario a RA0, RA1, RA2 y RA3, ya después se pasa a 7 segmentos con el 4511.
Título: RE: Contador con PIC16F84
Publicado por: piriots en 21 de Junio de 2004, 14:25:00
Ok ok, bueno, en principio el 4511 a mi me va ok, lo use junto a unos 4008 (sumadores de 4 bit) en un circuito k le ize a un colega, era el mismo k este xo solo con 3 entradas, con 8 tambien se podia azer, xo e recurrido al pic pk con los 4008 salia un circuito immenso.

Salu2

Título: RE: Contador con PIC16F84
Publicado por: piriots en 04 de Octubre de 2004, 15:23:00
Os dejo un par de fotos del circuito. Salu2