Bienvenu(e)! Identification Créer un nouveau profil

Recherche avancée

communication infrarouge avec Uart et pwm

Envoyé par peace 
communication infrarouge avec Uart et pwm
dimanche 7 avril 2013 12:43:15
Bonjour tous le monde smiling smiley

je suis entrain de réaliser une liaison infrarouge dans le but de transmettre un seul caractère( 0,1 ,2,3,4,5,6,7,8,9) a partir de mon interface labview .la première liaison entre pc et premier pic est a travers rs232 j'ai choisis d'utiliser comme émetteur ( pic 16f628a et une LED infrarouge) et comme récepteur ( pic 16f877 et un tsop ) la liaison entre les 2 pic se fait a travers un rayonnement infrarouge donc je veux que mon caractère envoyé a partir de mon interface graphique soit récupérer dans le deuxième pic d'ou j'ai penser a faire un codage coté émetteur par exemple 1 sera module 0001
2 sera module 0010 ect.. et d'autre coté je dois seulement faire le décodage .Monsieur Benjamin m'a conseille que le pic peut faire tous sans être obligé de faire le codage ou le décodage d'ou c'est mon programme d’émetteur

*****code émetteur sans décodage******
//emetteur par decodage
unsigned char location;
void main()
{
UART1_Init(9600);
Delay_ms(100);
trisb=0x11100000;
portb=0;


PWM1_Init(38000);
Pwm1_Set_Duty(255);
PWM1_Start();

while(1)
{
if (UART1_Data_Ready()==1 )

{
location = UART1_Read();
uart1_write(location); }


if (portb.f2==1){

pwm1_set_duty(127) ;}
else if (portb.f2==0);{
pwm1_set_duty(0) ; }} }

