Autor Tema: Leer conversor ADC0831 desde un pic 16F84  (Leído 7116 veces)

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

zetareticuli

  • Visitante
Leer conversor ADC0831 desde un pic 16F84
« en: 03 de Junio de 2014, 13:31:04 »
Hola chicos!, queria saber como se podria hacer para leer un conversor AD serial con un 16F84 usando NIPLE porque en los manuales no visto esta posibilidad.Lo que si he visto es que NIPLE  te da la posibilidad de introducir codifo asembler para hacer esto pero el problema es que no se programar en asembler.

Ya se ue el 16F84 ers obsoleto pero tengo muchos de estos y quiero usarlos.Tambien se que se podria hacer en C,PICBASIC y demas pero quisiera usar NIPLE.


Saludos

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #1 en: 03 de Junio de 2014, 17:40:13 »
No se que versión tienes de Niple, pero las últimas ya permiten el utilizar dispositivos genéricos que se comuniquen vía serie. Sola te hace falta seleccionar este dispositivo como genérico y configurar los pines de acuerdo al protocolo serie.

Todos los días se aprende algo nuevo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #2 en: 03 de Junio de 2014, 18:20:38 »
Hoy en día hacer algo así es como poner en marcha un PC con un 386 y Windows 3.1
Está bien si intentas poner en marcha algo retro, pero no tiene sentido práctico.

Por medio euro  la unidad (o por cero euros si pides samples gratuitos) puedes trabajar con un PIC16F1503, que tiene ADC integrado.

En tiendas locales es posible que te cueste encontrar ese modelo. El PIC16F628A es barato y más fácil de encontrar.

Saludos.

zetareticuli

  • Visitante
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #3 en: 03 de Junio de 2014, 19:28:08 »
Hoy en día hacer algo así es como poner en marcha un PC con un 386 y Windows 3.1
Está bien si intentas poner en marcha algo retro, pero no tiene sentido práctico.

Por medio euro  la unidad (o por cero euros si pides samples gratuitos) puedes trabajar con un PIC16F1503, que tiene ADC integrado.

En tiendas locales es posible que te cueste encontrar ese modelo. El PIC16F628A es barato y más fácil de encontrar.

Saludos.

a) Soy Argentino y aqui es en pesos.

b) La opcion de comprar otro NIPLE no es viable para resolver un problema.

Querido Picuino, primero no leiste bien mi post.Dije que tengo muchos chips de estos y los quiero usar.No voy a comprar ninguno para zafar de la programación.

Miralo de esta forma: si estuvieras en un campo y se te rompe el auto y ,lo único que tienes para arreglarlo y salir de alli es un tractor, yo te aseguro que vas a desmantelar el tractor para reparar le auto.

A mi me pasa lo mismo, tengo por lo menos 50 chips 16F84 y que se supone que haga??? ,los tiro a la basura así no tienes que pensar como ayudarme??.

Ya se que puedo comprar un 16F88  y estaria listo, ya se que puedo usar otro lenguaje como el C o PICBASIC y estaria listo pero quiero ir por le camino mas dificil...PENSAR COMO PROGRAMARLO ASI COMO ESTA.

El NIPLE te permite insertar codigo asembler y creo que podes armar una rutina que lea un pin y rotarlo para armar los 8 bits y luego procesarlos.Como reitero, el problema es que no se programar en asembler.


Chicos si no saben como ayudarme o no tienen ganas,por favor no me depriman.

Gracias

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #4 en: 04 de Junio de 2014, 01:58:15 »
b) La opcion de comprar otro NIPLE no es viable para resolver un problema.

El NIPLE te permite insertar codigo asembler y creo que podes armar una rutina que lea un pin y rotarlo para armar los 8 bits y luego procesarlos.Como reitero, el problema es que no se programar en asembler.

Chicos si no saben como ayudarme o no tienen ganas,por favor no me depriman.

Gracias

A ver, yo no te dije que comprases ningun otro Niple. Solo preguntaba por la version de que disponias. Versiones antiguas no soportaban la comunicación serie para dispositivos como memorias, conversores, expansores, etc. Ya que al final si dices que el AD que tienes se tiene que comunicar con el microcontrolador.
Te indique como se realiza la comunicacion con los AD vias serie programando con Niple. Bien es cierto que fue una primera idea para que veas como se trabajaria.

Cierto que Niple te permite añadir instrucciones de Asembler, pero si dices que no sabes programar emn asemble ¿como vas a realizar las rutinas? ¿Pretendes que te lo hagamos nosotos?

Por otra parte para que usar asemble si puedes realizar el programa, en Niple, con bloques que realizan varias instrucciones a la vez para un mismo efecto.

Finalmente nadie a dicho que no quiera ayudarte, se te han dado ideas para empezar o posibilidades de poder hacerlo mejor aun sin saber las peculiaridades de cada uno. Como puedes comprender tampoco somos adivinos. Una de las premisas de este foro, entre otras cosas es que el que pide ayuda se tiene que mojar, ir realizando cosas y preguntando acerca de las mismas. En ese caso se indica que puede estar haciendose mal, ayudar a enfocar el problema desde otro punto de vista, mejorar,...... Dificlmente vas a encontrar quien te lo haga.



« Última modificación: 04 de Junio de 2014, 02:09:17 por Fer_TACA »
Todos los días se aprende algo nuevo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #5 en: 04 de Junio de 2014, 04:40:07 »
a) Soy Argentino y aqui es en pesos.

b) La opcion de comprar otro NIPLE no es viable para resolver un problema.

Querido Picuino, primero no leiste bien mi post.Dije que tengo muchos chips de estos y los quiero usar.No voy a comprar ninguno para zafar de la programación.

Miralo de esta forma: si estuvieras en un campo y se te rompe el auto y ,lo único que tienes para arreglarlo y salir de alli es un tractor, yo te aseguro que vas a desmantelar el tractor para reparar le auto.

