Myhayxx Postat Ianuarie 19, 2014 Partajează Postat Ianuarie 19, 2014 buna ziua!in ce consta de fapt problema mea:vreau sa construiesc un program in mikroC for PIC pe care sa il scriu intr-un PIC16F877A care sa faca urmatoarele lucruri; actionanad de la un buton botezat "START" sa porneasca un motor in sensul de rotatie sa zicem dreapta care antreneaza o banda ce se roteste pe niste role stanga dreapta, ajunsa la capatul cursei un limitator "LD" sa opreasca motorul dupa care dam "START" porneste motorul in partea stanga pana la capatul cursei unde limtatorul "SD" va opri motorul si de aici se reia ciclul.Eu am incercat niste "artificii" din ce am mai citit pe net..etc dar nu am reusit mai nimic. Daca vrea cineva sa ma ajute ii multumesc din suflet...asa ca nu dati prea tare cu "bata" ca nu am cunostinte in ceea ce priveste programarea..ma descurc sa scriu un program in care sa aprind niste leduri,sa fac un numarator de exemplu dar n-am mai scris pana acum un program sa mi se faca niste porturi de iesiri in functie de cele de intrare..pun si programul scris de mine:void main() { PORTB = 0; TRISB = 0; PORTD = 0; TRISD = 0; # define MS 0x01 // motorul porneste in partea dreapta # define MD 0x02 // motorul porneste in partea stanga # define START 0x01 // buton statrt # define LS 0x02 // limitator stanga # define LD 0x03 // limitator dreapta { while((PORTB (IN) &START)==0; //ASTEPTAM START PORTD(OUT , MS); while((PORTB (IN) &LS)==0; //SE OPRESTE LA CAPATUL CURSEI PORTD(OUT , 0); while((PORTB (IN) &START)==0; //ASTEPTAM START PORTD(OUT , MD); while((PORTB (IN) &LD)==0; //SE OPRESTE LA CAPATUL CURSEI PORTD(OUT , 0); }} Link spre comentariu
UDAR Postat Ianuarie 19, 2014 Partajează Postat Ianuarie 19, 2014 Care sunt intrările și care sunt ieșirile ?Ce-i cu #define - urile alea ? Buclele while nu sunt închise ca lumea !!! ș.a.m.d.Zici că ai mai scris - păi ia-l pe ăla cu LED-uri și modifică-l . Link spre comentariu
Myhayxx Postat Ianuarie 19, 2014 Autor Partajează Postat Ianuarie 19, 2014 "Multumesc de ajutor"vad ca le stii pe toate...ei bine tinele pentru tine .probabil ti-a crescut numarul de mesaje pe Elforum Link spre comentariu
UDAR Postat Ianuarie 19, 2014 Partajează Postat Ianuarie 19, 2014 Sincer , nu am înțeles de ce te-ai supărat . Chiar voiam să ajut , ca de la începător la începător, că avansații nu cred că au prea mult timp pentru asta. În fine, cum consideri. Link spre comentariu
Myhayxx Postat Ianuarie 19, 2014 Autor Partajează Postat Ianuarie 19, 2014 bine. daca vrei sa ma ajuti scrie-mi te rog un program de la cap la coada in care daca faci o intrare pe portul B sa zicem sa se faca activa o iesire din portul C. mai departe ma descurc singur Link spre comentariu
UDAR Postat Ianuarie 19, 2014 Partajează Postat Ianuarie 19, 2014 Doamne ferește, nu voiam să te verific ! Credeam că ai scris un program cu butoane și LEd-uri care ar fi fost foarte aproape de ceea ce vrei să faci acum . OK , promit că până mâine seară cel târziu îți fac - la nivelul meu de începător. Acum mă străduiesc să testez un încărcător NiCd cu PIC12F675. Link spre comentariu
Vlad Mihai Postat Ianuarie 19, 2014 Partajează Postat Ianuarie 19, 2014 eu folosesc compilatorul de la MikroC, desi sunt in sesiune, as putea sa te ajut sa dezvoltam codul , recent am terminat un proiect ce avea ca scop controlul unui motor de curent continuu si monitorizarea parametrilor, cand zic control ma refer la controlul complet, rotatii, sens, un tahogenerator pentru un sistem de mentinere a unui anumite turatii si totul prin bluetoth de pe pc. doar nu pricep ce parte hard ai. si ce sa faca mai exact. Link spre comentariu
Mircea Postat Ianuarie 19, 2014 Partajează Postat Ianuarie 19, 2014 ...daca faci o intrare pe portul B sa zicem sa se faca activa o iesire din portul C...Dar de help-ul de la MikroC si de exemplele venite cu compilatorul ai auzit? Cartea gratuita de pe site-ul Mikroe este foarte folositoare ca sa completeze explicatiile din exemple. Uite aici: http://www.mikroe.com/chapters/view/17/chapter-4-examples/#c4v3.In plus, Google este foarte bun ca sa te ajute sa-ti gasesti programe similare deja facute. Nu uita de forumul Mikroe aici: http://www.mikroe.com/forum/viewforum.php?f=88.PS: Vad ca la capitolul atitudine esti destul de infipt, e si de mirare ca cineva iti mai raspunde dupa cum interpelezi colegii care vor sa ajute. Un pic de calm si modestie iti sunt de mare folos in viata ca sa-ti atingi scopurile, zic eu.PPS: Daca te intrebi de ce nu-ti dau direct exemplul de la functia Button, care face exact ce vrei tu - activezi o intrare si schimbi o iesire in consecinta, din help - este pentru ca nu scriu de pe PC-ul unde am compilatorul instalat.LE: uite-l aici online http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/button_library.htm Link spre comentariu
Myhayxx Postat Ianuarie 19, 2014 Autor Partajează Postat Ianuarie 19, 2014 partea de hard nu e aceea pe care am detaliato mai sus se pare prost.eu vreau sa invat sa scriu un program in mikroC in care daca alimentezi cu 5V un pin de pe un port de intrare sa se faca activ un pin din portul de iesire si sa ramana activ pana la un impuls pe al doilea pin de intrare. proiectul e unul mai stufos pe care sper sa ajung sa-l inteleg si sa-l construiesc singur. Link spre comentariu
UDAR Postat Ianuarie 19, 2014 Partajează Postat Ianuarie 19, 2014 Pentru că m-am întrerupt cu ce lucram - îmi mai lipsește ceva - am scris asta la repezeală. La build dă OK, poate se mai uită cineva peste . Dacă vrei să-l testezi hard ( simulat pe breadboard ) o să-ți spun cum. /* Vom face intrari RB0 - RB2 , restul iesiri . Vom folosi dintre acestea RB3 si RB4 . RB0 = 1 - butonul START RB1 = 1 - limitatorul LS RB2 = 1 - limitatorul LD RB3 = 1 - motorul merge spre stanga MS RB4 = 1 - motorul merge spre dreapta MD Butonul START va if ignorat cat timp motorul merge Daca la pornire caruciorul este intre limitatoare , va porni spre dreapta Se presupune ca dupa oprirea la un capat limitatorul respectiv ramane actionat*/ char stare ; // declaram variabila stare ca tip char void main() { // programul principal ADCON1 = 0x07; // dezactivez intrarile analogice TRISA = 0; TRISB = 0X07; // 0 ,1 si 2 intrari TRISC = 0; TRISD = 0; TRISE = 0; PORTA = 0; // starea initiala zero PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; INTCON = 0; // dezactivez intreruperile while (1) { // bucla principala a programului while (1) { // In aceasta bucla astept apasarea butonului START if (PORTB.B0) stare = 1; // s-a apasat START Delay_ms(50) ; // astept 50 ms if (PORTB.B0 && stare) { // verific ca e apasat in continuare if ( PORTB.B2) PORTB.B3 = 1; // caruciorul este la extrema dreapta, pleaca spre stanga else PORTB.B4 = 1; // daca nu va porni spre dreapta break; // ies din bucla } else stare = 0; // resetez Delay_ms (10); // Incetinim bucla } // In acest interval motorul merge in unul din sensuri while (1) { // In aceasta bucla astept actionarea unui limitator if( PORTB.B1 || PORTB.B2 ) { // S-a actionat un limitator , opresc motorul PORTB.B3=0; PORTB.B4=0; break; // ies din bucla } Delay_ms(10); // Incetinim bucla } }} Link spre comentariu
Myhayxx Postat Ianuarie 19, 2014 Autor Partajează Postat Ianuarie 19, 2014 multumesc mult de program.. cu mici modificari l-am facut sa execute ceea ce imi doream..acum as mai avea o intrebare si daca se rezolva si problema asta ar fi gata: ce trebuie sa mai adaug sa se repete programul de 10 ori dupa care sa se opreasca?/* Vom face intrari RB0 - RB2 , restul iesiri . Vom folosi dintre acestea RB3 si RB4 . RB0 = 1 - butonul START RB1 = 1 - limitatorul LS RB2 = 1 - limitatorul LD RB3 = 1 - motorul merge spre stanga MS RB4 = 1 - motorul merge spre dreapta MD Butonul START va if ignorat cat timp motorul merge Daca la pornire caruciorul este intre limitatoare , va porni spre dreapta Se presupune ca dupa oprirea la un capat limitatorul respectiv ramane actionat*/ char stare ; // declaram variabila stare ca tip char void main() { // programul principal ADCON1 = 0x07; // dezactivez intrarile analogice TRISA = 0; TRISB = 0X07; // 0 ,1 si 2 intrari TRISC = 0; TRISD = 0; TRISE = 0; PORTA = 0; // starea initiala zero PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; INTCON = 0; // dezactivez intreruperile while (1) { // bucla principala a programului while (1) { // In aceasta bucla astept apasarea butonului START if (PORTB.B0) stare = 1; // s-a apasat START Delay_ms(50) ; // astept 50 ms if (PORTB.B0 && stare) { // verific ca e apasat in continuare if ( PORTB.B2) PORTB.B3 = 1; // caruciorul este la extrema dreapta, pleaca spre stanga else PORTB.B4 = 1; // daca nu va porni spre dreapta break; // ies din bucla } else stare = 0; // resetez Delay_ms (10); // Incetinim bucla } // In acest interval motorul merge in unul din sensuri while (1) { // In aceasta bucla astept actionarea unui limitator if( PORTB.B1 ) { // S-a actionat un limitator , opresc motorul PORTB.B3=0; PORTB.B4=0; break; // ies din bucla } Delay_ms(10); // Incetinim bucla } while (2) { while (2) { if (PORTB.B0) stare = 1; Delay_ms(50) ; if (PORTB.B0 && stare) { if ( PORTB.B1) PORTB.B2 = 1; else PORTB.B3 = 1; break; } else stare = 0; Delay_ms (10); } while (2) { if( PORTB.B2 ) { PORTB.B3=0; PORTB.B4=0; break; } Delay_ms(10); } }}} Link spre comentariu
UDAR Postat Ianuarie 19, 2014 Partajează Postat Ianuarie 19, 2014 L-ai compilat și build - at așa ? Că ce ai adăugat nu e bine ! S-ar putea să nu mai stau în seara asta ( cred că mă uit la snooker ) așa că iți răspund la ce m-ai întrebat. Ca să repeți de n ori faci ceva de genul : i = 0;while (i<n) {// aici scrii programul } Link spre comentariu
Myhayxx Postat Ianuarie 19, 2014 Autor Partajează Postat Ianuarie 19, 2014 multumesc inca odata.nu stiu de ce nu e bine ca eu am simulat programul in "ISIS"unde am pus butoane si motorul si lucreaza corect. O seara buna! Link spre comentariu
UDAR Postat Ianuarie 19, 2014 Partajează Postat Ianuarie 19, 2014 Vreau să zic că nu pare să ajungă niciodată la bucla while(2), mai mult nu se împerechează acoladele de asta sunt curios cum nu ți-a dat eroare. Poate că simulatorul e deștept și ignoră codul la care nu poate ajunge. Mai vorbim. Link spre comentariu
Mircea Postat Ianuarie 20, 2014 Partajează Postat Ianuarie 20, 2014 As sugera inlocuirea oricarui while(2) cu while(1). Acel "1" dintre paranteze este subiectul "statement"-ului while. Unde "1" inseamna True, "0" inseamna False. "2" nu inseamna nimic, d-aia nici nu intra in acea bucla zic eu. Intre paranteze trebuie sa ai un boolean. Citeste asta: http://answers.unity3d.com/questions/40713/how-to-use-a-while-loop-obviously-not-inside-funct.html Evident, alta este cand ai while(i Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum