Sari la conținut

Cateva pareri despre o viitoare aplicatie cu microcontrollere


donpetru

Postări Recomandate

Pt. tastatura recomand confectionarea uneia. Se gasesc in comert butoane cu aspect "comercial" si cred ca iasa mai ieftin decat una achizionata. Daca insa aveti deja o tastatura se poate folosi, dar trebuie neaparat sa fie matriciala (sau sa se poata adapta).

Bascom este mai usor de folosit, dar nu am lucrat cu el si nu ma pricep la Basic. Oricum, singura problema a programului care urmeaza sa fie implementat este "adunarea", adica introduci de la tastatura 30V (sa zicem) si uC trebuie sa stie sa aclanseze releele 2, 3, 4 si 5. Partea de interfata cu tastatura si comanda releelor nu reprezinta o problema.

 

Ar mai fi o mica problema, nu ar fi bine ca sursa sa aiba si o indicatie a tensiunii? Adica, poate din greseala in loc de 25V se introduc de la tastatura 250V si .... la revedere montajul conectat la sursa plus boom-ul de rigoare. Problema se poate rezolva prin interfata unui afisaj cu led-uri (7 segmente) care sa nu fie un voltmetru, ci doar sa indice tensiunea introdusa de la tastatura. Oricum problema se poate rezolva ulterior cand avem deja un program functional pt. "adunarea" tensiunilor, dar asta implica schimbarea uC cu un ATmega8535 (are mai multe porturi), pretul caruia este tot in jur de 10 lei.

Link spre comentariu
Distribuie pe alte site-uri

  • Răspunsuri 58
  • Created
  • Ultimul Răspuns

Top Posters In This Topic

Top Posters In This Topic

Posted Images

Nu ar merge, in loc de adunare, sa aplicam un program matricial, mai exact, pe baza unei matrici si utilizand niste rutine obisnuite, de genul: daca la portul A si B este 1 logic atunci iesirile care vor fi in 1 logic sunt: Port D, H si G s.a.m.d.?! In acest caz, cred ca marea problema va fi dimensiunea programului- peste 250linii - foarte probabil sa nu se incadreze in cei 2kb flash a microcontrolerului! Apropo, cum te-ai gandit sa aplici adunarea tensiunilor ? Fara indoiala am putea merge si pe varianta cu ATmega8535, trebuie doar stabilit varianta cea mai optima pentru rularea softului si aplicatiei per ansamblu.

 

Este interesanta si ideea utilizarii unui afisor LCD, dar initial ma gandeam ca utilizarea voltmetrului in sursa va indeplini cam acelasi rol. Marele dezavantaj al acestei solutii este acela ca montajele de laborator vor trebui puse sub tensiune imediat dupa ce s-a stabilit si citit tensiunea de pe voltmetru. Nu cred ca este o regula foarte greu de respectat! Deci, nu se va opera key-pad-ul cu montajele sub tensiune. In plus, daca crezi ca acest lucru nu afecteaza cu mult resursele uC-ului, am putea include optional si LCD-ul.

Link spre comentariu
Distribuie pe alte site-uri

O intrebare: cunosc putin C si C++, nu am putea folosi Code Vision AVR pentru programarea microcontrolerului ? Cred ca am face mai usor...adunarea!

Editat de dan_e
Link spre comentariu
Distribuie pe alte site-uri

Se poate si in C, dar "adunarea" este un termen inpropriu, trebuie implementata o metoda de genul sortarii prin metoda bulelor. Practic sursa respectiva trebuie sa debiteze orice tensiune intre 1 si 255 Volti.

Link spre comentariu
Distribuie pe alte site-uri

Se poate si in C, dar "adunarea" este un termen inpropriu, trebuie implementata o metoda de genul sortarii prin metoda bulelor. Practic sursa respectiva trebuie sa debiteze orice tensiune intre 1 si 255 Volti.