A mi me pasa lo mismo, tengo por lo menos 50 chips 16F84 y que se supone que haga??? ,los tiro a la basura así no tienes que pensar como ayudarme??.

Ya se que puedo comprar un 16F88  y estaria listo, ya se que puedo usar otro lenguaje como el C o PICBASIC y estaria listo pero quiero ir por le camino mas dificil...PENSAR COMO PROGRAMARLO ASI COMO ESTA.

El NIPLE te permite insertar codigo asembler y creo que podes armar una rutina que lea un pin y rotarlo para armar los 8 bits y luego procesarlos.Como reitero, el problema es que no se programar en asembler.


Chicos si no saben como ayudarme o no tienen ganas,por favor no me depriman.

Gracias

No pretendo deprimirte, sólo ser práctico.

Todavía hoy hay muchas aplicaciones en las que se necesitan PIC16F84, porque están diseñadas para ese micro.
Hay usuarios que buscan ese micro para reemplazar otro estropeado.
Por eso se venden bastante bien en e-bay. De hecho valen más que muchos micros más modernos:

http://www.ebay.es/sch/i.html?_sacat=0&_from=R40&_nkw=pic16f84&rt=nc&LH_BIN=1

Cada uno vale unos 3.5 euros (creo que unos 31 pesos)

Un saludo.
« Última modificación: 04 de Junio de 2014, 04:42:34 por Picuino »

zetareticuli

  • Visitante
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #6 en: 04 de Junio de 2014, 23:16:24 »
a) Soy Argentino y aqui es en pesos.

b) La opcion de comprar otro NIPLE no es viable para resolver un problema.

Querido Picuino, primero no leiste bien mi post.Dije que tengo muchos chips de estos y los quiero usar.No voy a comprar ninguno para zafar de la programación.

Miralo de esta forma: si estuvieras en un campo y se te rompe el auto y ,lo único que tienes para arreglarlo y salir de alli es un tractor, yo te aseguro que vas a desmantelar el tractor para reparar le auto.

A mi me pasa lo mismo, tengo por lo menos 50 chips 16F84 y que se supone que haga??? ,los tiro a la basura así no tienes que pensar como ayudarme??.

Ya se que puedo comprar un 16F88  y estaria listo, ya se que puedo usar otro lenguaje como el C o PICBASIC y estaria listo pero quiero ir por le camino mas dificil...PENSAR COMO PROGRAMARLO ASI COMO ESTA.

El NIPLE te permite insertar codigo asembler y creo que podes armar una rutina que lea un pin y rotarlo para armar los 8 bits y luego procesarlos.Como reitero, el problema es que no se programar en asembler.


Chicos si no saben como ayudarme o no tienen ganas,por favor no me depriman.

Gracias

No pretendo deprimirte, sólo ser práctico.

Todavía hoy hay muchas aplicaciones en las que se necesitan PIC16F84, porque están diseñadas para ese micro.
Hay usuarios que buscan ese micro para reemplazar otro estropeado.
Por eso se venden bastante bien en e-bay. De hecho valen más que muchos micros más modernos:

http://www.ebay.es/sch/i.html?_sacat=0&_from=R40&_nkw=pic16f84&rt=nc&LH_BIN=1

Cada uno vale unos 3.5 euros (creo que unos 31 pesos)

Un saludo.


Estimado Picuino, si hubiesemos seguido tu logica, BRIGADA A y MC GIVER no hubiesen existido.Te imaginas a Mario Baracus diciendo...uy ..cagamos ...no encuentro transistores...aborten la mision......NO SE PUEDE ARMAR NADA....no podemos ayudar al cliente!!!!...o MC GIVER diciendo.....Uyyy...me quede sin acido sulfurico...donde carajo compro????? todo esto en medio del rodaje.....Por favor!!!!!.

EL verdadero técnico es aquel que arma una ferrari con restos de bicicletas oxidadas ( se entiende la metafora oa debo explicarla tambien??)...ahí está el ingenio del ingeniero.Con dinero somos todos inteligentes!!.

Por todo lo expuesto insisto: debo armar un termómetro con el pic 16F84 y así lo haré.De hecho, ya lo hice hace años con PICBASIC pero yo quiero hacerlo con NIPLE.

Y en cuanto a FER_TACA no saltes que no hay charquito hermano.EL palo no era para vos!!!!.


zetareticuli

  • Visitante
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #7 en: 04 de Junio de 2014, 23:22:54 »
b) La opcion de comprar otro NIPLE no es viable para resolver un problema.

El NIPLE te permite insertar codigo asembler y creo que podes armar una rutina que lea un pin y rotarlo para armar los 8 bits y luego procesarlos.Como reitero, el problema es que no se programar en asembler.

Chicos si no saben como ayudarme o no tienen ganas,por favor no me depriman.

Gracias

A ver, yo no te dije que comprases ningun otro Niple. Solo preguntaba por la version de que disponias. Versiones antiguas no soportaban la comunicación serie para dispositivos como memorias, conversores, expansores, etc. Ya que al final si dices que el AD que tienes se tiene que comunicar con el microcontrolador.
Te indique como se realiza la comunicacion con los AD vias serie programando con Niple. Bien es cierto que fue una primera idea para que veas como se trabajaria.

Cierto que Niple te permite añadir instrucciones de Asembler, pero si dices que no sabes programar emn asemble ¿como vas a realizar las rutinas? ¿Pretendes que te lo hagamos nosotos?

Por otra parte para que usar asemble si puedes realizar el programa, en Niple, con bloques que realizan varias instrucciones a la vez para un mismo efecto.

Finalmente nadie a dicho que no quiera ayudarte, se te han dado ideas para empezar o posibilidades de poder hacerlo mejor aun sin saber las peculiaridades de cada uno. Como puedes comprender tampoco somos adivinos. Una de las premisas de este foro, entre otras cosas es que el que pide ayuda se tiene que mojar, ir realizando cosas y preguntando acerca de las mismas. En ese caso se indica que puede estar haciendose mal, ayudar a enfocar el problema desde otro punto de vista, mejorar,...... Dificlmente vas a encontrar quien te lo haga.





