Programación Específica > Microcontroladores

 Pic 16f87x

<< < (4/5) > >>

ramirojuan:
Sabes tengo una rutina que convierte un byte en decimal, la idea de esto es :
Comparar si en el byte mas significativo tengo valores entonces lo comparo o resto con el valor 0 si es cero paso a la rutina que me entrega en tres registros distintos el valor del byte menos significativo, se entiende? y luego envio un 30h por el valor del primer byte y luego a los valores que tenga cada contador le sumo 30h y lo envio te parece? claro que esta solucion es solo para resultados recibidos del ADC hasta 255 no es nuevo lo que digo, pero si lo hago hasta 1023 que es el valor maximo de los 10 bits que entrega el conversor no me sirve.... pero podria  salir de ahi la  solucion o es muy larga piensas?
por ejemplo, en el segundo byte solo existen 4 posibles resultados que son 0,1,2,3 los que corresponden a un resultado 0,256,512 y 768 si sumo cada digito a su contador correspondiente del byte menos significatico??
puede ser o no? que piensas?

berretta:
Si no resolviste tu problema, aca te mando esto
Esta rutina sirve para ese fin
esta en formato libreria pero puedes incluirla
como codigo de programa
Tambien la podes usar para presentar los datos
en una pantalla LCD
Saludos

;-------------------------------------------------------------------
;
; Libreria para convertir un numero binario de 16 bit a 5 BCD.  
; y salida ASCII
;
; El numero binario se guarda en NumH los 8 bits de mayor peso y
;en  NumL los de menor peso
; La salida en BCD estan en :  
;TenK   = 10000   
;Thou   =   1000
;Hund   =     100
;Tens   =       10
;Ones    =         1
;


Conv_BCD                        

    clrf   Ones
   clrf   Tens
   clrf   Hund
   clrf    Thou          
   clrf    Tenk

;Rutina de conversion de 16 bits a bcd - Conv. p.ej.FFFF en 65535

;Las varaibles de entrada son:
;NumH para el byte alto
;NumL para el byte bajo

;El resultado esta en cuatro digitos
;Las unidades en Ones
;Las decenas en Tens
;Las centenas en Hund
;Las unidades de mil en Thou
;


 
        swapf   NumH,w
        andlw   h'0F'             ;
        addlw   h'F0'             ;
        movwf   Thou
        addwf   Thou,f
        addlw   h'E2'
        movwf   Hund
        addlw   h'32'
        movwf   Ones

        movf    NumH,w
        andlw   h'0F'
        addwf   Hund,f
        addwf   Hund,f
        addwf   Ones,f
        addlw   h'E9'
        movwf   Tens
        addwf   Tens,f
        addwf   Tens,f

        swapf   NumL,w
        andlw   h'0F'
        addwf   Tens,f
        addwf   Ones,f

        rlf     Tens,f
        rlf     Ones,f
        comf    Ones,f
        rlf     Ones,f

        movf    NumL,w
        andlw   h'0F'
        addwf   Ones,f
        rlf     Thou,f

        movlw   h'07'
        movwf   Tenk
        movlw   h'0A'                             ; Ten
Lb1:
        addwf   Ones,f
        decf    Tens,f
        btfss   3,0
         goto   Lb1
Lb2:
        addwf   Tens,f
        decf    Hund,f
        btfss   3,0
         goto   Lb2
Lb3:
        addwf   Hund,f
        decf    Thou,f
        btfss   3,0
         goto   Lb3
Lb4:
        addwf   Thou,f
        decf    Tenk,f
        btfss   3,0
         goto   Lb4


;Conversion bcd a ASCII
   
   movlw   0x30
   addwf   Tenk,1
   
        movlw   0x30
   addwf   Thou,1
   
   movlw   0x30
   addwf   Hund,1  

   movlw   0x30
   addwf   Tens,1
   
   movlw   0x30
   addwf   Ones,1

   RETURN

© Jonathan ©:
Hola, pues no se si funcionaria, es cuestion de probar, es bastante dificil lograr que un micro que de fabrica suma solo numeros de 8 bits cada uno, pueda sumar numeros de 10 bits. No se si habria manera de realizar dicha suma, talvez exista una manera y esa podria ser como dices, es solo cuestion de que pruebes. La libreria que aporto berretta, esta muy buena, aparte es mas compacta que la que yo hiba a postear, asi que no la posteare, si tu la quieres te la envio, pero esa es mejor que la que tengo. Bueno, ante cualquier duda, aqui estare. Saludos y suerte :hola:

ramirojuan:
Saludos amigos, finalmente termine la solucion a mi problema, convierto 10 bits en ascii desde 0000 hasta 1023, se los envio???
Ahora tengo otro problema y queria molestarlos, tengo una rutina para el ADC donde se incluye la rutina del conversor bin a ascii y el envio de la conversion a un pc para ser visualizado por Hyperterminal, estas etapas las probe y estan ok, lo que ocurre es que el ADC no esta convirtiendo bien ya que solo hace una conversion y la envia, tengo conectado un potenciometro en el canal 0 donde vario de 0 a 5 volt pero la salida siempre es la misma, me da la impresion de que tengo algun problema con los tiempos o palabras de control del ADC, me podrian enviar alguna rutina pequeña donde se aplique el ADC para salir de mis dudas??....

Saludos.  :hola:

© Jonathan ©:
Hola amigo, pues me pone super contento saber que has logrado hacer lo que querias hacer... Ni lo dudes en postear el archivo aqui, eso si no es molestia para ti, con respecto a tu problema, todo es configuracion del conversor, aqui no tengo unas rutinas, pero tengo este link, que es el que uso para guiarme en la configuracion del CAD en el PIC16F873, talvez te sirva, buscare algun coodigo que te sea de utilidad.

  FELICITACIONES!!!  :smartass:  :D  B) y Muchos Saludos :hola:

CAD PIC16F873/877

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa