Curso de programación de PIC en PICBasic Pro

D@rio

Mirando una traducción de la ayuda del PBP en http://www.todopic.com.ar/pbp_sp.html encontre una función de "Valor Absoluto" que es perfecta para el programa de lectura del Gyro, te adjunto la sección de la sub rutina giro:

Código:
'#=#=#=#=#=#=#=#=#=#=#=#=#=# 'enciendo el signo y acomodo el Comp. a 2 
giro: 
  sign=1                     'lo coloco apagado por defecto 
  if numero > 32768 then     'verifico si gira a Derecha ó Izquierda 
  sign=0                     'lo enciendo por que es giro a la Derecha 
'#=#=#=#=#=#=#=#=#=#=#=# Rutina en elaboracion #=#=#=#=#=#=#=#=#=#=#=#=#=#=# 
  [B][COLOR=red]numero = ABS numero[/COLOR][/B]        'Realizo el calculo y acomodo a los limites   # 
  pauseus 10                 'de las variables el "Complemento a 2"        # 
  'numero = 32767 - numero   'con una pausa de 10uSeg.                     # 
'#=#=#=#=#=#=#=#=#=#=#=# Rutina en elaboracion #=#=#=#=#=#=#=#=#=#=#=#=#=#=# 
  else 
  sign=1                     'lo mantengo apagado por giro a Izquierda 
  endif 
  return 
'#=#=#=#=#=#=#=#=#=#=#=#=#=#

No he quitado la resta 'numero = 32767 - numero dado que no se aun si altera algo por no haber podido probar la función ABS (Absoluto). La información en la página de MeLabs (http://melabs.com/resources/pbpmanual/4_0.htm#4174) pareciera indicarme ser lo que se necesitaba y puede ser que hasta se podrian quitar algunas líneas de código, sera cuestión de realizar pruebas.



Saludos Serranos, JuanKa.-

hola juanka, te cuento que he estado bastante ocupado en mi taller estos dias y por eso he tenido que dejar un poco de lado el desarrollo del proyecto, espero desocuparme un poco este fin de semana y asi poder seguir experimentando. de todas formas, mañana me hago un tiempito para probar el codigo y te cuento que sucede.
PD: (por el saludo que enviaste deduzco que ya andas por estos pagos y no precisamente por la ciudad jeje...
saludos y que disfrutes tus dias en mi cordoba querida :apreton: (y);) )
 
Gracias muchachos por sus respuestas... En la uni vi comunicaciones y algo tengo presente vagamente dentro de la cabeza, pero digo vagamente ya que yo segui la orientacion de automatizacion y control y en lo que fue mi trabajo, fue casi muy poco lo que aplique de comunicaciones por lo tanto hay cosas que quedan en el camino...

En FSK, bit y baudios tienen directa relación (1200baudios - 1200 bps)
El Baudio es audio ...
Un baudio = Un ciclo por segundo...
El bps es un bit por segundo; Con esto tenemos que para transmitir 4 bits, se requieren 4 segundos o mejor dicho, se requieren 4 ciclos...una eternidad
En PSK se pueden meter hasta 4 bits en un ciclo por segundo ya que variando cada 90 grados la fase de la señal manda sobre la portadora un bit; Osea, por segundo tendriamos 9600bps.
Tal como comentas, mas de 1200 baudios en FSK no se pueden obtener, pero tratandose de tan solo mostrar el estado logico de una barrera fotoelectrica, con dos bits me alcanza y sobra, osea que FSK es lo que quiero encarar.
Se me habia pasado por la cabeza de transmitir en decimal (0-255) y despues pasarlo a binario,pero esto es mas sencillo, ya que como comente anteriormente, solo necesito tan solo 1 bit para activar el hardware... Lo que podria hacer, en el caso de querer activar mas de una funcion y para decodificarlos sin confusiones, es emplear una tabla de frecuencias para cada equipo y listo...De ultima, si llegaria a necesitar mas bits, intentaria implementar NRZI, que es un metodo de codificacion similar, pero con la variante que en la codificación NRZI la información depende del cambio de estado de la señal, donde el bit 1 se representa por un no cambio del estado de la señal y el bit 0 se representa por un cambio en la señal, de esta manera varios bit 0 seguidos se representaría por una señal oscilante entre estado alto (1) y nivel bajo (0) con la frecuencia igual a la tasa de transferencia, es decir 1200 bps para AX.25, y varios bits 1 seguidos se representaría como una señal que no cambia su estado en el tiempo siendo continuamente alto (1) o bajo (0).

1.JPG

Partiendo de aca, ahi entonces la manera que tendria de decodificar esta señal con el micro podria estar ligada por una interrupcion por timer cuando detecte el tono; no se si llegaria a leer un byte, pero calculo que 4 bits si...
FSK, para los que estan interesados en el tema y reflotando lo que comento el amigo; Implementa los unos y los ceros con dos tonos de audio (un tono para los 1 y otro tono para los ceros).

2.JPG

Mientras que estos tonos esten dentro del espectro de frecuencias audibles por el handie que recepcione la transmision, el demodulador no va a tener problemas con el reconocimiento de los 1 y 0.El ancho del canal no seria un problema, siempre y cuando la amplitud de audio transmitida por el equipo transmisor no se desvie mucho de la frecuencia inicial.
Es ahi donde parte mi planteo estupido anteriormente, "el de la regulacion de la ganancia del volumen", dado que no se en que luna estaba cuando escribi eso, ya que supuse (creo) en ese momento un concepto inexistente que no tiene nada que ver con lo que es la realidad...
Osea, supongo que lo que se me paso por la cabeza en ese momento y lo escribi directamente sin pensar, fue que si tomamos el ejemplo de hablar a los gritos por el mic y nosotros movemos para arriba o para abajo 5Khz, vamos a notar que tenemos señal plena; Totalmente distinto, a que si hablaramos en voz baja y notamos que al subir o bajar la transmision es mucho mas angosta...
Bueno, de toda esa bolufrase y deducciones sin sentido que se me pasaron en ese momento, no se por que se me paso por la cabeza que me hiba afectar el ancho de banda, jajaja, si en realidad la intensidad del volumen que tenemos en el modulador, es fija...EN sinteticas palabras, no tiene nada que ver el bodoque del descalibrador de brocula, ya que este tiene chagardel paso izquierdo....
Volviendo al tema central, en un canal de radio, la banda pasante de audio es muy limitada en cuanto al ancho del canal ya que estan creados solo transportar la voz humana. De seguro muchos de nosotros hemos probado crear sonidos con los comandos de PBP... o directamente con FREQOUT; Bueno, todos los sonidos que eran inaudibles,o que no estaban entre las frecuencias de 300Hz y 3200Hz, no pasarian ya que se atenuarian por no pertenecer a ese espectro.
EN FSK, los tonos tienen una frecuencia de 1200 y 2200Hz; En realidad, se puede implementar cualquier frecuencia, pero estas tendrian que tener una separacion importante entre una y otra para que el demodulador no se confunda
Ahi les dejo algo que arme a modo experimental....
 

Adjuntos

  • PruebaR_Paquet.rar
    51.2 KB · Visitas: 113
  • 3.JPG
    3.JPG
    146.3 KB · Visitas: 41
  • 4.JPG
    4.JPG
    138.2 KB · Visitas: 26
Última edición:
Aclaraciones