Lo que pretendo es que te calles la boca porque nadie te pidio nada.Vos tenes una manera muy soberbia para responder y hace años que te aguanto.Te pediria que no me respondas mas nada.
Y tampoco pedi que ustedes me hicieran el programa en asembler porque seguramente tampoco saben.Si decimos que el 16F84 es obsoleto ,tambien el asembler lo es y dudo mucho que alguien aqui lo domine de tal manera porque ,si no, ya hubiese aparecido alguna persona dándome alguna noción de cómo hacerlo.

Lo que si veo es mucha gente que se molesta con mucha facilidad y no aporta nada.

Bueno perdón señores,no preguntaré mas por este micro y daré por finalizada la discusión bizantina

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #8 en: 05 de Junio de 2014, 00:01:15 »
Creo que tengo rutinas en assembler para un 16f84.
Aquí están, no son las que tenia yo pero si es el modelo que buscaba!!

Código: ASM
  1. ;Control de temperatura con PIC16F84 y ADC0831
  2.  
  3. indo    equ     00h
  4. status  equ     03h
  5. fsr     equ     04h
  6. ptoa    equ     05h
  7. ptob    equ     06h
  8. loops     equ       0dh       ;utilizado en retardos (milisegundos)
  9. loops2    equ       0eh       ;utilizado en retardos
  10. rota      equ       0fh       ;d¡gito de unidades
  11. decena    equ       10h       ;d¡gito de decenas
  12. unidad    equ       11h
  13. decont    equ       14h
  14. unicont   equ       15h
  15. timesu    equ       16h
  16. timeba    equ       17h
  17. histe     equ       18h
  18. control   equ       19h
  19. decide    equ       1ah
  20. conba     equ       1bh
  21. conal     equ       1ch
  22.  
  23. trisa     equ       85h       ;registro de configuraci¢n del puerto A
  24. trisb     equ       86h       ;registro de configuraci¢n del puerto B
  25. z         equ       02h       ;bandera de cero del registro de estados
  26. c         equ       00h       ;banderq de carry del registro de estados
  27. w         equ       00h       ;indica que el resultado se guarda en W
  28. r         equ       01h
  29.  
  30. CS      equ     0       ;definiciones para el ADC0831
  31. CLK     equ     1
  32. IN      equ     2
  33. conta   equ     12h
  34. recep   equ     13h
  35.  
  36. eedata    equ       08h       ;registro de datos de la memoria EEPROM
  37. eeadr     equ       09h       ;registro de direcciones de la memoria EEPROM
  38. eecon1    equ       88h       ;registro de control de la memoria EEPROM
  39. eecon2    equ       89h       ;registro de control de la memoria EEPROM
  40.  
  41. ;bits especiales del registro eecon1
  42. eeif      equ       04h
  43. wrerr     equ       03h
  44. wren      equ       02h
  45. wr        equ       01h
  46. rd        equ       00h
  47.  
  48.  
  49.           org       0         ;el vector de reset es la direcci¢n 00
  50.           goto      inicio    ;se salta al inicio del programa
  51.  
  52. retarms   ;subrutina de retardo en milisegundos
  53.           ;el registro loops contiene el número
  54.           movwf     loops     ;de milisegundos del retardo
  55. top2      movlw     D'110'    ;
  56.           movwf     loops2    ;
  57. top       nop
  58.           nop
  59.           nop
  60.           nop
  61.           clrwdt
  62.           nop
  63.           decfsz    loops2    ;pregunta si termin¢ 1 ms
  64.           goto      top
  65.           decfsz    loops     ;pregunta si termina el retardo
  66.           goto      top2
  67.           retlw     0
  68.  
  69. reloj   bsf     ptoa,CLK        ;pulso de reloj para las conversiones
  70.         movlw   1fh
  71.         movwf   loops
  72. reloj2  decfsz  loops
  73.         goto    reloj2
  74.         bcf     ptoa,CLK
  75.         movlw   1fh
  76.         movwf   loops
  77. reloj3  decfsz  loops
  78.         goto    reloj3
  79.         return
  80.  
  81.  
  82.                                 ;rutina de lectura del ADC0831 a 7 bits
  83. recibir movlw   07h             ;inicia contador de bits          
  84.         movwf   conta
  85.         bcf     ptoa,CS         ;baja chip select para empezar
  86.         nop
  87.         call    reloj
  88.         btfsc   ptoa,IN         ;verifica dato en 0 lógico (start bit)
  89.         return
  90.         clrf    recep
  91. otrobit call    reloj
  92.         bsf     status,c
  93.         btfss   ptoa,IN
  94.         bcf     status,c
  95.         rlf     recep,1
  96.         decfsz  conta,1
  97.         goto    otrobit
  98.         bsf     ptoa,CS
  99.         bcf     ptoa,CLK
  100.         movf    recep,w
  101.         return
  102.  
  103. leer      bsf       status,5  ;se ubica en segundo banco de RAM
  104.           bsf       eecon1,rd ;pone el bit que inicia la lectura
  105.           bcf       status,5  ;vuelve al primer banco de memoria
  106.           movf      eedata,w
  107.           return
  108.  
  109. escrib    bsf       status,5  ;se ubica en el segundo banco de RAM
  110.           bsf       eecon1,wren  ;habilita escritura en memoria EEPROM
  111.           bcf       eecon1,eeif  ;se asegura que la bandera esté en cero
  112.  
  113.           movlw     055h      ;esta secuencia es obligatoria
  114.           movwf     eecon2    ;para escribir en la memoria de datos EEPROM
  115.           movlw     0aah
  116.           movwf     eecon2
  117.  
  118.           bsf       eecon1,wr ;orden de escribir el dato que se cargó
  119.                               ;previamente en el registro eedata en la
  120.                               ;posición de memoria direccionada por eeadr
  121.  
  122. espera    clrwdt
  123.           btfss     eecon1,eeif         ;pregunta si terminó la escritura
  124.           goto      espera              ;si no, espera a que termine
  125.           bcf       eecon1,eeif         ;borra la bandera de fin de escritura
  126.           bcf       eecon1,wren         ;deshabilita la escritura en memoria EEPROM
  127.           bcf       status,5            ;se ubica en el primer banco de RAM
  128.           retlw     0
  129.  
  130.  
  131.                                 ;RUTINA QUE CONVIERTE BINARIO EN BCD
  132. decimal   CLRF      decena          ;BORRAR REGISTROS DE TRABAJO
  133. OTRA      MOVLW     D'10'          
  134.           SUBWF     unidad,r        ;RESTAR 10 AL VALOR INICIAL
  135.           BTFSS     status,c        ;VERIFICA EL CARRY
  136.           GOTO      SUM             ;SI ES CERO DEJA DE RESTAR 10
  137.           INCF      decena          ;SI ES 1 INCREMENTA decena
  138.           GOTO      OTRA            ;VOLVER A RESTAR
  139. SUM       ADDWF     unidad          ;SUMARLE 1
  140.           RETURN                    ;EL VALOR DE LA CONVERSION BINARIO A DECIMAL
  141.                                     ;SE DEVUELVE EN LOS REGISTROS DECENA Y UNIDAD
  142.  
  143.                                 ;RUTINA QUE CONVIERTE BINARIO EN BCD
  144. decicon   movf      control,w
  145.           movwf     unicont
  146.           CLRF      decont          ;BORRAR REGISTROS DE TRABAJO
  147. OTRA2     MOVLW     D'10'          
  148.           SUBWF     unicont,r        ;RESTAR 10 AL VALOR INICIAL
  149.           BTFSS     status,c        ;VERIFICA EL CARRY
  150.           GOTO      SUM2            ;SI ES CERO DEJA DE RESTAR 10
  151.           INCF      decont          ;SI ES 1 INCREMENTA decena
  152.           GOTO      OTRA2           ;VOLVER A RESTAR
  153. SUM2      ADDWF     unicont         ;SUMARLE 1
  154.           RETURN                    ;EL VALOR DE LA CONVERSION BINARIO A DECIMAL
  155.                                     ;SE DEVUELVE EN LOS REGISTROS DECENA Y UNIDAD
  156.  
  157.  
  158. display                 ;rutina de display multiplexado
  159.           bsf       ptob,4    ;envía unos a los transistores para apagarlos
  160.           bsf       ptob,5
  161.           movlw     decont    ;según el selector escoge dato a mostrar
  162.           btfss     ptoa,3        
  163.           movlw     decena    ;con el registro selector (fsr) se apunta
  164.           movwf     fsr       ;al primer dato que se va a mostrar
  165.           movlw     0f0h      ;colocar en cero el dato del display
  166.           andwf     ptob      ;para apagarlos
  167.           bcf       ptob,5    ;activa transistor de decenas    
  168.           movf      indo,w    ;lee el dato del registro apuntado por el fsr
  169.           andlw     0fh
  170.           iorwf     ptob      ;envia dato leído al display
  171.           movlw     03h
  172.           call      retarms   ;retardo de 3 milisegundos para visualización
  173.           incf      fsr       ;apunta al próximo dígito a mostrar
  174.           movlw     0f0h
  175.           andwf     ptob
  176.           bsf       ptob,5
  177.           bcf       ptob,4
  178.           movf      indo,w
  179.           andlw     0fh
  180.           iorwf     ptob
  181.           movlw     03h
  182.           call      retarms
  183.           bsf       ptob,4
  184.           return
  185.  
  186.     ; *********** PROGRAMA PRINCIPAL ***********
  187.          
  188. inicio
  189.           bsf       status,5  ;se ubica en el segundo banco de RAM
  190.           movlw     0ch       ;se carga el registro W
  191.           movwf     trisa     ;se programan los pines del puerto A
  192.           movlw     0c0h      ;se carga el registro W
  193.           movwf     trisb     ;se programa el puerto B como salidas
  194.           bcf       status,5  ;se ubica en el primer banco de memoria RAM
  195.  
  196.           clrf      ptoa
  197.           clrf      ptob
  198.           bsf       ptoa,CS    ;inicia chip select en alto
  199.           clrf      timesu
  200.           clrf      timeba       
  201.           bcf       ptoa,4  
  202.           bcf       decide,0
  203.                
  204.           movlw     d'50'      ;retardo al inicio para estabilización
  205.           call      retarms
  206.          
  207.  
  208.           clrf      eeadr      
  209.           call      leer       ;al reiniciar el sistema
  210.           movwf     control    ;se recupera el valor de control
  211.           call      decicon
  212.           goto      ciclo2
  213.  
  214. ciclo1
  215.           clrf      eeadr       ;almacena nuevos datos en EEPROM
  216.           movf      control,w   ;cada vez que se cambia el valor de control
  217.           movwf     eedata
  218.           call      escrib
  219.  
  220. ciclo2
  221.         bsf     status,5        ;se ubica en el segundo banco de RAM
  222.         movlw   0ch             ;se carga el registro W
  223.         movwf   trisa           ;se programan los pines del puerto A
  224.         movlw   0cfh            ;programa puerto b para leer
  225.         movwf   trisb           ;los jumper de calibración
  226.         nop                     ;de la histéresis
  227.         bcf     status,5
  228.         movf    ptob,w
  229.         movwf   histe
  230.         bsf     status,5
  231.         movlw   0c0h            ;se carga el registro W
  232.         movwf   trisb           ;se programa el puerto B
  233.         bcf     status,5        ;se ubica en el primer banco de memoria RAM
  234.        
  235.         call    display
  236.         call    recibir         ;lee el dato del convertidor
  237.         movwf   unidad
  238.         call    decimal
  239.  
  240.  
  241.         movlw   03h
  242.         andwf   histe,r         ;toma la histéresis y le suma uno
  243.         ;movlw  01h
  244.         ;addwf  histe,r
  245.         ;bcf    status,c        ;duplica la histéresis
  246.         ;rlf    histe,r
  247.         movf    histe,w         ;obtenemos valores alto y bajo de control
  248.         addwf   control,w       ;según la histéresis medida
  249.         movwf   conal           ;se guardan en conal y conba
  250.         sublw   d'80'
  251.         btfsc   status,c
  252.         goto    sigue
  253.         movlw   d'80'
  254.         movwf   conal
  255. sigue   movf    histe,w
  256.         subwf   control,w
  257.         btfsc   status,c
  258.         goto    sigue2
  259.         clrw   
  260. sigue2  movwf   conba
  261.        
  262.         movf    recep,w
  263.         subwf   conal,w
  264.         btfsc   status,c
  265.         goto    sigue3
  266.         bcf     decide,0
  267.         goto    relevo
  268. sigue3  movf    conba,w
  269.         subwf   recep,w
  270.         btfss   status,c
  271.         bsf     decide,0
  272.         nop
  273. relevo  btfss   decide,0
  274.         goto    rele2
  275.         bsf     ptoa,4
  276.         goto    sigue4
  277. rele2   bcf     ptoa,4
  278.  
  279. sigue4  btfss   ptoa,3          ;pregunta selector para revisar pulsadores
  280.         goto    ciclo2
  281.        
  282. prusube btfsc   ptob,7          ;pregunta botón de subir
  283.         goto    prubaja
  284.         incf    timesu
  285.         movf    timesu,w
  286.         xorlw   d'30'
  287.         btfss   status,z
  288.         goto    ciclo2
  289.        
  290.         clrf    timesu
  291.         incf    control
  292.         call    decicon
  293.         movf    control,w
  294.         xorlw   d'81'      ;hace operaci¢n xor para ver si es igual a 0ah
  295.         btfss   status,z  ;prueba si el contador lleg¢ a 0ah (diez)
  296.         goto    ciclo1    ;si no es igual se incrementa normalmente
  297.  
  298.         clrf    control
  299.         call    decicon        
  300.         goto    ciclo1         
  301.  
  302. prubaja btfsc   ptob,6
  303.         goto    ciclo2
  304.  
  305.         incf    timeba
  306.         movf    timeba,w
  307.         xorlw   d'30'
  308.         btfss   status,z
  309.         goto    ciclo2
  310.        
  311.         clrf    timeba
  312.         decf    control
  313.         call    decicon
  314.         movf    control,w
  315.         xorlw   0ffh       ;hace operaci¢n xor para ver si es igual a 0ah
  316.         btfss   status,z  ;prueba si el contador lleg¢ a 0ah (diez)
  317.         goto    ciclo1    ;si no es igual se incrementa normalmente
  318.  
  319.         movlw   d'80'    
  320.         movwf   control
  321.         call    decicon        
  322.         goto    ciclo1         
  323.  
  324.         goto    ciclo2                   
  325.        
  326.  
  327.  
  328. ;  *********  VALOR DE CONTROL INICIAL  ********
  329.  
  330.           org       2100h     ;inicia memoria eeprom de datos
  331.           de        d'27'
  332.          
  333.        
  334.           end
  335.                              
  336. ;======================================================================
  337. ;         Fusibles de programaci¢n
  338. ;         Osc                 XT
  339. ;         Watchdog            OFF
  340. ;         Code protect        ON
  341. ;         Power-Up-Timer      ON = LOW
  342. ;         Micro.              PIC16F84
  343. ;======================================================================

