pyrchewsky Napisano Grudzień 10, 2017 Udostępnij Napisano Grudzień 10, 2017 Dzień dobry wszystkim forumowiczom. Pomijając zbędny wstęp przejdę od razu do meritum. Projekt oparty o Arduino UNO oraz NANO, nad którym aktualnie pracuję to układ do unikania kolizji w dronie latającym, zakładający użycie sensorów HC-SR04. Jak przedstawiono na załączonym rysunku, w celu maksymalnej eliminacji pola martwego wymaga on zastosowania aż 8 takich sensorów rozłożonych w na planie ośmiokąta foremnego. By móc to wykonać jedynie za pomocą 8-bitowych mikrokontrolerów musiałem wykorzystać więcej niż jeden układ, mianowicie założenie jest takie, by Arduino UNO zajmowało się kontrolą lotu (do niego podłączone jest 6 kanałów odbiornika oraz moduł akcelerometr+żyroskop o 6 stopniach swobody MPU-6050) z kolei Arduino NANO obsługuje wszystkie 8 sensorów ultradźwiękowych z pinami Trigger podłączonymi do ekspandera i pinami echo podłączonymi bezpośrednio do wejść cyfrowych mikrokontrolera, który również prowadzi cyfrową obróbkę danych (uśrednienie wyników pomiarów odległości). Jedna płytka Arduino nie mogła obsłużyć wszystkiego z powodu ograniczonej ilości pinów cyfrowych, gdzie nie mogłem wykorzystać ekspandera, ponieważ interfejs I2C został już zajęty przez akcelerometr z żyroskopem, a jego (akcelerometru) podłączenie do ekspandera odpada (szybkość transmisji została by zmniejszona znacznie poniżej 100kHz). Dlatego też wykombinowałem następujące połączenie: 8 sensorów zostaje podłączonych do dodatkowego mikrokontrolera wraz z ekspanderem na I2C, następnie on wysyła dane przez interfejs UART do głównego mikrokontrolera lotu. W celu przejrzystego i łatwego programowania postanowiłem wykorzystać biblioteki dla ekspandera oraz dla komunikacji interfejsem szeregowym. I tu pojawia się problem: Przy jednoczesnym załączaniu obydwu wymienionych bibliotek pojawia się następujący komunikat w trakcie kompilacji: libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin): In function `SoftwareSerial::read()': (.text+0x0): multiple definition of `__vector_3' libraries\PCF8574\PCF8574.cpp.o (symbol from plugin)🙁.text+0x0): first defined here libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin): In function `SoftwareSerial::read()': (.text+0x0): multiple definition of `__vector_5' libraries\PCF8574\PCF8574.cpp.o (symbol from plugin)🙁.text+0x0): first defined here libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin): In function `SoftwareSerial::read()': (.text+0x0): multiple definition of `__vector_4' libraries\PCF8574\PCF8574.cpp.o (symbol from plugin)🙁.text+0x0): first defined here collect2.exe: error: ld returned 1 exit status exit status 1 Błąd kompilacji dla płytki Arduino Nano. Widzę, że chodzi tu o wielokrotną definicję niektórych metod z tych bibliotek. Czy wykomentowanie w jednej z nich niepotrzebnych definicji pomoże rozwiązać sprawę i takie połączenie ma prawo zadziałać sprawnie? Testowy kod załączam do posta. Cytuj Link do komentarza Share on other sites More sharing options...
deshipu Grudzień 10, 2017 Udostępnij Grudzień 10, 2017 Obie te biblioteki używają tych samych przerwań. Nie będą działać razem. Zresztą software serial to bardzo zły pomysł w systemie czasu rzeczywistego, bo wyłącza ci przerwania. Myślałeś, żeby komunikację między tymi płytkami zrobić po SPI? 1 Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Grudzień 10, 2017 Udostępnij Grudzień 10, 2017 To zły pomysł. Pomiar odległości w tych czujnikach bazuje na precyzyjnym zliczaniu czasu od wygenerowania zbocza TRIG do powrotu impulsu ultradźwiękowego. To są krótkie czasy i system musi być bardzo sprawny. Jak chcesz mierzyć czas echa mając wyzwalanie czujników na ekspanderze portów "odległym" od procesora o transmisję I2C. Tak to możesz sobie diodki zapalać. Po drodze będziesz miał jakąś bibliotekę generującą zdarzenia na I2C, przykrywającą zależności czasowe. Jak się dowiesz kiedy de facto pin wyjściowy został ustawiony i od kiedy zacząć liczenie czasu? Przecież nie bez powodu biblioteki obsługujące czujniki HC04 działają na prawdziwych pinach procesora a nie przez pośredników. EDIT: Jeśli brakuje Ci pinów, użyj jakiegoś taniego multipleksera wejściowego (np. 74HC151) lub dekodera na wyjściu (np. 74HC138) albo obu na raz. To dużo tańsze niż skomplikowany ekspander portów. Na ile liczysz obrót całej pętli mierzącej 8 czujników? 1 Cytuj Link do komentarza Share on other sites More sharing options...
pyrchewsky Grudzień 11, 2017 Autor tematu Udostępnij Grudzień 11, 2017 Cała pętla będzie trwać 8*(2us+10us)=96us, gdzie 2us to czas trwania sygnału pomiarowego, a 10us to czas sczytywania odbitego dźwięku. Bibliotekę software serial można w zasadzie wyeliminować stosując dedykowane piny do komunikacji UART. Spróbuję wykonać manewr z multiplekserem sygnału, pozostaje jednak pytanie czy UART będzie wystarczająco szybki do dostarczenia danych na drugi mikrokontroler kontrolujący lot. Zanim dane do niego trafią są jeszcze poddawane operacji uśredniania odczytów na Arduino NANO (przez bufor składający się z 10 ostatnich pomiarów). Pytanie ode mnie: Czy multiplekser zwyczajnie powiela ten sam sygnał z jednego pina na wiele pinów, czyli sygnał trigger zostanie po prostu wysłany na raz do wszystkich sensorów? Cytuj 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
ethanak Grudzień 11, 2017 Udostępnij Grudzień 11, 2017 A nie możesz sobie sprawdzić np. w wikipedii jak działa multiplekser? Rozumiem, że chcesz mieć fajnie latającego drona. Ale bez znajomości podstaw elektroniki/informatyki przy założeniu "zapytam na forum to ktoś odpowie" to zanim ten dron wystartuje, będziesz miał dłuższą brodę niż basista z ZZTop. Cytuj Link do komentarza Share on other sites More sharing options...
pyrchewsky Grudzień 11, 2017 Autor tematu Udostępnij Grudzień 11, 2017 Gwoli informacji on już dawno lata i robi to bardzo dobrze. Jednakże postawiłem sobie za cel w tym akurat projekcie wykorzystanie tylko i wyłącznie 8-bitowców. Nie korzystałem nigdy z multipleksera, sądziłem, iż forum istnieje, by uzyskać informacje. Niemniej, widzę, że wirus elektrody zaraża wszędzie. Cytuj Link do komentarza Share on other sites More sharing options...
deshipu Grudzień 11, 2017 Udostępnij Grudzień 11, 2017 Jeżeli przez "wirus elektrody" masz na myśli zalew użytkowników, którzy traktują to forum jak google, spodziewają się natychmiastowych odpowiedzi na każde pytanie i nie zamierzają sami nic wnieść, to chyba tak, zaczyna się tu pojawiać. Znak czasów, zapewne. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!