….. El Baudio es audio .....
Un baudio = Un ciclo por segundo...
El bps es un bit por segundo; Con esto tenemos que para transmitir 4 bits, se requieren 4 segundos o mejor dicho, se requieren 4 ciclos...una eternidad .....
NO es audio, digamos que era la unidad de medida usada en esa época (http://en.wikipedia.org/wiki/Baud) cuando no existían las transmisiones digitales actuales.




.... En PSK se pueden meter hasta 4 bits en un ciclo por segundo ya que variando cada 90 grados la fase de la señal manda sobre la portadora un bit; Osea, por segundo tendriamos 9600bps. .....
Las modulaciones como la PSK (base) y las derivadas QPSK y BPSK son variantes que la necesidad hizo buscar y descubrir para poder transmitir la mayor cantidad de símbolos (bit) usando el menor ancho de banda posible en los sistemas de comunicaciones a larga distancia realizados mediante Radio Enlaces de Alta Capacidad (PDH [1920 canales telefónicos]=140Mb/s; SDH [1890 canales telefónicos]=155Mb/s).
También esta la QAM (Modulación de Amplitud en Cuadratura [http://en.wikipedia.org/wiki/Quadrature_amplitude_modulation]), la gran mayoría de los Sistemas de Radio Enlaces PDH en nuestro país instalados a partir de 1992 trabajaban con modulación 16QAM en la banda centrada en 6,770 GHz. A partir de 1996 se comenzaron a instalar sistemas SDH en 32QAM (una variante de la 64QAM para reducir los errores) usando la misma banda de 6,770 GHz.
A estos tipos de modulaciones se las suele conocer como Modulaciones Vectoriales por que se realiza mejor la analogía de las mismas a un vector rotando sobre su eje y con variaciones de amplitud.




….. Se me habia pasado por la cabeza de transmitir en decimal (0-255) y despues pasarlo a binario,pero esto es mas sencillo, ya que como comente anteriormente, solo necesito tan solo 1 bit para activar el hardware... Lo que podria hacer, en el caso de querer activar mas de una funcion y para decodificarlos sin confusiones, es emplear una tabla de frecuencias para cada equipo y listo...De ultima, si llegaria a necesitar mas bits, intentaria implementar NRZI, que es un metodo de codificacion similar, pero con la variante que en la codificación NRZI la información depende del cambio de estado de la señal, donde el bit 1 se representa por un no cambio del estado de la señal y el bit 0 se representa por un cambio en la señal, de esta manera varios bit 0 seguidos se representaría por una señal oscilante entre estado alto (1) y nivel bajo (0) con la frecuencia igual a la tasa de transferencia, es decir 1200 bps para AX.25, y varios bits 1 seguidos se representaría como una señal que no cambia su estado en el tiempo siendo continuamente alto (1) o bajo (0). .....
La codificación NRZI es solo uno de los “Código de Línea” (http://en.wikipedia.org/wiki/Line_code) existentes, estos códigos han sido necesarios al incrementar las velocidades de las señales digitales a transmitir y sus dos funciones principales son “minimizar el contenido de errores” y “lograr que el valor medio en tensión sobre los cables coaxiales usados en la conexiones de las distintas etapas de los equipos sea prácticamente 0 Volt”.
En un Handy de VHF y con FM no podrás transmitir señales binarias, deberás traducir las mismas a Frecuencias de Audio dentro de la banda pasante de dicho Handy que suele ser entre 300 y 2600 Hz con una desviación de la portadora de FM de ±5 KHz, en cambio las líneas telefónicas tienen un ancho de banda de 300 a 3400 Hz con una banda pasante de ± 0.5 dB en la parte de 600 a 2000 Hz y +0.5 dB/-1.5 dB en ambos extremos de la banda pasante.




….. Tal como comentas, mas de 1200 baudios en FSK no se pueden obtener, pero tratandose de tan solo mostrar el estado logico de una barrera fotoelectrica, con dos bits me alcanza y sobra, osea que FSK es lo que quiero encarar. .....
En este caso básico y dependiendo de las Normas de Seguridad que necesites respetar me cae muy simpático usar el Módem de 1200 Bps (bit x seg.) por que una frecuencia seria igual al símbolo “0” y la otra al “1” logrando mejorar la seguridad.
La forma de implementarlo seria que cuando quieras transmitir un “1” le entregues una frecuencia al Handy y otra con el “0”; si generas las dos frecuencias con el mismo PIC y como la misma será una señal digital deberás usar algún filtro como los usados en las salidas de los reproductores de DVD de manera que la señal aparente ser mas senoidal que cuadrada, por otra parte deberás controlar ó atenuar la amplitud de la misma para no saturar ni sobremodular el Tx de FM.
En el Handy usado en la recepción puedes decodificar ambas señales usando sendos LM567 uno para cada frecuencia y elaborar alguna lógica que te los interprete como corresponde. En los antiguos Multiplex Telegraficos (años 1980 y anteriores) se usaba un “discriminador” realizado con componentes discretos (pasivos y activos) para detectar ambas frecuencias.







D@rio
hola juanka, te cuento que he estado bastante ocupado en mi taller estos dias y por eso he tenido que dejar un poco de lado el desarrollo del proyecto, espero desocuparme un poco este fin de semana y asi poder seguir experimentando. de todas formas, mañana me hago un tiempito para probar el codigo y te cuento que sucede. .....
Todo lo que sea trabajo Bienvenido Sea, antes que la otra frase prefiero decir que "El trabajo dignifica" y a personas como nosotros nos da el dinerillo para investigar :LOL: :LOL: !!!



..... PD: (por el saludo que enviaste deduzco que ya andas por estos pagos y no precisamente por la ciudad jeje...
saludos y que disfrutes tus dias en mi cordoba querida )
Siempre fijo mi base en la Ciudad (Alta Cba), y con paseos (visitas de un día a familiares y amistades) para el laú de Unquillo, Charly Peace Village y hacia Alta Gracia este sábado 31 de Marzo.



Saludos, JuanKa.-



P.D.: Primero me disculpo por la extensión de mi respuesta, luego también me disculpo por el Off Topic que de seguro he generado y si alguien quiere conversar mas al respecto me lo comenta y tratamos de abrir otro thread. Finalmente me disculpo por solo citar las páginas de Wikipedia en Ingles, pero las mismas páginas en castellano siempre omiten información relevante para la cabal comprensión de los temas.
Adoro nuestro idioma pero la experiencia me ha enseñado que siempre es mejor el idioma de origen de los equipos, etc.-
 
Hola Juanka, gracias por refreqar algunos conceptos... mas de los mismo digamos; Osea, la base esta, la tengo... lo que pasa es que ahora que me leo, veo que no supe explicarme bien que es lo que necesito... Ahi probe con dos kenwood el ejemplo que subi anteriormente... lo reforme un poco mas y le di forma para que me reconozca mejor los dos estados (I-0).
El tema esta en como puedo hacer para configurar el tmr0 y cada 600ms me guarde un bit cuando la señal esta en alto... Mi duda esta aca por que anteriormente en PBP no implemente nunca los TMR,por ende el ajuste del prescaler par que no tenga errores...
de 14 pruebas de comunicacion (le puse un pulsador), las 14 se recepcionaron y me funcionaron bien encendiendo un led.... Desde el vamos, eternamente agradecido por tus aportes y quizas, entre todos los trastos que tengo ahi tirados, quizas algo me sirva para futuro (tengo dos BLU-la mitad de un teletipo-FT411 a patadas, de todos quizas arme dos), ya que me puse a leer el enlce que me pasastes y se me desperto el bichito para hacer otras cosas mas.... lo que sigue despues de esto, es mandar imagenes; Lo habia arrancado para otro proposito, pero ahi Dario me desperto y me mostro unos modulos que ya vienen para este proposito sacandome de encima bastante tiempo en lo que seria el desarrollo...
Vos ya jugastes con paquet? has experimentado envio y recepcion de imagenes?
Saludos
 
Torres.Electronico

Hola Juanka, gracias por refreqar algunos conceptos... mas de los mismo digamos; .....
Tu te has dedicado a Automatización y Control y yo he realizado toda mi experiencia en Radio y Telecomunicaciones. Solo lleva un poco más de tiempo cuando no es lo nuestro ;) .



.... quizas algo me sirva para futuro (tengo dos BLU-la mitad de un teletipo-FT411 a patadas, de todos quizas arme dos), .....
En el caso de utilizar la comunicación por BLU deberás tener mayores cuidados debido que ese tipo de modulación suele tener muchos ruidos y es muchísimo más afectada por las interferencias.



.... pero ahi Dario me desperto y me mostro unos modulos que ya vienen para este proposito sacandome de encima bastante tiempo en lo que seria el desarrollo .....
Se que en la Ciudad Autónoma de Bs. As. (la CapiFede), y supongo en el interior solo depende que cuan equipados se encuentren los comercios de electrónica (en Córdoba Muy Bien, doy FE), se consiguen Modulos Tx y Rx Digitales para sistemas de ese tipo en la frecuencia de 432MHz de potencia bastante baja, pero desconocia cual era tu proyecto y cual la distancia para tenerlo bajo control.



..... El tema esta en como puedo hacer para configurar el tmr0 y cada 600ms me guarde un bit cuando la señal esta en alto... Mi duda esta aca por que anteriormente en PBP no implemente nunca los TMR,por ende el ajuste del prescaler par que no tenga errores .....
Ahi lamento no poder ayudarte, aún estoy aprendiendo (por eso sigo tanto este thread) como hacen para programar Uds.

Pero creo que tu mismo te deberías clarificar un poco más tu propio proyecto:
a-) Si lo usas como has dicho hasta ahora, deberás tener siempre transmitiendo un equipo!.
b-) Es tan necesaria la precisión en el tiempo de 600ms o se puede hacer con algún delay con el que también se obtiene buena precisión?.
c-) Que pasa si por algún ruido el µControlador detecta que debe cambiar de estado?, no seria conveniente realizar en el caso de cambios de estado un par de re-lecturas más rapidas interrumpiendo el proceso (programa) que confirmen la operación?.
d-) Puede afectar esa operación de cambio de estado algún riesgo a la vida humana?, ó a bienes materiales?.

