TAXIMETRU ELECTRONIC (IV)

by donpedro

În continuarea seriei de articole dedicate taximetrului electronic, în numărul curent vă prezentăm aspecte relative la realizarea software-ului

Programarea a fost realizată în limbaj de asamblare pentru microcontrolerul 8051. Acest mod de lucru a fost impus prin restricţiile existente. În primul rând, memoria ROM aflată la dispoziţie are capacitatea de 4 Kocteţi, corespunzătoare unui microcontroler 80C51. Pe de altă parte, prelucrările de date ce urmează să fie efectuate trebuie realizate în tip real. Astfel, cerinţele de lucru ale programului impun ca viteza de deplasare a autovehicolului să fie cunoscută permanent. Folosirea unui compilator C la realizarea programului, cu urmărirea satisfacerii cerinţelor prezentate mai sus, nu ar conduce, în cazul acestei aplicaţii, la rezultatele dorite. Practic, un program realizat în C nu s-ar încadra în spaţiul alocat al memoriei ROM.
Programul realizat are 3 componente: program principal, subrutină pentru tratarea întreruperilor de la canalul timer 0, respectiv subrutină pentru tratarea întreruperii externe 0 (ce preia impulsurile de la traductor).

Figura 1

Organigrama generală a programului principal este redată în figura 1. Implemantarea a fost făcută avându-se în vedere necesitatea de a asigura reluarea activităţilor din starea curentă, fără pierderea informaţiilor, pentru situaţia revenirii tensiunii de alimentare, după o dispariţie a acesteia. În acest sens, sunt introduse o serie de variabile (REGIM, FLAG1, FLAG2, FLAG3), rezidente în memoria EEPROM. La dispariţia tensiunii de alimentare, starea curentă a respectivelor variabile se păstrează, dat fiind tipul memoriei în care sunt rezidente. La revenirea tensiunii de alimentare, programul testează starea variabilelor şi în conformitate cu algoritmul de lucru ajunge în starea din care activitatea a fost suspendată.
Tot din memoria EEPROM sunt preluate şi informaţiile care se constituie în constantele curente de lucru (tarife, constante ale autovehicolului). Aceste informaţii se înscriu în regimul de programare. La punerea în funcţiune, memoria este montată fiind preprogramată. Respectivele constante permit efectuarea prelucrărilor curente.
Sunt identificate o serie de 7 stări posibile de lucru, care apar în organigramă:
tratare regim liber;
tratare regim ocupat;
tratare regim plată;
tratare regim schimbare tarif;
tratare regim auxiliar;
tratare regim programare;
tratare impulsuri de la traductor.
Trecerea prin stările Tratare regim liber, Tratare regim ocupat, respectiv Tratare regim plată se face prin apăsări consecutive ale tastei corespunzătoare. La intrarea în fiecare stare sunt setate variabilele ce o identifică. După cum s-a menţionat, pe baza acestor informaţii se poate face revenirea în starea curentă, la reaplicarea tensiunii de alimentare. De remarcat faptul că trecerile consecutive prin stările liber, ocupat, plată sunt posibile doar în condiţiile în care viteza de deplasare este de sub 5 km/h. Din astfel de considerente este necesară cunoaşterea permanentă a vitezei de deplasare. Calculul acestei viteze se face în subrutina de tratare a întreruperilor de la canalul timer 0, pe baza semnalizărilor primite din subrutina de tratare a întreruperilor externe 0.
Regimul liber permite deplasarea autovehicolului cu contorizarea distanţei parcurse, în total şi cu clienţi.
În acest sens este inclus regimul tratare impulsuri de la traductor. Practic, astfel se realizează contorizarea impulsurilor de la traductor şi pentru celelalte regimuri de exploatare ale taximetrului.
Regimul schimbare tarif permite poziţionarea unui nou tarif preprogramat ce cuprinde taxele pentru pornire, staţionare şi mers.
Regimul auxiliar permite afişarea contorilor pentru totalul numărului de kilometri parcurşi, cu şi fără clienţi, respectiv totalul sumelor încasate.
Cele două regimuri descrise anterior sunt accesibile doar ca subregimuri în starea liber.
Regimul programare este accesibil tot din starea liber, după ce un jumper intern (JP1), plasat între o linie de port paralel şi masă, este pus. Regimul este accesibil doar unui utilizator avizat care cunoaşte şi un cod numeric de intrare în regimul respectiv. Cele trei taste sunt folosite în acest regim cu alte roluri faţă de cele uzuale. În regimul programare se realizează determinarea constantei automobilului (numărul de impulsuri generate de traductor la parcurgerea unui kilometru) şi programarea acesteia, respectiv programarea a două seturi de tarife după care se face taxarea. Constanta automobilului şi tarifele de taxare sunt folosite pentru prelucrările de date curente în regimurile de exploatare normală ale aparatului.
În regimul ocupat, taxarea după tariful de staţionare se face în momentele în care viteza de deplasare este de sub 10 km/h, în caz contrar taxarea făcându-se după tariful de mers. Şi acest aspect relevă necesitatea cunoaşterii permanente a vitezei de deplasare a automobilului.
În regimul plată trebuie să se rămână un minim de 10 secunde, pentru a permite citirea sumei de plată de către client, chiar dacă se apasă tasta ce ar permite trecerea în regimul liber. Trecerea în regimul liber trebuie să se poată face automat, fără apăsarea tastei corespunzătoare, după expirarea timpului precizat, în condiţiile punerii în mişcare a automobilului. Toate aceste condiţii sunt implementate în software-ul realizat.
Tratarea impulsurilor de la traductor se face astfel încât impulsurile care sunt corespunzătoare unei viteze de deplasare mai mare decît 130 km/h sunt eliminate. Practic, timpul între două impulsuri sosite de la traductor este comparat cu o durată minimală corespunzătoare vitezei maxime, nefiind luate în calcul impulsurile ce nu satisfac condiţia.
Numărul de reactualizări ale variabilelor aflate în memoria EEPROM care permit identificarea regimului de funcţionare al taximetrului ajunge la valoarea de 10 milioane, număr garantat de fabricantul chip-ului. Acest număr este suficient pentru durata de exploatare al aparatului, acoperind circa 3 milioane curse.

Prof. dr. ing. Gheorghe Şerban
Universitatea din Piteşti
Facultatea de Electronică şi Electromecanică
Catedra de Electronică
e-mail: serban@electra.upit.ro

S-ar putea să vă placă și