Curso de programación de PIC en PICBasic Pro

Hola gente, tanto tiempo sin entrar al foro jeje... bueno, el foro es como Dios, solo nos acordamos de el cuando nos hace falta...😄
bueno, les cuento que hace 2 dias que estoy peleando con un pic16f628A y la comunicacion serial. estoy intentando usar un modulo bluetooth HC05 para comunicar una pc con un pic. el problema es con el receptor, que no me quiere funcionar. en realidad funciona erraticamente. no le interesa el numero que le mande, hace cualquiera de las dos funciones que le he programado y esto cuando quiere... aca les comparto el codigo del receptor a ver si alguien me da una manito...😁
como transmisor, estoy usando un asistente virtual que llevo tiempo usando para mi robot animatronic, del que he compartido el proyecto en este foro, pero tambien estoy usando una app que instale en mi celular, se llama Bluetooth terminal HC05. esta muy buena para experimentar. bueno, aca les dejo el codigo por si alguien me puede ayudar... saludos a todos!!!

Código:
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2022 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 14/04/2022                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
'******************CONFIGURACION DE FUSIBLES*********************
@ __CONFIG _HS_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
'***********CONFIGURACION DE PUERTOS Y FRECUENCIA DE RELOJ*********************
INCLUDE "modedefs.bas"
DEFINE OSC 20                     'DECLARAMOS UN RELOJ DE 4MHZ
CMCON = 7                        'DESACTIVAMOS LOS OPERACIONALES DEL PIC
TRISA=%11111111                  'DECLARAMOS PORTA.0 A 7 COMO ENTRADA
TRISB=%00000111                  'DECLARAMOS TODO EL PUERTO B COMO SALIDA

PORTA=%11111111                  'INICIALIZAMOS PORTA.0 A 7 EN UNO LOGICO
PORTB=%00000111                  'INICIALIZAMOS TODO EL PUERTO B EN CERO LOGICO
'*******************************************************************************
DATO VAR BYTE

RECIBE:
SERIN PORTB.0,N9600,2000,RES,DATO
IF DATO=10 THEN ABRE
IF DATO=20 THEN CIERRA
GOTO RECIBE


ABRE:
LOW PORTB.1
PAUSE 1000
HIGH PORTB.1
GOTO RECIBE

CIERRA:
LOW PORTB.2
PAUSE 1000
HIGH PORTB.2
GOTO RECIBE

RES:
HIGH PORTB.1
HIGH PORTB.2
DATO=0
GOTO RECIBE

END
 
Hola gente, tanto tiempo sin entrar al foro jeje... bueno, el foro es como Dios, solo nos acordamos de el cuando nos hace falta...😄
bueno, les cuento que hace 2 dias que estoy peleando con un pic16f628A y la comunicacion serial. estoy intentando usar un modulo bluetooth HC05 para comunicar una pc con un pic. el problema es con el receptor, que no me quiere funcionar. en realidad funciona erraticamente. no le interesa el numero que le mande, hace cualquiera de las dos funciones que le he programado y esto cuando quiere... aca les comparto el codigo del receptor a ver si alguien me da una manito...😁
como transmisor, estoy usando un asistente virtual que llevo tiempo usando para mi robot animatronic, del que he compartido el proyecto en este foro, pero tambien estoy usando una app que instale en mi celular, se llama Bluetooth terminal HC05. esta muy buena para experimentar. bueno, aca les dejo el codigo por si alguien me puede ayudar... saludos a todos!!!

Código:
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2022 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 14/04/2022                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
'******************CONFIGURACION DE FUSIBLES*********************
@ __CONFIG _HS_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
'***********CONFIGURACION DE PUERTOS Y FRECUENCIA DE RELOJ*********************
INCLUDE "modedefs.bas"
DEFINE OSC 20                     'DECLARAMOS UN RELOJ DE 4MHZ
CMCON = 7                        'DESACTIVAMOS LOS OPERACIONALES DEL PIC
TRISA=%11111111                  'DECLARAMOS PORTA.0 A 7 COMO ENTRADA
TRISB=%00000111                  'DECLARAMOS TODO EL PUERTO B COMO SALIDA

PORTA=%11111111                  'INICIALIZAMOS PORTA.0 A 7 EN UNO LOGICO
PORTB=%00000111                  'INICIALIZAMOS TODO EL PUERTO B EN CERO LOGICO
'*******************************************************************************
DATO VAR BYTE

