martes, 20 de agosto de 2013

Impreso Pinguino 18F2550

Circuito Impreso Para Pinguino Con El PIC 18F2550

Este es el un PCB o tarjeta impresa para montar Pinguino con el 18f2550. El documento esta en formato PDF en formato carta.
La documento se dejo para que pueda ser planchado en papel fotográfico  propalcolte o especial para la fabricación de circuitos impresos.
En el siguiente gráfico se muestra como deben ir los componentes.
El conector USB es hembra y necesita una extensión para realizar la conexión al computador.

Impreso Pinguino 18f2550


viernes, 2 de agosto de 2013

Comunicación RF con los módulos RWS y TWS


COMUNICACIÓN POR RADIOFRECUENCIA CON LOS MÓDULOS RWS434 Y TWS434


Transmisor TWS 434
Receptor RWS 434

Estos módulos el receptor RWS  y el transmisor TWS  son económicos y fáciles de emplear.
La prueba que se hizo con estos módulos consistió en comunicar dos sistemas microcontrolados Pinguino. La configuración empleada fue la siguiente.
  • Comunicación serial asíncrona a 1200 baudios
  • Configuración 8N1, 8 bits de datos ninguno de paridad y un bit de parada.
La configuración propuesta es soportada casi por la mayoría de sistemas microcontrolados.
Estos módulos de comunicación son buenos en sitios abiertos y sin mucho ruido eléctrico pero es frecuente que algunos datos lleguen con errores ya sea por desfase en la frecuencia de transmisión o por ruido eléctrico que afecte la recepción de datos.
En la búsqueda que hice sobre el tema encontré que en arduino se desarrollo una librería de nombre virtualwire para resolver los inconvenientes con este tipo de transmisores y receptores. Sin embargo para aplicaciones que no necesiten ser muy robustas puede ser empleado logrando buenos resultados en cualquier tipo de sistema microcontrolado.

PROBLEMAS
  • Opera bien a 1200 baudios, pero al incrementar la tasa de transmisión por ejemplo a 9600 baudios se observa distorsión de la señal recibida.
  • Las antenas emisora y receptora deben estar casi paralelas una a la otra para un buena recepción  si las antenas están inclinadas o acostadas la comunicación es inestable.
  • En sitios ruidosos electricamente se ve afectada la señal de recepción y esto ocasiona errores en los datos recibidos.
  • Si el emisor tiene el terminal de datos flotante es decir si no esta conectado, el receptor recibirá ruido.
  • En algunas publicaciones encontré que la señal de recepción la adecuaban con un comparador por que esta no era digital, sin embargo en el modulo probado la señal de salida es completamente digital y no se necesito de adecuación.
ENLACES DE INTERÉS


PRUEBA CON OSCILOSCOPIO
Para realizar la prueba con un osciloscopio se empleo la siguiente configuración:

  • Tarjeta Pinguino conectada al módulo transmisor TWS
  • Punta de osciloscopio conectada a la salida del modulo receptor RWS
  • Base de tiempo del osciloscopio 1 ms
  • Canal A señal DC a 5 voltios por división
Envío del carácter U mayúscula

En la realización de esta prueba se envió la letra U mayúscula por que su código ASCII en formato binario es fácil de identificar. También pueden enviarse otros caracteres como los numéricos, en particular el 3 que tiene un patrón binario fácil de reconocer en el osciloscopio.
  • U en ASCII decimal corresponde a 85 por lo tanto su valor binario es  01010101.
  • 3 en  ASCII decimal corresponde a 51 por lo tanto su valor binario es  00110011.
PROGRAMA EN PINGUINO PARA EL ENVÍO DE LA U

Este programa corresponde al envío del carácter U en formato ASCII
void setup(){
   Serial.begin(1200);
}
void loop(){
   Serial.print("U");
}

MONTAJE EN PINGUINO 


Montaje pinguino con el transmisor TWS
Montaje Pinguino del receptor RWS 434


PROGRAMA EN PINGUINO PARA EMISIÓN RECEPCIÓN

Este programa corresponde al envío de los caracteres numéricos 0 y 1
void setup(){
   Serial.begin(1200);
}
void loop(){
   Serial.print("0");
   delay(1000);

   Serial.print("1");
   delay(1000);

  }



Este programa corresponde al recepción de los caracteres numéricos 0 y 1.

int caracter;
void setup(){
   Serial.begin(1200);
   pinMode(0,OUTPUT);
}
void loop(){

   if (Serial.available()) {
caracter = Serial.read();
if (caracter = ='0'){
digitalWrite(0,LOW);
}
if (caracter = ='1'){
digitalWrite(0,HIGH);
}
    }
}