Autor Tema: Voltimetro amperimetro LCD 16 x2  (Leído 12281 veces)

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

Desconectado asafran

  • PIC10
  • *
  • Mensajes: 2
Voltimetro amperimetro LCD 16 x2
« en: 25 de Abril de 2009, 01:00:33 »
Hola a todos! Necesito el archivo fuente con los includes para hacer un voltimetro amperimetro con lcd, encontre lo que necesito pero tengo un problema:

aca les dejo el link de lo que exactamente necesito (http://www.dtforum.net/index.php?topic=57482.0), el problema es que para hacer las descargas tenes que tener un usuario con cierta cantidad de mensajes, y ya encontre una parte del programa que es esta:

;************************************************************************************
; Programa     VOLTIMETRO.ASM                                        FECHA:    17-11-2004     
;************************************************************************************               
;   
;    Voltímetro y amperímetro digital implementado con PIC16F819
;
;    Autor: Alberto Moreno Tejada
; ***********************************************************************************

    LIST        P=P16F819
    INCLUDE        <P16F819.inc>
    __CONFIG    _INTRC_IO & _PWRTE_ON & _WDT_OFF & _LVP_OFF

        CBLOCK    0x20                    ; la primera posición de la memoria RAM en
        ContaC                            ;  la que se escribe es la 0x20
        Temporal_1
        Dato_H
        Dato_L
        MilesI       
        CentenasI
        DecenasI
        UnidadesI
        ADRESH_Suma
        ADRESL_Suma   
        ADRESH_Old
        ADRESL_Old
        Umbral
        ENDC               

; ***********************************************************************************
;    Programa principal
;
; ***********************************************************************************

            org        0x00                ; vector de reset       
            goto    INICIO               
            ORG        0x05                ; una posición después del vector de
                                        ;     interrupción

INICIO        bsf        STATUS,RP0            ; banco 1       
            movlw    b'01000000'            ; selecciona 1 MHz como frecuencia de reloj
            movwf    OSCCON
            bcf        STATUS,RP0            ; banco 0
            clrf    ADRESH_Old
            clrf    ADRESL_Old
            call    LCD_Inicializa        ; se inicializa la pantalla LCD

PRINCIPAL    bsf        STATUS,RP0            ; banco 1 de registros
            movlw    b'10000001'            ; se configuran las entradas y salidas
            movwf    ADCON1                ;     del puerto A como digitales
            movlw    b'00111111'            ; se configura el puero A como entradas
            movwf    TRISA               
            bcf        STATUS,RP0            ; banco 0 de registros
           
            movlw    b'10001001'            ; se selecciona la entrada de intensidad
            movwf    ADCON0                ;
            Call    ConversionAD        ; Conversión A/D
            call    Convierte            ; Conversión a BCD

            movf    BCD_Miles,W            ; copia el resultado de la conversión a BCD
            movwf    MilesI                ;     de la intensidad a unos registros
            movf    BCD_Centenas,W        ;     auxiliares para que no se pierda la
            movwf    CentenasI            ;    información al hacer la conversión del
            movf    BCD_Decenas,W        ;    voltaje
            movwf    DecenasI
            movf    BCD_Unidades,W
            movwf    UnidadesI
           
            movlw    b'10100001'            ; Se selecciona la entrada de tensión
            movwf    ADCON0
            call    ConversionAD        ; conversion A/D
            call    Convierte            ; conversion a BCD

            call    RestaShunt            ; le resta al valor de la tensión el valor
                                        ;     de la tensión que cae en la resistencia
                                        ;     shunt
            call    Visualiza            ; se visualizan los datos en la pantalla
            goto    PRINCIPAL           

; ***********************************************************************************
; Subrutina ConversionAD: realiza la conversión anañógica-digital
;                 hace 4 conversiones y halla la media aritmética                           
; ***********************************************************************************

ConversionAD           
            clrf    ADRESH_Suma            ; borra los registros donde se sumarán
            clrf    ADRESL_Suma            ;     los resultados de las conversiones
            movlw    .4                    ; carga 4 en contaC
            movwf    ContaC
MediaAD       
            call    Retardo_20ms        ; retardo de 20 ms
            bcf        PIR1,ADIF            ; se borra el FLAG    ADIF
            bsf        ADCON0,GO            ; se da la orden de conversion
ADC_Wait    btfss    PIR1,ADIF            ; esperar hasta que se realice la conversión
            goto    ADC_Wait           
            bsf        STATUS,RP0            ; banco 1  de registros
            movf    ADRESL,W            ; mueve ADRESL a W
            bcf        STATUS,RP0            ; banco 0 de registros
            addwf    ADRESL_Suma,F        ; suma la conversion al total acumulado
            movf    ADRESH,W            ; mueve ADRESH a W
            btfsc    STATUS,C            ; comprueba si el resultado de la suma fue
                                        ;     mayor de FF
            addlw    0x01                ; si : suma 1 a W
            addwf    ADRESH_Suma,F        ; no : suma normalmente el número al
                                        ;     acumulado
            decfsz    ContaC,F            ; decrementa contac y si es 0, sale
            goto    MediaAD

            bcf        STATUS,C            ; banco 1 de registros
            rrf        ADRESH_Suma,F        ; rota el total acumulado dos veces para
            rrf        ADRESL_Suma,F        ;     dividir por 4
            bcf        STATUS,C            ; banco 0 de registros
            rrf        ADRESH_Suma,F        ; rota el total acumulado dos veces para
            rrf        ADRESL_Suma,F        ;     dividir por 4

           
            return

; ***********************************************************************************
;    Subrutina Restashunt: le resta a la tensión el valor de la tensión que cae en la
;                            resistencia de 1 ohmio.
;                        como el valor de la tensión es 10 veces superior, resta las
;                        unidades de V con las decenas de A
; ***********************************************************************************

RestaShunt
            movf    DecenasI,W            ; mueve decenas de intensidad a W
            subwf    BCD_Unidades,F        ; se lo resta a las unidades de V
            movf    CentenasI,W            ; mueve centenas de I a W
            btfsc    STATUS,C            ; comprueba si el resultado de la resta fue
                                        ;     menor de cero
            goto    RestaDecenas        ; no: continua con la siguiente resta
            movlw    0xF6                ; si: le resta F6 al número e incrementa las
            subwf    BCD_Unidades,F        ; centenas de intensidad
            incf    CentenasI,W
RestaDecenas
            subwf    BCD_Decenas,F        ; le resta las centenas de intensidad a las
                                        ;     decenas de V
            movf    MilesI,W            ; mueve los millares de intensidad a W
            btfsc    STATUS,C            ; comprueba si el resultado de la resta fue
                                        ;     menor de cero
            goto    RestaCentenas        ; no: continua con la siguiente resta
            movlw    0xF6                ; si: le resta F6 al número e incrementa los
            subwf    BCD_Decenas,F        ; millares de intensidad
            incf    MilesI,W
RestaCentenas
            subwf    BCD_Centenas,F        ; le resta los millares de intensidad a las
                                        ;     centenas de V
            btfsc    STATUS,C            ; comprueba si el resultado es menor de cero
            return                        ; no: retorna
            clrf    BCD_Unidades        ; si: la tensión menos la tensión en la
            clrf    BCD_Decenas            ;     resistencia nunca puede ser menor que
            clrf    BCD_Centenas        ;     cero. si se diera el caso, el valor de
            clrf    BCD_Miles            ;     la tensión como mínimo es cero

            return                        ; retorno

; ***********************************************************************************
;    Subrutina Convierte: toma el valor resultante de la conversión, lo multiplica
;                         por el tamaño del escalón del ADC, lo convierte a BCD y lo
;                        devuelve
;************************************************************************************

Convierte       
            movf    ADRESH_Suma,w        ; Mueve la parte alta de la conversion a
            movwf    DatoB_H             ;     DatoB_H
            movf    ADRESL_Suma,w        ; Mueve la parte baja de la conversion a
            movwf    DatoB_L                ;     DatoB_L
            movlw    0x0C                ; tension de referencia = 3146 mV. Mueve primero
            movwf    DatoA_H                ;     la parte alta a DatoA_H
            movlw    0x4A                ; mueve la parte baja de la tensiónd de
            movwf    DatoA_L                ;    referencia a DatoA_L
            call    Mul16x16            ;    Subrutina que multiplica DatoA por DatoB
       
                               
            movlw    .10                    ; carga 10 en temporal   
            movwf    Temporal_1
BUCLE_V        bcf        STATUS,C            ; rota a la derecha para dividir por 1024
            rrf        DatoD_H,F
            rrf        DatoD_L,F
            rrf        DatoC_H,F
            rrf        DatoC_L,F

            decfsz    Temporal_1,F        ; decrementa temporal, y si llega a cero sale
            goto    BUCLE_V                ;     del bucle           

            movf    DatoC_H,W            ; mueve la parte alta a BCD_High
            movwf    BCD_High           
            movf    DatoC_L,W            ; la parte baja la mueve a W
            call    BIN_a_BCD            ; hace la conversión a BCD
            return

; ***********************************************************************************           
;    Subrutina Visualiza: se encarga de mostrar en el LCD los valores de tension e
;                         intensidad
; ***********************************************************************************

Visualiza    bsf        STATUS,RP0            ; banco 1 de registros
            movlw    b'00000110'            ; configura las lineas del puertoA como
            movwf    ADCON1                ;     digitales
            bcf        TRISA,0                ; RA0 y RA2 las configura como salidas
            bcf        TRISA,2
            bcf        STATUS,RP0            ; banco 0 de registros
            call    Retardo_20ms        ; retardo de 20 ms

            call    LCD_Linea1            ; cursor al principio de la línea 1
;            call    LCD_UnEspacioBlanco
            movf    BCD_Miles,W            ; comprueba si las decenas de Voltios son
            btfsc    STATUS,Z            ;     cero
            goto    NOMIL                ; es cero : va a NOMIL
            call    LCD_Nibble            ; no es cero: presenta las decenas en
                                        ;    pantalla
            goto    SIMIL                ; va a SIMIL
NOMIL        call    LCD_UnEspacioBlanco    ; en lugar de las decenas pone un espacio
SIMIL        movf    BCD_Centenas,W        ; mueve las unidades de voltio a W
            call    LCD_Nibble            ; envia el caracter a la pantalla
            movlw    '.'                    ; representa el punto decimal
            call    LCD_Caracter
            movf    BCD_Decenas,W        ; representa las décimas de voltio en la
            call    LCD_Nibble            ;     pantalla
       
            movf    BCD_Unidades,W        ; representa las centésimas de voltio en la
            call    LCD_Nibble            ;     pantalla
            movlw    ' '                    ; un espacio en blanco
            Call    LCD_Caracter
            movlw    'V'                    ; símbolo del voltio
            Call    LCD_Caracter
            Call    LCD_DosEspaciosBlancos        ; dos espacios en blanco para
                                                ;     separar la intensidad
            movf    MilesI,W            ; representa las unidades de amperios
            call    LCD_Nibble
            movlw    '.'                    ; punto decimal
            call    LCD_Caracter       
            movf    CentenasI,W            ; representa las décimas de amperio
            call    LCD_Nibble
            movf    DecenasI,W            ; representa las centésimas de amperio
            call    LCD_Nibble
            movf    UnidadesI,W            ; representa los miliamperios
            call    LCD_Nibble
            call    LCD_UnEspacioBlanco    ; un espacio en blanco
            movlw    'A'                    ; símbolo del amperio
            call    LCD_Caracter        ; un espacio en blanco
            call    LCD_UnEspacioBlanco

            Call    LCD_Linea2            ; Se situa al comienzo de la línea 2
            movlw    Mensaje0            ; envia al LDC un mensaje personalizable
            call    LCD_Mensaje            ;     en la tabla Mensaje0
            return   

; ***********************************************************************************

Mensajes    addwf    PCL,F
Mensaje0    DT"Made by Alberto!" ,0x00        ; mensaje personalizable que se
                                            ; muestra en al linea 2 del LCD

            INCLUDE    <LCD_4BIT.INC>
            INCLUDE <RETARDOS.INC>
            INCLUDE <BIN_BCD_2.INC>
            INCLUDE    <LCD_MENS.INC>
            INCLUDE <PRODUCTO16.INC>

            END

; ***********************************************************************************

El problema es que me faltan los includes... este programa dicen que viene de la revista resistor fasciculo 225.

Es exactamente esto lo que preciso: voltimetro amperimetro con lcd 16 x 2 para ponerle a una fuente que armé.

Asi que si alguien se las ingenia para sacar esos archivos de ese tema que puse en el link se lo voy a agradecer eternamente.

muchas gracias a todos espero ayuda con el tema...

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Voltimetro amperimetro LCD 16 x2
« Respuesta #1 en: 25 de Abril de 2009, 02:25:13 »
Hola asafran, mira justo en este link encontraras lo que buscabas creo que sera suficiente para que logres sacar adelante tu proyecto
proyecto

saludos  :)
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado asafran

  • PIC10
  • *
  • Mensajes: 2