RECIBE:
SERIN PORTB.0,N9600,2000,RES,DATO
IF DATO=10 THEN ABRE
IF DATO=20 THEN CIERRA
GOTO RECIBE


ABRE:
LOW PORTB.1
PAUSE 1000
HIGH PORTB.1
GOTO RECIBE

CIERRA:
LOW PORTB.2
PAUSE 1000
HIGH PORTB.2
GOTO RECIBE

RES:
HIGH PORTB.1
HIGH PORTB.2
DATO=0
GOTO RECIBE

END
Hola Darío, probaste usando la interrupción por usart? Ejemplo:

DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 25
DEFINE HSER_Clear On
....
Hserin 100,continuo,[dato]
...
IF DATO=10 THEN ABRE
IF DATO=20 THEN CIERRA
 
Hola Darío, probaste usando la interrupción por usart? Ejemplo:

DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 25
DEFINE HSER_Clear On
....
Hserin 100,continuo,[dato]
...
IF DATO=10 THEN ABRE
IF DATO=20 THEN CIERRA
Hola martin, gracias por responder. probe un codigo parecido que compartieron aqui en el foro, es este que dejo aca. lo probe tal cual, pero sn exito... voy a hacer otra prueba haciendo algunas modificaciones, saludos. ;)(y)
Código:
'*******************************************************************************
' DEFINICIÓN DE FUSES Y OSILADOR
@ __CONFIG _XT_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
'INCLUDE  "modedefs.bas"


CMCON = 0

DEFINE OSC 4
'*******************************************************************************
CMCON = 7                     
TRISA = %00000000
TRISB = %00010010
'*******************************************************************************
' INICIALIZANDO USART
DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TcSTA 24h
DEFINE HSER_SPBRG 25
DEFINE HSER_Clear On               

LED var byte
'*******************************************************************************
PORTA = %00000000
PORTB = %00000000
'*******************************************************************************
pause 1000

PORTB.0 = 1                      '*************************
pause 500                       'esto es para saber q el pic vive
PORTB.0 = 0                      '*************************
 
inicio:
    
HSERIN 100,continuo,[led]



continuo:
if led = "A" then
PORTB.0 = 1
pause 500
endif

if led = "B" then
PORTB.0 = 0
pause 500
endif
goto inicio
end
 
No te estará pasando como me pasó en algún momento con el tema de puerto ocupado? Me acuerdo que darkbyte me ayudó en aquel entonces. Me pasó que cuando quería hacer comunicación serial desde pic al micro, no me funcionaba; Si no mal recuerdo, me dijo que use esos software de puertos virtuales y ahí caímos que era eso, que el puerto no lo podía usar por qué estaba ocupado... Después googleando caí que el verdadero conflicto era por usar un win desatendido ... Migre a otro win y quedó funcional... Chequea con otro micro en paralelo para ver si tenés comunicación. O sea, usa este mismo programa y en el otro micro mándale las instrucciones que le mandarías por el soft que estás usando
 
Última edición:
Hola gente, tanto tiempo sin entrar al foro jeje... bueno, el foro es como Dios, solo nos acordamos de el cuando nos hace falta...😄
bueno, les cuento que hace 2 dias que estoy peleando con un pic16f628A y la comunicacion serial. estoy intentando usar un modulo bluetooth HC05 para comunicar una pc con un pic. el problema es con el receptor, que no me quiere funcionar. en realidad funciona erraticamente. no le interesa el numero que le mande, hace cualquiera de las dos funciones que le he programado y esto cuando quiere... aca les comparto el codigo del receptor a ver si alguien me da una manito...😁
como transmisor, estoy usando un asistente virtual que llevo tiempo usando para mi robot animatronic, del que he compartido el proyecto en este foro, pero tambien estoy usando una app que instale en mi celular, se llama Bluetooth terminal HC05. esta muy buena para experimentar. bueno, aca les dejo el codigo por si alguien me puede ayudar... saludos a todos!!!

Código:
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2022 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 14/04/2022                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
'******************CONFIGURACION DE FUSIBLES*********************
@ __CONFIG _HS_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
'***********CONFIGURACION DE PUERTOS Y FRECUENCIA DE RELOJ*********************
INCLUDE "modedefs.bas"
DEFINE OSC 20                     'DECLARAMOS UN RELOJ DE 4MHZ
CMCON = 7                        'DESACTIVAMOS LOS OPERACIONALES DEL PIC
TRISA=%11111111                  'DECLARAMOS PORTA.0 A 7 COMO ENTRADA
TRISB=%00000111                  'DECLARAMOS TODO EL PUERTO B COMO SALIDA

PORTA=%11111111                  'INICIALIZAMOS PORTA.0 A 7 EN UNO LOGICO
PORTB=%00000111                  'INICIALIZAMOS TODO EL PUERTO B EN CERO LOGICO
'*******************************************************************************
DATO VAR BYTE

RECIBE:
SERIN PORTB.0,N9600,2000,RES,DATO
IF DATO=10 THEN ABRE
IF DATO=20 THEN CIERRA
GOTO RECIBE


ABRE:
LOW PORTB.1
PAUSE 1000
HIGH PORTB.1
GOTO RECIBE

CIERRA:
LOW PORTB.2
PAUSE 1000
HIGH PORTB.2
GOTO RECIBE

RES:
HIGH PORTB.1
HIGH PORTB.2
DATO=0
GOTO RECIBE

END
Lo primero que tiene que hacer, es evitar usar la instrucción PAUSE y saltar al siguiente nivel de programación, PAUSE es para primaria.
Use interrupciones para trabajo profesional y comunicaciones externas,
Con Interrupciones es mucho mas difícil, pero mucho mas eficaz y eficiente.
Interrupciones es un "cambio de cabeza", pero si lo logra, le va a encantar,
Use también "Watch DOG" o una combinación de ambos.
 
No te estará pasando como me pasó en algún momento con el tema de puerto ocupado? Me acuerdo que darkbyte me ayudó en aquel entonces. Me pasó que cuando quería hacer comunicación serial desde pic al micro, no me funcionaba; Si no mal recuerdo, me dijo que use esos software de puertos virtuales y ahí caímos que era eso, que el puerto no lo podía usar por qué estaba ocupado... Después googleando caí que el verdadero conflicto era por usar un win desatendido ... Migre a otro win y quedó funcional... Chequea con otro micro en paralelo para ver si tenés comunicación. O sea, usa este mismo programa y en el otro micro mándale las instrucciones que le mandarías por el soft que estás usando
Ok, ahora estoy usando solo la aplicacion del celular. probe el circuito en proteus usando virtual terminal. puse uno para enviar el caracter y otro conectado al tx del micro para ver que caracteres cargaba en la variable. puse en marcha la simulacion y cuando envio una A, me devuelve una y minuscula y cuando envio una B, me devuelve una r minuscula. probe en el montaje fisico y cuando envio una A, me devuelve unos caracteres raros... igual si envio una B... eso quiere decir que la variable se carga con cualquier cosa, menos con los datos enviados... 🤷‍♂️ adjunto el nuevo codigo...
Gracias por la sugerencia unmonje, la tendre en cuenta por si n logro salir de esta jeje... iba a usar Arduino, pero es demasiado sencillo y la verdad, no me gusta jeje...
PD: ya probe tambien con conexion fisica y tampoco funciona...

Código:
'*******************************************************************************
' DEFINICIÓN DE FUSES Y OSCILADOR
@ __CONFIG _HS_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
INCLUDE  "modedefs.bas"
DEFINE OSC 20
'*******************************************************************************
CMCON = 7                    
TRISA = %00000000
TRISB = %00010010
'*******************************************************************************
' INICIALIZANDO USART
DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 25
DEFINE HSER_Clear On              

LED var byte
'*******************************************************************************
PORTA = %00000000
PORTB = %00000000
'*******************************************************************************
pause 1000

PORTB.0 = 1                      '*************************
pause 1000                       'esto es para saber q el pic vive
PORTB.0 = 0                      '*************************
 
inicio:  
Hserin 10,INICIO,[led]
HSEROUT [led]
if led = "Y" then
PORTB.0 = 1
pause 500
endif
if led = "R" then
PORTB.0 = 0
pause 500
endif
goto inicio
END
 