Y algunos puntos más que seguro se me escapan en este momento.




..... Vos ya jugastes con paquet? .....
No he jugado ni experimentado con Packet, solo soy un técnico que en sus tiempos libres lee mucho y a quien la internet le permite llegar a leer muchísimo más y con un costo ($$$) muy bajo.



..... has experimentado envio y recepcion de imagenes?
Saludos
Tampoco he experimentado con envio y recepción de señales de video (Televisión de Barrido Lento); pero hay páginas en la Web (extranjeras y de Argentina) que tratan con detalle este tema con equipos de Radio Aficionados. En este momento no lo recuerdo bien, pero creo que hay una página de alguien de la ciudad/localidad de San Nicolas (pcia. Bs As) con muchos detalles. Los modulos no creo que te sirvan para el tema de las imagenes debido a que son de muy baja velocidad.




Saludos, JuanKa.-
 
Buenos días compañeros del foro electrónica soy nuevo y es mi primera inquietud sobre los pic programo en basic quisiera saber si las interrupciones en basic funcionan al 100% ya que he echo un código el cual no me respeta el tiempo que le doy con interrupción la idea es que el led se quede prendido por 10 segundos pero se me apaga antes del tiempo indicado o aveces llega hasta los 7 seg o a diferente tiempos quisiera saber si me podrían orientar acá les dejo el código