Va rog sa-mi spuneti cum citeste microcontrolerul key-padul ? Daca imi spuneti regula am sa fac un mic program in C si poate cu ajutorul cuiva il transpunem in Code Vision AVR?

Editat de dan_e
Link spre comentariu
Distribuie pe alte site-uri

Dupa introducerea tensiunii de la tastatura, combinatia de relee se poate calcula cam in felul urmator:

- se imparte tens la 2^7, iar rezultatul ( partea intreaga) este valoarea releului r0

- restul obtinut se imparte la 2^6, iar rezultatul (partea intreaga) este valoarea releului r1

- se repeta pana la 2^0, iar rezultatul este valoarea r7.

 

Cu 7-8 ani in urma as fi facut si un program in C care sa faca chestia asta, dar acum ........ ar trebui sa reiau cursul de programare.

 

Mai greu este cu citirea tensiunii de la tastatura 0...9. Este mult mai simplu cu UP si DOWN (stiu una si buna :) )

 

De fapt combinatia de relee este chiar valoarea tensiunii in binar.

Link spre comentariu
Distribuie pe alte site-uri

Vazand recomandarea utilizatorului @dan_e despre programarea microcontrolerelor in C / C++, vreau sa va spun ca demult cautam un astfel de program, asta deoarece am facut cursuri de C / C++ la facultate. Dupa cateva cautari pe net am gasit un compilator si cred ca nu ar fi rau sa incercam o astfel de programare. Compilatorul mikroC PRO for AVR de la mikroe.com este numai potrivit si cred ca in cursul zilelor ce urmeaza am sa incerc sa schitez programul. Ramane totusi sub un mare semn de intrebare marimea programului. Cu siguranta va trebui sa alegem un microcontroler cu RAM mai mare iar ATmega8535 este o optiune care ar trebui sa o luam in considerare. Ar trebui redesenata schema lui @edy utilizand acest microcontroler.

 

@nelu2000, nu este chiar asa de greu citirea de la tastatura, ceea ce cred ca este mai greu este faptul ca trebuie sa ne limitam la RAM microcontrolerului.

Link spre comentariu
Distribuie pe alte site-uri

@ donpetru - RAM este destul si la 2313, credeti-ma.

@ dan_e - ca sa citesti tastatura "citesti" fiecare tasta pana cand una este apasata.

@ nelu2000 - e mai simplu sa compari tensiunea dorita (introdusa de la tastatura) cu cele date de trafo, ceva de genu' introducem de la tastatura 52V (sa zicem) si incepem sa comparam: este mai mica sau mai mare decat tens. maxima (128V)? mai mica, este .... decat urmatoarea, etc.... E mai ciudat cu combinatiile de taste pt. a rezulta tens. dorita. Partea cu butoanele up/down ar merge daca s-ar face comanda tensiunii in alt mod, nu prin inserierea de relee. La varianta asta daca pornesti de la 5V si vrei sa urci la vreo 60 iti pacane releele ca o masina de scris din aia manuala.

Editat de edy_wheazel
Link spre comentariu
Distribuie pe alte site-uri

@edy, sa zicem ca memoria microcontrolerului nu este momentan o problema.

 

Am cautat mai multe notiuni despre programarea uC Atmel in C si C++ si am ajuns la urmatoare forma generala a programului, care va trebui compilata in hexa de catre mikroC PRO for AVR (am presupus utilizarea ATmega8535 si a LCD-ului):

 

// Definire lungime variabile si initializare program
unsigned short kp, cnt, oldstate = 0;
char txt[3];

// Definire port conectare Keypad 
char  keypadPort at PORTB;
char  keypadPort_Direction at DDRB;

// Definirea porturilor unde se va conecta LCD-ul
sbit LCD_RS at PORTD.B2;
sbit LCD_EN at PORTD.B3;
sbit LCD_D4 at PORTD.B4;
sbit LCD_D5 at PORTD.B5;
sbit LCD_D6 at PORTD.B6;
sbit LCD_D7 at PORTD.B7;

