Skocz do zawartości

[Bascom] Problem z ADC


KD93

Pomocna odpowiedź

Siemka

Pisze bo jestem skołowany, nigdy nie miałem takiego problemu wcześniej.

Otóż pisząc program do mojego minisumo natknąłem się na dziwny problem.

Jeśli w pętli głównej czytam wartości z KTIR'ów przez ADC, to wszystko działa:

Do

Ktir_p = Getadc(5)                                          'sprawdzenie czujników linii
Ktir_l = Getadc(6)

Loop   

Jesli w pętli przeprowadzam "symulację" czujnika zbliżeniowego, to tez działa:

Do

D1 = 1
Waitus 20
Led1 = Sfh1
D1 = 0
Waitus 20

Loop

Natomiast kiedy to połączę:

Do

Ktir_p = Getadc(5)                                          'sprawdzenie czujników linii
Ktir_l = Getadc(6)

D1 = 1
Waitus 20
Led1 = Sfh1
D1 = 0
Waitus 20

Loop

To nie działa symulacja czujnika zbliżeniowego, dioda świeci ledwo widzialnym przez komórkę światłem. Nic nie daje dodanie opóźnienia po funkcjach GETADC, włączanie i wyłączanie timera generującego częstotliwość (CTC) oraz ADC na czas sprawdzania KTIR'ów. Jeśli tylko zostanie wywołane GETADC, to program już nie działa prawidłowo.

Ma ktoś jakieś pomysły? Błąd kompilatora? Zacząć pisać od nowa w C? W razie potrzeby mogę zamieścić inne fragmenty programu, ale ustawienia są dość typowe i nigdy nie miałem problemu w tym stylu.

Link do komentarza
Share on other sites

Próbowałeś testować ze Start ADC i Stop ADC? Nie przepełniasz zmiennych Ktir_p i Ktir_l?

Na marginesie.

W którymś helpie było napisane, że w Bascomie czasami poprawne odczyty z ADC wychodzą za drugim razem, czyli bezpieczniej byłoby dać:

Ktir_p = Getadc(5)                                          'sprawdzenie czujników linii
Ktir_p = Getadc(5)  
Ktir_l = Getadc(6)
Ktir_l = Getadc(6) 

Ale u mnie pomogło to tylko raz, za to wydłużyło czas pracy programu.

Link do komentarza
Share on other sites

Treker, no właśnie próbowałem ze START i STOP ADC, ale działa tylko wtedy kiedy jest STOP ADC i wogóle się go już nie włącza 😋 Jak włączę przed odczytaniem czujników i zatrzymam za nim, to już nie działa 🙄

Co do podwójnego odczytywania, u mnie pojedyncze działa prawidłowo, bo robiłem popdrogramy do odbijania się od linii, żeby robot nie wypadał z dohyo i działało. Testując program i wyłączając kolejne linie doszedłem do tego, że z całego podprogramu obsługi ktir'ów problem stanowi to GETADC.

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

No zmienne to integery, nie powinny być przepełnione 😉

W sumie tak się teraz zastanowiłem to zmienię je na wordy, pic na wodę ale z ADC nie ma wartości ujemnych.

Link do komentarza
Share on other sites

Ok, problem rozwiązany, wystarczyło spojrzeć do ds'a diody. Jasność świecenia diody narasta wraz z czasem, a widocznie GETADC jednak "kradnie" trochę czasu z pętli poza tą funkcją. Problem rozwiązuje dodanie opóźnienia choćby 200uS zamiast 20.

W sumie jest to bardzo przydatna opcja, ponieważ teraz wiem, że mogę regulować zasięg czujników 3 sposobami równocześnie:

-rezystor na diodzie

-częstotliwość pracy diody generowana przez CTC

-częstotliwość "paczkowania"

Mam nadzieję że komuś się jeszcze przydadzą te spostrzeżenia.

Link do komentarza
Share on other sites

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

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.