Sari la conținut
ELFORUM - Forumul electronistilor

Ajutor 15F628A C++


Vizitator aurelian77

Postări Recomandate

@thunderer, cand a intrat in discutie encoder-ul? Nu am vazut sa apara asa ceva in cerintele lui Aurelian. Ti-a cerut separat ca butoanele sa fie inlocuite cu un encoder?

 

OFF-TOPIC: Legat de chestia cu proiectele free sau pe bani ...

Nu vreau sa fiu inteles gresit.

E foarte OK sa faci proiecte care sa fie platite (se plateste valoarea investita: inteligenta, cunoastere, timp. Timpul avand ponderea cea mai mare, pentru ca timpul = VIATA).

Ce m-a deranjat in discutia cu taximetristul - electronist era ca eu ii tot spuneam ca as face proiectele nu doar pentru bani (ma rog, dupa caz, poate si ceva bani ca sa imi sustin hobby-ul fara sa mai trag din salariu) ci pentru satisfactia pe care o am si eu cand gasesc un proiect interesat. Cred ca stiti la ce ma refer altfel nu ati fi aici pe forum.

 

Iar el nici nu ma asculta. O tinea una si buna cu brevete, licente ... Cum ca sa dau dreptul de utilizare a proiectului catre o fabrica si sa primesc redevente.

Cred ca o atitudine echilibrata ne-ar servi cel mai mult.

 

Faza cu comunistii ... aia vor misuna intotdeauna ca si sobolanii in intuneric. Intotdeauna vor fi niste "turci" (ca sa nu zic altceva tot cu 'tz', dar mai bine cu referinte istorice, e "politically correct") care vor vrea sa recolteze ce seamana altii. Si in acelasi timp zbierand cat cuprinde ca e dreptul lor.

Doar au maini si picioare, deci sunt oameni, deci au dreptul de a manca. Nu conteaza ca altii muncesc pentru aceasta. Ei trebuie ca de ....

Sunt pro pentru a da si altora din ce am dar nu cu cutitul la gat ...

Editat de mars01
Link spre comentariu
  • Răspunsuri 53
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Marius, a fost o mentiune pe PM despre encoder.Ar fi bun un topic de bucatele de program, dar ar trebui gestionat de cineva cu timp la dispozitie.Dar vad ca OP s-a cam dat disparut.@elmar, nu ai alt topic de refulat la Bodega? Hai, vezi-ti de lupta de clasa acolo...

Editat de thunderer
Link spre comentariu

Marius, a fost o mentiune pe PM despre encoder.Ar fi bun un topic de bucatele de program, dar ar trebui gestionat de cineva cu timp la dispozitie.Dar vad ca OP s-a cam dat disparut.@elmar, nu ai alt topic de refulat la Bodega? Hai, vezi-ti de lupta de clasa acolo...

Scuze d-le Thunderer!Eu mi-am manifestat dezamăgirea faţă de gândirea care o au unii din ţara asta!...si atât!

De acolo din Albion ,normal,lucrurile se văd altfel....si bineînţeles că ”te furnică” unele chestii la fel cum şi pe mine mă framântă altele!

Ciudat ,cum ai găsit să te iei numai de mine...încercând să arunci totul(din ce spun eu) în desuiet...

Chiar dacă  (mesajul meu) nu are legătură cu programarea PIC...totuşi e important să ştim cum gândesc(unii din) programatorii noştrii...NU?!

Link spre comentariu
Vizitator aurelian77

Multumir tuturor

Eu am reusit sa fac dar cu 16f887 deoarece el era in help ca si exemplu si am facut cu functia ADC_RED totul merge bine cum doream eu 

Banda transportoare acuma stie sa imi numere cate produse ruleaza dupa culoarea lor si stie sa se opreasca la nr stabilit :)

Am mai pus si un senzor de culoare si 3 montaje care fiecare numara dupa culoare .

Acuma eu sunt fericit :))

