KD93 Napisano Listopad 5, 2011 Udostępnij Napisano Listopad 5, 2011 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 More sharing options...
Treker (Damian Szymański) Listopad 5, 2011 Udostępnij Listopad 5, 2011 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 More sharing options...
KD93 Listopad 5, 2011 Autor tematu Udostępnij Listopad 5, 2011 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 More sharing options...
Treker (Damian Szymański) Listopad 5, 2011 Udostępnij Listopad 5, 2011 A co z przepełnianiem tych zmiennych? Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
KD93 Listopad 5, 2011 Autor tematu Udostępnij Listopad 5, 2011 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 More sharing options...
Bobby Listopad 6, 2011 Udostępnij Listopad 6, 2011 Hm, przecież Int jest ośmiobitowy, nie? Max wartość to 255. Z kolei max wartość z ADC to 1023. Link do komentarza Share on other sites More sharing options...
Sabre Listopad 6, 2011 Udostępnij Listopad 6, 2011 Hm, przecież Int jest ośmiobitowy, nie? Max wartość to 255. Z kolei max wartość z ADC to 1023. Byte jest 8-bitowy, integer ma od -32768 do +32767. Link do komentarza Share on other sites More sharing options...
KD93 Listopad 6, 2011 Autor tematu Udostępnij Listopad 6, 2011 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 More sharing options...
Pomocna odpowiedź
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ę »