Curso de programación de PIC en PICBasic Pro

ok ya avance algo al respecto y vi cual es el que mas me sirve, revise un poco y de causalidad encontre un tuto que colocaron hace poco de las señales rc5 de phillips, de un control remoto, segun tengo entendido se esta estandarizando, ahora la cuestion es que quisiera hacerlo mas sencillo, generando yo un pulso de lectura el cual va hacer una señal infraroja preliminar a la señal a decodificar, es muy parecido al proyecto que comente del rc5, pero en este caso el tiempo no es critico ya que la idea es hacer tanto el recepto como el emisor para este proyecto y de esta manera hacerlo sin necesidad de una frecuencia standar si no a un tiempo que pueda ser cambiado, de esta forma tambien se evita la cuestion de interferir con otros aparator operados por infrarojo, estube leyendo un poco en una revista de elektor, donde explican el por que la existencia del control remoto y como ha cambiado la vida humana y como afecta la economica muy interesante no sabia que estan limitados a un control remoto ya que aun no han logrado sustituir este artefacto y por los momentos las encuestas dicen que se mantendra por mucho. en fin y volviendo al tema, pretendo hacer dos modulos un emisor y X numero de receptores de tal manera que pueda enviar una señal y cuaquiera pueda recibirla y decodificarla y si la señal pertenece al receptor correspondiente entonces este activa un led, motor, etc...como señal de recibido, es tipo localizador, por infrarojo, debido a que es sencillo no creo que me genere muchos dolores de cabeza...no elegi rf, porque es mucho mas circuiteria y porque realize hace un tiempo un sistema de encender un bombillo por infrarojo y el recepto era tam bueno que aun apuntando hacia el lado contrario del recepto este activo el circuito prediendo el bombillo y la distancia eran unos 5 metro aproximadamente por esto justifico el que sea con infrarojo y no por rf, en un momento subo el programa en picbasic para que lo vean...saludosss...
 
acabo de ver el link de los rfpic la primer vez que vi el post... no lo vi :D ... se ven complejos...
yo también me inclinaría por el IR, suena mas económico, digo por aquello de que cada receptor tendria su circuito independiente...
 
si, una pregunta estoy usando "COUNT" para contar los pulsos en una entrada, ahora como el count no hay un comando con el cual yo pueda enviar un numero por una salida del pic, por ejemplo algo asi:

for porta.0 = 0 to 3 step 1 ' estoy serviria
o hay algo mas simple
vi una que es el pulsout, pero envia un solo pulso por un periodo de tiempo...que me recomiendas...
 
realice lo que me dijiste con el pwm pero me envia como 132 aproximadamnete con 1 circlo te coloco el programa para que me digas si hice algo mal, ah y por cierto tome parte de uno que habian echo para un teclado matrixial y lo adapte.



@ DEVICE pic16F628
@ DEVICE INTRC_OSC_NOCLKOUT ' Opción del Osc Interno
@ DEVICE WDT_Off ' Watchdog Timer ON
@ DEVICE PWRT_Off ' Power-On Timer
@ DEVICE BOD_ON
@ DEVICE MCLR_OFF ' Master Clear Opción interno
@ DEVICE LVP_OFF ' Bajo voltaje de programación
@ DEVICE CPD_OFF ' Protección del código de memoria OFF
@ DEVICE PROTECT_OFF' protección de código OFF

Define Osc 4
CMCON=7


A var word

COLUMNA1 VAR PORTB.0
COLUMNA2 VAR PORTA.6
COLUMNA3 VAR PORTA.7

FILA1 VAR PORTA.0
FILA2 VAR PORTA.1
FILA3 VAR PORTA.2
FILA4 VAR PORTA.3

clear

Inicio:
TrisA=%00001111
TrisB=%00001000
PORTA = %00000000
PORTB = %00000000
Call Teclado
GOTO INICIO
END


Teclado:

high COLUMNA1 ' Columna 1 = 1
If FILA1 Then gosub S1 ' ' tecla "1"
If FILA2 Then gosub S4 ' tecla "4"
If FILA3 Then gosub S7 ' tecla "7"
If FILA4 Then gosub S10 ' tecla "*"
low COLUMNA1 ' Columna 1 = 0
high COLUMNA2 ' Columna 2 = 1
If FILA1 Then gosub S2 ' tecla "2"
If FILA2 Then gosub S5 ' tecla "5"
If FILA3 Then gosub S8 ' tecla "8"
If FILA4 Then gosub S11 ' tecla "0"
low COLUMNA2 ' Columna 2 = 0
high COLUMNA3 ' Columna 3 = 1
If FILA1 Then gosub S3 ' tecla "3"
If FILA2 Then gosub S6 ' tecla "6"
If FILA3 Then gosub S9 ' tecla "9"
If FILA4 Then gosub S12 ' tecla "#"
low COLUMNA3 ' Columna 3 = 0
RETURN
S1:
PORTB.2 = 1 'señal de bandera para empezar a leer los ciclos, activa el receptor
PAUSE 250 'se suma en la espera al receptor con los otros 250ms al final y
PORTB.2 = 0 ' depues de 500ms es que empieza el count a contar los pulsos.
PAUSE 250
PWM PORTB.2,127,1 'cada ciclo ocurre aprox. cada 5ms, segun manual
PORTB.2 = 0
GOTO TECLADO

