Curso de programación de PIC en PICBasic Pro

Lo tengo conectado al portb.1 mi oscilador es de 4mhz, como dije antes crei que era el que estaba chafeando y fui a comprar otro, tengo capacitores de 15 picofaradios y una resistencia de 10 k a la patita 1 del PIC (siempre la he usado y si sirve)

que extraño prueba con otro pic a ver si es el micro. si puede poner tu programa para ver si funca con mi micro pero dudo q sea el programa pero bueno uno nunca sabe.
 
Ya intente con varios micros en inculos con varios protos, el programa oroginal era el sentido de giro de un motor, este si me corrio y todo pero lo lleve a la escuela y asi como si nada dejo de funcionar. En primera instancia pense en el micro y lo reemplaze por otro, como con el programa del motor no hacia el cambio decidi cargarle otro, que es solo de prender y apagar el led, pero tampoco sirve, no c que sea.
 
Ya intente con varios micros en inculos con varios protos, el programa oroginal era el sentido de giro de un motor, este si me corrio y todo pero lo lleve a la escuela y asi como si nada dejo de funcionar. En primera instancia pense en el micro y lo reemplaze por otro, como con el programa del motor no hacia el cambio decidi cargarle otro, que es solo de prender y apagar el led, pero tampoco sirve, no c que sea.

si cargaste esos 2 programas y no andan tal vez sea el programa con que grabas el pic, o el quemador o el puerto de tu compu. pues no le veo mas salida a ese lio.
 
Saludos, un gusto escribir una vez mas aca, soy nuevo en esto de las transmisiones vía radiofrecuencia, les comento que estoy realizando un proyecto con un sensor de temperatura cuya lectura se visualizará en un lcd via rf.

En el siguiente circuito que adjunto uso el conversor a/d del pic16f877a para visualizar la lectura en en lcd1 de ese pic y funciona correctamente, pero cuando deseo visualizarlo en el receptor (pic 16f628a) no me muestra lectura alguna, para la transmisión uso unos modulos a 315Mhz (adjunto el datasheet) y el codificador y decodificador ht12e/ht12d, he comprobado que el modulo funciona correctamente he probado transmitiendo 1 bit y efectivamente recibe correctamente el dato que envio, mi problema es el siguiente:
Conecto el pin 39 del pic 16f877a a mi entrada del encoder(pin10), conecto la salida del decoder (pin10) al pin asignado para la recepcion de datos porta.0 del pic 16f628a(pin17), pero no logro visualizar el dato que envio , y bueno en ese mismo instante para comprobar nuevamente el estado de transmisión pruebo transmitiendo bits y efectivamente hay transmision y recepción sin embargo no logro visualizar el dato que necesito.
La salida del del pin 39 del pic 16f877a corresponde al dato que almaceno de mi conversor a/d para luego transmitirlo, he probado la transmisión directa usando un cable para unir el pin 39 del 16f877a y el pin 17 del 16f628a y funciona, bueno de esa forma logro visualizar la lectura del dato que deseo enviar por lo que creo el programa funciona correctamente.
Alguna sugerencia para solucionar mi problema seria bien recibida y muy agradecida.

Adjunto el esquema que realice en caso sirva de algo para su ilustración en pdf.

Incluyo fragmentos del programa que uso, esta hecho en microcode studio, tal vez estoy omitiendo algo o cometo un error y esa sea la razón por la cual no funcione.
TX:
Código:
DEFINE osc 4
DEFINE      LCD_BITS 4
define      LCD_DREG        PORTB           ;bit de datos del LCD empezando
define      LCD_DBIT        0               ;por B.0. B.1, B.2, B.3
define      LCD_RSREG       PORTB           ;bit de registro del LCD conectar
define      LCD_RSBIT       5               ;en el puerto B.5
pause 2000
define      LCD_EREG        PORTB           ;bit de enable conectar en el
define      LCD_EBIT        4               ;puerto B.4

define      ADC_BITS        8               ;Fije el número de BITS del resultado (5,8,10)
define      ADC_CLOCK       3               ;Fije EL CLOCK (rc=3)
define      ADC_SAMPLEUS    50              ;Fije el tiempo de muestreo en Us
                                            ;ADC_SAMPLEUS es el número de microsegundos que el programa
                                            ;espera entre fijar el canal y comenzar la conversión analógica/digital
TRISA= 1                                   ;el puerto A es de entrada
ADCON1= %00001110                           ;el puerto A.0 es conversor los demás digitales
TRISB= 0                                    ;el puerto b es salida da datos
dato        var word                        ;crear variable dato para guardar
tempbaj     var byte
tempalt     var byte
x           var byte


