Autor Tema: codigo en Pic Basic Pro para fuente simetrica  (Leído 42 veces)

jose_atmega8

  • PIC10F
  • *
  • Mensajes: 4
codigo en Pic Basic Pro para fuente simetrica
« en: Septiembre 03, 2018, 01:33:28 pm »


hola compañeros del foro cordial saludo

bueno le comento he diseñado un código en pic basic pro para fuente simetrica, para visualizar voltaje negativo y positivo, utilice Lcd 20x4, al momento de simular los Valores negativo y positivo me quedan parpadeando, bueno utilice el pic 16f877a, pero deseo cambiarlo al pic 16f887 para utilizar su oscilado interno.
bueno amigos le consulto por hay alguien me pueda corregir mi código en pic basic pro, espero que me puedan ayudar gracias  :(

Leon Pic

  • Moderador
  • dsPIC
  • ******
  • Mensajes: 5707
  • Cumulonimbus
    • Foro de meteorología
Re:codigo en Pic Basic Pro para fuente simetrica
« Respuesta #1 en: Septiembre 06, 2018, 10:18:26 pm »
Hola José. Bienvenido al foro.

¿Cuál es exactamente tu problema?
Para poder revisar el código, va a tener que subirlo por aquí.

Cuando escribís un mensaje, vas a ver que encima de los emoticones, hay más botones. Buscá el símbolo # y coloca tu código entre dos etiquetas que te van a aparecer.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

jose_atmega8

  • PIC10F
  • *
  • Mensajes: 4
Re:codigo en Pic Basic Pro para fuente simetrica
« Respuesta #2 en: Septiembre 08, 2018, 11:15:01 am »
Código: [Seleccionar]
include "fp2032.bas" ' Include file for 14-bit core with RAM at $20 (32-bit)

DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTE
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTE
DEFINE LCD_EBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2

DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 3
DEFINE ADC_ SAMPLEUS 50

'********************************************************************
'           Definición de puertos y variables
'********************************************************************
LED VAR PORTB.6     'Define el led en el pin 6 del puerto B
TXD VAR PORTC.6     'Define el pin de transmision serial en el pin 6 del puerto C
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 del programa principal
'********************************************************************
INICIO:
         TRISC.6 = 0    'Configura puerto RC6 como salida 
         TRISC.7 = 1    'Configura puerto RC7 como entrada
         TRISA = 255    'Configura puerto A como entrada
         ADCON1 = %11000010  'Justifica el resultado hacia la izquierda
         TRISB.6 = 0    'Configura puerto RB6 como salida

         LCDOUT  $FE,2,"  FUENTE SIMETRICA  "
         LCDOUT  $FE,$C0,"     JOSE LUIS "
         LCDOUT  $FE,$94,"VOLT.NEGATIVO:-"
         LCDOUT  $FE,$D4,"VOLT.POSITIVO:+"
COMENZAR:
         ADCIN 1, B1    'Lee el voltaje negativo en el canal 1 del ADC
         ADCIN 2, B2    'Lee el voltaje positivo en el canal 2 del ADC
         
         'Envia los valores del ADC a la terminal
         SEROUT2  TXD,188,["$", "$", DEC4 B1,"$", "$",DEC4 B2,10,13]
         
         aint = B1      'Transfiere el valor del ADC del voltaje negativo
         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
         LCDOUT  $FE,$A3,"     "    'Limpia el espacio donde se coloca el voltaje negativo
         LCDOUT  $FE,$A3
         fpplaces = 1 : 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
         LCDOUT  $FE,$E3,"     "    'Limpia el espacio donde se coloca el voltaje positivo
         LCDOUT  $FE,$E3
         fpplaces = 1 : 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               
         

hola amigo gracias por responder, bueno aca escribo el codigo que realice en pic basic pro utilice el pic 16f877a, como lo mencione deseo cambiar el pic 16f877a por el pic 16f887 para utilizar su oscilador interno, pero en el código lo he intentado implementarlo y no me funciona, y por el otro lado los voltaje tanto positivo y negativos me queda parpadeando siempre  en el lcd 20x4, lo ideal es que se queden fijos amigo, y espero que me puedas ayudarme jose  :(
« Última modificación: Septiembre 08, 2018, 11:27:01 am por HJ »

Leon Pic

  • Moderador
  • dsPIC
  • ******
  • Mensajes: 5707
  • Cumulonimbus
    • Foro de meteorología
Re:codigo en Pic Basic Pro para fuente simetrica
« Respuesta #3 en: Septiembre 12, 2018, 02:08:14 pm »
Como primer error que veo, es que no le indicas al compilador, que PIC vas a usar.
Viendo detalladamente el código, parece que faltan etiquetas o falta más partes del código. Al compilar el código ¿No te da advertencia o errores?
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

jose_atmega8

  • PIC10F
  • *
  • Mensajes: 4
Re:codigo en Pic Basic Pro para fuente simetrica
« Respuesta #4 en: Septiembre 13, 2018, 10:44:08 am »

amigo en el compilador pbp escojo el pic que voy a usar en este caso el pic 16f877a, en la lista de micros que tiene el pbp, luego realizo la compilación y me genera el hex sin errores, te adjunto en link para que vea la simulacion del codigo https://drive.google.com/open?id=1zgJ_kTbKI8Ax4FTWBatLuwX811Qw4o_9
te adjunte la imagen aca, por que no me permite adjuntar por que esta lleno y me dice que debo contactar al administrador del sitio
en la simulación con el lcd 20x4, los valores de los voltajes positivos y negativos me quedan parpadeando.
en el codigo deseo cambiar el pic 16f877a, por el pic 16f887, ya que tiene oscilador interno y se que el compilador le debo indicar, he buscado la forma de como cambiarlo en el compilador pbp pero no he podido realizarlo amigo y espero me puedas ayudar y gracias


Leon Pic

  • Moderador
  • dsPIC
  • ******
  • Mensajes: 5707
  • Cumulonimbus
    • Foro de meteorología
Re:codigo en Pic Basic Pro para fuente simetrica
« Respuesta #5 en: Septiembre 13, 2018, 10:21:13 pm »
te adjunte la imagen aca, por que no me permite adjuntar por que esta lleno y me dice que debo contactar al administrador del sitio

Lo voy a revisar. Gracias por avisarme.

en el codigo deseo cambiar el pic 16f877a, por el pic 16f887, ya que tiene oscilador interno y se que el compilador le debo indicar, he buscado la forma de como cambiarlo en el compilador pbp pero no he podido realizarlo amigo y espero me puedas ayudar y gracias

Lo que haría, es crear un nuevo proyecto, indicarle al pbp el nuevo pic a utilizar, y luego; teniendo a mano el datasheet del pic 16f887; realizar los cambios necesarios para adaptarlos al nuevo pic.
Deberás concentrarte en la configuración de los pines y la configuración del módulo ADC que utilizas en el código.

No olvides indicarle al pbp que vas a usar el oscilador interno. Desgraciadamente nunca he utilizado ese compilador ya que nunca trabajé en basic. Seguramente, cuando indicás que pic vas a utilizar, se te habilitará la opción de elegir el oscilador interno. Tiene que estar donde configuras si apagás el perro guardián, si proteges el programa contra lectura, ect.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

jose_atmega8

  • PIC10F
  • *
  • Mensajes: 4
Re:codigo en Pic Basic Pro para fuente simetrica
« Respuesta #6 en: Septiembre 14, 2018, 09:56:34 am »



hola amigo muchas gracias por la intención en ayudarme, de todos lo voy implementar con el pic 16f877a.
mil gracias  ;)

Leon Pic

  • Moderador
  • dsPIC
  • ******
  • Mensajes: 5707
  • Cumulonimbus
    • Foro de meteorología
Re:codigo en Pic Basic Pro para fuente simetrica
« Respuesta #7 en: Septiembre 14, 2018, 06:53:19 pm »
Ok.
La ventaja de hacerlo con oscilador externo, y con cristal, es que es más exacto.

Ahora habría que ver por qué te titila el LCD.
Puede deberse a la simulación y no por un problema del código o montaje físico. Aquí te sugiero que lo montes y veas si te pasa eso.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

 

anything