Re: Voltimetro amperimetro LCD 16 x2
« Respuesta #2 en: 25 de Abril de 2009, 11:43:45 »
nada más necesito descargar los archivos de esa pagina, y como no puedo, le pido a alguien que tenga la posibilidad si me puede subir el zip que está ahi, no que me fabriquen el programa o que me armen el proyecto (porque ya está armado en ese lugar) y creo que no es demasiado esfuerzo ni es pretender que alguien de aca me arme el trabajo.

Serán bienvenidas todas las ironias, pero si alguien tiene la posibilidad de pasarme eso que necesito que esta en ese lugar específico será más bienvenido aún.

Desconectado SOLANORAMSES

  • PIC10
  • *
  • Mensajes: 1
Re: Voltimetro amperimetro LCD 16 x2
« Respuesta #3 en: 03 de Julio de 2009, 13:31:35 »
hola asafran, y a todos en el foro, asafran te suplico el favor de que me envies las subrutinas, PRODUCTO16.INC  y la BIN_CD_2.INC, ya que las necesito de manera muy pero muy urgente te garadezco que me las envies lo mas proto posible por favor,

Desconectado jarpax

  • PIC10
  • *
  • Mensajes: 11
Re: Voltimetro amperimetro LCD 16 x2
« Respuesta #4 en: 23 de Julio de 2009, 00:29:38 »
buena recomendacion  :)
 :-/ :-/

