Vizitator bofovidiu Postat Iunie 28, 2011 Partajează Postat Iunie 28, 2011 Salut, Sunt incepator cu microcontrolerele, mi-am ales ca si lucrare de licenta un line follower.Placa este facuta de un coleg si programul in general cam 80%.La acest proiect folosesc un microcontroler pic16f870 si punti-h L298NAm reusit sa rezolv problema cu senzori dar acuma alta problema am intampinat cu motoarele Aceasta este functia care controleaza motoarele prin intreruperi.void interrupt(){ if (INTCON.T0IF){ motorcnt++; if (motorcnt>=10){ MOTOR1=motor1sens; MOTOR2=motor2sens; motorcnt=0; }else{ if (motorcnt==motor1time) MOTOR1=!motor1sens; if (motorcnt==motor2time) MOTOR2=!motor2sens; } INTCON.T0IF=0; }}daca folosesc ca si valoare 3 la motor1sens=3; se invart motoarele de numa numa pe langa asta am mai incercat sa modific la registrul option_reg factorul de prescalare 1:32 dar nimicMa poate ajuta cineva.....pls raman dator. Link spre comentariu
nooob64 Postat Iunie 28, 2011 Partajează Postat Iunie 28, 2011 Ai aici un site caclulator pt timere care genereaza si cod ... cel mai simplu http://eng-serve.com/pic/pic_timer.html TIP:Cind ai robotul in functiune pe circuit nu folosii nici o intrerupere la citirile senzorilor si comanda motoarelor , lasa controlerul sa raspunda imediat. Uite aici un proiect de al meu tot cu line folower de acum 2 ani http://elforum.info/viewtopic.php?f=205&t=59852 LE. se pare ca nu mai sunt poze si atasamente la acel proiect ... atasez codul [attachment=0]robot.c[/attachment] Link spre comentariu
Vizitator bofovidiu Postat Iunie 30, 2011 Partajează Postat Iunie 30, 2011 sincer din programu acela nu prea am inteles asa de multe pentru inceput....dar linkul respectiv cu calcularea TMR0 sper sa ma ajute.....daca nu vin iarasi cu un post cu tot programu si sa-mi dai alte detalii....Mersi Link spre comentariu
Vizitator bofovidiu Postat Iunie 30, 2011 Partajează Postat Iunie 30, 2011 salutare din nou,am incercat azi mai multe modalitati aici e codul sursa tot al programului ma poate ajuta cineva cu el sa functioneze ok sau ce sa modific ca sa mearga ok?mersi....#define LED1S PORTB.F0#define LED2D PORTB.F1#define MOTOR1 PORTB.F2#define MOTOR2 PORTB.F4#define MOTOR1S PORTB.F3#define MOTOR2S PORTB.F5#define ACTIV 1#define INACTIV 0unsigned char motorcnt,motor1time,motor2time,sensor1dv,sensor2sa,i;bit motor1sens, motor2sens, motor1, motor2;void interrupt(){ if (INTCON.T0IF){ motorcnt++; if (motorcnt>=10){ MOTOR1=motor1sens; MOTOR2=motor2sens; motorcnt=0; }else{ if (motorcnt==motor1time) MOTOR1=!motor1sens; if (motorcnt==motor2time) MOTOR2=!motor2sens; } INTCON.T0IF=0; }}void readSensors(){ ADCON0.CHS0=0; ADCON0.GO_DONE=1; while (ADCON0.GO_DONE) continue; sensor1dv=ADRESH; ADCON0.CHS0=1; ADCON0.GO_DONE=1; while (ADCON0.GO_DONE) continue; sensor2sa=ADRESH;}void main(){ ADCON0=0b11000001; ADCON1=0x04; TRISB=0xC0; OPTION_REG=0x4; INTCON.T0IE=1; //INTCON.PEIE=1; INTCON.GIE=1; while(1){ readSensors(); // motor1time=4; //motor dreapta // motor2time=4; //motor stanga if(sensor1dv>125 && sensor2sa>125) { LED1S=1; LED2D=1; // motor1time=4; // motor2time=4; } if(sensor1dv<115 && sensor2sa>0) { LED1S=1; LED2D=0; //motor1time=0; //motor2time=4; } if(sensor2sa<100 && sensor1dv>0) { LED1S=0; LED2D=1; // motor1time=4; // motor2time=0; } }} 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