releF   var portD.2
releC   var portD.3
led     var portD.4
enter   var portD.5
bsubir  var portD.6
bbajar  var portD.7

EEPROM 0,[20,26]                            ;contenido inicial de la EEPROM
[B]Symbol N2400 = 4[/B]

inicio:                                     ;3 parpadeos del led que indica que funciona
for x =1 to 3
    high led
    pause 200
    low led
    pause 200
next

READ 0,tempbaj                              ;lee la EEPROM 0 y lo guarda en tempbaj
read 1,tempalt                              ;lee la EEPROM 1 y lo guarda en tempalt

sensar:
adcin 0, dato                               ;lee el canal 0(A0) y guarda en dato
serout PORTB.6, N2400, [dato]               ;Envía los datos por RB0 
                                
LCDOUT $FE,1,"T.mi T.actu T.ma"             ;limpia el LCD y muestra el texto
            dato=dato/2                             ;el dato dividir para 2
LCDout $FE,$c6,dec dato,"ºC"                ;muestra el decimal de dato
LCDout $FE,$c0,dec tempbaj,"ºC"             ;muestra el decimal de tempbaj
LCDout $FE,$cc,dec tempalt,"ºC"             ;muestra el decimal de tempalt

for x =1 to 50                              ;repetir 50 veces
if enter =0 then grabarla
pause 10
next
if dato<tempbaj then calentar               ;si dato es <tempbaj ir a calentar
if dato>tempalt then enfriar                ;si dato es >tempalt ir a enfriar
low relec: low releF
goto sensar

enfriar:
HIGH releF: low releC
goto sensar

calentar:
HIGH releC: low releF
goto sensar

grabarla:
gosub soltar

grabar1:
LCDOUT $fe, 1,"Programar Temp."
lcdout $fe,$c0,"baja=",dec tempbaj,"ºC"
pause 100
if bbajar =0 then restar1

if bsubir =0 then sumar1

if enter =0 then grabarA

goto grabar1

restar1:
gosub soltar                                ;programa antirebote de tecla
if tempbaj<1 then grabar1
tempbaj=tempbaj-1

goto grabar1

sumar1:
gosub soltar
if tempbaj>40 then grabar1
tempbaj=tempbaj+1

goto grabar1

grabarA:
gosub soltar
write 0,tempbaj                             ;escribir en la direcciom 0 de la EEPROM

grabar2:
LCDOUT $fe, 1,"Programar Temp."
LCDOUT $fe,$c0,"alta=",dec tempalt,"ºC"
pause 100

if bbajar= 0 then restar2
if bsubir= 0 then sumar2
if enter= 0  then grabarB
goto grabar2

restar2:
gosub soltar
if tempalt<5 then grabar2
tempalt=tempalt-1
goto grabar2

sumar2:
gosub soltar
if tempalt>50 then grabar2
tempalt=tempalt+1
goto grabar2

grabarB:
gosub soltar
write 1,tempalt                             ;escribir en la direccion 1 de la EEPROM
goto inicio

soltar                                      ;antirebote de tecla 
HIGH led
pause 150
low led

soltar2:
if bbajar= 0 then soltar2
if bsubir= 0 then soltar2
if enter= 0  then soltar2
pause 100
return

end
RX:
Código:
 DEFINE osc 4
define      LCD_DREG        PORTB           ;bit de datos del LCD empezando
define      LCD_DBIT        0               ;por B.0. B.1, B.2, B.3
define      LCD_RSREG       PORTB           ;bit de registro del LCD conectar
define      LCD_RSBIT       5               ;en el puerto B.5
pause 2000
define      LCD_EREG        PORTB           ;bit de enable conectar en el
define      LCD_EBIT        4               ;puerto B.4
DEFINE      LCD_BITS 4

cmcon= 7
TRISB= 0


dato        var word                        ;crear variable dato para guardar
x           var byte
led         var portB.6
                            
[B] Symbol N2400 = 4 [/B] 

inicio:

for x =1 to 3                               ;3 parpadeos del led que indica que funciona
    high led
    pause 200
    low led
    pause 200
next

sensar:
serin PORTA.0, N2400, dato
LCDOUT $FE,1,"Temp Actual"         ;limpia el LCD y muestra el texto
        dato=dato/2                           ;el dato dividir para 2
LCDout $FE,$c6,dec dato,"ºC"

end
datahsheet modulo:
http://electronicahifi.com/pdf/212st-rx04-a.pdf

p.d.1. Subiré el esquemático en pdf para que tengan una visualización del circuito.
p.d.2. Pido disculpas por el post en la sección que no correspondía, en realidad por el apuro no pude ver que estaba abierto este topic sobre la programación en pbp
 