Estaban mas cerca de lo que imaginabas, en la pagina de Todopic, je..je..

Respecto a los comentarios que haces de los participantes del post que intentan ayudarte, me gustaría que analices TODO el contenido de sus mensajes y de los tuyos, ya que me avergüenza como Argentino que soy, la prepotencia conque has tratado a esas personas.
No me representas, pero si me hace poner mal ese tono.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #9 en: 05 de Junio de 2014, 01:49:54 »

Respecto a los comentarios que haces de los participantes del post que intentan ayudarte, me gustaría que analices TODO el contenido de sus mensajes y de los tuyos, ya que me avergüenza como Argentino que soy, la prepotencia conque has tratado a esas personas.
No me representas, pero si me hace poner mal ese tono.

 ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-))
Todos los días se aprende algo nuevo.

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #10 en: 05 de Junio de 2014, 04:00:41 »
estoy siguiendo este Hilo leyendo el compartamiento del Sr.zetareticuli , muy pero muy bajo.
Aplaudo tambien las palabras de MGLSOFT
 ((:-)) ((:-)) ((:-))

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #11 en: 05 de Junio de 2014, 06:42:29 »

EL verdadero técnico es aquel que arma una ferrari con restos de bicicletas oxidadas ( se entiende la metafora oa debo explicarla tambien??)...ahí está el ingenio del ingeniero.Con dinero somos todos inteligentes!!.