Código:
@ Device   PIC16F628A
@ Device   HS_Osc
@ Device   Protect_Off
@ Device   WDT_Off
@ Device   Pwrt_Off
@ Device   MCLR_Off
@ DEvice   BOD_Off
@ Device   LVP_Off  
@ Device   CPD_On
cmcon=7
DEFINE OSC 10

P1          VAR PORTB.0
L1          VAR PORTA.0

I           var byte
Ticks       VAR byte                           
Minute      VAR byte                         
Second      VAR byte 

pause 500 
Minute =0 
Second =0 
Ticks  =0

OPTION_REG = $05               ;  prescaler = 64
ON INTERRUPT GOTO ISR          ; ir a rutina ISR 

if second => 10 then
    l1=0
    second=0
    elseif
if second <10 then
    l1=1
    endif
    endif

INICIO:
  if p1 then
  PAUSE 100
  IF p1 THEN  
  while p1:wend
  toggle l1
  TMR0 = 0 ;inicializa registro TRMO
  INTCON = $A0 ; habilita tiempo de interuupcion
  endif 
  endif
GOTO INICIO

DISABLE
ISR:
Ticks = Ticks + 1
IF Ticks < 61 THEN NoUpdate
Ticks = 0
Second = Second + 1
IF Second => 10 THEN
l1=0
second=0
ENDIF


NoUpdate:
INTCON.2 = 0 ;rehabilitainterrupciones del TRMO
Resume
ENABLE ; 
END
END ; Fin del programa
la idea de este código es que presione yo un button y se encienda o apague el led si en caso se quede encendido que se apague automáticamente después de los 10 seg claro que me gustaría darle mas tiempo pero no logro controlarlo con los 10 seg que le doy de prueba espero me puedan ayudar y si se puede mejorar pues les agradezco mucho



estoy tratando de subir el esquemático pero no logro espero me puedan ayudar
 
Última edición por un moderador:
vi el video que colgastes en el youtube es muy bueno cuando pruebo tu circuito con el codigo no hace lo mismo en el proteus solo prende y apaga el led rojo el verde nunca enciende en verdad el codigo que manejas es muy interesante con respecto al amigo dario que me indicas esta en el mismo tema o es en otro tema el ejemplo del timer
 
