desktop

Curso de programación de PIC en PICBasic Pro

no, porque de esa forma todas las variables contendrán lo que en el momento de la interrupción tenga el primer byte del buffer.
Lo correcto sería hacer uso de un único hserin, de ésta forma:
hserin paritylabel, timeout, label, [a, b, c, d, e]
así recibes de una sola vez cada byte del buffer en las variables.

Paritylabel, timeout y label, son parámetros opcionales.
La conversión con "dec x" la puedes hacer posteriormente.

me podria dar un ejemplo de esa convercion "dec x"
 
"DecX " es igual que "#" y sirve para mostrar y enviar números como texto, pero con DecX se puede dar un formato con ceros.
Me parece que pueden ser hasta 5 ceros, no recuerdo cuantos se permiten.

Por ejemplo:
Variable = 12
LCDOut $FE, 1, Dec4 Variable
Se mostrará: 0012
 
"DecX " es igual que "#" y sirve para mostrar y enviar números como texto, pero con DecX se puede dar un formato con ceros.
Me parece que pueden ser hasta 5 ceros, no recuerdo cuantos se permiten.

Por ejemplo:
Variable = 12
LCDOut $FE, 1, Dec4 Variable
Se mostrará: 0012

lo que quiero es mostrar lo que ingreso por serial desde pc a mis displays pero por interrupción
que sea una sola trama un solo hserin , pero al parecer tengo que convertir lo que ingreso a decimal le adjunto un block de notas con la diferencia. y quisiera saber el problema ?
 

Adjuntos

  • SERIAL.txt
    935 bytes · Visitas: 25
No entiendo para qué estás usando la tabla con LookUp y el envío de datos seriales con ShiftOut.
Lo que si sé, es que si ya recibiste los datos, sólo tienes que mostrarlos usando # o Dec.

O sea, así:
LCDOut $FE, 1, #D0, #D1, #D2, #D3
O así:
LCDOut $FE, 1 Dec D0, Dec D1, Dec D2, Dec D3

Lo que quiero es mostrar lo que ingreso por serial desde la PC a mis displays
¿Qué tipo de displays estás usando?
 
No entiendo para qué estás usando la tabla con LookUp y el envío de datos seriales con ShiftOut.
Lo que si sé, es que si ya recibiste los datos, sólo tienes que mostrarlos usando # o Dec.

O sea, así:
LCDOut $FE, 1, #D0, #D1, #D2, #D3
O así:
LCDOut $FE, 1 Dec D0, Dec D1, Dec D2, Dec D3


¿Qué tipo de displays estás usando?

bueno te explico mi circuito esta conformado con con shift register CD4094 todos en cascada y cada uno su salida paralela va aun display de 7 segmentos son 28 display todos estos deben ser controlados por pc mediante puerto serial pero necesito que sea un solo hserin.
desde pic se controlan las señales como clock,data,strobe y enable alguna idea.
 
Te adjunto un ejemplo, pero sólo con 4 CD4094. Ya posteriormente lo podrás expandir.

CD4094 RS-232.jpg

Nota: Por ser simulación, no usé resistencias para los displays.
 

Adjuntos

  • 16F648A CD4094 DSP 7 segs.rar
    63.2 KB · Visitas: 38
Última edición:
Te adjunto un ejemplo, pero sólo con 4 CD4094. Ya posteriormente lo podrás expandir.

Ver el archivo adjunto 156609

Nota: Por ser simulación, no usé resistencias para los displays.

exelente ,quisiera controlar el enable con un timer 400 milisegundos para hacer parpader a todos los display y al cambiar datos por serial cambie y siga con su parpadeo y tambien detener el parpadeo en cuatro displays si ingreso un 1 por serial sria posible, estoy intentando con interrupcion de prioridad pero no se como acomodar mi programa si tienes un ejemplo seria excelente ..
 
Lo que expones es demasiado sencillo y no requiere de ejemplos, simplemente de noción.
Y si no sabes cómo realizar el programa, vas por muy mal camino.
 
Bueno, sólo necesito un ejemplo de prioridades de interrupción, ya que es la primera vez que programo interrupciones de prioridad.
Mejor aún que sea de interrupción usart e interrupción timer.
No en todos los PIC se pueden tener interrupciones de alta prioridad.
Esto es mas de la familia PIC18 y superiores.

Para saber si el microcontrolador tiene esta opción, debes mirar sus características especiales.
Special Microcontroller Features.jpg

Establecer la prioridad de las interrupciones no requiere de ejemplos, sino de leer la hoja de datos.
Interrupt Registers.jpg
En la sección "INTERRUPTS" podrás ver los registros involucrados con las interrupciones.


Si miras el registro IPR1, encontrarás que el bit 5 (RCIP) es el que activa la alta prioridad de interrupción para la recepción del módulo EUSART.
IPR1.jpg

Como verás, basta con poner en 1 el bit 5 para establecer la alta prioridad de interrupción.
Igualmente con los Timers y otros periféricos.

 
hola a todos en el grupo, saben necesitaba realizar un proyecto de comunicación por RF pues lo hice con los famosos HT12E - HT12E pero, el problema es el siguiente que solo se puede trasmitir 4 bits y yo necesito 8 o 12 si se pudiera, en fin trate de hacerlo con PIC específicamente los 16F628A, también lo conseguí, uno trabaja como trasmisor y el otro como receptor junto con los módulos RF, que por cierto lo probé hasta 50 metros de distancia sin obstáculos y funciona de maravilla el tema es el siguiente:

1. la programación lo realice en microcode studio
2. uso baterías recargables tanto como en el emisor y el receptor, típicamente las de 9V
3. en el emisor uso un regulador de voltaje 7805 y en el receptor una fuente para protoboard
de 3.3 - 5v - 700 ma esas que van insertadas en el protoboard con entrada jack y usb
4. en el receptor solo uso leds por ahora para visualizar los datos de trasmisión.

El problema es que me consume demasiada batería, solo me dura un día, no sé si el problema está en el circuito o en la programación, ya que siempre está trasmitiendo aunque no tenga nada pulsado.

Adjunto lo necesario si alguien pudiera mejorar el proyecto en la programación les agradecería, tal vez allá una forma de hacer que ahorre batería cuando este sin nada pulsado, la programación la hice ayudándome en lo poco que se de pics.
 

Adjuntos

  • RF 4 bits probado.rar
    82 KB · Visitas: 36
Última edición:
Necesito realizar un proyecto de comunicación por R.F.
Pues lo hice con los famosos HT12E - HT12E, pero el problema es el siguiente, que sólo se puede trasmitir 4 bits y yo necesito 8 o 12 si se pudiera.
Usa un algoritmo como el Manchester, por ejemplo, que luego se decodificará en el receptor.

Puedes ver algo sobre el tema, por aquí:
PIC12F675 y módulo de R.F, no recibe datos
El problema es que me consume demasiada batería, sólo me dura un día.
No sé si el problema está en el circuito o en la programación, ya que siempre está trasmitiendo aunque no tenga nada pulsado.
El problema del transmisor se puede resolver fácilmente si únicamente transmites cuando sea presionado un pulsador.
Aquí puedes usar las interrupciones por cambio de estado en el puerto B. (RB4<>B7)
Ponerlo en modo de bajo consumo, (Sleep) y se pondrá en modo activo tras una interrupción.
O sea, cuando se presione un botón.

Y para el receptor, prácticamente sería lo mismo, pero usando la interrupción externa por RB0.

Con eso tendrías el problema de consumo solucionado, aunque siempre habrá, pero será mucho menor.
 
Sobre este mismo tema puedes encontrar varios ejemplos sobre el uso de interrupciones.
Lo más conveniente en el receptor sería el uso de la interrupción por recepción del módulo USART.
Lee la hoja de datos del PIC16F628A y encontrarás todo lo referente a su uso.

Y sobre lo de mejorar el código, ya te mencioné algunas cosas que puedes hacer.
 
Estuve leyendo y no encuentro nada parecido por favor algún ejemplo o modificaciones que se pudiera hacer al código para aplicar interrupciones y codificación manchester , porfabor
 
Acaso creen que copie el codigo, no saben lo que me costo hacer la comunicacion, como vi que explican a otros cosas mas elementales hasta le dan ejemplos hasta realizan su codigo, yo solo pedi una idea o ejemplo donde yo lo pudiera modificar o agregar ya que no sabia por donde empezar, pero estoy leendo y buscando segun las sugerencias, antes de emitir un comentario insensato, primero ai que valorar el esfuerzo de los que recien se inician, pero vale la acotacion como les dije estoy investigando y leendo ojala lo consiga gracias igual D@rkbytes que fue el unico que emitio un comentario con aportes
 
No te molestes, pero es que primero debes cambiar tu programa con lo que se te ha sugerido.
Cuando lo hagas, y si tienes problemas, se podrá revisar para encontrar posibles errores.

Tu programa actual no es muy grande, pero sí bastante mal elaborado, y es un hecho que se puede mejorar.
Así qué, realiza los cambios con lo que se te ha sugerido y si tienes problemas, lo publicas, mencionando tus problemas.

Si no eres tú quien realice esas mejoras, nadie lo hará por tí.
Y si nadie más ha sugerido mejoras a tu programa, es porque no has hecho caso sobre lo que se te ha dicho, y seguramente están esperando a que lo hagas.
 
Atrás
Arriba