sbit LCD_RS_Direction at DDRD.B2;
sbit LCD_EN_Direction at DDRD.B3;
sbit LCD_D4_Direction at DDRD.B4;
sbit LCD_D5_Direction at DDRD.B5;
sbit LCD_D6_Direction at DDRD.B6;
sbit LCD_D7_Direction at DDRD.B7;

void main() 

{

 DDRA = 0xFF;			   // Seteaza Portul A ca iesire
 cnt = 0;									 // Reseteaza counter
 Keypad_Init();						   // Initializeaza Keypad							  
 Lcd_Init();								 // Initializeaza LCD
 Lcd_Cmd(LCD_CLEAR);			  // Sterge ecranul LCD-ului pentr afisarea tensiunii electrice dorite
 Lcd_Cmd(LCD_CURSOR_OFF);	// Cursor off
 Lcd_Out(1, 1, "1");
 Lcd_Out(1, 1, "Tensiunea:");	   // Afiseaza tensiunea tastata pe ecranul LCD

do {
  kp = 0;// Reseteaza variabilele introduse de la keypad
  
// Asteapta ca o variabila sau cifra sa fie tastata

do
  kp = Keypad_Key_Press();	 // Inregistreaza variabila - aici ar mai trebui o instructiune cu ajutorul careia sa-i spunem uC in ce memorie sa scrie variabila
  kp = Keypad_Key_Click(); 

while (!kp); 

// In continuare ar trebui sa facem programul sa mai citeasca inca o variabila sau sa reseteze variabila precedenta daca in timp de 5 secunde nu s-a apasat tasta ENTER. Continuarea programului in studiu. 
................................. 
}

 

Asadar, ma gandesc ca in memoria EEPROM a uC sa fie stocate provizoriu maxim trei taste de la key-pad. Am sa le spun variabile si am sa le notez cu a, b si c. Dupa stocarea variabilelor si apasarea tastei enter se va initializa citirea acestora. Aceste variabile se pot compara cu un sir de date, fiecare sir avand o anume configurare a portului de iesire, cum ar fi port A. La portul D a microcontrolerului am conectat LCD 1x16 iar la portul C am putea comanda celelalte relee daca am adopta varianta simetrica de sursa de alimentare.

 

Ceea ce am prezentat mai sus este o metoda de realizare a programului, metoda care mai trebuie cizelata. Ramane in discutie si varianta matematica de care vorbeste @edy mai sus. Cu cat sunt mai multe variante software cu atat mai mult avem sansa sa gasim solutia optima software pentru aplicatia asta.

Link spre comentariu
Distribuie pe alte site-uri

Am urmarit si eu acest topic. Un proiect foarte interesant dar cam greu de pus in aplicare decat pare la prima vedere.

 

donpetru, dupa parerea mea daca aplici algoritmul tau s-ar putea sa faci programul destul de mare. De curiozitate, m-am uitat pe niste programe facute in C++, pentru uC, gasite pe net, si vreau sa-ti spun ca ce ai scris tu mai sus - si nu e tot programul - trece usor peste 2kB.

 

Mie se pare mai buna ideea lui nelu2000 de mai sus, care cu siguranta conduce la obtinerea unui program care ocupa mai putin. Ce nu prea am inteles eu din aceasta discutie de pana acum e chestia lui edy_wheazel, cu adunarea sau cum ii spunea. Din cate cunosc, uC trebuie sa contorizeze intervalul de timp intre doua apasari succesice ale tastaturii. Daca trece "x" secunde, atunci va trebui sa reseteze valoarea memorata initiala. Apoi, daca e tastata o noua valoare sub intervalul de timp, uC va trebui sa stocheze valoarea si sa aplice algoritmul lui nelu2000 de mai sus.

Deci, ar trebui sa ne gandim cu toti la un algoritm!!!

 

BAFTA smoking.gif

Editat de releu
Link spre comentariu
Distribuie pe alte site-uri

O parere de amator : cred ca in locul tastaturii 0...9 + ENTER, este mai simplu cu o tastatura UP + DOWN + ENTER.

Dar o solutie cu comutatoare decadice cu iesire binara,nu ar fi mai simplu?Eu nu ma pricep la microcontrolere,dar ma gandesc,ca un grup de 3 sau mai multe de comutatoare decadice,in functie de precizia si marimea tensiunii de iesire dorite,rezolva si problema tastaturii si cea a afisajului.

post-9-1241339777_thumb.jpg

Editat de miron1947
Link spre comentariu
Distribuie pe alte site-uri

Ce nu prea am inteles eu din aceasta discutie de pana acum e chestia lui edy_wheazel, cu adunarea sau cum ii spunea.

 

"Adunarea" a fost un termen (mai mult sau mai putin sugestiv) pt. a exprima o problema practica: daca ai nevoie de 52V inseriezi mai multe tensiuni date de secundare. Problema cu programul este ca uC sa cunosca tensiunile care trebuiesc inseriate, si cum spuneam am o idee de cum sa fac.

 

Din cate cunosc, uC trebuie sa contorizeze intervalul de timp intre doua apasari succesice ale tastaturii. Daca trece "x" secunde, atunci va trebui sa reseteze valoarea memorata initiala

 

Nu. uC contorizeaza cum vrei tu si cand vrei tu (in functie de programul implementat) apasarea tastaturii. In momentul in care apesi o tasta valoarea tastei este salvat intr-un registru unde poate sta pana cand este alimentat uC, sau poate fi sters dupa voie.

 

Programul postat de Donpetru nu are nici pe departe 2KB. Faceti o confuzie, nu conteaza cat are textul, conteaza cat are hex-ul dupa compilare, acela nu trebuie sa depaseasca memoria uC.

Link spre comentariu
Distribuie pe alte site-uri

Eu propun o alta metoda, look-up table, cu 256byte este rezolvat problema.

In legatura cu microcontroller, nu trebuie mare filozofie, oricum costa cam 1-2E, eu asi pune un atmega88.

Iar despre limbajul de programare: C, mediu de programare/compilator: avr-gcc si avr studio.

Trebuie un display pentru tastatura si un buzzer, ar fii foarte bine sa fie si un feedback pentru siguranta.

Link spre comentariu
Distribuie pe alte site-uri

Eu propun o alta metoda, look-up table, cu 256byte este rezolvat problema.

 

Buna seara,

look-up table in ce program de compilare: C, Basic, Pascal ? Parerea mea e ca nu ar trebui sa caute o valoare ci un sir de valori. Daca e asa, atunci sunt si eu de acord ca o sa iasa cam mare programul! scratchchin.gif

 

Toate cele bune!

@dan

Link spre comentariu
Distribuie pe alte site-uri

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
  • Navigare recentă   0 membri

    • Nici un utilizator înregistrat nu vede această pagină.

×
×
  • Creează nouă...

Informații Importante

Folosim cookie-uri și tehnologii asemănătoare pentru a-ți îmbunătăți experiența pe acest website, pentru a-ți oferi conținut și reclame personalizate și pentru a analiza traficul și audiența website-ului. Înainte de a continua navigarea pe www.tehnium-azi.ro te rugăm să fii de acord cu: Termeni de Utilizare.

ATENTIE !!! Functionarea Tehnium Azi depinde de afisarea de reclame.

Pentru a putea accesa in continuoare site-ul web www.tehnium-azi.ro, va rugam sa dezactivati extensia ad block din browser-ul web al vostru. Dupa ce ati dezactivat extensia ad block din browser dati clic pe butonul de mai jos.

Multumim.

Apasa acest buton dupa dezactivarea extensiei Adblock