Vreau sa multumesc acestor oameni Romani care au incercat sa ma ajute cu sfaturi pentru mine foarte utile.

Multumesc tie mars01 o sa incerc sa fac si ceea ce tu te-ai muncit pentru mine sa vad cum va lucra fiind cu un pic mai ieftin eu am dat pe pic 16f887 25 ron celalalt costa 10 ron asa ca ma ajuta ...vine mai ieftin la toate benzile.

Voi reveni cu detalii daca a mers proiectul lui mars01

Sunt acum bucuros :))

Eu nu am mai intrat demult aici deoarece m-am chinuit singur sa fac ceea ce doream sa fac cu orice pret , cu orice pic si in orice limbaj ma interesat produsul finit mai precis dar am cerut detali comentate cum am vazut in realizarea lui mars01 xa sa pot sa si inteleg cate ceva.

Nu era asa necesara simularea in Proteus deoarece Proteusul am reusit sa il invat repede si o puteam face si singur dar .... mersi mult pentru munca voastra si raspunsurile care eu din fiecare am invatat cate ceva :)

Sus Romania

Link spre comentariu
Vizitator aurelian77

Uite aici http://www.libstock.com/projects/view/1235/rotary-encoder. Atentie la tipul de encoder, altfel nu merge.

De mare ajutor situl acesta.

Mersi mult prietene :)

Totusi c nu este mai greu decat Pascal?

Si c face mai bine decat Pascalul?

Mie mi se pare Pascalmult mai usor celputin inteligibil 

C in schimb e tare greoi nu prea stiu au ce este acoloin el.

Opinia mea este ca Pascal este usor deci se poate invata mai repede fara a face ceva cursuri sau scoli de programare in C cred ca este necesar ceva cursuri soli etc, e complex si greoi.

Am testat programul lu mars01 cat in simulator cat si fizic cu pic

1 este rapid :)

2 Stabil nu am reusit sa ilblochez.

3 La inceput nu stie sa faca on/off la led doar este pe on dupa ce b+ sau b- va fi atins el va sti sa faca si on/off(ar fi trebuit sa stie din prima imediat dupa initializare fara a fi conditionat de tastele b+sau n- prima data)

