Calculator de buzunar cu input de la telecomanda

Introducere

  • Proiectul abordeaza o maniera mai putin obisnuita de folosire a banalului calculator de buzunar, si anume trimiterea informatiilor necesare calculelor de la o telecomanda, prin semnale in infrarosu (IR).
  • Designul unui asemenea dispozitiv este mult simplificat fata de varianta clasica, gestionarea comenzilor si directionarea lor catre unitatea de calcul fiind realizata de catre un senzor specializat in captarea si conversia analog-digitala a undelor IR.
  • In plus, pe o singura legatura de date (cea dintre senzor si unitatea de calcul - uC) se pot transmite un numar mult mai mare de comenzi distincte, in baza unui protocol des utilizat in decodarea semnalelor IR (RC5).

Descriere generală

  • Senzorul IR preia semnalul de la telecomanda, il converteste in semnal digital si il trimite pe pinul A0 al uC, sub forma a 14 biti de date;
  • Fiecare semnal astfel primit este decodat de uC, rezultand cate o valoare intreaga reprezentand codul comenzii date;
  • Rezultatele prelucrarilor ulterioare (aici calcule aritmetice asupra valorilor transmise) se afiseaza la LCD.

vali_diagrama_pm.pdf

Hardware Design

Lista principalelor componente folosite:

  • placa de la etapa I
  • LCD 16×2 (BC1602A);
  • senzor IR (TSOP21238);
  • rezistenta 100 ohmi;
  • condensator 4.7 uF;
  • circuit alimentare lcd+senzor (prin port usb montat pe placuta de proiect);
  • telecomanda ~38kHz (AK33871420 de la televizor LG).

Scheme realizate: tsop.jpg

lcd.jpg

Software Design

  • Am pornit de la codul sursa al laboratorului 1, cu ajutorul caruia am realizat interfatarea uC cu LCD-ul;
  • Am folosit o librarie pusa la dispozitie de Atmel, raspunzatoare de decodarea semnalulelor primite de la senzorul IR, folosind protocolul RC5.
  • Afisarea pe LCD se face permanent, in functie de inputul furnizat de la telecomanda via senzor.
  • Am preferat sa implemenez o varianta simplificata a algoritmului, efectuand doar calcule aritmetice cu numere intregi.

functia de afisare pe LCD a operanzilor

void afisare() foloseste variabilele globale op1, op2 si operatie {

LCD_writeInstruction(LCD_INSTR_gotoCGRAM);
LCD_writeInstruction(LCD_INSTR_clearDisplay);
LCD_gotoXY(0, 0);
char afisaj1[10];
char afisaj2[10];
sprintf(afisaj1, "%i %c ", op1, operatie);
if(operatie != ' ') sprintf(afisaj2, "%i", op2);
LCD_print2(afisaj1, afisaj2);

}

functia de afisare a operanzilor, a operatiei si a rezultatului final

    (se apeleaza la intalnirea codului predefinit EGAL) 

void afisare_rezultat() foloseste variabilele globale op1, op2 si operatie {

LCD_writeInstruction(LCD_INSTR_gotoCGRAM);
LCD_writeInstruction(LCD_INSTR_clearDisplay);
LCD_gotoXY(0, 0);
char afisaj1[10];
char afisaj2[10];
if(operatie=='+') rez = op1 + op2;
if(operatie=='-') rez = op1 - op2;
if(operatie=='*') rez = op1 * op2;
if(operatie=='/') rez = op1 / op2;
if(operatie==' ') rez = op1;
sprintf(afisaj1, "%i %c %i", op1, operatie, op2);  // op1, op2 si operatie sunt globale
sprintf(afisaj2, "=%i", rez);
LCD_print2(afisaj1, afisaj2);

}

  unsigned int rc5data = rc5decode(); // salvez codul in variabila rc5data
if(rc5data==EGAL) 
{
	afisare_rezultat(); 
	op1 = rez; 
	op2=0; 
	rez=0;
	operatie = ' ';
}
else
{
	if(rc5data==PLUS) operatie = '+';
	else if(rc5data==MINUS) operatie = '-';
	else if(rc5data==INMULTIT) operatie = '*';
	else if(rc5data==IMPARTIT) operatie = '/';
	else
	{
		if(operatie==' ') op1 = op1*10 + rc5data;
		else op2 = op2*10 + rc5data;
	}
	afisare();

Rezultate Obţinute

  • Din pacate, nu am reusit sa citesc datele venite de la senzor, cel mai probabil din cauza faptului ca nu am adaptat suficient de mult setarile aferente codului initial al protocolului de decodare.
  • Desi am incercat inclusiv sa hardcodez citirea valorii pinului de colectare a semnalelor de la senzor, nu am reusit sa detectez nici o valoare, astfel incat m-am multumit cu afisarea unor mesaje simple pe lcd.

Concluzii

  • Am invatat destul de multe lucruri in ceea ce priveste folosirea senzorilor pentru realizarea unor proiecte cat se poate de practice, experienta in acest sens fiind mult mai vasta decat cea obtinuta la laborator.
  • Realizarea proiectului, mai ales partea sa finala, chiar daca nu functioneaza decat partial, m-a facut sa nu mai privesc distant acest domeniu si sa inteleg eforturile depuse de dezvoltatorii din aceasta ramura a tehnicii.

Download

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

pm/prj2011/pgp/calculator_comandat_ir.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0