el codigo de dario esta en este mismo tema mas atras, y segun creo recordar solo incremento o decremento el prescaler para ajustar el tiempo, yo creo que lo mas exacto es con el cristal externo como el del video que puse, con respecto a la simulacion de proteus... SI... tiene un error el proteus al simular eso, y lo explico en el mismo mensaje... si gustas armalo te garantizo que funciona y muy bien...
 
lo haces con un led rgb o con dos led bueno de echo voy armarloaunq conseguire un cristal de 32.768khz ya que no lo tengo y este codigo como lo podria modificar para la labor que quiero darle con respecto al tema de dario estoy buscandole



por que en el proteus le pones cristal de 32.768khz y en los fuses del pic le pones cristal interno de 4
 
Última edición:
lo haces con un led rgb o con dos led
lo arme con un led bicolor (rojo y verde) no es RGB, pero es lo mismo que si pones dos leds independientes, ese led bicolor tiene 3 patitas... catodo comun y anodos independientes...



porque el codigo del micro utiliza el oscilador interno de 4Mhz para funcionar, el cristal de 32.768 es solo para la interrupcion del timer1... o sea que puedes poner tambien el cristal externo de 4Mhz en los pines correspondientes para el oscilador del micro... y llevaria dos cristales...:D
 
Última edición:
huau si que es interesantisimo y como podria modificar tu codigo para la labor que yo necesito

mi idea inicial es hacerlo con mas tiempo y unos 3 button cada uno con su propia salida pero aun no logro hacerlo el primero
 
:unsure: pues .... tu codigo tiene una interrupcion no???

pon casi todo lo de tu codigo en el otro que tambien tiene una interrupcion... eso de las suma de segundos y todo, eso... lo que no tienes que mover es lo de la configuracion del registro de interrupcion y del modulo del timer

yo tengo un cronometro con ese sistema y es muy exacto incluso hasta con varios minutos... nunca lo he checado con horas o dias...
 
ya estoy variando tus modificaciones gracias por tu ayuda te comento al rato



esta parte del button lo he modificado por el if y then para ver si trabaja y bueno en el proteus hace lo mismo de prender y apagar aunq no se si estara encendiendo el led verde ya que aun no lo he armado por el cristal

Main:

if but then
PAUSE 100
IF but THEN
while but:wend
toggle T1COn.0 'Cambia el estado
low ledG ' apaga el led verde
ledr=!T1COn.0 'asigna el valor invertido del estado del timer1 al led rojo
endif
endif
Goto Main

en realidad ahi trabajas con dos led cada uno con salidas independientes pero yo quiero una salida independiente con diferente funcion como se lograria
 
Última edición:
Aun no logro hacer nada como podria realizar esta labor



lubeck leendo en el foro veo que tienes mucha informacion.
te agradeceria si me podrias ayudar ahi mucho que se nos hace complicado el tema de las interruciones como en este ejemplo mio ojala me puedas orientar te agradeceria mucho por el momento seguire leendo
 
Última edición:
lo complicado de las interrupciones, es que todos los que empezamos en esto pensamos que todas son lo mismo, es decir, esperamos que sea como una receta, y no es asi, las interrupciones varian deacuerdo a cada modulo, o lo que es lo mismo la interrupcion del timer1 es diferente a la de la interrupcion de RBO, o la del USART, o la del USB o la puerto B, todas funciona de manera similar pero CADA UNA SE CONFIGURA DIFERENTE, te preguntaras ¿y como se configura? pues para algo mas certero tienes que aprender ingles basico o tecnico y leer los manuales(datashit) de cada microcontrolador porque aunque pudieran ser similares entre uno y otro pueden tener diferencias... me explique?
 
Lubeck aun no encuentro el tema de dario puedes ayudarme a resolver en que esta fallando mi codigo o que me puede faltar espero no incomodar al pedir una ayuda con mi tema gracias
 
Aqui esta el codigo de D@rio...
no vayas a creer que lo hizo para lo que necesitas, tambien lo tienes que adaptar a lo que tu necesitas..

mira la herramienta enmarcada en el cuadro rojo....

dibujo.JPG

le das click y pones en busqueda avanzada y es bastante poderosa :D
 
Atrás
Arriba