Skocz do zawartości
Zaloguj się, aby obserwować  
mpsk2

[LineFollower]Dosyć standardowo, ATMega8+L293D

Pomocna odpowiedź

Witam

Proszę o pomoc w sprawdzeniu tego co skleciłem z wiedzy własnej i internetu. Szczególnie program i płytki

Chciałbym wiedzieć takie rzeczy jak "czy będzie działać" zanim zrobię.

Zasilanie 7,2V pewnie, minimum 6V (akumulatorki)

#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>

//porty C robią za sterowanie silnikiem

//porty D robią za wejście czujnika linii i wyjście 3 diod

//

//int SPT(); //silnik prawy tył
//int SPP(); //silnik prawy przód
//int SPS(); //silnik prawy stop
//int SLT(); //silnik lewy tył
//int SLP(); //silnik lewy przód
//int SLS(); //silnik lewy stop
int TYL(int); //jazda do tyłu - napisana
int PRZ(int); //Jazda do przodu - napisana
int SWL(); //skręć w lewo - napisana
int SWP(); //skręć w prawo - napisana
//int ZAW(); //zawróć - narazie musze miec roota, by wiedziec jak on się obraca (miejscu czy nie)
int RNS(); //stop - napisana
int PKR(); //procedura kierowania robota - napisana
int POP(); //procedura obsłógi programu - napisana
int PTL(); //przypisuje moim ułatwieniom numerki - napisane 
int ZTL(); //zeruje je - napisana


int c1,c2,c3,c4; //zmienne definiowane globalnie mają pierwotnie wartość 0, zmienne numerowane od lewej
int A;//info, tam była linia 0-nie było, 1-po lewej, 2-prawo, dla obu każę mu zawsze skręcać w lewo, narazie


int main()
{

DDRD=0xF0;//4 pierwsze wejścia, 4 następne wyjścia - czujnik lini i 3 sygnalizatory - diody
DDRC=0xFF;//8 wyjść, 6 pierwszych do sterowania silnikiem, następne 2 bez celu
//pętla nieskończona

POP();

return 0;
}
int POP(){
while(PKR()){_delay_ms(25);}
return 1;
}

int ZTL(){c1=0;c2=0;c3=0;c4=0; return 1;}

int PTL(){
if(PINC & 0x01)c1=1; 
if(PINC & 0x02)c2=1; 
if(PINC & 0x04)c3=1; 
if(PINC & 0x08)c4=1; return 1;}

int PKR(){
//dla ułatwienia rozpiszę piny wejścia na zmienne

PTL();

//w naszym przypdku wszystkie czujniki ustawione są w jednej lini

//jeżeli 2 środkowe wskazują, że jest ok, a pozostałe, że nie to znaczy, że jest ok
if((c2==c3==1) && (c1==c4==0)) {PRZ(); ZTL(); return 1;}
//jeżeli 1 z 2 lewe działają to skręca w lewo
if((c2==1 || c1==1) && (c3==c4==0)) {SWL(); ZTL(); return 1;}
//jeżeli 1 z 2 prawe działają to skręca w prawo
if((c2==c1==0) && (c3==1 || c4==1)) {SWP(); ZTL(); return 1;}
//jeżeli żaden to pojedz 2s do przodu, 
//jak będzie po drodze to jazda, a jak nie to klapa, koniec (narazie bez zawracania)
if(c1==c2==c3==c4==0){PRZ(); for(int i = 0 ; i < 8; i++){_delay_ms(255); 
		PTL(); if(c1==1 || c2==1 || c3==1 || c4==1){ ZTL();return 1;} } ZTL(); return 0;}

//3 linie po lewej
if(c1==c2==c3==1 && c4==0 && A==0) {A=1; PRZ(2); PTL(); 
		if(c1==c2==c3==c4==0){ TYL(2); ZTL();} else{PRZ();return 1;} }

if(c1==c2==c3==1 && c4==0 && A==1) {SWL();for(int i = 0 ; i < 4; i++)_delay_ms(255);A=0; return 1; }
//3 linie po prawej
if(c4==c2==c3==1 && c1==0 && A==0) {A=2; PRZ(2); PTL(); 
		if(c1==c2==c3==c4==0){ TYL(2); ZTL();} else{PRZ();return 1;} }

if(c4==c2==c3==1 && c1==0 && A==2) {SWP();for(int i = 0 ; i < 4; i++)_delay_ms(255); return 1; }

//4 czujniki - skręca w lewo
if(c4==c2==c3==c1==1 && A==0) {A=1; PRZ(2); PTL(); 
		if(c1==c2==c3==c4==0){ TYL(2); ZTL();} else{PRZ();return 1;} }

if(c4==c2==c3==c1==1 && A==1) {SWL();for(int i = 0 ; i < 4; i++)_delay_ms(255); return 1; }


}

int RNS(){
PORTC=0x00; // stop
}

nt SWL(){ PORTD|=0x80;
PORTC=0x78; // w prawy przód, lewy tył
}

int SWP(){PORTD|=0x40;
PORTC=0xD4; // w prawy tył, lewy przód
}

int PRZ(int x=-1){PORTD|=0xC0;
PORTC=0xD8;
if(x==-1)return 1;
x*=4;
while(x--)_delay_ms(255);
return 1;
}

int TYL(int x=-1){
PORTC=0x74;
if(x==-1)return 1;
x*=4;
while(x--)_delay_ms(255);
return 1;
}

Udostępnij ten post


Link to post
Share on other sites

Zdajesz sobie sprawę że stabilizator L7805 musi być zasilany napięciem > 7V?

Udostępnij ten post


Link to post
Share on other sites
Zasilanie 7,2V pewnie, minimum 6V

Ale 6<7, dlatego pytałem.

Udostępnij ten post


Link to post
Share on other sites

hmm... masz racje, a jak to wyeliminować (oprócz odrzucenia opcji zasilania <7V)

innych błędów brak??

Udostępnij ten post


Link to post
Share on other sites

Wykorzystaj stabilizator LDO, np. LM330

Udostępnij ten post


Link to post
Share on other sites

Ok, jeszcze jakieś błędy, np. w programie??

Udostępnij ten post


Link to post
Share on other sites

dobra - program nie będzie działał

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

Zaloguj się, aby obserwować  

×
×
  • Utwórz nowe...