Desconectado Pupuchin

  • PIC10
  • *
  • Mensajes: 2
Re: Voltimetro amperimetro LCD 16 x2
« Respuesta #5 en: 09 de Septiembre de 2009, 22:44:01 »
Saludos...

Tengo una duda, he intentado sin exito aunmentar la resolucion a 10bits, he capturado los registros de AdresH y AdresL y los multiplico por la resolucion a 1023, y solo consigo un voltaje de 0 a 3.2voltios... agradeceria  mucho algu tip para solucionar este problema....


Gracias
« Última modificación: 10 de Septiembre de 2009, 12:50:02 por Pupuchin »

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Voltimetro amperimetro LCD 16 x2
« Respuesta #6 en: 10 de Septiembre de 2009, 09:30:33 »
Hola Pupuchin.
Deberías portear el código para poder ayudarte.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Pupuchin

  • PIC10
  • *
  • Mensajes: 2
Re: Voltimetro amperimetro LCD 16 x2
« Respuesta #7 en: 10 de Septiembre de 2009, 13:01:34 »
Saludos...

Gracias Leon Pic

aqui esta el codigo, espero puedan encontar el error..

;----------------------------------------------------------------\\\
   LIST P=16F877
   INCLUDE <P16F877.INC>
   INCLUDE <MACROS.INC>

   CBLOCK   0x20

   ENDC

   ORG      0
   call   inicio_LCD
   CURSOR   OFF
   mov   ADCON0,B'10101001'