No me gusta el tono que utilizas, ni la manera en la que te tomas nuestros comentarios.

Yo no te voy a ayudar con Niple porque no lo conozco. Tampoco te voy a ayudar con el PIC16F84 porque no lo conozco, ni me interesa.

Sí que te puedo ayudar, con un micro que lleve integrado sensor de temperatura, que te va a costar 2 euros.

Lo que tú pretendes conseguir es montar un circuito que te va a costar 100 veces más de lo que debería costarte, sólo para demostrar que puedes hacerlo....


Yo en esa aventura no participo, pero sí te aporto lo que yo haría en tu caso:

1º Vender todos los PIC16F84  en ebay y sacarme con ello 150Euros (o los pesos que sean)
2º Comprarme un micro moderno y MAS BARATO
3º Programarlo en el lenguaje más sencillo que encuentre (En mi caso C) con ayuda del foro, para ahorrarme mucho tiempo (que es dinero)

Desde mi punto de vista, el proyecto no es lo suficientemente RETRO como para que valga la pena dedicarle el tiempo que quieres dedicarle.

Si el proyecto fuese hacer un reloj con válvulas Nixie o algo asi... podría merecer la pena.


Lo dicho. Si quieres mi ayuda para montarlo como te digo, encantado de ayudarte.
Si no te sirve y quieres hacerlo a tu manera, adelante y te deseo suerte en encontrar alguien que te quiera ayudar (cosa que no puedes exigir).