Ok, ahora estoy usando solo la aplicacion del celular. probe el circuito en proteus usando virtual terminal. puse uno para enviar el caracter y otro conectado al tx del micro para ver que caracteres cargaba en la variable. puse en marcha la simulacion y cuando envio una A, me devuelve una y minuscula y cuando envio una B, me devuelve una r minuscula. probe en el montaje fisico y cuando envio una A, me devuelve unos caracteres raros... igual si envio una B... eso quiere decir que la variable se carga con cualquier cosa, menos con los datos enviados... 🤷‍♂️ adjunto el nuevo codigo...
Gracias por la sugerencia unmonje, la tendre en cuenta por si n logro salir de esta jeje... iba a usar Arduino, pero es demasiado sencillo y la verdad, no me gusta jeje...
PD: ya probe tambien con conexion fisica y tampoco funciona...

Código:
'*******************************************************************************
' DEFINICIÓN DE FUSES Y OSCILADOR
@ __CONFIG _HS_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
INCLUDE  "modedefs.bas"
DEFINE OSC 20
'*******************************************************************************
CMCON = 7           
TRISA = %00000000
TRISB = %00010010
'*******************************************************************************
' INICIALIZANDO USART
DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 25
DEFINE HSER_Clear On     

LED var byte
'*******************************************************************************
PORTA = %00000000
PORTB = %00000000
'*******************************************************************************
pause 1000

PORTB.0 = 1                      '*************************
pause 1000                       'esto es para saber q el pic vive
PORTB.0 = 0                      '*************************
 
inicio:
Hserin 10,INICIO,[led]
HSEROUT [led]
if led = "Y" then
PORTB.0 = 1
pause 500
endif
if led = "R" then
PORTB.0 = 0
pause 500
endif
goto inicio
END

1-Pase se a 1200 baudios, puede que algo en la cadena, no sea tan rápido y no haga a tiempo.
2- Antes de iniciar una comunicación, debe iniciar un bucle de consulta del bit de "ocupado" del dispositivo, con el cual quiere comunicarse "receptor" y tambien del cual se usa como "transmisor"
3-Allane nos el camino, aclare que significa cada SETING
En programación se usa a la derecha de la linea de comando , otra que aclara que HACE ese comando. (Indispensable para trabajo corporativo) :rolleyes: ;)
' INICIALIZANDO USART
DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h " aqui tiene que aclarar que implica poner 90H"
DEFINE HSER_TXSTA 24h " aqui tiene que aclarar que implica poner 24H"
DEFINE HSER_SPBRG 25 " aqui tiene que aclarar que implica poner 25"
DEFINE HSER_Clear On

4- Lea detenidamente todo lo relacionado al protocolo AT , para comunicarse con el modulo bluethooth
5- Si puede muestre un diagrama de la conexión que esta usado.

6-¿ En que momento se ejecuta este codigo y que pretende ?
RES:
HIGH PORTB.1
HIGH PORTB.2
DATO=0
GOTO RECIBE

¿ Esto es lo que usted quiere hacer ? (Al menos es lo que enunció al principio del tópico.)
¿ Que sistema operativo usa su PC ?
¿Tiene en claro el protocolo AT de configuración de los módulos Bluethooth ?
¿ Como está probando su programa ahora, para verificar lo que dice o está emulando ? :rolleyes: :unsure:

BLUEpic.jpg
Leer aqui
 
Última edición:
PD: Ya probé también con conexión física y tampoco funciona.
Adapté un código que tenía por ahí conforme a lo que intentas hacer.
Usa la interrupción por recepción del módulo USART y obviamente está comprobado que funciona.

Lo adjunto como ejemplo.
 

Adjuntos

  • Int USART Rx.jpg
    Int USART Rx.jpg
    239.6 KB · Visitas: 15
  • 16F628A Interrupción por recepción USART.rar
    18.9 KB · Visitas: 15
Hola D@rkbytes, gracias por tu codigo, es como lo que sigirio unmonje, lo voy a probar. les cuento que probe el codigo que deje en mi ultimo post conectando fisicamente y usando el debuger del microcode. envio A y recibo A, envio B y recibo B, asi que fisicamente, la variable se carga bien, pero no enciende ni apaga el led. voy a probar el ejemplo que dejaste y mas tarde les cuento como me fue y tambien les dejare el diagrama, que es muy sencillo. muchas gracias por tomarse el tiempo para aydudarme, saludos!!!
 