S2:
S3:
S4:
S5:
S6:
S7:
S8:
S9:
S10:
S11:
S12:


por cierto aprovecho para mostrar el circuito que estaba haciendo y que me ayudaron por aca el del minutero para que vean como quedo...saludosss
 

Adjuntos

  • 15102010156.jpg
    15102010156.jpg
    54.3 KB · Visitas: 81
  • 15102010159.jpg
    15102010159.jpg
    54.4 KB · Visitas: 56
  • 15102010160.jpg
    15102010160.jpg
    37.1 KB · Visitas: 45
  • 15102010162.jpg
    15102010162.jpg
    70.4 KB · Visitas: 64
Oye reyvilla

dos comentarios antes de continuar....
primero.- el minutero quedo muy bien... y te podria recomendar que le pongas un teclado por la cara... es decir... hay quienes imprimen un acetato para impresora de tinta y por debajo ponen una hoja en blannco y se ven bastante bien esteticamente.... o algo asi, aqui o no recuerdo donde vi el proceso...

Segundo... estaba analizando el codigo y creo que no entiendo muy bien como va a ser el harware...
o sea que segun veo ese algoritmo podría confundir a los receptores, creo que si el receptor fuera otro micro lo adecuado seria con el serin y el serout o tu que opinas???

tienes ya preparado algun esquema???...
 
Última edición:
te adjunto la imagen donde se observa, primero 1 y despues 0 cada uno dura 500ms y luego un tren de pulso que se supone sea el ciclo del pwm...

gracias por lo del minutero tomare en cuenta tu recomendacion, con respecto a sistema pretendo hacerlo lo mas sencillo posible, yo utilice el serin y el serout pero tengo muchas dudas al respecto, ya que es un comando complejo, bueno para mi, pero si tu me dices como puedo usarlo te agradeceria un millon de veces. Lei el manual y habla de codigo ascii y velocidades?

lei nuevamente el manual y con respecto al serout me dice esto:

SEROUT Pin,Mode,[Item[,Item...}]
Envía uno ó más Items a Pin , en formato standard asincrónico usando 8 bits de datos , sin paridad y 1 stop bit (8N1) .SEROUT es similar al comando Serout de BS1 .Pin es automáticamente colocado como
salida . Pin puede ser una constante , 0 - 15 , ó una variable que contenga un número de 0-15 (p.ej. B0) ó
un número de Pin (p.ej. PORTA.0)
Los nombres Mode (p.ej. T2400) están definidos en el archivo MODEDEFS.BAS .
Para usarlos ,agregue la línea :
Include "modedefs.bas"
al comienzo de su programa PBP .
BS1DEFS.BAS y BS2DEFS.BAS ya incluyen MODEDEFS.BAS . No lo incluya ,si ya está usando uno
de ellos .Los números Mode pueden ser usados sin incluir este archivo .

No entiendo "sin paridad y 1 stop bit (8N1)"...?
lo demas si, ya inclui el archivo y todo solo falta desifrar el como utilizarlo?​
 

Adjuntos

  • Dibujo.jpg
    Dibujo.jpg
    19.6 KB · Visitas: 27
Última edición:
Saludos,

Buenas noches amigo, estoy viendo toda tu informacion y veo que manejas muy bien el picbasic, actualmente estoy estudiando ese lenguaje.

Tengo una duda para ver si me podrias ayudar.

Estoy trabajando con el formato SERIN pero quiero recibir varios datos y que me realize una rutina, ejemplo:

* cuando envie la letra A por medio de la pc el pic lo recibe y realice una secuencia de efectos con led

* cuando envie la letra B por medio de la pc el pic lo recibe y realice una secuencia de efectos con led

Y asi susecivamente ya lo probe simulado en proteus y con el Virtual Serial Port Driver y funciona bien pero tengo envia una letra por letra.

hasta alli todo bien, pero cunado envio AB juntos solo me reconoce una sola letra.

La idea es si escribo en la pc ABCD el pic lo reconosca y realice la secuancia de efectos correspondiente a esas letras y se mantega esa secuencia hasta que envie otra letra.

Hasta ahorita solo tengo esto: USANDO PIC 16F917
INCLUDE "MODEDEFS.BAS"
DEFINE OSC 4
DEFINE LCD_DREG PORTC
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTC
DEFINE LCD_RSBIT 1
DEFINE LCD_EREG PORTC
DEFINE LCD_EBIT 2
DATAS VAR BYTE