En cuanto a las formas, creo que es el momento de que te disculpes por el tono de algunos de tus comentarios.


Un saludo.


Añado: No conozco ningún técnico que se gane la vida vendiendo ferraris fabricados con bicicletas oxidadas (sería demasiado caro) A lo mejor hay algún artista que haga cosas así y no me extrañaría que le pagasen una millonada. Pero eso es Arte,  no tecnología. La ingeniería aúna la tecnología con la economía y de las dos disciplinas, la economía manda.
« Última modificación: 05 de Junio de 2014, 06:50:03 por Picuino »

zetareticuli

  • Visitante
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #12 en: 05 de Junio de 2014, 13:04:03 »
Creo que tengo rutinas en assembler para un 16f84.
Aquí están, no son las que tenia yo pero si es el modelo que buscaba!!

Código: ASM
  1. ;Control de temperatura con PIC16F84 y ADC0831
  2.  
  3. indo    equ     00h
  4. status  equ     03h
  5. fsr     equ     04h
  6. ptoa    equ     05h
  7. ptob    equ     06h
  8. loops     equ       0dh       ;utilizado en retardos (milisegundos)
  9. loops2    equ       0eh       ;utilizado en retardos
  10. rota      equ       0fh       ;d¡gito de unidades
  11. decena    equ       10h       ;d¡gito de decenas
  12. unidad    equ       11h
  13. decont    equ       14h
  14. unicont   equ       15h
  15. timesu    equ       16h
  16. timeba    equ       17h
  17. histe     equ       18h
  18. control   equ       19h
  19. decide    equ       1ah
  20. conba     equ       1bh
  21. conal     equ       1ch
  22.  
  23. trisa     equ       85h       ;registro de configuraci¢n del puerto A
  24. trisb     equ       86h       ;registro de configuraci¢n del puerto B
  25. z         equ       02h       ;bandera de cero del registro de estados
  26. c         equ       00h       ;banderq de carry del registro de estados
  27. w         equ       00h       ;indica que el resultado se guarda en W
  28. r         equ       01h
  29.  
  30. CS      equ     0       ;definiciones para el ADC0831
  31. CLK     equ     1
  32. IN      equ     2
  33. conta   equ     12h
  34. recep   equ     13h
  35.  
  36. eedata    equ       08h       ;registro de datos de la memoria EEPROM
  37. eeadr     equ       09h       ;registro de direcciones de la memoria EEPROM
  38. eecon1    equ       88h       ;registro de control de la memoria EEPROM
  39. eecon2    equ       89h       ;registro de control de la memoria EEPROM
  40.  
  41. ;bits especiales del registro eecon1
  42. eeif      equ       04h
  43. wrerr     equ       03h
  44. wren      equ       02h
  45. wr        equ       01h
  46. rd        equ       00h
  47.  
  48.  
  49.           org       0         ;el vector de reset es la direcci¢n 00
  50.           goto      inicio    ;se salta al inicio del programa
  51.  
  52. retarms   ;subrutina de retardo en milisegundos
  53.           ;el registro loops contiene el número
  54.           movwf     loops     ;de milisegundos del retardo
  55. top2      movlw     D'110'    ;
  56.           movwf     loops2    ;
  57. top       nop
  58.           nop
  59.           nop
  60.           nop
  61.           clrwdt
  62.           nop
  63.           decfsz    loops2    ;pregunta si termin¢ 1 ms
  64.           goto      top
  65.           decfsz    loops     ;pregunta si termina el retardo
  66.           goto      top2
  67.           retlw     0
  68.  
  69. reloj   bsf     ptoa,CLK        ;pulso de reloj para las conversiones
  70.         movlw   1fh
  71.         movwf   loops
  72. reloj2  decfsz  loops
  73.         goto    reloj2
  74.         bcf     ptoa,CLK
  75.         movlw   1fh
  76.         movwf   loops
  77. reloj3  decfsz  loops
  78.         goto    reloj3
  79.         return
  80.  
  81.  
  82.                                 ;rutina de lectura del ADC0831 a 7 bits
  83. recibir movlw   07h             ;inicia contador de bits          
  84.         movwf   conta
  85.         bcf     ptoa,CS         ;baja chip select para empezar
  86.         nop
  87.         call    reloj
  88.         btfsc   ptoa,IN         ;verifica dato en 0 lógico (start bit)
  89.         return
  90.         clrf    recep
  91. otrobit call    reloj
  92.         bsf     status,c
  93.         btfss   ptoa,IN
  94.         bcf     status,c
  95.         rlf     recep,1
  96.         decfsz  conta,1
  97.         goto    otrobit
  98.         bsf     ptoa,CS
  99.         bcf     ptoa,CLK
  100.         movf    recep,w
  101.         return
  102.  
  103. leer      bsf       status,5  ;se ubica en segundo banco de RAM
  104.           bsf       eecon1,rd ;pone el bit que inicia la lectura
  105.           bcf       status,5  ;vuelve al primer banco de memoria
  106.           movf      eedata,w
  107.           return
  108.  
  109. escrib    bsf       status,5  ;se ubica en el segundo banco de RAM
  110.           bsf       eecon1,wren  ;habilita escritura en memoria EEPROM
  111.           bcf       eecon1,eeif  ;se asegura que la bandera esté en cero
  112.  
  113.           movlw     055h      ;esta secuencia es obligatoria
  114.           movwf     eecon2    ;para escribir en la memoria de datos EEPROM
  115.           movlw     0aah
  116.           movwf     eecon2
  117.  
  118.           bsf       eecon1,wr ;orden de escribir el dato que se cargó
  119.                               ;previamente en el registro eedata en la
  120.                               ;posición de memoria direccionada por eeadr
  121.  
  122. espera    clrwdt
  123.           btfss     eecon1,eeif         ;pregunta si terminó la escritura
  124.           goto      espera              ;si no, espera a que termine
  125.           bcf       eecon1,eeif         ;borra la bandera de fin de escritura
  126.           bcf       eecon1,wren         ;deshabilita la escritura en memoria EEPROM
  127.           bcf       status,5            ;se ubica en el primer banco de RAM
  128.           retlw     0
  129.  
  130.  
  131.                                 ;RUTINA QUE CONVIERTE BINARIO EN BCD
  132. decimal   CLRF      decena          ;BORRAR REGISTROS DE TRABAJO
  133. OTRA      MOVLW     D'10'          
  134.           SUBWF     unidad,r        ;RESTAR 10 AL VALOR INICIAL
  135.           BTFSS     status,c        ;VERIFICA EL CARRY
  136.           GOTO      SUM             ;SI ES CERO DEJA DE RESTAR 10
  137.           INCF      decena          ;SI ES 1 INCREMENTA decena
  138.           GOTO      OTRA            ;VOLVER A RESTAR
  139. SUM       ADDWF     unidad          ;SUMARLE 1
  140.           RETURN                    ;EL VALOR DE LA CONVERSION BINARIO A DECIMAL
  141.                                     ;SE DEVUELVE EN LOS REGISTROS DECENA Y UNIDAD
  142.  
  143.                                 ;RUTINA QUE CONVIERTE BINARIO EN BCD
  144. decicon   movf      control,w
  145.           movwf     unicont
  146.           CLRF      decont          ;BORRAR REGISTROS DE TRABAJO
  147. OTRA2     MOVLW     D'10'          
  148.           SUBWF     unicont,r        ;RESTAR 10 AL VALOR INICIAL
  149.           BTFSS     status,c        ;VERIFICA EL CARRY
  150.           GOTO      SUM2            ;SI ES CERO DEJA DE RESTAR 10
  151.           INCF      decont          ;SI ES 1 INCREMENTA decena
  152.           GOTO      OTRA2           ;VOLVER A RESTAR
  153. SUM2      ADDWF     unicont         ;SUMARLE 1
  154.           RETURN                    ;EL VALOR DE LA CONVERSION BINARIO A DECIMAL
  155.                                     ;SE DEVUELVE EN LOS REGISTROS DECENA Y UNIDAD
  156.  
  157.  
  158. display                 ;rutina de display multiplexado
  159.           bsf       ptob,4    ;envía unos a los transistores para apagarlos
  160.           bsf       ptob,5
  161.           movlw     decont    ;según el selector escoge dato a mostrar
  162.           btfss     ptoa,3        
  163.           movlw     decena    ;con el registro selector (fsr) se apunta
  164.           movwf     fsr       ;al primer dato que se va a mostrar
  165.           movlw     0f0h      ;colocar en cero el dato del display
  166.           andwf     ptob      ;para apagarlos
  167.           bcf       ptob,5    ;activa transistor de decenas    
  168.           movf      indo,w    ;lee el dato del registro apuntado por el fsr
  169.           andlw     0fh
  170.           iorwf     ptob      ;envia dato leído al display
  171.           movlw     03h
  172.           call      retarms   ;retardo de 3 milisegundos para visualización
  173.           incf      fsr       ;apunta al próximo dígito a mostrar
  174.           movlw     0f0h
  175.           andwf     ptob
  176.           bsf       ptob,5
  177.           bcf       ptob,4
  178.           movf      indo,w
  179.           andlw     0fh
  180.           iorwf     ptob
  181.           movlw     03h
  182.           call      retarms
  183.           bsf       ptob,4
  184.           return
  185.  
  186.     ; *********** PROGRAMA PRINCIPAL ***********
  187.          
  188. inicio
  189.           bsf       status,5  ;se ubica en el segundo banco de RAM
  190.           movlw     0ch       ;se carga el registro W
  191.           movwf     trisa     ;se programan los pines del puerto A
  192.           movlw     0c0h      ;se carga el registro W
  193.           movwf     trisb     ;se programa el puerto B como salidas
  194.           bcf       status,5  ;se ubica en el primer banco de memoria RAM
  195.  
  196.           clrf      ptoa
  197.           clrf      ptob
  198.           bsf       ptoa,CS    ;inicia chip select en alto
  199.           clrf      timesu
  200.           clrf      timeba       
  201.           bcf       ptoa,4  
  202.           bcf       decide,0
  203.                
  204.           movlw     d'50'      ;retardo al inicio para estabilización
  205.           call      retarms
  206.          
  207.  
  208.           clrf      eeadr      
  209.           call      leer       ;al reiniciar el sistema
  210.           movwf     control    ;se recupera el valor de control
  211.           call      decicon
  212.           goto      ciclo2
  213.  
  214. ciclo1
  215.           clrf      eeadr       ;almacena nuevos datos en EEPROM
  216.           movf      control,w   ;cada vez que se cambia el valor de control
  217.           movwf     eedata
  218.           call      escrib
  219.  
  220. ciclo2
  221.         bsf     status,5        ;se ubica en el segundo banco de RAM
  222.         movlw   0ch             ;se carga el registro W
  223.         movwf   trisa           ;se programan los pines del puerto A
  224.         movlw   0cfh            ;programa puerto b para leer
  225.         movwf   trisb           ;los jumper de calibración
  226.         nop                     ;de la histéresis
  227.         bcf     status,5
  228.         movf    ptob,w
  229.         movwf   histe
  230.         bsf     status,5
  231.         movlw   0c0h            ;se carga el registro W
  232.         movwf   trisb           ;se programa el puerto B
  233.         bcf     status,5        ;se ubica en el primer banco de memoria RAM
  234.        
  235.         call    display
  236.         call    recibir         ;lee el dato del convertidor
  237.         movwf   unidad
  238.         call    decimal
  239.  
  240.  
  241.         movlw   03h
  242.         andwf   histe,r         ;toma la histéresis y le suma uno
  243.         ;movlw  01h
  244.         ;addwf  histe,r
  245.         ;bcf    status,c        ;duplica la histéresis
  246.         ;rlf    histe,r
  247.         movf    histe,w         ;obtenemos valores alto y bajo de control
  248.         addwf   control,w       ;según la histéresis medida
  249.         movwf   conal           ;se guardan en conal y conba
  250.         sublw   d'80'
  251.         btfsc   status,c
  252.         goto    sigue
  253.         movlw   d'80'
  254.         movwf   conal
  255. sigue   movf    histe,w
  256.         subwf   control,w
  257.         btfsc   status,c
  258.         goto    sigue2
  259.         clrw   
  260. sigue2  movwf   conba
  261.        
  262.         movf    recep,w
  263.         subwf   conal,w
  264.         btfsc   status,c
  265.         goto    sigue3
  266.         bcf     decide,0
  267.         goto    relevo
  268. sigue3  movf    conba,w
  269.         subwf   recep,w
  270.         btfss   status,c
  271.         bsf     decide,0
  272.         nop
  273. relevo  btfss   decide,0
  274.         goto    rele2
  275.         bsf     ptoa,4
  276.         goto    sigue4
  277. rele2   bcf     ptoa,4
  278.  
  279. sigue4  btfss   ptoa,3          ;pregunta selector para revisar pulsadores
  280.         goto    ciclo2
  281.        
  282. prusube btfsc   ptob,7          ;pregunta botón de subir
  283.         goto    prubaja
  284.         incf    timesu
  285.         movf    timesu,w
  286.         xorlw   d'30'
  287.         btfss   status,z
  288.         goto    ciclo2
  289.        
  290.         clrf    timesu
  291.         incf    control
  292.         call    decicon
  293.         movf    control,w
  294.         xorlw   d'81'      ;hace operaci¢n xor para ver si es igual a 0ah
  295.         btfss   status,z  ;prueba si el contador lleg¢ a 0ah (diez)
  296.         goto    ciclo1    ;si no es igual se incrementa normalmente
  297.  
  298.         clrf    control
  299.         call    decicon        
  300.         goto    ciclo1         
  301.  
  302. prubaja btfsc   ptob,6
  303.         goto    ciclo2
  304.  
  305.         incf    timeba
  306.         movf    timeba,w
  307.         xorlw   d'30'
  308.         btfss   status,z
  309.         goto    ciclo2
  310.        
  311.         clrf    timeba
  312.         decf    control
  313.         call    decicon
  314.         movf    control,w
  315.         xorlw   0ffh       ;hace operaci¢n xor para ver si es igual a 0ah
  316.         btfss   status,z  ;prueba si el contador lleg¢ a 0ah (diez)
  317.         goto    ciclo1    ;si no es igual se incrementa normalmente
  318.  
  319.         movlw   d'80'    
  320.         movwf   control
  321.         call    decicon        
  322.         goto    ciclo1         
  323.  
  324.         goto    ciclo2                   
  325.        
  326.  
  327.  
  328. ;  *********  VALOR DE CONTROL INICIAL  ********
  329.  
  330.           org       2100h     ;inicia memoria eeprom de datos
  331.           de        d'27'
  332.          
  333.        
  334.           end
  335.                              
  336. ;======================================================================
  337. ;         Fusibles de programaci¢n
  338. ;         Osc                 XT
  339. ;         Watchdog            OFF
  340. ;         Code protect        ON
  341. ;         Power-Up-Timer      ON = LOW
  342. ;         Micro.              PIC16F84
  343. ;======================================================================

