Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

14/09/2013 #1


Problemas con migración de código POV
Buenas noches con todos, estoy iniciandome en el mundo de los microcontroladores, intentando hacer un reloj pov (de los que giran y muestran la hora), me encontre con un pequeño problema.
El codigo que adjunto esta hecho para el pic 16f84, hice algunos cambios para adaptarlo a un pic 16f628a y pues lo compile y no hubieron errores pero al momento de grabar el pic y probar en el circuito no funciona.
Quisiera por favor si alguien podria revisar el codigo e indicarme si la migracion de codigo esta bien o quiza tuve algunos errores. Desde ya muchas gracias por su ayuda
15/09/2013 #2
Moderador

Avatar de D@rkbytes

Prueba el proyecto con los cambios que le realicé al código y nos comentas si funciona.
Incluyo dentro del archivo adjunto el esquema original del proyecto y la simulación de prueba.
El código lo modifiqué para un 16F628A basándome en el código original "Noblink.asm"

Saludos y suerte.
15/09/2013 #3


Buenas noches y muchas gracias por su ayuda.
Probe el codigo que usted corrigio y despues de unos pequeños cambios muestra los numeros que dan la hora, pero el reloj no avanza. Se puede configurar la hora pero el reloj se queda detenido
15/09/2013 #4
Moderador

Avatar de D@rkbytes

angelito007 dijo: Ver Mensaje
Buenas noches y muchas gracias por su ayuda.
Probé el código que usted corrigió y después de unos pequeños cambios muestra los números que dan la hora, pero el reloj no avanza. Se puede configurar la hora pero el reloj se queda detenido
Prueba ahora este código, el anterior tenía un error al no cambiar del banco 0 al banco 1 para el registro OPTION_REG.

Nota:
Los cambios realizados al código están comentados en español.

Suerte.
Archivos Adjuntos
Tipo de Archivo: rar 16F628A POV Rev2.rar (5,5 KB (Kilobytes), 50 visitas)
16/09/2013 #5


Muchisimas gracias!!!! Acabo de probar el codigo corregido y todo funciona muy bien. Muchas gracias nuevamente
17/09/2013 #6
Moderador

Avatar de D@rkbytes

angelito007 dijo: Ver Mensaje
Muchisimas gracias!!!! Acabo de probar el codigo corregido y todo funciona muy bien. Muchas gracias nuevamente
De nada, que bien que el código corregido funcionó.

Si es posible que nos muestres algunas fotos o un vídeo del reloj POV funcionando estaría muy bien.
Así podremos ver como lo has realizado y también que nos comentes con que partes lo realizaste.

Saludos.
17/09/2013 #7


Bueno si, en estos dias estare subiendo las fotos y algun video del reloj funcionando, asi como los componentes que fueron necesarios. Gracias
17/09/2013 #8


angelito007 dijo: Ver Mensaje
Bueno si, en estos dias estare subiendo las fotos y algun video del reloj funcionando, asi como los componentes que fueron necesarios. Gracias
Excelente, espero el aporte completo y verlo funcionando
11/10/2014 #9


Buenas tardes, vengo a este foro en busca de ayuda, ya que estoy queriendo realizar un pov con un pic 16f84 y soy nuevo en esto de la programación y ya que muchos de ustedes tienen más idea que yo del tema quisiera ver si me pueden corregir el código o el circuito, ya que al momento de probarlo no pasa nada, les adjunto a continuación los mismos, desde ya muchas gracias y un saludo.
Código:
SWI	EQU	1
PC	EQU	02
REG1	EQU	0x0C
REG2	EQU	0x0D
REG3	EQU	0X0E
Apunta	EQU	0x0F
Conta	EQU	0x1C
AUX	EQU	0x2C

	GOTO	INICIO

