Skocz do zawartości

at89s8253 i czujniki CNY70


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);

}

}

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?

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.

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.

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;)

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

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.

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.

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

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?

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 🙂 ).

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.

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;)

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...