le problème que je visualise un siganl a l'aide de l'oxillo mais rien comme uart (virtual terminal ne m'indique rien) ici une image jointe [imageshack.us]

aurevoir



Modifié 1 fois. Dernière modification le 07/04/13 12:55 par peace.

Re: communication infrarouge avec Uart et pwm
dimanche 7 avril 2013 13:38:29
Salut


maintenant si je vais le décodage pour la transmission de mon signal mon programme d’émetteur sera le suivant:
unsigned char location=0;
void main()
{
UART1_Init(9600);
Delay_ms(100);
trisb=0b00011111; //portb sortie pwm
portb=0;

PWM1_Init(38000);
Pwm1_Set_Duty(255);
PWM1_Start();
while(1)
{
if (UART1_Data_Ready()==1 )

{ location = UART1_Read();
uart1_write(location); }
if (portb.f2==1)


if (location ='1')
{
PWM1_Set_Duty(0) ;
delay_ms(1020);
PWM1_Set_Duty(0) ;
delay_ms(1020);
PWM1_Set_Duty(0) ;
delay_ms(1020);
PWM1_Set_Duty(127) ;
delay_ms(1020);
PWM1_Stop();

}
else if (location ='2')
{
PWM1_Set_Duty(0) ;
delay_us(1020);
PWM1_Set_Duty(0) ;
delay_us(1020);
PWM1_Set_Duty(127) ;
delay_us(1020);
PWM1_Set_Duty(0) ;
delay_us(1020);
PWM1_Stop();
}
else if (location ='3')
{

PWM1_Set_Duty(0) ;
delay_us(1020);
PWM1_Set_Duty(0) ;
delay_us(1020);
PWM1_Set_Duty(127);
delay_us(1020);
PWM1_Set_Duty(127) ;
delay_us(1020);
PWM1_Stop();
}
else if (location ='4')
{

PWM1_Set_Duty(0) ;
delay_us(1020);
PWM1_Set_Duty(127) ;
delay_us(1020);
PWM1_Set_Duty(0) ;
delay_us(1020);
PWM1_Set_Duty(0) ;
delay_ms(1020);
PWM1_Stop();
}
else if (location ='5')
{

PWM1_Set_Duty(0) ;
delay_us(1020);
PWM1_Set_Duty(127) ;
delay_us(1020);
PWM1_Set_Duty(0) ;
delay_us(1020);
PWM1_Set_Duty(127) ;
delay_us(1020);
PWM1_Stop();
}
else if (location ='6')
{

PWM1_Set_Duty(0) ;
delay_us(1020);
PWM1_Set_Duty(127) ;
delay_us(1020);
PWM1_Set_Duty(127);
delay_us(1020);
PWM1_Set_Duty(0) ;
delay_ms(1020);
PWM1_Stop();
}

else if (location ='7')
{

PWM1_Set_Duty(0) ;
delay_us(1020);
PWM1_Set_Duty(127) ;
delay_us(1020);
PWM1_Set_Duty(127) ;
delay_us(1020);
PWM1_Set_Duty(127);
delay_us(1020);
PWM1_Stop();
}
else if (location ='8')
{

PWM1_Set_Duty(127) ;
delay_us(1020);
PWM1_Set_Duty(0);
delay_us(1020);
PWM1_Set_Duty(0);
delay_us(1020);
PWM1_Set_Duty(0);
delay_us(1020);
PWM1_Stop();
}

else if (location ='9')
{

PWM1_Set_Duty(127);
delay_us(1020);
PWM1_Set_Duty(0) ;
delay_us(1020);
PWM1_Set_Duty(0);
delay_us(1020);
PWM1_Set_Duty(127) ;
delay_us(1020);
PWM1_Stop();
}
else if (portb.f2==0);
{
pwm1_set_duty(0) ;
}
}
}

maintenant je me visualise le signal pwm et la caractère aussi [imageshack.us]

pour le récepteur mon code est le suivant

unsigned char location;
int a,b,r,d;
void main()
{
trisb=0xff;
portb=0;
while (1)
{

if (portb.f7==0){
delay_us(300);
a=portb.f0;
delay_us(600);
b=portb.f0 ;
delay_us(600);
r=portb.f0;
delay_us(600);
d=portb.f0;
delay_us(600); }




if (a==0 && b==0 && r==0&& d==1 )

{ location ='1';
}
else if(a==0 && b==0 && r==1&& d==0)
{ location='2';
}
else if (a==0 && b==0 && r==1 && d==1)
{ location='3';
}
else if (a==0 && b==1 && r==0 && d==0)
{ location='4';
}

else if(a==0 && b==1 && r==0 && d ==1)
{ location='5';
}

else if(a==0 && b==1 && r==1 && d==0)

{ location='6';
}

else if(a==0 && b==1 && r==1 && d==1 )
{ location='7';
}

else if(a==1 && b==0 && r==0 && d==0)
{ location='8';
}
else if(a==1 && b==0 && r==0 && d==1 )
{ location='9';
} }}

mais je ne visualise rien coté récepteur !!! j'ai relié ma sortie de tsop au port b .dois je relier a Rx ??


d'ou vient le problème ??
ici une copie sur la visualisation [imageshack.us]


quelle solution dois je choisir ? émission et réception sans décodage ou bien avec décodage ? et pourquoi la reception ne marcha pas??

Merci D'avance pour votre aide smiling smiley)

Aurevoir
Re: communication infrarouge avec Uart et pwm
mardi 9 avril 2013 19:44:05
Salut,

Je vais faire le point sur le premier message. Voilà ce que je te conseille de faire:

1. Tu oublies pour le moment l'apect modulation, tu branches l'hyper terminal dans isis sur la sortie tx et l'entrée rx et tu valides que tu émets et reçois correctement.
2. Une fois que celà fonctionne, tu la connectes la sortie tx du pic à une entrée du pic. Par rapport à la valeur que prendra cette entrée pendant l'émission sur l'uart, tu modules la PWM. Sur l'oscilloscope tu regardes bien que quand le signal est haut à la sortie de l'uart la modulation de la pwm est a et quand l'état est bas la modulation de la pwm est b.
3. Tu connectes la sortie de la pwm modulée a une leds infrarouge et tu regardes avec l'oscilloscope la sortie du tsop. Attention que sur un des screenshots que tu as donné, tu utilises une sorte d'optocoupleur, je ne sais pas lire ce que c'est exactement mais un tsop est un récepteur bien particulier qui intégre un filtre dedans!!!

Si tu arrives a faire les choses dans cet ordre, ça ne peut que fonctionner!

Benjamin

.: [www.roboticus.org] :. Control your own world !
Re: communication infrarouge avec Uart et pwm
mardi 9 avril 2013 20:26:42
Salut Monsiieur

c'est qe que je vais mais je en comprends pas pourquoi lhyper terminal ne m'affiche rien

c'est le programme
unsigned char location=0;
void main()
{
UART1_Init(9600);
Delay_ms(100);
trisb=0b11100000;
portb=0;


PWM1_Init(38000);
Pwm1_Set_Duty(255);
PWM1_Start();

while(1)
{
if (UART1_Data_Ready()==1 )

{
location = UART1_Read();
uart1_write(location); }


if (portb.f2==1){

pwm1_set_duty(127) ;}
else if (portb.f2==0);{
pwm1_set_duty(0) ; }} }

mais l'hper terminal ne me visulaise rien j'ai configuré tous va bien sauf que rien n'est affiché !!

[imageshack.us]

Aurevoir
Re: communication infrarouge avec Uart et pwm
mercredi 10 avril 2013 10:17:57
Salut,

Je vois pas grand chose sur ton screen shot, mais déjà tu dois croiser tes cables, le tx au rx et le rx au tx... Tu connectes celui qui transmet a celui qui reçoit de l'autre coté.

.: [www.roboticus.org] :. Control your own world !
Seuls les utilisateurs enregistrés peuvent poster des messages dans ce forum.

Cliquez ici pour vous connecter