TABLA:
	ADDWF	PC,1
	RETLW	d\'255\'	;F
	RETLW	d\'136\'	
	RETLW	d\'136\'
	RETLW	d\'136\'
	RETLW	d\'136\'
	RETLW	d\'128\'
	RETLW	d\'128\'	;F
	RETLW	d\'255\'	;E
	RETLW	d\'137\'	
	RETLW	d\'137\'
	RETLW	d\'137\'	
	RETLW	d\'129\'
	RETLW	d\'129\'	
	RETLW	d\'129\'	;E
	RETLW	d\'255\'	;L
	RETLW	d\'001\'	
	RETLW	d\'001\'	
	RETLW	d\'001\'	
	RETLW	d\'001\'
	RETLW	d\'001\'
	RETLW	d\'001\'	;L
	RETLW	d\'129\'	;I
	RETLW	d\'129\'
	RETLW	d\'129\'
	RETLW	d\'255\'
	RETLW	d\'129\'
	RETLW	d\'129\'
	RETLW	d\'129\'	;I
	RETLW	d\'131\'	;Z
	RETLW	d\'133\'	
	RETLW	d\'137\'
	RETLW	d\'145\'
	RETLW	d\'161\'
	RETLW	d\'193\'
	RETLW	d\'129\'	;Z
	RETLW	0x000	;ESPACIO
	RETLW	0x000
	RETLW	0x000
	RETLW	0x000
	RETLW	0x000
	RETLW	0x000
	RETLW	0x000	;ESPACIO
	RETLW	d\'031\'	;A
	RETLW	d\'036\'	
	RETLW	d\'068\'
	RETLW	d\'132\'
	RETLW	d\'068\'
	RETLW	d\'036\'
	RETLW	d\'031\'	;A
	RETLW	d\'255\'	;N
	RETLW	d\'064\'	
	RETLW	d\'032\'
	RETLW	d\'016\'
	RETLW	d\'008\'
	RETLW	d\'004\'
	RETLW	d\'255\'	;N
	RETLW	d\'129\'	;I
	RETLW	d\'129\'
	RETLW	d\'129\'
	RETLW	d\'255\'
	RETLW	d\'129\'
	RETLW	d\'129\'
	RETLW	d\'129\'	;I
	RETLW	d\'248\'	;V
	RETLW	d\'004\'
	RETLW	d\'002\'
	RETLW	d\'001\'
	RETLW	d\'002\'
	RETLW	d\'004\'
	RETLW	d\'248\'	;V
	RETLW	d\'255\'	;E
	RETLW	d\'137\'	
	RETLW	d\'137\'
	RETLW	d\'137\'	
	RETLW	d\'129\'
	RETLW	d\'129\'	
	RETLW	d\'129\'	;E
	RETLW	d\'255\'	;R
	RETLW	d\'136\'	
	RETLW	d\'136\'
	RETLW	d\'136\'	
	RETLW	d\'140\'
	RETLW	d\'138\'	
	RETLW	d\'113\'	;R
	RETLW	d\'098\'	;S
	RETLW	d\'145\'	
	RETLW	d\'145\'
	RETLW	d\'145\'	
	RETLW	d\'137\'
	RETLW	d\'137\'	
	RETLW	d\'070\'	;S
	RETLW	d\'031\'	;A
	RETLW	d\'036\'	
	RETLW	d\'068\'
	RETLW	d\'132\'
	RETLW	d\'068\'
	RETLW	d\'036\'
	RETLW	d\'031\'	;A
	RETLW	d\'255\'	;R
	RETLW	d\'136\'	
	RETLW	d\'136\'
	RETLW	d\'136\'	
	RETLW	d\'140\'
	RETLW	d\'138\'	
	RETLW	d\'113\'	;R
	RETLW	d\'129\'	;I
	RETLW	d\'129\'
	RETLW	d\'129\'
	RETLW	d\'255\'
	RETLW	d\'129\'
	RETLW	d\'129\'
	RETLW	d\'129\'	;I
	RETLW	d\'126\'	;O
	RETLW	d\'129\'
	RETLW	d\'129\'
	RETLW	d\'129\'
	RETLW	d\'129\'
	RETLW	d\'129\'
	RETLW	d\'126\'	;O

ms	movwf	REG1	;tiempo en milisegundos

repe	movlw	.2
	movwf	REG2

rep	NOP
	decfsz	REG2,1
	goto	rep
	decfsz	REG1,1
	goto	repe
	retlw	0

INICIO	clrf 	PORTB
	bsf	STATUS,RP0	
	movlw	0x00
	movwf	PORTA
	movlw	0x00
	movwf	PORTB
	bcf	STATUS,RP0
	movlw	.25
	call	ms
	movlw	5
	movwf	AUX

otra	;btfsc	PORTA,SWI
	;goto	otra
	;movlw	.20
	;call	ms
	clrf	PORTA
	movlw	.11
	movwf	Conta
	clrf	Apunta

novo	movf	Apunta,w
	incf	Apunta,1

sale	call	TABLA
	movwf	PORTB
	movlw	.5
	call	ms
	decfsz	AUX,1
	goto	novo
	clrf	PORTB
	movlw	.5
	movwf	AUX
	decfsz	Conta,1
	goto	novo
	goto	otra
	org	0x1ff
	goto	INICIO

	END
Imágenes Adjuntas
Tipo de Archivo: png POV.png (37,4 KB (Kilobytes), 14 visitas)
11/10/2014 #10

Avatar de JoaquinFerrero

Esto... ¿cómo está configurado el reloj del sistema?
11/10/2014 #11


Emmm, no tengo idea amigo, me enteré hace dos días que los pic necesitaban osciladores, por eso recurro a ustedes
29/10/2014 #12


Buenas noches, me migre a c para programar el pic y creo que logre algo, solamente quisiera saber si es correcto el código que acabo de realizar, por supuesto que es una compilación de varios códigos. Y pienso utilizar un oscilador de 4MHz externo. Creo que logre configurar el reloj. Y quisiera que me digan si le ven algún error al código para comenzar a hacer el diseño del mismo. Un saludo y muchas gracias a la comunidad.

Código:
#include <16f84a.h>            //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT //ordenes para el programador
#use delay (clock=4000000) //Fosc=4Mhz
#byte portb =0x06

const char letter_SPC[8]= {0,0,0,0,0,0,0};
const char letter_L[8]= {255,1,1,1,1,1,1};
const char letter_U[8]= {255,1,1,1,1,1,255};
const char letter_I[8]= {129,129,129,255,129,129,129};
const char letter_S[8]= {98,145,145,145,137,137,70};

void printChar(char l);

void main(){
     set_tris_a(0x01);
     set_tris_b(0x00);
     
     while(1){
      if(input(pin_a0)==1){
            printChar('L');
            printChar('U');
            printChar('I');
            printChar('S');
         }
     }
}

void printChar(char l){
   int n;
   
   for(n=0;n<8;n++){
        if(l == ' ') PORTB = letter_SPC[n];
        else if(l == 'L') PORTB = letter_L[n];
        else if(l == 'U') PORTB = letter_U[n];
        else if(l == 'I') PORTB = letter_I[n];
        else if(l == 'S') PORTB = letter_S[n];
   }
   PORTB = 0;
   Delay_ms(2);  // adjust this to compensate for rpm differences
        
} //end printChar function
01/11/2014 #13

Avatar de JoaquinFerrero

Según el código, estás sacando las letras de LUIS por el puerto B, con una separación de 2 ms entre letras. Es poco tiempo para apreciarlo a simple vista, pero si es lo que quieres hacer, entonces está bien.
01/11/2014 #14


Con que tiempo lo harías vos?
01/11/2014 #15


Buenas, les comento que ya probé el circuito y funciona perfectamente, lo único es que no se alcanza a distinguir el mensaje, eh intentado cambiando el delay pero no alcanza a darle la suficiente corriente a los led's para que se distinga el efecto de pov, intente sacando las resistencias limitadoras de 220 y se noto el cambio, pero aún no logro que pase la suficiente intensidad como para que se note, quisiera saber que me recomendarían ustedes que le ponga? Yo estaba pensando en ponerle unos transistores, pero no se. Por lo pronto voy a seguir probando y les comentaré mis resultados. Muchas gracias por la mano y disculpen las molestias
01/11/2014 #16

Avatar de JoaquinFerrero

Debes poner un retraso entre cada letra, que es el tiempo que permanecen encendido los LED.

Es cuestión de matemáticas: tienes que medir el tiempo que tarda el reloj hacer un desplazamiento de la barra de LED. A lo largo de ese tiempo es donde quieres que se pinte el nombre. Por ejemplo, si el periodo de movimiento es de 500 ms, y queremos que aparezcan 4 letras en ese espacio, pues significa que tenemos 500 /4 = 125 ms por letra. Y esa letra se compone de 8 columnas (por ejemplo), entonces tenemos 125 / 8 = 15.625 ms por cada columna.

Ese es el tiempo de retraso que debes poner por cada columna de cada letra.

Bueno, en realidad hay que tener en cuenta una columna más, como separador entre letras.

Para simplificar las cosas, lo que se hace es "pintar" las letras, espacios, símbolos en un trozo de la memoria. Entonces la rutina de pintado solo tiene que ir mandando esos bytes uno tras otro. Y el programa puede entonces hacer desplazamiento (scroll) de ese contenido de forma fácil.
01/11/2014 #17


Muchas gracias por tu ayuda
02/11/2014 #18


Tienes que ponerle un tiempo dentro del FOR en mi caso a unas 3000rpm aproximadamente me quedo con unos 80us.

te deberia de funcionar con esta modificacion:
for(n=0;n<8;n++){
if(l == ' ') PORTB = letter_SPC[n];
else if(l == 'L') PORTB = letter_L[n];
else if(l == 'U') PORTB = letter_U[n];
else if(l == 'I') PORTB = letter_I[n];
else if(l == 'S') PORTB = letter_S[n];
Delay_us(100); // depende de las rpm
}
PORTB = 0;
Delay_us(100) //depende de las rpm
03/11/2014 #19


Muchas gracias,anduvo de lujo con eso, ahora estoy viendo como armar la estructura, les agradecería si me dan una mano, y quisiera saber si al 16f84 lo puedo alimentar con una pila para no gastarme en pensar como llevar la alimentación. Muchas gracias
03/11/2014 #20


Yo use una batería de 3.7V creo que era una lipo y funciono normal, una batería de celular también estaría bien.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.