• Martes 7 de Mayo de 2024, 00:27

Autor Tema:  Pic 16f87x  (Leído 14949 veces)

ramirojuan

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Pic 16f87x
« en: Martes 30 de Diciembre de 2003, 03:42 »
0
Acudo a ustedes en forma urgente para salir de un problema que tengo, estoy trabajando con el pic 16f877A, con el conversor A/D y la usart pero el dato que me entrega el conversor es binario yo necesito ayuda para hacer el programa y asi obtener el resultado del conversor (10 bits en decimal de 0 a 1023) en ascii para luego enviarlo al pc, estuve viendo algunos programas que ya hay en el foro pero solo convierten en tres digitos que son hexa en ascii. no se si me explico correctamente, espero su ayuda, gracias.  :(
Saludos, Ramirojuan® \";)\"

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Pic 16f87x
« Respuesta #1 en: Martes 30 de Diciembre de 2003, 15:47 »
0
Creo haberte entendido, pero si tienes programas que hacen lo mismo pero con caracteres hexa a ascii, porque no conviertes tus numeros binarios a hexa y luego asi se convertira a ascii???.

   Bueno, es una sugerencia, deberias explicarte un poquito mas, desearia saber en que es lo que necesitas ayuda.
   En el programa del PIC???
   En el programa del PC???
   Porque en vez de leer los resultados del conversor en binario no lo lees en Hex???.

   Bueno, espero tu respuesta. Saludos  :hola:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

ramirojuan

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Pic 16f87x
« Respuesta #2 en: Martes 30 de Diciembre de 2003, 23:52 »
0
Gracias Jonathan por tu atencion, la ayuda que necesito es en el programa del PIC, un programa que encontre en este foro convierte de binario (lo que entrega el conversor A/D) en hexa pero lo que hace ese programa es dividir la entrega de 16 bits en tres registros distintos que contienen 4 bits solamente del resultado de la conversion y eso es lo que convierte a hexa y luego a ascii, pero lo que necesito es convertir el resultado del conversor y que al pc lleguen como codigo ascii, debe mostrar valores que van del 0 0 0 0 al 1 0 2 3.
Como puedo leer los datos del conversor A/D en hexa?
Esperando respuesta, te saluda Ramirojuan®  :hola:
Saludos, Ramirojuan® \";)\"

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Pic 16f87x
« Respuesta #3 en: Viernes 2 de Enero de 2004, 21:26 »
0
Hola amigo, estuve buscandote informacion pero no logre encontrarte nada, yo lo unico que he hecho es convertir los 16 bits pero a codigo BCD, (codigo binario decimal) para llevar una lectura de temperatura a un LCD... si eso te sirve lo puedo postear. Me informas, Saludos :hola:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Pic 16f87x
« Respuesta #4 en: Martes 6 de Enero de 2004, 12:56 »
0
Tengo la posible solucion a tu problema, pero consiste en la elaboracion del programa del PC, el pic toma el resultado del conversor A/D y envia la parte alta, el programa multiplica esa parte por 255 y almacena el numero, luego el pic envia la parte baja, la cual se suma a la parte alta multiplicada por 255 que fue lo hecho  anteriormente, luego con eso tendrias el resultado siendo un numero que puede ser desde 0000 hasta 1023... es mas facil elaborar loo que quieres creando la conversion dentro del programa del PC, ya que haciendolo en el pic deberias hacer muchos calculos matematicos y eso marea. Bueno, me comentas, si necesitas ayuda con tu programa de PC, si es en C puedo darte una mano... Saludos :hola:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

ramirojuan

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Pic 16f87x
« Respuesta #5 en: Martes 6 de Enero de 2004, 19:28 »
0
Gracias por tu ayuda, le voy a dar unas vueltas y te aviso.
Saludos, Ramirojuan® \";)\"

ramirojuan

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Pic 16f87x
« Respuesta #6 en: Martes 6 de Enero de 2004, 19:58 »
0
Funciona pero multiplicando 256 la parte alta, gracias. Pero me queda la duda, tienes alguna nocion de como hacerlo en el programa del PIC, sigo buscando en la red, ya que no se me ocurre como, pero no encuentro nada.
Se debe poder que crees tu?
Saludos, Ramirojuan® \";)\"

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Pic 16f87x
« Respuesta #7 en: Martes 6 de Enero de 2004, 21:47 »
0
Hola, mira, aunque no me creas di muchas vueltas buscando informacion para ayudarte, pero cero resultados.

   Intente hacer el programa para el pic, pero imposible, si quieres intentamos hacerlo, eso si, tendrias que comenzarlo y de ahi te ayudo ya que el tiempo libre cada vez se me hace menos. Poder si se puede, en esto no hay imposible a menos que el micro no te lo permita.

   Espero tu respuesta, saludos y suerte. :hola:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

ramirojuan

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Pic 16f87x
« Respuesta #8 en: Miércoles 7 de Enero de 2004, 20:13 »
0
Revisando en internet y segun lo que quiero hacer, al parecer se puede realizar pero restando, me dijeron que restando se podia, por ejemplo si yo tengo el numero 1023 le resto 1000 y si tengo resultado 0 es porque tengo Unidad de Mil, luego al ser cero paso a las centenas resto 100 evaluo el resultado hasta que sea 0 o me de resto, luego con las decenas y asi hasta la unidad pero como lo pongo en el programa PIC ya que eso es lo que me complica un poco, al saber si tengo unidad de mil es facil ya que el resultado no puede ser mas alla de mil por lo que enviaria al pc un 30h o un 31h si hay unidad de mil o sino la hay envia un cero, asi con los demas, perome complica un poco la programacion en pic.
Ahora tambien me complica el tomarlo de los registros despues del conversor, lo puedo convertir a Hexa (eso lo tengo ok) pero luego puedo ir sumando los resultados que tenga en hexa para sumarlos?
Me entiendes la idea? Estoy un poco enredado con mis ideas...
Espero tus comentarios
Saludos.
Saludos, Ramirojuan® \";)\"

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Pic 16f87x
« Respuesta #9 en: Miércoles 7 de Enero de 2004, 20:50 »
0
Bueno, lo que ahora te voy a comentar lo saque en un ratito, minutos despues de leer el ultimo mensaje que posteaste. No se si funcionaria, pero intentar no cuesta nada.

   El resultado del conversor es de 10 bits, dentro de un regustro de 16.

   Supongamos que la parte baja esta en ADRESL y la parte alta en ADRESH.
   Tenemos el siguiente resultado del conversor analogico digital:

 _____________________________________
|  1 |  0  |  1  |  0  |  0  |  0  |  0 |  0  | 0  | 1 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   512   256   128   64  32   16   8   4   2    1

   El numero corresponde al 641 en decimal y al 281 en Hexa... lo que nosotro queremos es que envie el numero en decimal a la PC.

   Leemos la parte baja del resultado del conversor y la convertimos en hexadecimal, la guardamos en un registro y leemos la parte alta del resultado del conversor, a esa lectura tambien la convertimos en hexa y luego se la sumamos a la conversion que hoy hicimos la cual habiamos guardado en un registro.
   Ahi lo que hicimos es tomar el resultado del conversor analogico digital y convertirlo a Hexa.

   Bien, ahora al tener el resultado convertido en vez de ser el binario '1010000001' seria el Hexadecimal '281' el cual sera trabajado para ser convertido a decimal.

   Una vez obtenido el valor Hexa, haremos la parte mas complicada, la cual te explicare con palabras simples, el tema sera hacerlo fucnionar en el pic.
   Tomas el primer digito del valor Hexa que seria de '281' el caracter '2' y haces lo siguiente:

          2      
 2*(16)   ; dos por diesciseis al cubo

   y lo guardas en un registro. Luego lees el siguiente digito y haces lo mismo para en vez de hacerlo al cuadrado lo haces por 1:

         1      
 8*(16) ; ocho por diesciseis a la uno

  Al resultado le sumas el valor que habiamos registrado anteriormente y lo guardas en el registro. Luego haces lo mismo con el ultimo digito pero esta vez por 0:

        0      
 1*(16) ; uno por uno

   Esto ultimo se lo sumas al valor que habiamos guardado anteriormente.
   Hasta ahi, si todo esta bien, las sumas que hemos hecho de las conversiones de hexa a dec seria de 641, ese es el valor de la conversion del numero binario a decimal.

   Bueno, esta es una de mis ideas, la cual si fuera muy necesario haria funcionar, ahi tienes como para pensar y hacer funcionar lo que necesitas. Cualquier duda me consultas. Saludos y hasta pronto. :hola:  :blink:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

ramirojuan

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Pic 16f87x
« Respuesta #10 en: Viernes 9 de Enero de 2004, 03:23 »
0
Jonathan, agradezco mucho tu ayuda, pero me quedan unas dudas: como multiplico el (16exp2) = 256 por el numero hexa mas significativo? este resultado puede ser entre 0 a 512 que pasa con los resultados mayores a 255?? ya que los registros que se manejan en el pic son de 8 bits y 512 cabe en 10 bits, esa es mi duda quiza es un poco basica pero ya estoy un poco mareado.
Ademas como lo hago en el caso de los numeros hexa desde la A hasta la F para realizar la multiplicacion? creando una tabla con la funcion retlw puede ser o no?se como convertirlos y enviarlos directamente en hexa al pc pero para este caso se me complica.
 :)