4 Ceea ce nu functioneaza mie pe banda imi numara si apoi imi scade numarul sau invers :(

Ca butoane am 2 senzori IR de distanta miva 5Cm fiecare cand apare ceva in fata lui va da logic 1 pe out dar... obiectul va atinge ambi senzori la unpimp si atunci contorul va scade apoi va adauga sau invers depinde cumbanda se va rula.

O sa incerc sa fac o scchita poate veti intelege mai bine ar trebui sa fie noi conditii cred sau sa mai adaug noi senzori.

Nu stiu exact incep sa fac o schita si sa vad daca o pot atasa aici 

Link spre comentariu
Vizitator aurelian77

Am desenat can ce vreau sa fac ....

Marog poza este luata de pe net dar ca si principiu cam asa va merge numai ca senzori vor fi posi la o trecere unde va trece obiecte

http://imageshack.com/a/img661/9569/6ZfTQk.jpg

Aminstalat si microC poate dupa ce o sa pun sursa data de mars01 o sa inteleg mai bine cum sta treaba in acest program.

@thunderer, cand a intrat in discutie encoder-ul? Nu am vazut sa apara asa ceva in cerintele lui Aurelian. Ti-a cerut separat ca butoanele sa fie inlocuite cu un encoder?

 

OFF-TOPIC: Legat de chestia cu proiectele free sau pe bani ...

Nu vreau sa fiu inteles gresit.

E foarte OK sa faci proiecte care sa fie platite (se plateste valoarea investita: inteligenta, cunoastere, timp. Timpul avand ponderea cea mai mare, pentru ca timpul = VIATA).

Ce m-a deranjat in discutia cu taximetristul - electronist era ca eu ii tot spuneam ca as face proiectele nu doar pentru bani (ma rog, dupa caz, poate si ceva bani ca sa imi sustin hobby-ul fara sa mai trag din salariu) ci pentru satisfactia pe care o am si eu cand gasesc un proiect interesat. Cred ca stiti la ce ma refer altfel nu ati fi aici pe forum.

 

Iar el nici nu ma asculta. O tinea una si buna cu brevete, licente ... Cum ca sa dau dreptul de utilizare a proiectului catre o fabrica si sa primesc redevente.

Cred ca o atitudine echilibrata ne-ar servi cel mai mult.

 

Faza cu comunistii ... aia vor misuna intotdeauna ca si sobolanii in intuneric. Intotdeauna vor fi niste "turci" (ca sa nu zic altceva tot cu 'tz', dar mai bine cu referinte istorice, e "politically correct") care vor vrea sa recolteze ce seamana altii. Si in acelasi timp zbierand cat cuprinde ca e dreptul lor.

Doar au maini si picioare, deci sunt oameni, deci au dreptul de a manca. Nu conteaza ca altii muncesc pentru aceasta. Ei trebuie ca de ....

Sunt pro pentru a da si altora din ce am dar nu cu cutitul la gat ...

EL CULL-AI FACUT ESTE OK NUMAI CA M-AM EXPRIMAT EU GRESIT CRED EU AMPUS SI O POZA SI AM SPECIFICAT CA BUTOANELE O SA FIE 2 SENZORI IR NUMAI CA PRIN FATA LOV VA TRECE OBIECTUL DECI EL NU VA TREBUI SA IL ADAUGE APOI SCADA DACA VINE DIN SENSUL INTRA VA TREBUI ADAUGAT IAR DACA VA IESI VA TREBUI SCAZUT.

MOMENTAN EL ADAUGA DAR SI SCADE SI INVERS 

Ce este mai usor de invatat C sau Pascal.

Observ va C este mai popular decat Pascal si sunt oameni care vorbesc despre el chiar si comenteaza liniile asta pe mine ma ajuta mult sa ilpot invata dar care ar fi mai simplu deoarece eu trebuie sa invat un ingur program deoarece ma incurc in 2 programe SUNT LA INCEPUT DE DRUM PUTIN CONFUS

Link spre comentariu
Vizitator aurelian77

Se poate vedea un puls de cca 50ms. L-am pus asa scurt pentru ca delay-ul ala adunat cu debounce-ul din functia Button va genera un lag la apasarea butonului si am incercat sa il minimizez. 

Normal ca solutia cea mai buna ar fi folosirea unui timer/intrerupere dar am scris programelul sa fie mai simplu.

 

Ar fi o idee buna sa facem un topic unde sa postam snippet-uri, bucati de cod utile ca exemple. Fiecare pune acolo ce doreste, obligatoriu surse si nu fisiere .hex.

In felul acesta cei care chiar vor sa invete sa programeze, se vor putea ajuta de acele exemple ca sa treaca de bariera grea a inceputului cand totul este nefamiliar si aproape incomprehensibil.

 

OFF-Topic: Mi-as dori ca si in acest forum sa gasim lucruri de valoare dar si originale, chiar sa incepem proiecte originale mai complexe, in loc sa cautam tot timpul pe forumurile de afara. Ceva mai mult decat un voltmetru ...

Un lucru ma tot deranjeaza ca atitudine in Romania: cu cine vorbesti despre o idee, prima chestie care apare in dicutie este "cum sa faci bani mai repede". Intrebari naive de genul: "da poti breveta chestia aia?" sau "cati bani faci din cealalta!". Chiar ieri vorbeam cu un taximetrist despre care am aflat ca era electronist ca pregatire (ce coincidenta, nu?) si cand ii spuneam cate chestii faine se pot face prin masina, prima interventie a sa avea legatura cu cati bani se pot face din acest lucru.

 

Nu ma deranjeaza sa se faca bani doar ca as dori sa vad mai mult si chestii nonprofit. Din acest punct de vedere, noi romanii suferim din cauza saraciei impuse. Avem foarte multe resurse (intelectuale si de alt fel) dar vin altii straini (aka investitori) sa le foloseasca in loc sa le folosim noi, iar acest lucru si-a pus amprenta pe psihologia romanului.

Nu sunt religios din fire, dar parca traim timpurile biblice cu vitelu' de aur.

Te rog zimi ce program ai folosit deoarece eu aminstalat mikroc 8.2.0.0 dar la build da eroare 

Link spre comentariu

Salut Aurelian,

 

Am facut modificarea ca sa poti modifica starea backlight-ului si cat timp sta in Initializare.

 

4 Ceea ce nu functioneaza mie pe banda imi numara si apoi imi scade numarul sau invers :(

 

In ceea ce priveste punctul 4 nu inteleg ce vrei sa spui, poate explici mai clar. Eu am facut ce ai cerut tu.

 

Te rog zimi ce program ai folosit deoarece eu aminstalat mikroc 8.2.0.0 dar la build da eroare 

 

Nu exista o versiune 8.2.0.0 de mikroC for PIC. Ultima versiune de mikroC for PIC este 6.6.2 si se poate descarca de aici:

http://www.mikroe.com/downloads/get/29/mikroc_pro_pic_2015_v661_setup.zip

(De fapt este versiunea 6.6.1 dar dupa instalare se face update la 6.6.2).

Aurelian77 v2.zip

Editat de mars01
Link spre comentariu
Vizitator aurelian77

Cel care-ti place tie cel mai mult, pe care-l intelegi mai usor/mai bine si cu care esti mai eficient.

Pai ar fi Pascal dar.... cam greu utilizatori care sa fie darnici cu informatii in c observ casunt multi care dau infornatii dar mie mi se pare greoi ori sunt eu greu de cap.... Oricum dupa ce ammai citit pe aici m-am incurajat din nou si reincep sa invat .Daca uni pot eu de ce sa nu pot . Stiu muylti cred ca asta le este meseria sau au facut o scoala undeva de asa ceva eu stau departe de aceste programe dar cred ca o sa pot sa invat si asa ceva numai nu stiu daca toate aceste limbaje fac acelasi lucru sau unele sunt mai bune ori mai putin bune. Eu am dat vina pe pic si am cumparat altul apoi altul de la 16f627a am treut la 16f628a care avea 2k memorie fata de celalalt apoi am trecut la 16f88740 pimi si ogramada de memorie iar in finalmi-am dat seama ca de fapt eu sunt prost si nu stiu in domeniu asta sa scriu programul nu pic-ul ca programator amluat pickit2 si sunt multumit de el marog.... cateva hex-uri scrise in cateva pic-uri. Eu deacea doresc sa invat un limbaj a ma putea bucura deplin de programele mele copilate. Pe net gasesc destule hexuri dar doresc sa fac eu asa cum as dori sa faca placa care o concep nu cu artificii alte componente etc daca pic-ulpoate sa aprinda un led on/off de ca sa pun si un 4013? Eu asa fac momentan daca un hex face ce mie imi place dar ar mai trebui un led aprins mai pun in schema si un 3013. Dar picu ala ar putea sa faca el toate astea fara a mai pune o gramada de ci deaiurea.

Link spre comentariu

La ora actuala, cei care se numesc programatori programeaza in C si derivate C++, C#. La nivel hobby se mai face programare si in Basic sau Pascal.

Limbajul C este considerat mai aproape de asamblare decat alte limbaje de programare.

 

Intr-un final acel limbaj in care te simti comfortabil sa programezi este cel mai bun pentru tine. Este adevarat insa ca marea majoritate a exemplelor sunt in C si de aceea sansele sa primesti ajutor cand te "poticnesti" sunt mai mari cand ceri ajutor pentru programare in C. 

 

Odata ce te obisnuiesti sa programezi intr-un limbaj iti va fi un pic mai dificil sa intelegi programe scrise in alte limbaje fiindca difera sintaxa desi anumite lucruri pot fi similare. Este cam ca atunci cand vorbesti in germana si auzi pe cineva vorbind in olandeza. Mai intelegi cate ceva dar adesea esti indus in eroare.

 

Daca vei vrea mai tarziu sa programezi in VHDL (pentru FPGA-uri) iti va fi mai usor poate daca inveti sa programezi in Pascal avand in vedere sintaxa asemanatoare.

 

Intr-un final limbajul nu este atat de important pe cat conteaza continutul. Este important sa te exprimi intr-un mod coerent si corect (la fel ca si in limba vorbitta) pentru a putea crea un program care sa faca ceea ce intentionezi.

Editat de mars01
Link spre comentariu
Vizitator aurelian77

Salut Aurelian,

 

Am facut modificarea ca sa poti modifica starea backlight-ului si cat timp sta in Initializare.

 

 

In ceea ce priveste punctul 4 nu inteleg ce vrei sa spui, poate explici mai clar. Eu am facut ce ai cerut tu.

 

 

Nu exista o versiune 8.2.0.0 de mikroC for PIC. Ultima versiune de mikroC for PIC este 6.6.2 si se poate descarca de aici:

http://www.mikroe.com/downloads/get/29/mikroc_pro_pic_2015_v661_setup.zip

(De fapt este versiunea 6.6.1 dar dupa instalare se face update la 6.6.2).

Eu am luat de pe un torent programul cer scuze dar nu sunt in acest domeniu doar vreau sa invat

Mersi de timpul consumat cu mine si raman dator.

In loc de nutoane vor fi 2 senzori digitali IR fiecare la o distanta de 8cm care la trecerea obiectului ei vor avea pe iesirea digitala 1 logic in asteptare 0 logic obiectul este mai mare de 8cm deci el va fi vazut prima data de unul din senzori adica b+ sau b- dupa ce un senzor il va vedea il va vedea si celalalt apoi primu nu il va mai vedea si in final si ultimul ceva de genu logic prima data cand nu este obiect b+ logic 0 b- logic 0 cand va sosi un obiect b+ logic 1 b- logic 0 apoi b+ logic 1 b- logic 1 apoi b+ logic 0 b- logic 1 apoi b+ logic 0 b- logic 0 obiect trecut. Daca asa ma poti intelege obiectul in miscare va actiona primu senzor apoi al doilea senzor apoi primu nu il va mai vedea si in final (sfarsit) nici senzorul 2 nu il mai vede deci obiect trecut de la b+0 si b-0 se trece la b+ sau b- in 1 (depinde de unde vine obiectul) b+1 si b-0 (sau invers depinde de unde vine ogiectul) b+1 si b-1  b+0 si b-1 , b+0 si b-0 obiect trecut.Sau ex trecere spre adaugare iar butoanele le voi denumi cu s1 si s2 fiinca sunt senzori 1 va fi +5vcc 0 va fi 0vcc ar veni

s1=0 si s2=0 (senzori nu vad nici un obiect)

s1=1 si s2=0 (senzorul s1 observa un obiect)

s1=1 si s2=1 (senzor s1 vede obiectul dar acuma obiectul este vazut si de s2)

s1=0 si s2=1 (senzor s1 nu mai vede obiectul dar s2 inca il mai vede)

s1=0 si s2=0 (obiectul a trecut si de s2 iar aparatul ramane in asteptare sa vada din ce sens trece obiectul sa il sacada sau adauge)

ledul da un impuls de lumina la trecerea fiecarui obiect dar la 100 el nu va mai da daca intra obiect iar la 0 idem

Lumina ledului este ca si o confirmare a treceri unui obiect si va anclasa cititorul de culoare ca sa se stie ce obiect este aia cu culoarea o am facuta doar la ia vine impulsul ca sa inceapa sa citeasca culoarea obiectului ea nu sta pornita decat atunci cand un obiect va intra sau iesi .

Difuzorul va bipai cand va iesi un obiect cand afisajul va arata 0 si idem va da un bipait cand un obiect va intra cand pe afisor va indica 100. 

Ar mai fi un buton care sa aprinda ledul de citire si sa il lase aprins la un impuls fara a se mai numara pe afisor iar la a 2 a apesare sa treaca la normal adica activeaza s1 si s2 respectiv contorizarea dar asta nu este obligatorie ca e complicata si mie imi foloseste foarte putin functia asta de manual doar ca dizain ar pica bine ca pe afisor va aparea trecere manuala din automata cum este pana acuma la ia ar fi doar avantajul ca ar putea sa intre iese obiecte mai mult de 100 iar cititorul de culoare sa le deoasebeasca.

Ma gandeam ca asta ar fi ca un ecoder i principui numai ca eu am doi senzori care citesc in loc de contacte ecoderului nu sunt sigur daca asa functioneaza un ecoder dar din cate ma uit pe net cam asta vad ca ar avea in interior 2 contacte )

La ora actuala, cei care se numesc programatori programeaza in C si derivate C++, C#. La nivel hobby se mai face programare si in Basic sau Pascal.

Limbajul C este considerat mai aproape de asamblare decat alte limbaje de programare.

 

Intr-un final acel limbaj in care te simti comfortabil sa programezi este cel mai bun pentru tine. Este adevarat insa ca marea majoritate a exemplelor sunt in C si de aceea sansele sa primesti ajutor cand te "poticnesti" sunt mai mari cand ceri ajutor pentru programare in C. 

 

Odata ce te obisnuiesti sa programezi intr-un limbaj iti va fi un pic mai dificil sa intelegi programe scrise in alte limbaje fiindca difera sintaxa desi anumite lucruri pot fi similare. Este cam ca atunci cand vorbesti in germana si auzi pe cineva vorbind in olandeza. Mai intelegi cate ceva dar adesea esti indus in eroare.

 

Daca vei vrea mai tarziu sa programezi in VHDL (pentru FPGA-uri) iti va fi mai usor poate daca inveti sa programezi in Pascal avand in vedere sintaxa asemanatoare.

 

Intr-un final limbajul nu este atat de important pe cat conteaza continutul. Este important sa te exprimi intr-un mod coerent si corect (la fel ca si in limba vorbitta) pentru a putea crea un program care sa faca ceea ce intentionezi.

Eu caut ceva de incepator adica sa invat sa fac cate ceva pentru mine care sa imi dea placere cand ilutilizez VHDL (pentru FPGA-uri) nu stiu ce sunt astea o sa caut pe google eu ma pucur ca liniile sunt comentate si eu pot sa invat din ele in alte lucruri care le voi face sau voi incerca sa le fac .

Multumesc pentru program eu am dat jos alt program cu denumirea de mikroC complet arhiva mikroc 8.2.0.0 si cu el nu intelegeam de ce nu pot sa copilez dadea erori. Programul care li lai dat tu este bun Mersi mult prietene si raman dator.

Link spre comentariu
Vizitator aurelian77

Uite aici http://www.libstock.com/projects/view/1235/rotary-encoder. Atentie la tipul de encoder, altfel nu merge.

Daca esti dragut imi zici acuma si unde atasez fisierul de ecoder si cum il apelez.

Mersi poentru adresa de descarcare unde se pare ca sunt multe biblioteci pentru Pasca C C+ ETC.

Un mic exemplu cum se apeleaza aceasta biblioteca intr-un program mi-ar fi de mare ajutor pentru a intelege si cum se lucreaza cu bibliotecile astea.

Link spre comentariu

Din pacate nu am acum timp (deja e mult "past bed time") sa imi fac o componenta encoder in Proteus dar incearca sa vezi daca merge cum trebuie aceasta varianta.

// Functia de citire a encoderului este inspirata din solutia BUXTRONICS pentru ARDUINO#define R_CW_FINAL   0x1#define R_CW_BEGIN   0x2#define R_CW_NEXT    0x3#define R_CCW_BEGIN  0x4#define R_CCW_FINAL  0x5#define R_CCW_NEXT   0x6// No complete step yet.#define DIR_NONE     0x0// Clockwise step.#define DIR_CW       0x10// Anti-clockwise step.#define DIR_CCW      0x20#define R_START      0x0#define LOW     0#define HIGH    1#define BUTON_A   RA2_bit         // aici voi citi valoarea "butonului -"#define BUTON_B   RA3_bit         // aici voi citi valoarea "butonului +"#define LED       RA0_bit         // aici este LED-ul#define BACKLIGHT   RA1_bit       // aici se leaga BACKLIGHT-ul (iesirea pentru BL)// Lcd pinout/*  PIN LCD     PIN uC  D7          RB7  D6          RB6  D5          RB5  D4          RB4  EN          RB3  RS          RB2*/sbit LCD_RS at RB1_bit;sbit LCD_EN at RB2_bit;sbit LCD_D7 at RB7_bit;sbit LCD_D6 at RB6_bit;sbit LCD_D5 at RB5_bit;sbit LCD_D4 at RB4_bit;// Directie pini Lcdsbit LCD_RS_Direction at TRISB1_bit;sbit LCD_EN_Direction at TRISB2_bit;sbit LCD_D7_Direction at TRISB7_bit;sbit LCD_D6_Direction at TRISB6_bit;sbit LCD_D5_Direction at TRISB5_bit;sbit LCD_D4_Direction at TRISB4_bit;char init_text[] = "Initializare";char txt[] = "Counter: ";char str[3];                            // string care va stoca valoarea contoruluibit bl;                                 // tine minte starea backlight-uluiunsigned short counter;                 // contorul care este afisat pe ecranunsigned short old_state_bl;            // stocare stare anterioara buton BLunsigned char state;                    // variabila care memoreaza starea// tabela de stari posibileconst unsigned char ttable[7][4] =  {    // R_START    {R_START,    R_CW_BEGIN,  R_CCW_BEGIN, R_START},    // R_CW_FINAL    {R_CW_NEXT,  R_START,     R_CW_FINAL,  R_START | DIR_CW},    // R_CW_BEGIN    {R_CW_NEXT,  R_CW_BEGIN,  R_START,     R_START},    // R_CW_NEXT    {R_CW_NEXT,  R_CW_BEGIN,  R_CW_FINAL,  R_START},    // R_CCW_BEGIN    {R_CCW_NEXT, R_START,     R_CCW_BEGIN, R_START},    // R_CCW_FINAL    {R_CCW_NEXT, R_CCW_FINAL, R_START,     R_START | DIR_CCW},    // R_CCW_NEXT    {R_CCW_NEXT, R_CCW_FINAL, R_CCW_BEGIN, R_START},  };// functia de citire a encoderului, interpretare directie si debounceunsigned char process() {  // Obtine starea pinilor de intrare, a butoanelor  volatile unsigned char pinstate = ((BUTON_A << 1) | BUTON_B);  // Determina noua stare functie de pini si de tabela de stari  state = ttable[state & 0xf][pinstate];  // Intoarce evenimentul generat  return state & 0x30;}void init() {     VREN_bit = 0;                      // Dezactivare Voltage Ref     CMCON = 7;                         // Dezactivare comparatoare     TRISA0_bit = 0;                    // Setare RA0 ca iesire; aici este LED-ul     TRISA1_bit = 0;                    // Setare RA1 ca iesire; aici este BACKLIGHT-ul          LED = LOW;                         // Setare LOW a iesirii LED     BACKLIGHT = HIGH;                  // Backlight-ul este default ON asa ca il facem HIGH// Setare RA2, RA3, RA4 ca intrari, aici sunt butoanele     TRISA2_bit = 1;                    // butonul PLUS     TRISA3_bit = 1;                    // butonul MINUS     TRISA4_bit = 1;                    // butonul pentru control BACKLIGHT     TRISB3_bit = 0;                    // Setare RB3 ca si OUTPUT (pentru PWM)     Lcd_Init();                        // Initializare LCD     PWM1_Init(2000);                   // Initializare PWM cu frecventa de 3KHz     PWM1_Set_Duty(128);                // Factor umplere 50% la iesirea PWM (pin RB3)     Lcd_Cmd(_LCD_CLEAR);               // Clear display     Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off     bl = 1;          state = R_START;}void main() {     init();  //apelare functia INIT     Lcd_Out(1, 1, init_text);     /* Cat timp nici-unul din butoane nu este apasat,        programul sta si asteapta apasarea unui buton.        In acest timp, pe ecran este afisat: "Initializare"     */     while (Button(&PORTA, 2, 10, 1) && Button(&PORTA, 3, 10, 1)) {             if (Button(&PORTA, 4, 10, 1)) {             // Detect HIGH pe buton           old_state_BL = 1;                        // updateaza flag        }        if (old_state_BL && Button(&PORTA, 4, 10, 0)) {   // se detecteaza tranzitia de la buton liber la buton apasat           bl = ~bl;                                      // schimba starea backlight-ului           old_state_BL = 0;                              // updateaza flag-ul           BACKLIGHT = bl;        }     }     Lcd_Out(1,1,"                ");               // LCD clear. Se poate face si cu Lcd_Cmd dar parca este mai rapid asa     Lcd_Out(1,1, txt);                             // afisaj pe ecran defaultul de dupa initializare     Lcd_Out(1,12,"0");     while(1) {        int tmpdata;                                // variabila care contine date temporare        if (Button(&PORTA, 4, 10, 1)) {             // Detecteaza HIGH pe buton           old_state_BL = 1;                        // updateaza flag        }        if (old_state_BL && Button(&PORTA, 4, 10, 0)) {   // se detecteaza tranzitia de la buton liber la buton apasat           bl = ~bl;                 // schimba starea backlight-ului           old_state_BL = 0;         // updateaza flag-ul           RA1_bit = bl;        }        tmpdata = process();         // aici chem rutina de citire si interpretare a encoderului        if (tmpdata == DIR_CW) {     // daca directia este CW (clockwise) atunci process() intoarce 0x10  adica DIR_CW           if (counter == 100) {     // daca contorul este 100 atunci            counter = 100;           // ramane 100 indiferent cate pulsuri mai primeste            PWM1_start();            // face galagie in BUZZER pentru 150ms            delay_ms(150);            PWM1_stop();           }           else {                    // altfel            counter++;               // incrementam contorul            LED = 1;                 // si facem un puls de 50ms pe LED            delay_ms(50);            LED = 0;           }           ByteToStr(counter, str); // convertim contorul din numar in string pentru a putea if afisat           Lcd_Out(1, 10, "   ");   // curatam ecranul de ce a fost anterior pe pozitiile unde se afiseaza contorul           Lcd_Out(1, 10, str);     // afisam valoarea contorului        }                if (tmpdata == DIR_CCW ) {   // daca directia este CCW (counter clockwise) atunci process() intoarce 0x20 adica DIR_CCW           if (counter == 0) {       // daca contorul este 0 atunci            counter = 0;             // ramane 0 indiferent cate pulsuri mai primeste            PWM1_start();            // face galagie in BUZZER  pt 150ms            delay_ms(150);            PWM1_stop();           }           else {            counter--;               // decrementeaza contorul cu o unitate            LED = 1;                 // si facem un puls de 50ms pe LED            delay_ms(50);            LED = 0;           }           ByteToStr(counter, str); // convertim contorul din numar in string pentru a putea if afisat           Lcd_Out(1, 10, "   ");   // curatam ecranul de ce a fost anterior pe pozitiile unde se afiseaza contorul           Lcd_Out(1, 10, str);     // afisam valoarea contorului        }     }}

Aurelian77 v3.zip

Editat de mars01
Link spre comentariu

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



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări