Autor Tema: Contador digital de 0 a 255  (Leído 13682 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Contador digital de 0 a 255
« en: 28 de Mayo de 2010, 00:06:52 »
Buenas noches señores, gracias por tomarse su tiempo para ver este post... bueno esta es la cosa necesito que me ayuden a hacer un contador digital bueno no se si esta bien dicho pero realmente lo que necesito es esto... por el puertb en 8 bit tiene que salir la combinacion de 0 y 1  que vallan desde 00000000 hasta 11111111 pero sin hacer una tabla... es decir lo que necesito es que por codigo me valla incrementando la secuencia binaria hasta que llegue a 255...

es algo asi como el conteo que utiliza el 4040 que todos sabemos usar.... por que la manera como la estaba pensando era hacer como una tabla....asi

00000000
00000001
00000010
00000011
00000100
.
.
.
11111111

esta es la secuencia que tiene que salir por el puerto b pero en vez de crear esa tabla la quiero hacer programando... para ver si me pueden ayudar a crear ese codigo gracias por su respuesta...

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Contador digital de 0 a 255
« Respuesta #1 en: 28 de Mayo de 2010, 00:17:31 »
Simplemente cuentas y cuando quieres sacar por el puerto lo envias tal cual al dato al puerto, eso lo saca en binario... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Contador digital de 0 a 255
« Respuesta #2 en: 28 de Mayo de 2010, 00:22:43 »
exacto como dice marcos, ahora si no quieres tablas y solo sacar el numero eso lo puede arreglar con un INCF, F
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Contador digital de 0 a 255
« Respuesta #3 en: 28 de Mayo de 2010, 11:24:15 »
ok es lo que estaba pensando de hacer un incf,f pero eso no solo incrementaria en 1 un solo bit... es decir mas o menos asi...

00000000
10000000
01000000
00100000
00010000
.
.
.
00000001

tipo escalera y lo necesito que se hagan los cambios como un codigo binario asi como lo habia explicado antes...

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Contador digital de 0 a 255
« Respuesta #4 en: 28 de Mayo de 2010, 12:27:24 »
.


Mm.. en realidad la instrucción que hace lo que pusiste es RRF (rotate right register F).
INCF suma 1 al registro en cuestión y logra la secuencia binaria que estás buscando. Cabe aclarar que una vez que llega a 0xFF (al tope), vuelve a 0x00.
Saludos.




When you see a good move, look for a better one (Emanuel Lasker)

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Contador digital de 0 a 255
« Respuesta #5 en: 28 de Mayo de 2010, 13:19:27 »

Saludos

Hay varias opciones para visualizar el valor del contaje, una es incrementar la variable y hacer una conversión a BCD me parece una forma elegante, la otra es utilizar comparadores utilizando la instrucción xorlw y el bit c del registro status, y la otra es realizar la tabla pero creo que es una forma poco elegante. Pero al final de cuentas sin funciona no importa cual camino se utilizó. Espero twe sirvan la opciones.
Un saludo desde Pereira - Colombia

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Contador digital de 0 a 255
« Respuesta #6 en: 28 de Mayo de 2010, 18:30:19 »
Bueno amigo lo que pasa es que necesito generar una onda senoidal con pic 16f84 y ese tipo de onda como tal no me va a salir si no mas bien como una escalera...

ahorita con este codigo que les estoy mostrando me sale una diente de cierra pero al reves... empieza desde el ultimo digito 00111111 y termina en el primero 00000000

pero no se por que, e revisado las variables y a salido bien... por lo menos en el codigo pero a la hora de mostrarlo por el puerto b me sale alreves de lo que aparece en el pcl, revisenlo y digamen que hice mal... xfa

aaa y si alguien sabe como generar la honda senoidal que me eche una mano xfa ...

Citar
   LIST   P=16F84A,            ; usar PIC 16F84A
   #include <p16f84A.inc>

   CUENTA   EQU   20H
   FACTOR   EQU   21H

   ORG   0
   BSF   STATUS,5            ; activa la pagina 1
   MOVLW   B'01111'            ; carga 01111 en W
   MOVWF   TRISA               ; puerto A, RA0 a RA3 entradas
   MOVLW   B'00000000'            ; carga 11111111 en W
   MOVWF   TRISB               ; puerto B todas salidas
   BCF   STATUS,5            ; volvemos a la pagina 0

   CLRF   PORTA               ; ponemos a cero el puerto A
   CLRF   PORTB               ; ponemos a cero el puerto B
   CLRF   CUENTA
   MOVLW   B'00111111'
   MOVWF   FACTOR
   GOTO   INICIO               ; va a inicio

TABLA
   ADDWF   PCL,1   

RETLW   B'00000000'
RETLW   B'00000001'
RETLW   B'00000010'
RETLW   B'00000011'
RETLW   B'00000100'
RETLW   B'00000101'
RETLW   B'00000110'
RETLW   B'00000111'
RETLW   B'00001000'
RETLW   B'00001001'
RETLW   B'00001010'
RETLW   B'00001011'
RETLW   B'00001100'
RETLW   B'00001101'
RETLW   B'00001110'
RETLW   B'00001111'
RETLW   B'00010000'
RETLW   B'00010001'
RETLW   B'00010010'
RETLW   B'00010011'
RETLW   B'00010100'
RETLW   B'00010101'
RETLW   B'00010110'
RETLW   B'00010111'
RETLW   B'00011000'
RETLW   B'00011001'
RETLW   B'00011010'
RETLW   B'00011011'
RETLW   B'00011100'
RETLW   B'00011101'
RETLW   B'00011110'
RETLW   B'00011111'
RETLW   B'00100000'
RETLW   B'00100001'
RETLW   B'00100010'
RETLW   B'00100011'
RETLW   B'00100100'
RETLW   B'00100101'
RETLW   B'00100110'
RETLW   B'00100111'
RETLW   B'00101000'
RETLW   B'00101001'
RETLW   B'00101010'
RETLW   B'00101011'
RETLW   B'00101100'
RETLW   B'00101101'
RETLW   B'00101110'
RETLW   B'00101111'
RETLW   B'00110000'
RETLW   B'00110001'
RETLW   B'00110010'
RETLW   B'00110011'
RETLW   B'00110100'
RETLW   B'00110101'
RETLW   B'00110110'
RETLW   B'00110111'
RETLW   B'00111000'
RETLW   B'00111001'
RETLW   B'00111010'
RETLW   B'00111011'
RETLW   B'00111100'
RETLW   B'00111101'
RETLW   B'00111110'
RETLW   B'00111111'

INICIO
   MOVF   CUENTA,W
   CALL   TABLA               ; llamamos a TABLA
   XORWF   FACTOR,0
   BTFSC   STATUS,Z
   GOTO    FIN
   MOVWF   PORTB               ; cargamos W en el puerto B
   INCF   CUENTA,F
   GOTO   INICIO               ; va a INICIO
   
FIN
   END                  ; fin de programa

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Contador digital de 0 a 255
« Respuesta #7 en: 31 de Mayo de 2010, 17:50:04 »

Saludos

Como obtuvistes la valores de la señal porque yo lo he hecho en matlab y funciona muy bien.
Un saludo desde Pereira - Colombia

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Contador digital de 0 a 255
« Respuesta #8 en: 02 de Junio de 2010, 21:05:23 »
amigos necesito que me ayuden a resolver un problema que tengo que no me deja avanzar en la practica.... estoy haciendo una onda triangular on un pic 628 y tengo que utilizar un dac de 5 bit para generar la onda la cual no es problema, la cosa es la siguiente

cuando hago el conteo ascendente de 0 a 31 en el watch windows me muestra que lo hace correctamente pero a la hora de poner el dato en el puerto lo hace de forma inversa es decir... si en el watch windows muestra que tengo 00000010 en el puerto b me sale 00011101 es decir inverso al dato que quiero poner pero es solo cuando es ascendente

cuando el conteo es desde 31 hasta 0 si lo hace correctamente pero no se que puede ser estoy cansado de revisar ese codigo y varios compañeros de clases lo hemos revisado y nada simplemente no sabemos cual es el error

en el codigo que les dare acontinuacion la variable cuenta la utilizo para hacer un contador para el pcl que me permite de forma ascendente incrementar desde 0 hasta 31 para obtener el valor de la tabla y de forma descendente desde 31 hasta 0 en eso no hay problema, es a la hora de mostrar el dato de forma ascenente que me da ese error

acontinuacion adjunto el codigo para ver si uds analizandolo me ayudan a dar con el problema y tambien adjuntare unas imagenes para ilustrar mejor lo que quiero dar a entender....

Código: [Seleccionar]

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ENCABEZADO \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

LIST P=16F628 ; Microcontrolador utilizado.-
#INCLUDE P16F628.INC ; Definicion de registros SFR.-
__CONFIG 0x3F18
;0x3F61

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ DEF. DE VARIABLES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

CBLOCK 0x20      ; En esta posicion se declaran los registros de usuario (GPR)

CUENTA
FACTOR
PDel0
PDel1
FACTOR2
AUX
AUX2

ENDC

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ RESET \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

RESET
ORG 00H
GOTO INICIO ; Salto a inicio del programa.-

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ CONFIG. DE PUERTOS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

ORG 05H

INICIO
MOVLW 0x07
MOVWF CMCON ; DESHABILITA LOS COMPARADORES ANALOGICOS
BSF STATUS,5
MOVLW B'00011111'
MOVWF TRISA
MOVLW B'11000000'
MOVWF TRISB
BCF STATUS,5
CLRF PORTA ; ponemos a cero el puerto A
CLRF PORTB ; ponemos a cero el puerto B
CLRF CUENTA
CLRF AUX
CLRF AUX2
MOVLW B'00011111'
MOVWF FACTOR
MOVLW B'00000000'
MOVWF FACTOR2
GOTO COMPA

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ COMPARACION DE SEÑALES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

COMPA

BTFSC PORTA,0 ;PREGUNTA POR EL BIT DE ENTRADA
GOTO TRIANG1 ;VA A LA ONDA TRIANGULAR
GOTO COMPA ;VUELVE A PREGUNTAR POR EL BOTON

TRIANG1

MOVF CUENTA,W ;MUEVO A W EL VALOR DE CUENTA (0 INICIALMENTE)
CALL TABLA ;Llamamos a TABLA
MOVWF AUX ;MUEVO EL VALOR DE W A AUX
XORWF FACTOR,0 ;COMPARO CON FACTOR EL VALOR DE W
BTFSC STATUS,Z ;PREGUNTO POR LA BANDERA Z
GOTO TRIANG2 ;SI SE LEVANTO VOY A TRIANG2
MOVF AUX ;MUEVO LO QUE TIENE AUX A W
MOVWF PORTB ; cargamos W en el puerto B
INCF CUENTA,F ;SUMO 1 A CUENTA PARA INCREMENTAR EL VALOR DE LA TABLA
CALL DEMORA ;LLAMO AL RETARDO
GOTO TRIANG1 ;va a TRIANG1

TRIANG2
;AHORA CUENTA TIENE EL VALOR 1F QUE ES EL MAXIMO QUE SE CARGO EN EL PASO ANTERIOR
MOVF CUENTA,W ;IGUAL QUE LO ANTERIOR SOLO QUE AHORA DECIENDE EL VALOR DE CUENTA
CALL TABLA ; llamamos a TABLA
MOVWF AUX2
XORWF FACTOR2,0
BTFSC STATUS,Z
GOTO FIN
MOVF AUX2
MOVWF PORTB ; cargamos W en el puerto B
DECF CUENTA,F ; DECREMENTO EL VALOR DE CUENTA Y POR ESO LA GRAFICA DEFIENDE
CALL DEMORA
GOTO TRIANG2

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ TABLA  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

TABLA

ADDWF PCL,1
RETLW .0
RETLW .1
RETLW .2
RETLW .3
RETLW .4
RETLW .5
RETLW .6
RETLW .7
RETLW .8
RETLW .9
RETLW .10
RETLW .11
RETLW .12
RETLW .13
RETLW .14
RETLW .15
RETLW .16
RETLW .17
RETLW .18
RETLW .19
RETLW .20
RETLW .21
RETLW .22
RETLW .23
RETLW .24
RETLW .25
RETLW .26
RETLW .27
RETLW .28
RETLW .29
RETLW .30
RETLW .31

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ RUTINA DE RETARDO \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

DEMORA
MOVLW .6
MOVWF PDel0
PLoop1
MOVLW .207
MOVWF PDel1
PLoop2
CLRWDT
DECFSZ PDel1,1
GOTO PLoop2
DECFSZ PDel0,1
GOTO PLoop1
PDe1L1
GOTO PDe1L2
PDe1L2
CLRWDT
RETURN

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ FIN DE PROGRAMA \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

FIN
END



Espero puedan dar con el problema de mi codigo gracias por su tiempo....

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Contador digital de 0 a 255
« Respuesta #9 en: 03 de Junio de 2010, 13:24:07 »
Si aqui le pones que se quede en W en el movf creo que ya te va. Asi "MOVF   AUX,0" sino te pone lo que hay anteriormente en W que es factor menos AUX que es lo contrario, en el segundo triangulo tampoco pones ese 0 pero te funciona por suerte   :lol:

                MOVF        AUX               ;MUEVO LO QUE TIENE AUX A W
   MOVWF   PORTB               ; cargamos W en el puerto B


A ver si acerte. Saludos

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Contador digital de 0 a 255
« Respuesta #10 en: 03 de Junio de 2010, 22:04:06 »
Si aqui le pones que se quede en W en el movf creo que ya te va. Asi "MOVF   AUX,0" sino te pone lo que hay anteriormente en W que es factor menos AUX que es lo contrario, en el segundo triangulo tampoco pones ese 0 pero te funciona por suerte   :lol:

                MOVF        AUX               ;MUEVO LO QUE TIENE AUX A W
   MOVWF   PORTB               ; cargamos W en el puerto B


A ver si acerte. Saludos

gracias mi pana sinceramente soluciono el problema que tenia te lo agradesco ahora voy a arreglar el problema del dac con resistencias que no me esta mostrando el dato como es... cualquier cosa posteo por aqui... saludos xD

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Contador digital de 0 a 255
« Respuesta #11 en: 04 de Junio de 2010, 11:12:26 »
Amigos ahora me surge otra cosa, con la solucion que me dio el amigo tapi8 me dio la onda trinangular sin problema alguno, pero ahorita me surge otro inconveniente con la onda senoidal... estoy tratando de hacerla pero cuando llega la hora de hacer la compraracion de los datos casi igual al codigo anterior que les mostre, me surge un problema por que el pcl de la tabla se me pierde.... y no se como solucionarlo...

Código: [Seleccionar]

CBLOCK 0x20      ; En esta posicion se declaran los registros de usuario (GPR)

CUENTA
CUENTA2
FACTOR
PDel0
PDel1
FACTOR2
FACTOR3
AUX
AUX2
AUX3
AUX4

ENDC

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ RESET \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

RESET
ORG 00H
GOTO INICIO ; Salto a inicio del programa.-

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ CONFIG. DE PUERTOS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

ORG 05H

INICIO
MOVLW 0x07
MOVWF CMCON ; DESHABILITA LOS COMPARADORES ANALOGICOS
BSF STATUS,5
MOVLW B'00011111'
MOVWF TRISA
MOVLW B'11000000'
MOVWF TRISB
BCF STATUS,5
CLRF PORTA ; ponemos a cero el puerto A
CLRF PORTB ; ponemos a cero el puerto B
CLRF CUENTA
MOVLW B'00011111'
MOVWF FACTOR
MOVLW B'00000000'
MOVWF FACTOR2
MOVLW B'00001001'
MOVWF FACTOR3
GOTO COMPA

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ COMPARACION DE SEÑALES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

COMPA

BTFSC PORTA,0 ;PREGUNTA POR EL BIT DE ENTRADA
GOTO TRIANG1 ;VA A LA ONDA TRIANGULAR
BTFSC PORTA,1
GOTO SENOI1
GOTO COMPA ;VUELVE A PREGUNTAR POR EL BOTON

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ SENOIDAL \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

SENOI1

MOVF CUENTA2,W ;MUEVO A W EL VALOR DE CUENTA (0 INICIALMENTE)
CALL TABLA1 ;Llamamos a TABLA
MOVWF AUX3 ;MUEVO EL VALOR DE W A AUX
XORWF FACTOR3,0 ;COMPARO CON FACTOR EL VALOR DE W
BTFSC STATUS,Z ;PREGUNTO POR LA BANDERA Z
GOTO SENOI2 ;SI SE LEVANTO VOY A TRIANG2
MOVF AUX3,0 ;MUEVO LO QUE TIENE AUX A W
MOVWF PORTB ; cargamos W en el puerto B
INCF CUENTA2,F ;SUMO 1 A CUENTA PARA INCREMENTAR EL VALOR DE LA TABLA
CALL DEMORA ;LLAMO AL RETARDO
GOTO SENOI1 ;va a TRIANG1

SENOI2
;AHORA CUENTA TIENE EL VALOR 1F QUE ES EL MAXIMO QUE SE CARGO EN EL PASO ANTERIOR
MOVF CUENTA2,W ;IGUAL QUE LO ANTERIOR SOLO QUE AHORA DECIENDE EL VALOR DE CUENTA
CALL TABLA1 ; llamamos a TABLA
MOVWF AUX4
XORWF FACTOR2,0
BTFSC STATUS,Z
GOTO FIN
MOVF AUX4,0
MOVWF PORTB ; cargamos W en el puerto B
DECF CUENTA2,F ; DECREMENTO EL VALOR DE CUENTA Y POR ESO LA GRAFICA DEFIENDE
CALL DEMORA
GOTO SENOI2


;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ TABLA SENOIDAL \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

TABLA1
ADDWF PCL,1
RETLW .16
RETLW .18
RETLW .21
RETLW .23
RETLW .25
RETLW .27
RETLW .28
RETLW .30
RETLW .31

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ RUTINA DE RETARDO \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

DEMORA
MOVLW .6
MOVWF PDel0
PLoop1
MOVLW .207
MOVWF PDel1
PLoop2
CLRWDT
DECFSZ PDel1,1
GOTO PLoop2
DECFSZ PDel0,1
GOTO PLoop1
PDe1L1
GOTO PDe1L2
PDe1L2
CLRWDT
RETURN

;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ FIN DE PROGRAMA \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

FIN
END


Basicamente es igual al codigo anterior que les di, solo que ahorita la tabla la puse para que mas o menos haga como una curva parecida a la de la onda senoidal, pero a la hora de graficarla simplemente el pcl se va... y no me grafica nada si no que empieza a darme los errores de se espera call o excesive no se que....

me gustaria que me orientaran sobre esto ya que es mi primera vez que manejo tantas tablas... (tengo que manejar como 5) y no quiero tener mas inconvenientes de este tipo para no molestarlo mas....
 
PD: anteriormente esta la tabla de la onda triangular solo que aqui en este codigo no se las puse....

gracias de antemano por su respuesta y espero entiendan la duda que tengo...

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Contador digital de 0 a 255
« Respuesta #12 en: 04 de Junio de 2010, 15:56:03 »
Las tablas casi siempre se desbordan por dos motivos:

El valor que llevan en W es mayor que el mayor de la tabla.

La tabla esta por encima de la posicion FF (255) del PCL.

Las tablas se deben poner siempre al principio del programa, creo que tu caso es este segundo, mira donde esta ubicada, porque supongo que este programa es continuacion del otro, y es posible que este por encima de esa posicion.

Suerte.

Desconectado Goodfrey

  • PIC12
  • **
  • Mensajes: 87
Re: Contador digital de 0 a 255
« Respuesta #13 en: 05 de Junio de 2010, 00:28:34 »
Las tablas casi siempre se desbordan por dos motivos:

El valor que llevan en W es mayor que el mayor de la tabla.

La tabla esta por encima de la posicion FF (255) del PCL.

Las tablas se deben poner siempre al principio del programa, creo que tu caso es este segundo, mira donde esta ubicada, porque supongo que este programa es continuacion del otro, y es posible que este por encima de esa posicion.

Suerte.

Pana corri las tablas para el inicio del programa y nada, me sigue el mismo problema que se desbora a la hora de ejecutar el pcl, creo que el motivo seria el que dijiste que depende del valor que lleva W xq no se como borrar el valor del pcl para que en esa segunda grafica pueda empezar el conteo desde 0 si me puedes ayudar te lo agradeceria... aqui coloco el codigo completo para que le eches una ojeada a ver que dices...

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Contador digital de 0 a 255
« Respuesta #14 en: 05 de Junio de 2010, 07:43:25 »
Claro que se desborda por el valor en W, la tabla tiene 9 posiciones de 0 a 8 y tu lo comparas con 9 y despues lo incrementas y se desborda, en las tablas se suma el PCL+W+1, el 1 es porque el programa para que corra el PIC internamente hace esta operacion PCL+1 para pasar a la siguiente instruccion, fijate cuando haces la primera suma, lleva en W el 0, seria PCL+0=PCL se quedaria ahi, sin embargo no se queda te da el primer valor de la tabla. Tambien tienes otros problemas, comparas con el valor que te devuelve la tabla y no con CUENTA2 que es el que se va incrementando, es CUENTA2 el que no debe exceder de 8. Esta comparacion la debes de hacer despues de INCF CUENTA2,1 ya que si miras que CUENTA2 no sea mayor de 8 y despues lo incremantas tambien se desbordara.
Prueba con este que modifique para SENOI1, pon en INICIO  "CLRF CUENTA2" para que cada vez que empieza empiece de 0, asi te deberia funcionar.



SENOI1   

   MOVF   CUENTA2,W            ;MUEVO A W EL VALOR DE CUENTA (0 INICIALMENTE)
   CALL   TABLA1               ;Llamamos a TABLA
   MOVWF   AUX3      
   INCF   CUENTA2,1               ;SUMO 1 A CUENTA PARA INCREME
   MOVF   CUENTA2,W                                                    ;MUEVO CUENTA2 A W Y LO DEJO EN W            
   XORWF   FACTOR3,0            ;COMPARO CON FACTOR EL VALOR DE CUENTA2
   BTFSC   STATUS,Z            ;PREGUNTO POR LA BANDERA Z   
   GOTO    SENOI2               ;SI SE LEVANTO VOY A TRIANG2
   MOVF   AUX3,0               ;MUEVO LO QUE TIENE AUX A W
   MOVWF   PORTB               ; cargamos W en el puerto B

   CALL   DEMORA               ;LLAMO AL RETARDO
   GOTO   SENOI1               ;va a TRIANG1


   





 

anything