Adjuntos

  • circuito.pdf
    86.9 KB · Visitas: 203
  • Prueba Termometro Rf.rar
    25.6 KB · Visitas: 202
Última edición:
Zankoku...
podrías subir el archivo DSN de proteus, para hacerle unas pruebas...
yo creo, por lo que dices son lo modulos... pero me gustaria confirmarlo....
 
Zankoku...
podrías subir el archivo DSN de proteus, para hacerle unas pruebas...
yo creo, por lo que dices son lo modulos... pero me gustaria confirmarlo....

acabo de subir el archivo de proteus esta bajo la version 7.7 sp2.

p.d.1 En la simulacion que adjunté uní con un cable los pines de la comunicación, en este caso use un dato invertido N2400= 4 para que me muestre el dato, de esa forma el programa corre bien, si uso un dato real con T2400= 0 me muestra el doble del valor(también intente enviar la información a 1200, 9600 pero no funcionó) bueno en la práctica física hasta donde recuerdo me es indiferente la forma de enviar el dato, eso te lo aclararé en un par de horas lo que pasa es que tengo que ir a estudiar y me gana el tiempo :cry:

p.d.2 De paso aprovecho para preguntarte si influye en algo la forma en la que envio el dato usando los módulos que tengo, en realidad intente enviar en ambos casos, con el dato invertido y luego con el dato verdadero sin obtener resulatado alguno.
 
Última edición:
intenta esto...
en el serout del TX...

serout PORTB.6, N2400, [dato,10]

y en RX...

Código:
 DEFINE osc 4
define      LCD_DREG        PORTB           ;bit de datos del LCD empezando
define      LCD_DBIT        0               ;por B.0. B.1, B.2, B.3
define      LCD_RSREG       PORTB           ;bit de registro del LCD conectar
define      LCD_RSBIT       5               ;en el puerto B.5
pause 2000
define      LCD_EREG        PORTB           ;bit de enable conectar en el
define      LCD_EBIT        4               ;puerto B.4
DEFINE      LCD_BITS 4

cmcon= 7
TRISB= 0


dato        var word                        ;crear variable dato para guardar
x           var byte
led         var portB.6
                            
 Symbol N2400 = 4  

inicio:

for x =1 to 3                               ;3 parpadeos del led que indica que funciona
    high led
    pause 200
    low led
    pause 200
next

sensar:
[B]serin PORTA.0, N2400, [10],dato[/B]
LCDOUT $FE,1,"Temp Actual"         ;limpia el LCD y muestra el texto
        dato=dato/2                           ;el dato dividir para 2
LCDout $FE,$c6,dec dato,"ºC"
[B]Goto Sensar[/B]              [B];       <-hacer bucle[/B]
end
 
intenta esto...
en el serout del TX...

serout PORTB.6, N2400, [dato,10]

y en RX...

Código:
 DEFINE osc 4
define      LCD_DREG        PORTB           ;bit de datos del LCD empezando
define      LCD_DBIT        0               ;por B.0. B.1, B.2, B.3
define      LCD_RSREG       PORTB           ;bit de registro del LCD conectar
define      LCD_RSBIT       5               ;en el puerto B.5
pause 2000
define      LCD_EREG        PORTB           ;bit de enable conectar en el
define      LCD_EBIT        4               ;puerto B.4
DEFINE      LCD_BITS 4

cmcon= 7
TRISB= 0


dato        var word                        ;crear variable dato para guardar
x           var byte
led         var portB.6
                            
 Symbol N2400 = 4  

inicio:

for x =1 to 3                               ;3 parpadeos del led que indica que funciona
    high led
    pause 200
    low led
    pause 200
next

sensar:
[B]serin PORTA.0, N2400, [10],dato[/B]
LCDOUT $FE,1,"Temp Actual"         ;limpia el LCD y muestra el texto
        dato=dato/2                           ;el dato dividir para 2
LCDout $FE,$c6,dec dato,"ºC"
[B]Goto Sensar[/B]              [B];       <-hacer bucle[/B]
end
hola gracias por la atención prestada, te comento que hice el cambio pero no obtuve aun resultado favorables :eek: , seguiré intentando buscar el método para que transmita.
Por cierto el circuto que implemente para el th12e/d es el siguiente:

http://axxon.com.ar/rob/Prueba_RFLink.htm
 
Mmmm.. algo anda raro con el acople que pretendes hacer.... los ht son codificadores en paralelo a 8bit no seriales...
eso es mas sencillo... busca un tema de fernandoe sobre esos codificadores... si no lo encuentras... postea...
 