Hola Dario, hace un tiempo con la ayuda de D@rkbytes llegué a realizar un proyecto con bluetooth, y funcionó. Con el pasar del tiempo me enfoqué en realizar todo en C, y tuve que estudiar las sintaxis y obviamente más a detalle los periféricos de los PIC's y AVR's.

Te comento, puede pasar que el módulo bluetooth que estas usando este trabajando a otro valor de baudios, y es necesario conectar solo el modulo mediante un adaptador usb-ttl a la pc para configurar sus baudios con la ayuda de los comandos AT. Pero estoy seguro que la ayuda del amigo D@rkbytes lo solucionarás. Nos comentas como te fue ...
 
Saludo a todo el grupo, tenia tiempo sin usar este tipo de lenguaje ya que emprendí en otras plataformas, mi duda es si hay algún comando en pbp que pueda extraer dicho numero de una variable, por ejemplo tengo:

VALOR VAR BYTE
VALOR = 234

Quiero extraer un numero especifico de la variable, quiera sacar el 2, 3 o el 4, como haría para ubicarme en la posición de la variable?
 
Saludo a todo el grupo, tenia tiempo sin usar este tipo de lenguaje ya que emprendí en otras plataformas, mi duda es si hay algún comando en pbp que pueda extraer dicho numero de una variable, por ejemplo tengo:

VALOR VAR BYTE
VALOR = 234

Quiero extraer un numero especifico de la variable, quiera sacar el 2, 3 o el 4, como haría para ubicarme en la posición de la variable?
Creo que se usa el operador matemático DiG
variable = valor DIG 2
 
Saludo a todo el grupo, tenia tiempo sin usar este tipo de lenguaje ya que emprendí en otras plataformas, mi duda es si hay algún comando en pbp que pueda extraer dicho numero de una variable, por ejemplo tengo:

VALOR VAR BYTE
VALOR = 234

Quiero extraer un numero especifico de la variable, quiera sacar el 2, 3 o el 4, como haría para ubicarme en la posición de la variable?

Otras opciones :
TEOREMA del RESTO

y= a . 100 + b . 10 + c
a= int (y/100)
b= int ((y/100)-a) . 10))
c = y-(a.100) -(b.10)

resto = (y/100)-a
 
Creo que se usa el operador matemático DiG
variable = valor DIG 2
Exactamente tienes toda la razon, habia olvidado por completo el uso de este comando, si marco:

VALOR VAR BYTE
VALOR = 234
RESULT VAR BYTE

RESULT = VALOR DIG 2

Con esto saca el primer numero, el "2" y asi sucesivamente con el resto de los otros dos digitos, si marco 1 o 0. Ahora mi otra duda es como paso a binario el resultado, en realidad quiero mostrar en un display de 7 segmento el resultado que me entrega la variable, se que si digo:

PORTB = %******** Me mostrara un valor binario en el display, la cosa ahora es pasar la variable, usando el BIN?
Exactamente tienes toda la razon, habia olvidado por completo el uso de este comando, si marco:

VALOR VAR BYTE
VALOR = 234
RESULT VAR BYTE

RESULT = VALOR DIG 2

Con esto saca el primer numero, el "2" y asi sucesivamente con el resto de los otros dos digitos, si marco 1 o 0. Ahora mi otra duda es como paso a binario el resultado, en realidad quiero mostrar en un display de 7 segmento el resultado que me entrega la variable, se que si digo:

PORTB = %******** Me mostrara un valor binario en el display, la cosa ahora es pasar la variable, usando el BIN?
Este es el codigo que estoy empleando para ese sencillo ejemplo, tuve que hacer del uso de la LCD para ver si era correcto el resultado.

DEFINE OSC 4
DEFINE LCD_LINES 2
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3

TRISB = 0
PORTB = 0

VALOR VAR BYTE
VALOR = 234
RES VAR BYTE
DIS VAR BYTE[10]
DIS[0]=%00111111
DIS[1]=%00000110
DIS[2]=%01011011
DIS[3]=%01001111
DIS[4]=%01100110
DIS[5]=%01101101
DIS[6]=%01111101
DIS[7]=%00000111
DIS[8]=%01111111
DIS[9]=%01101111

LCDOUT $FE,1
PAUSE 500