Saludos, Ramirojuan® \";)\"

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Pic 16f87x
« Respuesta #11 en: Viernes 9 de Enero de 2004, 13:45 »
0
Hola, si, para multiplicar esos numero de la A a la F, debes hacer una tabla que reemplace por el valor. A = 10; B = 11;...
   Por lo del registro, es cirerto, dejame pensar un poco mas y te respondo ni bien tenga una buena respuesta. Saludos :hola:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

ramirojuan

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Pic 16f87x
« Respuesta #12 en: Domingo 11 de Enero de 2004, 04:41 »
0
Si pudieras enviarme al correo la conversion a codigo BCD te lo agradeceria, ya q yo tengo algo parecido y quiero verificar, realice algunas operaciones y llegue al numero decimal que forma cada registro (de 000 a 255) pero estoy topando en la suma de los dos registros, se que solo puede ser operando con contadores ya que no hay otra forma, no se puede operar con resultados mayores a 255... en fin aun le doy vueltas...

Saludos.
Saludos, Ramirojuan® \";)\"

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Pic 16f87x
« Respuesta #13 en: Lunes 12 de Enero de 2004, 13:26 »
0
Hola amigo, te enviare lo mas antes posible a tu correo el codigo que necesitas, lo mas probable es que sea mañana. Estuve viendo como solucionar tu problema, es cierto solo se pueden sumar dos numero de 8  bits cada uno, al pasarte del valor limite se pone en uno uno de los flag del registro status, pero en ningun lugar se almacena el valor exedido  :( , por lo que es imposible sumar dos numeros mayores de 8 bits cada uno... podrias cambiar de PIC, elegir algun modelo diferente, lo que no averigue es si viene alguno con el que puedas sumar dos numeros de mas de 8 bits cada uno, en fin, te comento que muuuuy dificil lo que deseas hacer  :blink: , ya no se me ocurre nada  :unsure: ... bueno, si por ahi sucede que encuentro algo, te informo... Saludos  :hola:  :comp:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

ramirojuan

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Pic 16f87x
« Respuesta #14 en: Martes 13 de Enero de 2004, 01:31 »
0
Ok, gracias, si llego a buen fin te aviso y te lo envio...
Saludos.
Saludos, Ramirojuan® \";)\"

ramirojuan

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Pic 16f87x
« Respuesta #15 en: Martes 13 de Enero de 2004, 02:00 »
0
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?
Saludos, Ramirojuan® \";)\"

berretta

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Pic 16f87x
« Respuesta #16 en: Martes 13 de Enero de 2004, 18:38 »
0
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 ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Pic 16f87x
« Respuesta #17 en: Miércoles 14 de Enero de 2004, 16:50 »
0
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:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

ramirojuan

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Pic 16f87x
« Respuesta #18 en: Domingo 18 de Enero de 2004, 15:04 »
0
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:
Saludos, Ramirojuan® \";)\"

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Pic 16f87x
« Respuesta #19 en: Lunes 19 de Enero de 2004, 13:42 »
0
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
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

ramirojuan

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Pic 16f87x
« Respuesta #20 en: Lunes 19 de Enero de 2004, 18:32 »
0
Hola amigo, me sirvio la pagina que enviaste, ya lo resolvi tambien, asi que ahora veo en el pc la medicion que entra al ADC, claro que en rango de 0000 a 1023, lo que estoy haciendo ahora es hacer una rutina que me permita recibir una "palabra" y discrimine que palabra es para hacer luego una accion determinada, por ejemplo recibo un caracter STX|ASCII1|ASCII2|ASCII3|ETX y si corresponde al que he predeterminado, saque la lectura de la puerta analoga, te comento esto ya que es para poder comunicar dos equipos de medicion de distinta norma y protocolo, la informacion que salga del PIC ira a un PC que tendra una interfaz de usuario muy facil de usar ya que la programaré en VB, esta entretenido esto, no crees?
Adjunto rutina de conversion bin->ascii en asm, es un poco rustica y larga, pero sirve.

Saludos. :D
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
Saludos, Ramirojuan® \";)\"

berretta

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Pic 16f87x
« Respuesta #21 en: Martes 20 de Enero de 2004, 00:09 »
0
Te envio esta rutina para configurar el conversor analogico / digital
espero que te sea de ayuda.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

El_Rabino

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Pic 16f87x
« Respuesta #22 en: Miércoles 24 de Junio de 2009, 18:13 »
0
Cita de: "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:

Se que este tema es MUY viejo, pero podrias enviar la rutina de 10 bits binarios a BCD?

La que sale mas arriba no me sirve, solo el LSB.