Mmmm.. algo anda raro con el acople que pretendes hacer.... los ht son codificadores en paralelo a 8bit no seriales...
eso es mas sencillo... busca un tema de fernandoe sobre esos codificadores... si no lo encuentras... postea...
uhmmm sry si t molesto una vez mas pero podrías explicarme un poco mas referente a eso?, estuve buscando pero como que tengo aún muchas dudas, te comento, mi idea tal vez errónea era cojer el dato que había almacenado en el pin39 del 16f877a proveniente de mi conversor a/d, ese pin conectarlo a uno de los pines de entrada de datos del ht12e y bueno transmitirlos, ahora que lo pienso bien, creo que ese acople que pretendo hacer puede ser erróneo.
De no ser mucha molestia, por favor podrías recomendarme que tipo de acople y con que integrado lo podría hacer?
 
Holaq D@rio: cogí el archivo que has dejado sobre el tacómetro lo probe en el proteus y veo que simula muy bien el programa, yo no se lo que me pasa, pero también tengo hecho un tacómetro y el cicuito en el board me funciona perfectamente, pero no puedo simularlo, no lo veo en el LCD veo que las salidas del micro se activan pero el LCD está como muerto encendido pero no se ve nada. A que puede ser debido esto? .
hola gente del foro.:)
bueno, aca estoy de nuevo, pidiendo vuestra ayuda jeje:D... no sin antes, dejar un pequeño aportito a cambio. se trata de un tacometro para motores DC como los de aeromodelismo. esta probado en proteus y no se cual es el limite de RPMs que puede medir.
ahora pasemos a mi duda... bueno, pasa que no tengo por ahora el display de este proyecto y me gustaria hacerlo ya que, me seria de gran utilidad. resulta que tengo un lcd de un nokia 1100 y me gustaria adaptarlo para este proyecto, utilizando como lenguaje de programacion, picbasic. tengo el pinout de este display y he visto en el foro como se conecta, pero lo que no se, es como cambiar la comunicacion entre el pic y el display nokia
ya que, en este tacometro, la comunicacion es en paralelo y el display nokia, es serie sincronico. ¿acaso se podria usar la instruccion SHIFTOUT para controlarlo? ustedes ¿que opinan? ¿como puedo hacer para adaptarlo a mi diseño? gracias.
saludosss

Ver el archivo adjunto 39372
 
alex, me adelanto...cualquier cosa Dario corrigeme :D

para poder subir archivos deves ir a Avanzado, de alli vas a adjuntar archivo y te aparecera una ventana con las opciones de archivos que puedes subir y el limite en capacidad
lo buscas, lo subes y cierras la ventana, luego pones enviar mensaje y listo! :)
 
Hola d@rio: soy Alex como te dije, probé el programa del tacómetro en el Proteus y funciona perfectamente, monté este circuito en un board, le puse un generador de frecuencia a 20 Hz y esto no funciona como debiera, el resultado tendría que ser en LCD de 1200 rpm y esto no sale igual, sale como dividido por 10 y la lectura no es estable. Tu has probado este circuito en board?. Sobre lo que te comenté, sobre que no funcionaban los programas en el Proteus la solución biene en poner una resistencia entre el "RS" del LCD y el +5, de esta manera sale la lectura por el Lcd y si no la pongo no se lee?:confused:. Bueno ya me contareis algo. Un saludo.
 
hola alex.
la verdad que por falta de un lcd, no he tenido la oportunidad de probar el tacometro en la realidad, al circuito lo saque de un libro de pbasic que tengo, y le modifique las salidas porque no me funcionaba asi con proteus. te paso la imagen del diseño completo porque lleva una etapa de entrada con optoacoplador que no esta en el circuito anterior, probalo asi. NOTA: para que funcione como el de esta imagen, hay que modificar el programa
Sobre lo que te comenté, sobre que no funcionaban los programas en el Proteus la solución biene en poner una resistencia entre el "RS" del LCD y el +5, de esta manera sale la lectura
pues si te fijas en el circuito, el pin rs del lcd, va conectado al RB1 del micro.
saludosss
taco lcd.JPG
 
Hola D@ario: es el mismo circuito que el mío, yo tambien tengo este libro desde hace una semana, yo probé los circuitos en el proteus y no funcionabann, y como te dige, si pones una resistencia de 4k7 ó de 10k entre el "RS" y el +5 entonces funciona en el Proteus. Te preguntaba a tí y de paso a alguien que lo quiera probar en un board haber si le da las lecturas que a mí me dan. Si pongo un generador a 20 hz, en el display tendría que leerse 1200 RPM y sin embargo se lee 120 RPM y varia continuamente de valores. Quisiera saber el porqué pasa esto. Un saludo y gracias.
 
Atrás
Arriba