Skocz do zawartości

at89s8253 i czujniki CNY70


qnrad

Pomocna odpowiedź

void left(){

P2_0=1;P2_2=0;

P2_1=P2_3=0;

}

void right(){

P2_0=P2_2=0;

P2_1=0;P2_3=1;

}

void move(){

P2_0=P2_3=1;

P2_1=P2_2=0;

}

void back(){

P2_0=P2_3=0;

P2_1=P2_2=1;

}

void stop(){

P2_0=P2_3=0;

P2_1=P2_2=0;

}

void interr_init(){

EA=1;

EX0 = 1;

EX1 = 1;

}

void p1() interrupt 0{

move();

sleep(20);

}

void p2() interrupt 2{

left();

sleep(20);

}

void main(){

unsigned char ster;

timer_init();

interr_init();

time=5;

P2_0=0;

P2_1=0;

P2_2=0;

P2_3=0;

P2_4=1;

while(1){

ster=~P1 & 0x07;

switch(ster){

case 1: right(); break;

case 2: move(); break;

case 4: left(); break;

}

sleep(10);

stop();

sleep(10);

}

}

Link do komentarza
Share on other sites

Po co tam masz przerwania? Nie widzę przyłączonej żadnej biblioteki do kodu (w sensie z obsługą przerwań, gpio, timerów, ogólnie rejestry)? Jakiego używasz kompilatora? Masz dobry procesor podany?

Link do komentarza
Share on other sites

Biblioteka jest dołączona tylko po prostu tutaj nie wkleiłem tego fragmentu. Przerwania ot tak sobie żeby zobaczyć czy działają😉 w jakim sensie dobry procesor? mam taki procesor jaki napisałem w temacie.

Link do komentarza
Share on other sites

Spróbuj bez przerwań, prościej. I dlaczego rozważasz tylko ster=4,2 lub 1? Jak będziesz jechał środkiem linii i trafisz na zakręt 90 st to robot pojedzie w krzaki. Proponuję zwykły switch-case w pętli głównej z zachowaniem dla wszystkich ośmiu opcji na razie.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

wszystkie osiem przypadku łatwo rozpatrzeć ale nie o to chodzi. po prostu mikroprocesor wcale tych warunków nie rozpatruje bo nie otrzymuje właściwych sygnałów z czujników chyba. nie wiem:/ zrobię jeszcze raz te czujniki. nie ma lekko;)

Link do komentarza
Share on other sites

Sprawdzałem wcześniej na diodach czy to w ogóle działa i diody pokazują, że czujniki rozróżniają czerni i biel. Tylko mikrokontroler nie bardzo:/

To już nie bardzo rozumiem. Weź tak: do trzech nóżek podepnij czujniki, na trzech wyjściach daj diody, napisz program trzylinijkowy który będzie zaświecał odpowiednią diodę jeżeli czujnik wykrywa czerń, jak to zadziała to i cały program. A może nie odczytujesz wartości rejestru pinx.y, tylko portx.y? nie znam się na koendach dla uC w innych językach niż bascom i asm, ale taki prosty błąd może się zdarzyć.

Link do komentarza
Share on other sites

jak jest napięcie to musi działać, może spróbuj wgrać najprostszy program w BASCOMie, bo nie ma zbytnich możliwości żeby to był błąd elektroniki. To, że nie masz ADC skutkuje głównie tym, że nie możesz reguować progu przełączania.

Link do komentarza
Share on other sites

może o ten próg przełączania chodzi. bo tam nie są takie napięcia 0=0V 1=5V. Jest tak dość blisko ale może za mało. w Bascomie nie umiem pisać programów.

Link do komentarza
Share on other sites

Nie możesz tego sprawdzić po prostu zaświecając 3 diody w zależności od tego, który czujnik wykryje "czerń"? I mówię o podłączeniu diod do pinów procesora, niech to będzie chociaż polutowane na pająka, ale będziesz miał pewność. Jeśli faktycznie piny "nie dają rady" rozróżnić sygnałów z czujników na niskie i wysokie, to przecież podałem Ci linka jak zaprząc do tego zadania wzmacniacz LM324 jako komparator z potencjometrem do regulacji progu załączania i wsio w temacie..

Link do komentarza
Share on other sites

Jak jest blisko, to musi wystarczyć, czytałem w dokumentacji jakiegoś uC AVR, że progi gwarantowane to 0<30% i 1>60%, weź podłącz właśnie te diody jak Nawyk pisze. A właśnie, Nawyk, Ty znasz C i BASCOMa, ten program na pewno odczytuje wartość rejestrów pinx.y a nie portx.y?

Link do komentarza
Share on other sites

Chechli, tego nie da się tak naprawdę ogarnąć w tym kodzie, dopóki nie dowiemy się, z jakich bibliotek korzysta Autor. BTW qnrad, dalczego nie użyjesz 'normalnego" 😃 , popularnego uC? W sensie jakiejś ATmegi (pewnie zaraz ktoś wyskoczy, że nie można ograniczać się do jednej rodziny 🙂 ).

Link do komentarza
Share on other sites

Hmm, teraz tak poogląałem trochę kodów w C na 8051 i jednak jest pewna różnica w stosunku do AVRów, więc jednak to co pisałem powyżej może być błędne. Niestety qnrad, chyba nikt tutaj nie używa 8051, więc z pomocą może być ciężko, jeśli chodzi o kod. Sprawdź jeszcze działanie tego kodu przy przyciskach (zworkach) podpiętych zamiast czujników.

Link do komentarza
Share on other sites

Używam 8051 bo akurat na takim sie w szkole uczylem;p na przyciskach wszystko działa. piny nie odczytują wartości z czujników bo napięcia są zbyt małe. Zrobie tak jak w tym linku ze wzmacniaczem. Dzięki za pomoc;)

Link do komentarza
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!

Anonim
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.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.