;   ADCS1:0=10 32Tosc/CH - 5=101/ 0=Go/Done /0=na /ON/ T = 1.6 us
   banco   1
   mov   ADCON1,B'01001000'
   banco   0
;ADFM=justificacion a la derecha
;ADCS2=1 , 64Tosc/RA3=Vref+ ,RA2=Vref- y 5 Chanel disponibles

REPITE
   bsf   ADCON0,GO         ;INICIO DE  CONVERSION   
   btfsc   ADCON0,GO         ;¿FIN?
   goto   $-1

;ADRESH y ADRESL ;obtiene muestreo a 10bits
;----------------------------------------------
   movr   AARGB0,ADRESH ;se carga la parte alta
   movr   AARGB1,ADRESL ;se carga la parte baja
   mov   BARGB0,B'10111110' ;se carga la parte MSB
   mov   BARGB1,B'11101100'   ;se carga la parte LSB
   call   MUL16X16_U

;Salida (32):                                *
;       AARGB0 (MSB), AARGB1 ,                *
;       AARGB2      , AARGB3 (LSB)            *

;       DATOC_H (MSB) - DATOC_L
;       DATOB_H       - DATOB_L (LSB);


   movr   DATOC_H,AARGB0;MSB
   movr   DATOC_L,AARGB1;
   movr   DATOB_H,AARGB2;
   movr   DATOB_L,AARGB3;   LSB
   call   BITS32_BCD
   call   BCD32TOASC
;SALIDA:
;  (+) ASCII1,ASCII2,ASCII3,ASCII4,ASCII5
;   ,ASCII6,ASCII7,ASCII8,ASCII9,ASCII10(-)

;-----------------------------------
   CLS   
   PUTC   'V'
   PUTC   '='
   PUTC   ' '
   PUTV   ASCII1
   PUTC   '.'
   PUTV   ASCII2
   PUTV   ASCII3
   PUTV   ASCII4
   PUTV   ASCII5
   PUTV   ASCII6
   PUTV   ASCII7
   PUTV   ASCII8
   PUTV   ASCII9
   PUTV   ASCII10
   PUTV   ' '
   PUTC   'v'
   delay_ms   .50
   goto   REPITE

   INCLUDE <MATH_877.INC>
   INCLUDE   <LCD.ASM>
   INCLUDE <RETARDO.ASM>
   INCLUDE <ARITH.ASM>
   END

;-------------------------------------------------------------------

y esta es mi rutina para multiplicar 16x 16

;----------------------------------------------------------------



;**********************************************
; RUTINA DE MULTIPLICACION DE 16X16 SIN SIGNO *
; Entrada(16):                                *
;      Primer  Numero: AARGB0 (8) - MSB    *
;     Primer  Número: AARGB1 (8) - LSB    *
; Entrada (16):                               *
;         Segundo Número: BARGB0 (8) - MSB    *
;         Segundo Número: BARGB1 (8) - LSB    *
; Salida (32):                                *
;       AARGB0 (MSB), AARGB1 ,                *
;       AARGB2      , AARGB3 (LSB)            *
; Llamar:                                     *
;         CALL  MUL16X16_U                    *
;**********************************************
UMUL1616L       MACRO
                MOVLW   0x08
                MOVWF   LOOPCOUNT
LOOPUM1616A
                RRF     BARGB1, F
                BTFSC   STATUS,C
                GOTO    ALUM1616NAP
                DECFSZ  LOOPCOUNT, F
                GOTO    LOOPUM1616A

                MOVWF   LOOPCOUNT
LOOPUM1616B
                RRF     BARGB0, F
                BTFSC   STATUS,C
                GOTO    BLUM1616NAP
                DECFSZ  LOOPCOUNT, F
                GOTO    LOOPUM1616B
                CLRF    AARGB0
                CLRF    AARGB1
                RETLW   0x00
BLUM1616NAP
                BCF     STATUS,C
                GOTO    BLUM1616NA
ALUM1616NAP
                BCF     STATUS,C
                GOTO    ALUM1616NA
ALOOPUM1616
                RRF     BARGB1, F
                BTFSS   STATUS,C
                GOTO    ALUM1616NA
                MOVF    TEMPB1,W
                ADDWF   AARGB1, F
                MOVF    TEMPB0,W
                BTFSC   STATUS,C
                INCFSZ  TEMPB0,W
                ADDWF   AARGB0, F
ALUM1616NA
                RRF     AARGB0, F
                RRF     AARGB1, F
                RRF     AARGB2, F
                DECFSZ  LOOPCOUNT, F
                GOTO    ALOOPUM1616
                MOVLW   0x08
                MOVWF   LOOPCOUNT
BLOOPUM1616
                RRF     BARGB0, F
                BTFSS   STATUS,C
                GOTO    BLUM1616NA
                MOVF    TEMPB1,W
                ADDWF   AARGB1, F
                MOVF    TEMPB0,W
                BTFSC   STATUS,C
                INCFSZ  TEMPB0,W
                ADDWF   AARGB0, F
BLUM1616NA
                RRF     AARGB0, F
                RRF     AARGB1, F
                RRF     AARGB2, F
                RRF     AARGB3, F
                DECFSZ  LOOPCOUNT, F
                GOTO    BLOOPUM1616
                ENDM

MUL16X16_U
                CLRF    AARGB2     
                CLRF    AARGB3
                MOVF    AARGB0,W
                MOVWF   TEMPB0
                MOVF    AARGB1,W
                MOVWF   TEMPB1
                UMUL1616L
                RETLW   0x00








;----------------------------------------------------------------








Gracias


 

anything