LCDOUT $FE,1,"LCD LISTO"
PAUSE 1000
LCDOUT $FE,1

INICIO:
SERIN PORTB.0,T9600,DATAS
LCDOUT, DATAS
if datas="A" then A
if datas="B" then B
if datas="C" then C
GOTO INICIO

A:
high portd.0
pause 250
low portd.0
pause 250
GOTO INICIO
B:
high portd.1
pause 250
low portd.1
pause 250
GOTO INICIO
C:
high portd.2
pause 250
low portd.2
pause 250
GOTO INICIO

END
 
crea una variable tipo word que contenga la palabra o letras que estes escribiendo y que lo guarde temporalmente en la eeprom y que a su vez borre, seria como un tipo de indexacion, vas guardando en la pila o stack, de manera que tengas una cierta cantidad de letras para escribir y luego empiece a reemplazar las primeras que se introdujeron...por ejemplo...saludos...

ahora yo tengo una duda eso que tu haces de pc a pic yo puedo hacerlo de pic a pic.....?

les adjunto el como estoy simulando todo...
 

Adjuntos

  • Dibujo.gif
    Dibujo.gif
    18.8 KB · Visitas: 91
Última edición:
Hola que tal, acabo de entrar a este rollo del PWM, es interesante, ya fabriique mis programa para la comunicacion en serie.
Lo que tengo que hacer es lo siguiente.
Aumentar o disminuir la velocidad del motor con el PWM, a traves de una comunicacion serial, es decir cuando el usuario mande la letra "A" la velocidad del motor debe aumentar y si mando la letra "D" la velocidad del motor disminuye.
Hoy lo realice en clase y lo unico que logre es que el motor gire a su velocidad maximan, no se porque, pero al momento de establecer la comunicacion y mandar la letra "A" un led prende y el motor empieza a girar a todo lo que da. Además de que si mando otra letra este ya no hace nada tengo que cortar la corriente para resetear el PIC.
Si no es mucha molestia aqui les dejo mis dos programasy haber si me puenden ayudar.
PD:Algun programa para simular la comunicacion serial? uso matlab y programo en Pbasic(microcode)
salu2
 

Adjuntos

  • PWM.rar
    730 bytes · Visitas: 142
Reyvilla

mira este a ver si lo que tienes es mas o menos lo mismo...
tiene un detalle que todavia no logro solucionar pero ahi va... presionas la tecla 1 (superior izquierda)
 

Adjuntos

  • Mando.rar
    37.8 KB · Visitas: 171
en eso estaba batallando un poco jejeje..

si le pones en el serout el # a una variable lo convierte el numero a ascii
y al ponerlo en el serin el # la variable la convierte de ascii a numero...

el parecer el serial lo manda en ascii...

no se si te fijaste en el error aca tengo que presionar dos veces para que se active o desactive...
 
ok miremos esto un momento porque no entiendo a que se refiere un tal "LF" este es el manual pbp no se si tu lo tienes...

Aunque los chips convertidores de nivel RS-232 son comunes y baratos, gracias a la implementación de corriente RS-232 y las excelentes especificaciones de I/O del microPIC , no se requieren convertidores de nivel en muchas aplicaciones . Se puede usar TTL invertido ( N300 ...N9600 ) .Se sugiere el uso de un resistor limitador de corriente (se supone que RS-232 es tolerante a los cortocircuitos ). SEROUT 0,N2400,[#B0,10] ´ envía el valor ASCII de B0 ,seguido por un LF al pin 0 , en forma serial​


con repespecto a LF es un line feed, buscando y buscando lo encontre pero aun no lo entiendo, es un avance de linea, aunque leyendo un poco mas ese 10 puede cambiar o se puede quitar, ahora si no quiero enviar un asscii si no un binario?
 
Última edición:
LF es LineFeed o avance de carro o linea es el 10 en codigo ascii pero no es necesario creo deja intentarlo, al igual que no es necesario el rs232...
en pablin hay un amisor y un receptor IR... ya lo haz visto???
 
no he visto el de pablin es con pic y en picbasic pro?

bueno eso del enviar en binario lo decia por que vi el serout2 que permite mas cosas como enviar un codigo binario, pero si no se puede sera el serout.
 
Última edición:
ya verifique el avance de carro y ya funciona ok...
la linea del serout es asi...

serout puls,T9600,["A",#ID,10]

lo de pablin es solo el emisor y el receptor que podriamos acoplar al pic que estamos programando...
 
si lo probe y funciona a la primera gracias, ahora sale un 65A en el data terminal no deberia ser una A?

ya vi no se si es normal, pero cambie la letra A por B y ahora sale 66B
y ya volvi a chequear y si es normal busque una tabla ascii y la letra a es el renglon 65 y la b pertenece al reglon 66
 
Última edición:
Atrás
Arriba