Sari la conținut
ELFORUM - Forumul electronistilor

Line follower 2 senzori


Vizitator bofovidiu

Postări Recomandate

Vizitator bofovidiu

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
  • Răspunsuri 3
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • nooob64

    1

Top autori în acest subiect

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 :rade:

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

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

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

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