wrong positive and negative voltages on lcd 20x4


Results 1 to 14 of 14

Threaded View

  1. #3
    Join Date
    Jul 2022
    Posts
    26


    Did you find this post helpful? Yes | No

    Default Re: wrong positive and negative voltages on lcd 20x4

    Code:
    'Config for 16f886
    #CONFIG
        __config _CONFIG1, _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_ON & _LVP_OFF & _CP_ON & _CPD_ON
    #ENDCONFIG
    
    
    include "fp2032.bas"    ' Include file for 14-bit core with RAM at $20 (32-bit)
    define OSC  8
    DEFINE LCD_DREG PORTB
    DEFINE LCD_DBIT 4
    DEFINE LCD_RSREG PORTC
    DEFINE LCD_RSBIT 0
    DEFINE LCD_EREG PORTC
    DEFINE LCD_EBIT 1
    DEFINE LCD_BITS 4
    DEFINE LCD_LINES 2
    
    
    
    
    DEFINE ADC_BITS 10
    DEFINE ADC_CLOCK 3
    DEFINE ADC_ SAMPLEUS 50
    '********************************************************************
    LED VAR PORTC.4
    TXD VAR PORTC.6
    B1 VAR WORD
    B2 VAR WORD
    VALOR1 VAR BYTE
    VALOR2 VAR BYTE
    fpplaces  var  byte     ' Used to define number of decimal places in fpdisplay,fpdisplayr
    ahold    var   word     ' Required by fpdisplay
    bhold    var   word     ' Required by fpdisplay
    '********************************************************************
    INICIO:
             TRISC.6 = 0          'in
             TRISC.7 = 1          'out
             TRISA = 255          'Port_A = in
             ADCON1 = %11000010   'left alignment
             TRISB.6 = 0          'out
    
    
             LCDOUT  $FE,2,"  FUENTE SIMETRICA  "     '1_line
             LCDOUT  $FE,$C0," JOSE LUIS COMAS LL "   '2_line
             LCDOUT  $FE,$94,"VOLT.NEGATIVO:-"        '3_line
             LCDOUT  $FE,$D4,"VOLT.POSITIVO:+"        '4_line
    COMENZAR:
             ADCIN 1, B1    'read negativ via chanal_1_ADC
             ADCIN 2, B2    'read positiv via chanal_2_ADC
    
             'send ADC to terminal
             SEROUT2  TXD,188,["$", "$", DEC4 B1,"$", "$",DEC4 B2,10,13]
    
             aint = B1      'read -volt_to+B1
             gosub itofa    'Conviertelo a punto flotante
             bint = 2000    'Carga el valor 2000 (5*400)
             gosub itofb    'Conviertelo en punto flotante
             gosub  fpmul   'ADCres * 2000
             bint = 52224   'Carga el valor de la cuenta maxima del ADC * 51
             gosub itofb    'Conviertelo en punto flotante
             GOSUB  fpdiv   '(ADCres * 2000)/52224
    '++++++++++++++
    'pv         LCDOUT  $FE,$A3,"     "    'Limpia el espacio donde se coloca el voltaje negativo
             LCDOUT  $FE,$A3
    '++++++++++++++
             fpplaces = 2 : Gosub fpdisplayr    ' Call display routine
    
             aint = B2      'Transfiere el valor del ADC del voltaje positivo
             gosub itofa    'Conviertelo a punto flotante
             bint = 35      'Carga el valor 35 (5*7)
             gosub itofb    'Conviertelo en punto flotante
             gosub  fpmul   'ADCres * 35
             bint = 1024    'Carga el valor de la cuenta maxima del ADC
             gosub itofb    'Conviertelo en punto flotante
             GOSUB  fpdiv   '(ADCres * 35)/1024
    '++++++++++++++
    'pv         LCDOUT  $FE,$E3,"     "    'Limpia el espacio donde se coloca el voltaje positivo
             LCDOUT  $FE,$E3
    '++++++++++++++
             fpplaces = 2 : Gosub fpdisplayr    ' Call display routine
    
    
             HIGH LED
            GOTO COMENZAR
    
    ' The fpdisplayr routine checks for number of places, then adds the appropriate
    ' value to achieve rounding.  To save RAM space, the values are hard coded
    ' in floating point format.
    
    
    fpdisplayr: If fpplaces=0 Then                  ' Set floating point barg to 0.5
                            bexp = $7E
                            bargb0 = $00
                            bargb1 = $00
                            bargb2 = $01
                      Endif
                      If fpplaces=1 Then                  ' Set floating point barg to 0.05
                            bexp = $7A
                            bargb0 = $4C
                            bargb1 = $CC
                            bargb2 = $CD
                      Endif
                      If fpplaces=2 Then                  ' Set floating point barg to 0.005
                            bexp = $77
                            bargb0 = $23
                            bargb1 = $D7
                            bargb2 = $0B
                      Endif
                      If fpplaces=3 Then                  ' Set floating point barg to 0.0005
                            bexp = $74
                            bargb0 = $03
                            bargb1 = $12
                            bargb2 = $6F
                      Endif
                      If fpplaces=4 Then                  ' Set floating point barg to 0.00005
                            bexp = $70
                            bargb0 = $51
                            bargb1 = $B7
                            bargb2 = $17
                      Endif
    
    
                      Gosub fpadd                         ' add barg to aarg
                      
    ' The fpdisplay routine outputs the signed value of aarg in decimal floating point format. It
    ' can display a positive value of 65535, and decimals to 4 places. The number of decimal
    ' places should be stored in fpplaces before calling the routine. The routine reads the
    ' floating point value of aarg. This value should NOT be converted to an integer before
    ' calling fpdisplay. The integer conversion will be perfomed as part of this routine, and
    ' aint will be returned to the calling program just as from the itofa routine.
    
    
    fpdisplay:  bexp = aexp                         ' Store the FP value of aarg to the barg variables
                      bargb0 = aargb0
                      bargb1 = aargb1
                      bargb2 = aargb2
    
    
                      Gosub ftoia                   ' Convert aarg to integer
                      ahold = aint                        ' Save this value for the final display
                      
                      Gosub itofa                   ' Convert integer back to float
    
    
                      Swap aexp,bexp                      ' Swap the FP values of aarg and barg before subtraction
                      Swap aargb0,bargb0
                      Swap aargb1,bargb1
                      Swap aargb2,bargb2
    
    
                      Gosub fpsub                   ' Subtract the integer portion from the full number
    
    
    
    
                      bint = 10                     ' Make bint = 10 E fpplaces
                      If fpplaces=2 Then
                            bint = 100
                      Endif
                      If fpplaces=3 Then
                            bint = 1000
                      Endif
                      If fpplaces=4 Then
                            bint = 10000
                      Endif
    
    
                      bhold = bint                        ' Save the integer value of bint for zeros loop
    
    
                      Gosub itofb                   ' Convert bint to integer prior to FP multiply
                      Gosub fpmul                   ' Multiply the decimal portion x 10 E fpplaces
    
    
                      Gosub ftoia                   ' Convert result to aint integer
    
    
                      Lcdout dec ahold              ' Display integer portion
                      If fpplaces > 0 Then                            
                            Lcdout "."              ' Display decimal point
    zeros:                  bhold = bhold / 10                                          ' Set bhold to be next place to right
                            If (aint < bhold) AND (bhold > 1) Then          ' Check for leading zero in decimal
                                  Lcdout "0"                                            ' Display leading zero
                                  Goto zeros                                            ' loop to check for another zero
                            Endif
                            Lcdout dec aint               ' Display the rest of the decimal portion
                      Endif
    
    
                      aint = ahold                        ' Restore the original value of aint
    
    
                      Return              
    'pv         LCDOUT  $FE,$A3,"     "    'Limpia el espacio donde se coloca el voltaje negativo
    'pv         LCDOUT  $FE,$A3
    'pv         LCDOUT  $FE,$E3,"     "    'Limpia el espacio donde se coloca el voltaje positivo
    'pv         LCDOUT  $FE,$E3
    
    
    thanks for answering
    I attach the code
    Last edited by Ioannis; - 17th April 2023 at 08:58.

Similar Threads

  1. Monitoring negative voltages
    By Charles Linquis in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 16th August 2014, 04:17
  2. Pic18f452 with 20x4 LCD Help
    By djmachine in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 6th November 2008, 22:43
  3. Measuring negative voltages
    By sammy in forum mel PIC BASIC Pro
    Replies: 14
    Last Post: - 13th June 2006, 01:36
  4. 20x4 LCD and P18F2680
    By microuser in forum mel PIC BASIC Pro
    Replies: 9
    Last Post: - 9th June 2006, 19:26
  5. LCD 20X4 connect with DS1820
    By jojokatada in forum mel PIC BASIC Pro
    Replies: 6
    Last Post: - 9th March 2005, 11:04

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts