Skocz do zawartości

dirrack

Użytkownicy
  • Zawartość

    10
  • Rejestracja

  • Ostatnio

Reputacja

1 Neutralna

O dirrack

  • Ranga
    2/10

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Śląskie
  • Języki programowania
    C, C++, Delphi, C#
  1. Cześć, korzystam z kursu i natrafiłem na zagwozdke. Według mnie wartość ARR licznika w encoder mode jest niepoprawna, ponieważ resetowanie licznika następuje przy kolejnej stabilnej pozycji względem poprawnej, każdy obrót przesuwa punkt zerowy o jeden. Przy 100 stabilnych pozycjach indeksując od zera impulsy to właśnie dojście do pozycji początkowej jest pełnym obrotem, a zatem czy maksymalna wartość ARR nie powinna wynosić 399?
  2. Bardzo mnie cieszy, że poświęciliście na to czas i się wypowiedzieliście na temat i dziękuje Wam za to serdecznie @Matthew11 i @GAndaLF. Dzięki za rady i polecone materiały, choć część już za mną, między innymi książki Uncle Boba i blog GAndaLFa w dużej części. Nie da się go ominąć w polskim internecie szukając w tematach systemów wbudowanych. I całe szczęście, że taki blog istnieje! Odnosząc się trochę do tego co napisaliście, a głównie do tego gdzie temat nie jest dla mnie wyczerpany: W takim razie pytanie brzmi: ile to jest dużo przy jakimś typowym mikrokontrolerze z Cortex-M4? Nie wnikając w to co to jest konkretnie "typowy", chodzi mi o jakieś widełki. Ja oczywiście słyszałem to jakieś 1000 razy. Ale nadal dostaje projekty (też w pracy), przykłady, kursy (też na uczelni) i tak dalej, które korzystają ze zmiennych globalnych. Siłą rzeczy zaczynam się zastanawiać, czy to z lenistwa piszących czy może faktycznie, jest to dobry pomysł w specyficznych przypadkach. Tu chodziło mi o raczej monolit w sensie programu w jednej dużej części: main, pare funkcji i jeden plik. Choć zupełnie nie pomyślałem o tym, że w większym systemie ma sens podział na osobne moduły. Jednak od strony jednego dużego pliku odpowiedział mi Matthew11. O ile z RTOSem jestem w stanie sobie wyobrazić jak ogarnąć współbieżność przez jakiś mutex czy semafor to w przypadku programu bez systemu operacyjnego nie wiem jak to ugryźć. Hipotetyczny przykład: dostajemy jakieś dane w przerwaniu, ale potem je w jakiś sposób przetwarzamy już w while(1) - filtrujemy, skaujemy - cokolwiek, zakładam, że jest tych operacji tak dużo, że nie ma sensu to w przerwaniu. Jak uchronić się przed nadpisaniem danych w trakcie operacji na danych? Bufor cykliczny? Kopiowanie zmiennych? To jedyne co mi przychodzi na myśl, czy dobrze myślę? Tu raczej chodzi mi o sytuacje, że chcę testować działanie jakiegoś elementu systemu wyłączając wpływ innych modułów na niego odłączając wykonywanie kodu odpowiedzialne za powiązane funkcjonalności. Np.: pomiar temperatury i filtrowanie temperatury albo sterowanie grzałką komory, w której umieszczony jest czujnik. Pojawiły mi się w trakcie tej krótkiej dyskusji jeszcze dwa pytania, być może jesteście w stanie mi pomóc. Jak bez systemu operacyjnego mierzyć obciążenie procesora? Widziałem opcje ze zmienną pomocniczą czy miganiem GPIO jak choćby: https://www.embedded.com/how-to-calculate-cpu-utilization/ lub http://shadetail.com/blog/ghetto-cpu-busy-meter/ ale co ma sens? Ja bym podpiął analizator pod GPIO i miałbym ten pomiar w czasie rzeczywistym bez dużego obciążania procesora. Optymalizacje. Pakowali mi zawsze do głowy, jeszcze w technikum i nawet na uczelni różne zasady odnośnie optymalizacji: a to przyrównuj do 0 bo szybsze niż inne porównywania, nie rób tyle funkcji, bo dużo skoków, przesunięcia bitowe zamiast dzielenia itd. Potem przeczytałem artykuł GAndaLFa. Rozumiem, że początkujący powinien to olać i jak najszybciej zapomnieć o takich problemach a zająć się nimi gdy będzie źle albo będzie potrzeba większej szybkości. Czy tak? Myślę, że to jest częsty błąd początkujących, że dowiadują się wielu rzeczy na raz i przykładają swoją uwagę do rzeczy niekoniecznie istotnych, bo jeszcze nie mają doświadczenia. Proszę więc o odpowiedź ludzi z doświadczeniem, na co nie warto zwracać uwagi (i nie tylko o optymalizacje chodzi)?
  3. Cześć, Dostałem ostatnio do ogarnięcia i uporządkowania całkiem spory kawał kodu w C na procesor Texas Insturments (w tym przypadku seria Tiva z Cortex-M4 ale nie ma to tu większego znaczenia). Program na bibliotekach std (podobnie jak w STM32 stdperiph). Kod ma około 4000 linii i bardzo ciężko się w nim odnaleźć, odłączać konkretne peryferia, modyfikować etc. ze względu na ogromne spaghetti, które się wytworzyło. A potrzeba modyfikacji jest, bo jest to działający od lat element projektu na uczelni. Nawet chcąc pisać kod od początku mija się to z celem bez wiedzy na temat tego jak się za to zabrać. Tu dochodzimy do sedna: jak profesjonalnie podchodzi się w firmach czy w projektach badawczych do organizacji kodu w projektach na mikrokontrolery? Dla projektów obiektowych są wzorce projektowe, zasada SOLID etc. ale czym kierować się przy pisaniu na uC? Poza ogólnymi zasadami, borykam się także z pomniejszymi drobnymi pytaniami odnośnie dobrych praktyk: Czy monolit jest typową praktyką? Czy sensowne jest używanie zmiennych globalnych (np wartości, które coś konfigurują, wymieniają dane między funkcjami), czy np.: lepiej przekazywać wskaźniki do tych danych między funkcjami? W przypadku gdy chcemy odłączyć jakiś podzespół, załóżmy jakiś czujnik temperatury dla przykładu , to lepiej tworzyć jakąś flagę czy lepszym wyborem będą dyrektywy procesora. Gdy wyodrębniamy jakiś element kodu do zewnętrznej funkcji, warto by operował na wskaźnikach czy normalnie przyjmował kopie danych i zwracał daną? Wiem, że popadanie w optymalizacyjną paranoje nie ma czasem sensu, ale być może ktoś bardziej doświadczony jest w stanie odpowiedzieć co warto stosować, a co jest przesadą. Chętnie też przyjmę wszelkie materiały odnośnie optymalizacji czy organizacji kodu w odniesieniu do systemów wbudowanych godne polecenia, a być może i ktoś ma przykład jakiegoś projektu, który jest wykonany "zgodnie ze sztuką". Zachęcam wszystkich do wymiany doświadczeń i przemyśleń odnośnie sprawy i z góry dziękuję za odpowiedzi, bo jak się domyślam temat nie jest łatwy ani oczywisty a celowo mówie ogólnikowo, żebyśmy mogli skorzystać na nim wszyscy. Pozdrawiam i zapraszam do dyskusji!
  4. Interesujący temat, ciekawe w jaki sposób tego typu montaż może wpłynąć na ESD i impedancje w ścieżkach highspeedowych - czy może pomóc czy raczej przeszkodzić.
  5. @lichoniespi 1. Odpowiedzią na to jest np: filtr RC. https://forbot.pl/blog/czym-jest-filtr-rc-jak-dziala-i-co-warto-o-nim-wiedziec-id40448 2. Według dokumentacji twój układ na wyjściu daje do 25mA, czyli kilka diod maksymalnie, aby sterować czymkolwiek przez Q wówczas powinno sterować np.: tranzystorem mosfet, który załączałby zasilanie, i byłby dobrany odpowiednio dla takiego napięcia sterowania. W tym przypadku sprawdziłby się chociażby IRF540N lub IRF550N (są grubo przewymiarowane do tego zastosowania). Ogólnie zwracać uwagę trzeba głównie na ID, UDS, UGSth. https://forbot.pl/blog/kurs-elektroniki-ii-tranzystory-unipolarne-mosfet-id7960 Nadal polecałbym na wejściu użyć stabilizatora napięcia
  6. @lichoniespi układ wygląda lepiej, ale nadal jest to plątanina :) Wykorzystaj to miejsce, na prawdę to uprości innym i Tobie w przyszłości. Schemat znów nie działa najlepiej. Nie wiem czy modyfikujesz układ w trakcie, czy o co chodzi ale nie działa to znów tak jak mówisz. Czemu równolegle z diodą masz rezystor? Zastanówmy się co Ty chcesz uzyskać - jak sądzę, Twój czujnik daje wyjście w stanie wysokim jak trzęsiesz, ale spada jak przestaniesz więc musisz jakoś to zapamiętać. Najprostszy układ pamiętający to przerzutnik. Da się zbudować na tranzystorach lub na bramkach NAND (szukaj najlepiej w google, po angielsku, będzie najszybciej). P.S. Kondensatory w tym układzie jak występują to pełnią rolę filtracji wejścia, czyli sygnału z czujnika.
  7. Zaczne od małej uwagi: Twoje schematy wyglądają fatalnie, są absolutnie nieczytelne mimo, że to parę elementów. Więc: - Nie łączymy nic liniami skośnymi, nie wszystko musi być z jednego punktu, - Żadnej plątaniny, jeśli coś nie musi się krzyżować to lepiej tego nie robić. Rozwiązań Twojego problemu jest cała masa, ja zaproponowałem najprostsze, bo po co sobie utrudniać Ja Ci mogę tutaj pomóc rozwiązać problemy i pokonać ścianę do której dojdziesz, jednak nie rozwiążę problemu za Ciebie. Swoją drogą rozwiązanie, które zaproponowałeś nie działa. Na dwóch tranzystorach da się zbudować układ "flip-flop", więcej w google.
  8. @lichoniespi a dlaczego by się miało nie dać oprzeć o przerzutnik? Ogólnie zasilanie przez diodę zenera nie daje najlepszych parametrów oszczędności energii. Poza tym problemem w Twoim układzie jest oczywiście sam element, który ma świecić. Powinna być to znów dioda o odpowiednich parametrach, a rezystor też powinien być odpowiednio dobrany. W Twojej symulacji brakuje też reprezentacji czujnika - jakiegoś obciążenia. Tak jakby czujnik tylko Ci dawał sygnał. A przecież czujnik pobiera prąd ciągle.
  9. Cześć Mam nadzieję, że rozróżniasz pojęcia takie jak prąd, napięcie i moc. To co chcesz zminimalizować to moc, a możesz to zrobić jedynie poprzez zmniejszenie zużycia prądu. To za to mógłbyś sprawdzić multimetrem a następnie wybrać czujnik o mniejszym poborze prądu. Należy zwrócić uwagę np.: na występowanie LEDa na jednym z czujników - jego wylutowanie zmniejszy pobór prądu czujnika. Problem z Twoimi czujnikami jest taki, że zasilane są z 5V, i właśnie powinieneś takie zasilanie zapewnić. Jak? Najczęściej jest to jedna z opcji: stabilizator liniowy, przetwornica, bateria o odpowiednim napięciu. Kolejno: Pobór prądu układu 555 mógłbyś też oczywiście zmniejszyć - szukać tego jaki ten pobór jest możesz w dokumentacji. Mógłbyś użyć jakiegoś 555 w wersji low power, np.: TS555, LMC555 - one mają pobór prądu nawet 20x mniejszy. Żeby do tego dojść jednak musisz przestudiować dokumentacje układów a polecam Ci to serdecznie, choć wiem, że na początku może to przytłoczyć - ale warto! A to co chcesz uzyskać pomógłby Ci rozwiązać przerzutnik, a w tym przypadku konkretnie np.: D lub T, wyzwalany zboczem. Ogólnie policz co ile pobiera prądu i zrób tak, żeby pobierało mniej Jeśli czytasz dokumentacje zwróć uwagę na prąd zasilania (najczęściej oznaczany jako IC lub IS a także napięcie zasilania Ucc, warto też zwrócić uwagę w przypadku 555 lub przerzutnika na prąd wyjściowy.
  10. Cześć, nazywam się Jakub. Trochę już śledzę forum ale postanowiłem, że włączę się do dyskusji a i może przedstawię w przyszłości moje projekty. Elektronika i systemy wbudowane to częściowo moje hobby, praca a także związana jest częściowo z moimi studiami. Aktualnie zajmuje się sterownikiem prądu opartym o dość egzotyczny mikrokontroler wśród hobbystów czyli Tiva TM4C123xx. Cóż, mam nadzieję, że będę mógł dołożyć jakąś cegiełkę do tego forum.
×
×
  • Utwórz nowe...