Estaban mas cerca de lo que imaginabas, en la pagina de Todopic, je..je..

Respecto a los comentarios que haces de los participantes del post que intentan ayudarte, me gustaría que analices TODO el contenido de sus mensajes y de los tuyos, ya que me avergüenza como Argentino que soy, la prepotencia conque has tratado a esas personas.
No me representas, pero si me hace poner mal ese tono.

MGLSOFT,A MI ME AVERGONZAS VOS que apareces cuando ya mutilaron micadaver.Te hubieras metido en el momento justo de la discusion y no al final a dar soluciones SALOMONICAS.Vos sos un careta y un falso.VOS SOS el tipico Argentino que espera que se maten entre hermanos y despues aparece diciendo....PERO ESTO SE PUDO HABER EVITADO.....y haceme un favor.metete la rutina en el CULO....no me gusta que me refrieguen por la cara que hacen algo por mi.

La verdad que este FORO es una verguenza y encima son todos NAZIS porque no respetan la forma de pensar ajena.Se molestan cuando alguien inteligente les dice donde se equivocan y l oque es peor, TE DAN UNA SOLUCION DE LASTIMA.

Vos fijate todos los boludos que se metieron a perder tiempo discutiendo taradaeces en vez de ayudarme.Un foro serio hubiera resuelto el problema y listo.Sin vueltas.

Metanse todo el foro en medio del CULO.

A mi no me sirve.

Quiero irme dce este foro pedorro.

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #13 en: 05 de Junio de 2014, 13:20:45 »
No había leído el mensaje pero.................



Quiero irme dce este foro pedorro.



El único ped......  es usted.


 y sí,  creo que lo mejor es que lo abandone.

Chao
Todos los días se aprende algo nuevo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Leer conversor ADC0831 desde un pic 16F84
« Respuesta #14 en: 05 de Junio de 2014, 13:40:07 »
El usuario zetareticuli ha sido baneado de forma permanente por impresentable y este hilo cerrado.
¡Qué paciencia tenéis compañeros!


 

anything