INICIO:
RES = VALOR DIG 2
LCDOUT $FE,1,DEC RES
PAUSE 100
GOTO INICIO

END

Muchas gracias por las respuestas, es bueno siempre contar con personas cordiales y prestas a ayudar, me han refrescado la memoria y queria compartir mi pequeño ejemplo, sacar de una variable X un determinado numero usando el comando DIG, luego cree un arreglo para almacenar 10 valores que contendran en binario el estado del display y pasar el numero de la variable X al arreglo y de alli extraiga el numero que quiero que muestre el display.

Estoy trabajando en un lector de voltaje AC de la linea del 110/220v por ahora en la simulacion me funciona perfecto usando una LCD, lo quiero llevar a pasar los valores al display, les comparto el codigo, creditos a Gerson strauss gracias por tu ayuda y a los demas que respondieron.


DEFINE OSC 4
DEFINE LCD_LINES 2
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3

TRISB = 0
PORTB = 0
TRISC = 0
PORTC = 0

HAB_DIS1 VAR PORTC.0
VALOR VAR WORD
RES VAR WORD
DIS VAR BYTE[10]
VALOR = 1234

DIS[0]=%00111111
DIS[1]=%00000110
DIS[2]=%01011011
DIS[3]=%01001111
DIS[4]=%01100110
DIS[5]=%01101101
DIS[6]=%01111101
DIS[7]=%00000111
DIS[8]=%01111111
DIS[9]=%01101111

HAB_DIS1 = 1
PAUSE 100

INICIO:
HAB_DIS1 = 0
RES = VALOR DIG 2
PORTB = DIS[RES]
PAUSE 100
GOTO INICIO

END

digrama.jpg
 
en realidad quiero mostrar en un display de 7 segmento el resultado que me entrega la variable, se que si digo:

PORTB = %******** Me mostrara un valor binario en el display, la cosa ahora es pasar la variable, usando el BIN?

Según el esquema que adjuntas no lo tienes que pasar a binario porque ese display es de 7 segmentos, no entiende "binario puro", osea que si envías 0000000 no muestra 0.

Normalmente se crea una tabla donde cada posición posee la combinación para mostrar en el display, algo así:

(Esto es de lo que recuerdo en C, en PBP ni idea como es pero no es muy distinto).

C++:
Unisgned char digitos[] = { // XGFEDCBA <<--- Los digitos a prender
                               00111111, // Muestra el 0
                               00000110, // Muestra el 1
                               ........
                               00000000 // Display apagado };

Ahí la posición elegida (0 - 9) ya devuelve la conversión correcta para manejar el display (la posición 11 apagaría el display pero con poner el puerto a 0 es lo mismo).
 
Según el esquema que adjuntas no lo tienes que pasar a binario porque ese display es de 7 segmentos, no entiende "binario puro", osea que si envías 0000000 no muestra 0.

Normalmente se crea una tabla donde cada posición posee la combinación para mostrar en el display, algo así:

(Esto es de lo que recuerdo en C, en PBP ni idea como es pero no es muy distinto).

C++:
Unisgned char digitos[] = { // XGFEDCBA <<--- Los digitos a prender
                               00111111, // Muestra el 0
                               00000110, // Muestra el 1
                               ........
                               00000000 // Display apagado };

Ahí la posición elegida (0 - 9) ya devuelve la conversión correcta para manejar el display (la posición 11 apagaría el display pero con poner el puerto a 0 es lo mismo).
Exacto al final eso hice, se me ocurrio crear un array y luego tomar el valor de la variable por cada posicion y alli me ubico y lo saco directamente al display.
 
Anteriormente les hice una pregunta en el foro sobre el manejo de extraer datos de una variable y pasarlos al display de LED, gracias a la ayuda que me brindaron pude terminar mi proyecto, en la simulacion segun esta bien, hice un lector de voltaje AC y refleja el valor en el display de la tension que hay en la red electrica, comparto y dejo adjunto el proyecto, no se si sea correcto y si en la vida real funcione de verdad, lo que hay que hacer es cambiar el valor de ALTERNATOR por el que le quieran colocar y se reflejara el valor obtenido.Sin título.jpgSin título.jpg
 

Adjuntos

  • Lector voltaje AC.rar
    44 KB · Visitas: 11
  • codigo.rar
    23.3 KB · Visitas: 12
Atrás
Arriba