Autor Tema: 16F628A, RB0-RB4/7 y PIC Basic IDE  (Leído 4901 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado satandreu

  • PIC10
  • *
  • Mensajes: 10
16F628A, RB0-RB4/7 y PIC Basic IDE
« en: 10 de Marzo de 2009, 16:47:29 »
Buenas  todos,

soy un recién llegado a este mundo de los pics, que después de 2 meses de tozudez ha conseguido encender 4 leds  dependiendo del byte que le llega por la usart, con interrupciones y todo. Ahora el nuevo reto que me he propuesto es el de recibir una trama de X bits por los puertos RB0, RB4 a RB7 de este pic y enviarlos por la usart. Las interrupciones las tengo claras pero mi duda es, ¿realmente es posible leer datos por estos pines, o estoy intentando hacer algo imposible?

Agradezco de antemano vuestra ayuda.

Saludos.

EDITO: No se si el foro correcto era este o el de microcontroladores.

Desconectado cap_nemo

  • PIC10
  • *
  • Mensajes: 19
Re: 16F628A, RB0-RB4/7 y PIC Basic IDE
« Respuesta #1 en: 10 de Marzo de 2009, 16:56:06 »
...a ver si entiendo, tu dices mandar un dato que te aparece en "paralelo" entre las patas rb0 a rb7 y mandarlo como serial por el usart? eso es perfectamente posible, ahora si pretendes leer varios datos serie quew entran por estas patas es otra cosa, se podria tratar con la interrupcion por cambio de estado de rb0 a rb4, ahora bien tendrias que considerar el tema de las velocidades de transmision, por que es ovbio que si ententas recibir 4 0 5 comunicaciones por el puerto b a 9600 baudios por ejemplo se te complica el envio de esta info por el usart ya que necesitarias 9600 * 4, tambien va  a depender de la continuidad de esos datos, si ninca se superpone la rx de una pata con otra no hay problema... la cuestion es que hasta cierto punto entiendo se podria. especifica un poco mejor la idea

Desconectado satandreu

  • PIC10
  • *
  • Mensajes: 10
Re: 16F628A, RB0-RB4/7 y PIC Basic IDE
« Respuesta #2 en: 10 de Marzo de 2009, 22:53:26 »
Me explico con más detalles.

Desde una aplicación VB lanzo 4 posibles valores en formato hexadecimal, (0x01, 0x02, 0x04 y 0x08), que ,elel pic recibe por el puerto RB1 (RX usart). Estos valores que yo envío desde la aplicación, el programa del pic los carga tal cual en el PORTA, con lo cual pongo en alto el puerto 0, 1, 2 y 3 respectivamente dependiendo del valor enviado. Esto funciona perfectamente con sus correspondientes interrupciones y el resto de parámetros, (siento no poner el código fuente del programa pero es que estoy lejos de casa y no lo llevo conmigo).

Si sumamos que uso un OSC externo, queda claro que del puerto A solo tengo libre el pin 4 y 5, y del puerto B menos el 1 y el 2 (RX y TX USART), el resto son para utilizar.

Medio/poco aclarado esto, lo que yo quisiera (si es posible) es poder leer las tramas que pudieran llegar por cada una de las patillas restantes de ese PORTB (sin contar TX y RX usart). No hay una lógica ni ningún orden en la recepción de las tramas. Decir que trabajaría a 1200.

Gracias.

PD: En cuanto llegue a casa cuelgo el código. Obvio para los expertos, posiblemente esclarecedor para los novatos.

Desconectado satandreu

  • PIC10
  • *
  • Mensajes: 10
Re: 16F628A, RB0-RB4/7 y PIC Basic IDE
« Respuesta #3 en: 16 de Marzo de 2009, 09:39:22 »
Bueno, ya he conseguido leer una trama a través del RB0 y usando su interrupción. Pero ahora que he dado un paso más, me encuentro con otro problema, no es importante pero no entiendo el porqué. Si conecto la fuente (otro pic) que envía las tramas al pic, constatemente me envía tramas "basura" (siempre 7F) mientras que no haya de enviar una trama correcta. Si esta misma fuente la conecto directamente al max232, envía solamente la trama correcta. ¿Alguna idea del porque?. Os dejo el código.

AllDigital
Define CONF_WORD = 3f42h
Define CLOCK_FREQUENCY = 12
CMCON = 0x07
TRISB = %11111011
Dim lectura As Byte
Hseropen 1200
INTCON.INTE = 1
INTCON.PEIE = 1
Enable
End   
                                           
On Interrupt
Save System
If INTCON.INTF = 1 Then
Serin PORTB.0, 1200, lectura
Hserout lectura
INTCON.INTF = 0
Endif
Resume             

Gracias de antemano.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: 16F628A, RB0-RB4/7 y PIC Basic IDE
« Respuesta #4 en: 16 de Marzo de 2009, 15:01:06 »
Si, es normal, ya que el driver RS232 invierte las señales y por lo tanto la UART por hard o por soft espera las señales de esta forma. No sé si este compilador tendrá una emulación de UART que permita la interconexión TTL directa.
Saludos desde Granada, España.

Desconectado satandreu

  • PIC10
  • *
  • Mensajes: 10
Re: 16F628A, RB0-RB4/7 y PIC Basic IDE
« Respuesta #5 en: 21 de Marzo de 2009, 20:25:24 »
Gracias por las respuestas. El problema de las tramas basuras lo he resuelto por software y por hardware. He añadido un OPTION_REG = 1 en el programa, y además he descubierto que la tierra del atmel hacía falso contacto. No acabo de tener claro la relación entre los 2, (no tengo ni idea de electrónica), pero sin estos 2 pasos recibo tramas basura.

Dado este paso, me encuentro el siguiente problema. Ya "domino" la interrupción del RB0, pero con la interrupción de los pines 4,5,6,7 solo llego a detectar el cambio de estado pero no soy capaz de leer la trama, ¿es lo normal, o me falla algo?. El programa quedaría así:

AllDigital
Define CONF_WORD = 3f42h
Define CLOCK_FREQUENCY = 12
OPTION_REG = 1
CMCON = 0x07
TRISB = %11111011
Dim lectura As Byte
Hseropen 1200
INTCON.RBIE = 1
INTCON.PEIE = 1
Enable
End   
                                           
On Interrupt
Save System
If INTCON.RBIF = 1 Then
Serin PORTB.4, 1200, lectura
Hserout lectura
INTCON.RBIF = 0
Endif
Resume             

Saludos.

Desconectado satandreu

  • PIC10
  • *
  • Mensajes: 10
Re: 16F628A, RB0-RB4/7 y PIC Basic IDE
« Respuesta #6 en: 22 de Marzo de 2009, 07:16:37 »
No entiendo nada. Ayer estuve hasta las 2 de la madrugada (hora española), intentando dar con el problema. Al final desistí, encomendándome a obtener una respuesta por parte de alguien de este foro.

Pues hace una media hora que he vuelto a la carga, y sin haber modificado nada del programa ni del montaje, ¡¡¡AHORA FUNCIONA!!!!.

No le daré más vueltas al tema y me acojeré a la frase "si funciona no lo toques", pero es que no lo entiendo. En fín, ahora que mi ego a crecido bastante por haberlo conseguido, me voy a tomar una cervecita bien fría para celebrarlo. Cuando tenga todo pulido y probado os subo el programa final, el esquema y os explico que quiero hacer con él.

Temblad que ahora quiero aprender a manejar pic's con usb.

Gracias a todos.

 :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: 16F628A, RB0-RB4/7 y PIC Basic IDE
« Respuesta #7 en: 22 de Marzo de 2009, 09:44:31 »
Felicidades, algunas veces el problema no esta en el soft y es una tonteria en el hard. Por eso hay que practicar con montajes reales. :-)
Saludos desde Granada, España.