Curso de programación de PIC en PICBasic Pro

se hizo una aplicacion para android que simula el teclado matricial de 4x4 donde las configuraciones de la aplicacion es enviar un dato por bluetooth al pic por eso el
SERIAL=0
SERIN PORTC.7,T9600,100,SIGUE,SERIAL

si lo dejo asi desde que lo conecto enciende el led y no le e mandado ninguna instruccion

Código:
IF PORTB.4=0 OR SERIAL=1 THEN
    high portb.0
    endif
 
Pues debe de ser porque cuando pones todo el puerto B en cero como te he estado diciendo, se comprueba que RB4 está en cero y por eso RB0 se pone en uno.
Debes de comprender la lógica en tu programación.
 
que tal gracias ya quedo jejeje
Código:
define ADC_BIST 10
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50

define OSC 20
DEFINE LCD_DREG PORTC
DEFINE LCD_BITS 4
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTC
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTC
DEFINE LCD_EBIT 5
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50

ADCON1=%10001110  ' %10001110 SOLAMENTE PARA EL DE 10 BITS PARA EL DE 8 BITS 14 DIRECTO '

TRISA=1
TRISB=0

SENSAR VAR WORD
TEM VAR WORD
 
SENSAR=0
TEM=0


INICIO:

 ADCIN 0,SENSAR

IF tem=>43 THEN
   ELSE
   SENSAR=SENSAR-1
  
IF TEM=>63 THEN
   ELSE
   SENSAR=SENSAR-2
  
IF TEM=>120 THEN
   ELSE
   SENSAR=SENSAR-3
  
IF TEM=>293 THEN
   ELSE
   SENSAR=SENSAR-4

SENSAR=SENSAR/2
                      
LCDOUT $FE,2, "  TEMPERATURA: "  'POCICION DE LA LINEA 1'
LCDOUT $FE,$C0,#SENSAR,%11011111, "C"
PAUSE 500
LCDOUT $FE,1
ENDIF
ENDIF
ENDIF
ENDIF
GOTO INICIO
ahora tengo un problema con un sensor de temperarura con lm35 a 10 bist
lo hice a 8 bits y funciono ala primera sin ningun problema pero a 10 bits no lo puedo hacer funcionar

de antemano gracias
 
Si TEM se establece en 0 al iniciar, ¿cómo es que pretendes que se pueda comparar con los valores elegidos?
¿Y por qué restas la variable SENSAR? Esta variable es la que contiene la lectura del conversor AD y su posterior modificación se verá afectada cada nueva lectura.
Supongo que debe ser al revés. O sea, comparar la variable SENSAR y modificar la variable TEM

Esos IF anidados no me agradan. Sería mejor usar una selección de datos con Select Case.
Aparte, se debe establecer un rango, porque las lecturas del conversor AD no son estables.
También sería conveniente realizar un promedio para lograr mejor estabilidad.

No sé qué pretendas hacer, pero no le encuentro sentido a ese programa.
 
gracias por responder los if anidados y las restas es para tener una mejor lectura o la mas estable posible
la Select Case. no la se utilizar si tienes un ejemplo que mejor y pues ya quedo el sensor de temperatura a 10bits ya lo proble y todo y esta funcionando lo dejo por si tienen un mejora que hacer etc

Código:
define ADC_BIST 10
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50

define OSC 20
DEFINE LCD_DREG PORTC
DEFINE LCD_BITS 4
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTC
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTC
DEFINE LCD_EBIT 5
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50

ADCON1=14 
PORTB=0
TRISA=1
TRISB=0

SENSAR VAR WORD
TEM VAR WORD
 
SENSAR=0
TEM=0


INICIO:

 ADCIN  0,SENSAR

IF tem=>43 THEN
   ELSE
   SENSAR=SENSAR-1
  
IF TEM=>63 THEN
   ELSE
   SENSAR=SENSAR-2
      
IF TEM=>120 THEN
   ELSE
   SENSAR=SENSAR-3
  
IF TEM=>293 THEN
   ELSE
   SENSAR=SENSAR-4

SENSAR=SENSAR/2
LCDOUT $FE,1                     
LCDOUT $FE,2, "  TEMPERATURA: "  'POCICION DE LA LINEA 1'
LCDOUT $FE,$C0,#SENSAR,%11011111, "C"
PAUSE 500
LCDOUT $FE,1
ENDIF
ENDIF
ENDIF
ENDIF

IF SENSAR>35 THEN
PORTB.0=1
PAUSE 500
LCDOUT $FE,1   'LIMPIAR PANTALLA '
LCDOUT $FE,2, "  VENTILADOR "  'POCICION DE LA LINEA 1'
LCDOUT $FE,$C0, "ENCENDIDO" 'POCICION DE LA 2 LINEA'
PAUSE 2000
      ELSE
IF SENSAR=28 THEN
PORTB.0=0
PAUSE 500
LCDOUT $FE,1   'LIMPIAR PANTALLA '
LCDOUT $FE,2, "  VENTILADOR "  'POCICION DE LA LINEA 1'
LCDOUT $FE,$C0, " APAGADO " 'POCICION DE LA 2 LINEA'
PAUSE 2000
      ENDIF
   ENDIF   
GOTO INICIO:
 
los if anidados y las restas es para tener una mejor lectura o la mas estable posible
De esa forma no se logra una mejor lectura porque no se está involucrando con el conversor AD.
Con lo que se logra una lectura más estable, con lo que te mencioné.
La Select Case no la sé utilizar. Si tienes un ejemplo, que mejor.
En este tema existen varios ejemplos en donde se ha usado.
También cuentas con los temas de ayuda del entorno. Presiona la tecla F1 y aparecerá el documento de ayuda.
De igual forma, si tienes dudas con alguna instrucción, posiciona el cursor en ella y a continuación presiona la tecla F1
 
Que tal como están, una pregunta, y lo he estado buscando en el foro, y mi pregunta es éste sensor dht11 que es de temperatura y humedad, ya tengo la programación en microcode estudio de un sensor de temperatura con un lm35 pero me gustaría añadir éste que contiene los 2 , ¿se podría ? y cómo sería su configuración?, de antemano gracias
 
Buenas noches compañeros , por aca nuevamente molestandolos, he estado tratando de leer un tren de pulsos que sale por los pines del puerto del pic, por decir portb.0, despues portb.1 y leerlo siempre por portb.7, lo que quiero es identificar por cual pin salio el tren de pulsos.
Lo que busco hacer es un probador de red que no tenga que estar otra persona en el otro extremo a probar, los que he visto en internet debe haber una persona al extremo del otro punto para verificar si el hilo esta bien o esta abierto, que si es uno a uno o es cruzado.

De ante mano muchas gracias y me puedan colaborar.
 
Hola compañeros, gracias D@rk por tu respuesta, lo del envio de identificador lo tengo claro, pero donde estoy trocado es en la parte de la recepción del identificador, si tendria que hacer por hardware o software. Por Software no me dio utilizando el comando Count, Pulsin o no lo supe inplementar.

Código:
clear
anselh = $00
DEFINE LCD_DREG PORTB                               ; configuro la panta LCD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 0
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50
TRISB = 0
TrisC = %00000000
PORTC = 0
w var WORD
inicio:
        LCDOUT $FE,1
        LCDOUT $FE,$80,#W      ;Muestro en la pantalla lo que se cargo en w.
        PAUSE 500
Pulsos:

    portC = %00000001            ;Prendo portc.1 o hilo 1 del utp
    pause 300                            ;pause 300 ms
    PULSOUT PORTC.0, 2000    ;envio un tren de pulso
    PULSIN PORTB.3,1,W          ;y los recepciono.
    pause 300
    goto inicio
end
Seria de gran ayuda se me pudiesen dar una mano.
Cordial saludo.
 

Adjuntos

Temas similares


Arriba