Skocz do zawartości

marek1707

Użytkownicy
  • Zawartość

    5805
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    492

Wszystko napisane przez marek1707

  1. A skąd to wiesz? Bo ja uważam, że najlepsza jest taka która wprost pasuje do postaci zasilania jakie potrzebujesz. Praktycznie niczego nie napędzisz z 1.5V więc żeby zrobić 3.3 lub 5V będziesz musiał użyć przetwornic podwyższających a te są z definicji gorsze (mniej sprawne za te same pieniądze) niż obniżające. Bardzo dobrze, że 9V mieści się do pudełka i takiej użyj. Pomiając fakt, że ogniwa AA mają mniejszą ilość energii (objętość jest kluczowa jeśli chemia jest podobna) niż 6F22. A tak w ogóle to odpowiedź na pytanie o czas pracy nietrywialnych systemów jest - jak się zapewne domyślasz - trudna z jednego bardzo ważnego powodu: pobór prądu nie jest stały. Zacznij od tego, że źródło ma pewien zasób energii liczony w Wh. Z drugiej strony masz (w najprostszym przypadku) układzik pobierający np. 10mA na napięciu 3.3V. To przekłada się na moc 33mW, czyli że to coś będzie zużywać 0.033Wh w godzinę. Jeżeli dobra bateria alkaliczna 9V ma w sobie powiedzmy 5Wh (mają gdzieś tak od 4 do 5.5Wh) to z prostego rachunku Twoje urządzenie będzie na niej pracować ok. 150h. To jest najprostszy rachunek, nie uwzględniający mnóstwa czynników jak chociażby: Sprawność przetwornicy (lub innego bloku) zasilającego system. Trzeba przecież te 9V zamienić na coś użytecznego, a czasem na kilka napięć i to zawsze kosztuje od kilku do kilkudziesięciu % strat. Dlatego tak ważne jest dopasowanie baterii do wymagań systemu i sam wybór bloku zasilania. Sposób poboru prądu - nie zawsze urządzenia pobierają ciągle tyle samo. Baterie lubią małe i stałe pobory i zwykle mają pewną granicę powyżej której wyraźnie "przysiadają". Akurat bateria 9V ma bardzo małą obciążalność. Poziom napięcia do którego można baterię "wyssać". Producenci podają wyniki swoich pomiarów dla konkretnych warunków rozładowania tj. wielkość prądu, sposób użycia (np. ile godzin dziennie) oraz końcowe napięcie. Jeżeli Twój system bedzie odmawiał pracy przy wyższym napięciu niż przewidział producent, to nie wyczerpiesz całej pojemności baterii. Przykładowo jeśli baterię 9V mierzyli do 4.8V (to standard) a Ty masz 5V procesor a na dodatek jego przetwornica DCDC potrzebuje na wejściu min. 6V, to urządzenie zdechnie właśnie przy 6V, mimo że w baterii zostanie jeszcze teoretycznie z 10-15% energii. Temperatura pracy. Baterie dobrze działają w temperaturach pokojowych i okolicach, powiedzmy 0..+50°C. W minusach gwałtownie rośnie im rezystancja i spada pojemność a wysoko w cieple wybuchają lub wylewają. Także jeśli urządzenie ma znosić ciężkie warunki klimatyczne to przewymiarowanie baterii np. 3-krotne nie jest niczym niezwykłym. A specjalne baterie/akumulatory dobrze radzące sobie w takich ekstremach są wielokrotnie droższe. Do prostych obliczeń możesz wziąć pobór procesora przy danym napięciu i prędkości zegara (to bardzo ważny parametr dla układów cyfrowych) oraz koniecznie musisz się zastanowić jak będziesz używał tej karty, bo to ona będzie głównym pożeraczem prądu. Podczas zapisu może wciągać nawet 10-20 razy więcej mocy niż procesor Arduino. Czujniki zwykle potrzebują niedużo, chyba że są jakieś bardzo aktywne typu ultradźwięki, bariery opto, pomiar stężeń gazów metodami optycznymi (NDIR) lub cieplnymi. Jeśli ograniczysz się tylko do temperatury i wilgotności to na razie w ogóle możesz to pominąć w budżecie prądu. Podsumowując: dobra wiadomość jest taka, że do obliczeń wystarczy znać średni pobór mocy i pojemność źródła. Zła, że na średni pobór mocy ma wpływ właściwie każdy element systemu począwszy od bloku zasilania przez procesor i całą resztę sprzętu a skończywszy na oprogramowaniu, które może procesor zatrzymywać, rozpędzać, usypiać i to samo robić z pozostałymi blokami. W zasadzie nie mając gotowego kodu w którym na cyzelowanie/minimalizację poborów energii nie zużyłeś 30% całego czasu pisania, to nie jesteś w stanie precyzyjnie odpowiedzieć na zadane w temacie pytanie. A z gruba to wiadomo, nie znając dokładnie tego co chcesz zrobić i co to ma robić, można pomylić się pewnie i 100 razy. Może więc napisz coś więcej? Czy jakaś interakcja z użytkownikiem? Jakieś LEDy? Czy urządzenie w pełni autonomiczne? Jak często i co ma robić?
  2. Nie. Wkrętarka dostarcza mocy i w żaden sposób nie stabilizuje momentu - mam nadzieję, że to odróżniasz. Moment to jest to co powinieneś zmierzyć. W mechanice robi się to tak, że między elementem napędzającym (np. głowicą wkrętarki jeśli już jesteś do niej przyzwyczajony) a osią igły wstawiony jest element podatny np. sprężyna, sprzęgło elastomerowe czy gumowe itp i mierzysz kąt ugięcia/skręcenia tego elementu. Jeśli przeniesiesz to na przesunięcie rysika w osi pionowej a w poziomie będziesz go przesuwał zgodnie z zagłębianiem się wiertła, to dostaniesz wykres o jaki CI chodzi: momentu w funkcji przesunięcia. Drugą metodą jest działanie trochę odwrotne: jeżeli zapewnisz stały posuw wgłąb być może zsynchronizowany z obrotami (śruba?), to możesz mierzyć siłę poosiowej reakcji igły przy danej prędkości obrotowej i podłużnej, ale to wymaga zrobienia wagi (zamiast pomiaru prądu), czyli bardziej skomplikowanej mechaniki.W najprostszym przypadku to może być czujnik nacisku, ale te tanie są tak niestabilne i płyną w temperaturze i wilgotności, że pomiary wykonywane takim zestawem w różnych warunkach będą słabo porównywalne i wyjdzie raczej zabawka. Chyba zostaje zatem belka pomiarowa i tensometry plus standardowy moduł na HX711. Ciekaw jestem na co się zdecydujesz. Słusznie, choć kalibracja tego własnego będzie wymagała porównania z jakimś wzorcem fabrycznie produkowanym, bo wiele zależy od geometrii końcówki igły i parametrów ruchu (posuw/obroty).
  3. Rezystograf nie mierzy siły nacisku tylko moment - nazwany przez leśników "oporem". Nie ma to rzecz jasna nic wspólnego z oporem elektrycznym. Specjalnie zakończona (trochę jak wiertło łopatkowe do drewna) bardzo długa, stalowa igła jest wkręcana i jednocześnie wciskana w pień a prymitywny mechanizm rysuje moment obrotowy względem głębokości. Jeśli chcesz to zrobić elektronicznie, musisz zapewnić stały posuw wgłąb i pomiar momentu. Zauważ, że mniejszy (albo nierównomierny) posuw skutkuje mniejszym (albo niestabilnym) momentem, bo z każdym obrotem narzędzie będzie zbierać inną ilość materiału. Zatem śruba wypychająca i obracanie igły. W silniku DC moment jest wprost proporcjonalny do prądu więc wydaje się, że wystarczy go mierzyć po kalibracji biegu luzem rzecz jasna. Ponieważ igła jest długa to i tak musisz ją gdzieś w urządzeniu "zmagazynować" a potem wystarczy mierzyć ile jej "wyszło" z zasobnika - do tego starczy zwykły potencjometr liniowy lub enkoder na śrubie wypychającej igłę. A zadaniem użytkownika jest takie dociśnięcie urządzenia, by jego czoło było stale dociśnięte do pnia. Jeśli zrobisz to na pomiarze prądu (wydaje się trywialne i nie trzeba żadnych czujników mechanicznych), to silnik obracający igłę nie może być obciążony śrubą posuwu wzdłużnego więc.. powinny być dwa
  4. Jeśli dla Ciebie złośliwością są próby odpowiedzenia na niezadane pytanie to OK, niech tak będzie*. Pomóż mi w takim razie nazwać ułomność braku jasnego wysławiania się mimo wysłania trzech (Twoich pierwszych na Forbocie - witamy) postów i w sumie kilku akapitów tekstu. Piszesz mętnie, ale wrzucasz rysunek. Próbuję z niego domyślić się, że chodzi o BLDC bo trapezy na to wskazują, ale w trzecim podejściu precyzujesz, że jednak nie chodzi o żaden silnik tylko o samą metodę produkowania przebiegów przemiennych dysponując jedynie asymetrycznym zasilaniem. Czy tak? No to gdybyś czytał uważnie co napisałem, to pewnie już dawno zrobiłbyś eksperyment (myślowy, na kartce papieru lub przy użyciu kompa) i wykreślił sobie różnice między przebiegami pokazanymi na Twoim pierwszym rysunku. Każdy z trapezów (to oczywiście mogą być sinusoidy) rozpięty jest między zerem a jakąś hipotetyczną wartością maksymalną. Skoro uzwojenia włączone są między trzy linie, to jakie znaczenie ma fakt, że każda z nich ma jakąś (ale każda taką samą) składową stałą względem jakiegoś czwartego przewodu, czyli w tym przypadku masy układu? Masz rację, wydaje Ci się. Jeżeli z tym masz trudności, to wyobraź sobie, nie wiem, może huśtawkę dla dzieciaków. To zwykła belka podparta na środku. Wysokość każdego z jej końców podczas zabawy zmienia się od zera do 2h gdzie h to oczywiście wysokość punktu podparcia. Ale jeśli na środek belki wylejesz wodę, to będzie ona spływać raz w jedną a raz w drugą stronę, prawda? Różnica wysokości może być zatem bipolarna mimo dysponowania jedynie wysokościami dodatnimi. To samo jest w driverze PWM silnika 3F: każde z trzech wyjść dysponuje napięciem od zera do jakiegoś +V zasilania, ale uzwojenie włączone między te wyjścia widzi właśnie różnicę. A ponieważ jest ona w sposób oczywisty dwukierunkowa, to i prąd będzie płynął raz w jedną a raz w drugą stronę. Każde dwa z trzech z wyprowadzeń silnika widzi różnicę tylko między "swoimi" dwoma wyjściami falownika więc całość działa. Mam nadzieję, że umiesz to sobie wyobrazić i nie trzeba tego rysować. I teraz, skoro samą ideę sterowania PWM masz już opanowaną, to - jak próbuję zrozumieć - problem masz z samymi sposobami generacji sygnałów na poszczególnych fazach. Oczywiście najprostsza metoda bazująca na "jawnym" produkowaniu sygnałów 3-fazowych działa, bo pewnie 9/10 świata jest napędzane zwykłymi 3-fazowymi silnikami AC zasilanymi z sieci 3F gdzie z definicji jest symetria i 120°. No ale ludzie w dobie oszczędzania szybko zauważyli, że taka metoda nie zawsze jest optymalna a mając pod ręką trochę mocy obliczeniowej można modelować zjawiska zachodzące w silniku w czasie rzeczywistym i tak generować napięcia na liniach fazowych, by prądy uzwojeń produkowały moment jakoś specjalnie zorientowany względem wirnika, co daje maksymalizację momentu, albo minimalizację energii albo np. poprawę osiągów dynamicznych silnika. Tak, w takiej metodzie rzeczywiście nie ma z góry "zaszytej" symetrycznej "3-fazowości" sygnałów i przesunięcia o 120°, ale de facto takie przebiegi dostajesz, bo wynika to z konstrukcji silnika i modelu jaki jest przyjęty. Przecież transformacje Parka i Clarka używane do przekształcania układów z 3F na 2F i odwrotnie właśnie takie 120° zakładają. Nie rozumiem więc Twojego niezrozumienia. Możemy robić jakieś optymalizacje np. przełączania modulatorów PWM i w pewnych momentach okresu załączać je na stałe (albo w ogóle zrezygnować z PWM), można produkować trapezy albo wręcz prostokąty (mówimy o napięciu nie o prądach), ale patrząc na pełny obrót silnika w ustalonych warunkach zawsze dostaniesz 3 identyczne przebiegi przesunięte o 120°, bo jest to zaszyte w samej strukturze silnika 3F. ------------------------- * - Jakoś nie widzę odpowiedzi od ludzi mniej złośliwych. ------------------------- EDIT: Jeśli masz jakąś awersję do rysowania, to może to zadziała: Przyjmując, że: V - składowa stała na wyjściu każdego z trzech modulatorów PWM, A - amplituda sygnału sinusoidalnego, Omega - pulsacja sygnału Fi - przesunięcie fazy między sygnałami to na jednym wyjściu masz powiedzmy: Ua = V + A*sin(Omega*t) a na drugim masz: Ub = V + A*sin(Omega*t + Fi) Jeśli odejmiesz te sygnały (czyli włączysz między nie uzwojenie widzące różnicę) to dostaniesz: 2 * A * sin(Fi/2) * cos(Omega*t + Fi/2) Co niewątpliwie jest sygnałem sinusoidalnym bez składowej stałej, ale o większej amplitudzie (człon 2*A*sin(Fi/2) jest stały i wynosi 1.73) i fazie niż każde z dwóch wyjść PWM. Jeżeli zrobisz takie obliczenie dla każdej pary z trzech wyjść przesuniętych względem siebie w fazie o 120° to dostaniesz trzy nowe sygnały także przesunięte względem siebie w fazie o 120°.
  5. Nie bardzo rozumiem po co zasilasz od dołu mostek napięciem, skoro i tak interesuje Cię różnica. Mostek będzie tym czulszy im większym napięciem go zasilasz więc po co takie sztuczne ograniczenie zaraz na źródłe sygnału? Jeśli amplitudy zmian bedą za duże to przecież wystarczy dać mniejsze wzmocnienie w dalszej części układu. Układ do śledzenia powinien mieć chyba trzy stany stabilne: "w lewo", "na środku" i "w prawo" a Twojemu chyba tego brakuje. Nie wiemy jakie decyzje będą podejmowane dalej i kto to będzie robił. Jeśli chcesz tam wstawić jakiś procesor z ADC, to po co w ogóle wzmacniacz różnicowy skoro możesz mierzyć dwa napięcia? A jeśli chcesz zrobić układ decyzyjny "analogowo", to bedziesz potrzebował dwóch komparatorów by jeden wykrywał LEWO, drugi PRAWO a gdy żaden się nie uaktywni to stoimy mniej więcej na środku. Zastanów się co z czym powinny one porównywać żebyś dostał sygnały odjechania mostka od równowagi w lewo lubw prawo o więcej niż ileśtam mV. Nie wiemy jakich wzmacniaczy użyłeś. Wszystkie stare typu LMx58 czy LMx24 nie działaja praktycznie na 3V zasilania, bo co prawda umieją blisko masy, ale od zasilania górnego mają spore marginesy. Bliżej niż 2V lepiej nie planować. A jeśli użyłeś jakichś RRIO to napisz jakich. Bez takich danych schemat jest niekompletny i nie da się ocenić poprawności. Sam wzmacniacz różnicowy jaki zbudowałeś kompletnie się tu nie nadaje. Zastanów się: masz źródło sygnału (mostek) o impedancji wyjściowej rzędu kiloomów i obciążasz go wejściem wzmacniacza o podobnej impedancji wejściowej. Przecież sygnał zdechnie. Czy mierzyłeś zwykłym woltomierzem jak wyglądają sygnały na fotoopornikach w jakimś stanie ustalonym (albo rzeczywista różnica między nimi) przed i po podpięciu wzmacniacza? To po pierwsze, bo po drugie przecież różnica wejść będzie bipolarna więc i sygnał wyjściowy wzmacniacza będzie chciał być zarówno dodatni jak i ujemny względem GND - bo taki poziom odniesienia przecież zapodałeś. Czy taki był plan? To, że wejścia prawego wzmacniacza są zamienione miejscami to przy tym wszystkim drobny pikuś.. Także w zasadzie nic tu nie jest poprawne a reszta przekombinowana i/lub niemożliwa do weryfikacji ------------------------------------------------------------ EDIT: Nie chcę zostawiać Cię w poczuciu klęski a dobrym zwyczajem Forbota jest co prawda krytyka, ale konstruktywna. Chętnie pomogę zatem w narysowaniu układu mającego szansę działania. Jeśli wciąż nie zniechęciłeś się do rozwiązania Zero_Arduino © to przemyśl następujące rzeczy i napisz co o tym myślisz: Istnienie martwej strefy, gdzie układ stoi w miejscu i nie próbuje poprawić swojej pozycji. To zaoszczędzi mnóstwo cennej energii względem ciągle niezadowolonego układu dwustanowego. Pamiętaj, że naświetelnie powierzchni spada z cosinusem kąta padania więc przy małych kątach jest praktycznie niezauważalne i spokojnie można sobie pozwolić na pewne odchyłki w sygnałach z czujników. Wypracowanie sygnału mówiącego o wielkości różnicy oświetlenia, ale w układzie z jednym zasilaniem gdzie nie dysponujesz minusami. Detektory odsunięcia się ww sygnału na plus i na minus od wartości "spoczynkowej". Jeśli masz z tym kłopoty to lepiej zadawać pytania niż brnąć w jakieś dziwne konstrukcje. Czasem trudne dla Ciebie rzeczy inni zjadają z bułką na śniadanie
  6. Czy możesz to w wolnej chwili przetłumaczyć na polski? Albo jakoś rozwinąć? Bo masz trzy kabelki i jedną wspólną masę. Sygnały w tych trzech kabelkach są zmienne i okresowe, mają tę samą częstotliwość i na dodatek ten sam kształt. Z powodów energetyki dużych mocy w sieci AC przesunięte są względem siebie o 1/3 okresu. To mogłyby być prostokąty, trójkąty albo w ogóle jakieś dziwactwa, no ale generator w elektrowni produkuje wysoce optymalną sinusoidę więc przyzwyczailiśmy się, że linie trójfazowe dają sinusoidy. Teraz okazuje się, że wcale nie chodzi o sieć AC tylko o jakiś silnik. No to może napisz jaki? Bo sygnałów trójfazowych - tak jak silników - jest wiele. I każdy pasuje do swojego. Na rysunku pokazałeś sygnał trapezowy więc zgaduję, że chodzi Ci po głowie jakiś BLDC i falownik do niego. Taki silnik sterowany jest specyficznym sygnałem a ponieważ lubimy prostotę, to nie produkujemy dla niego sygnałów AC (w sensie dwukierunkowych, bipolarnych względem masy zasilania) tylko sygnał zmieniający się jedynie od zera do jakiegoś MAX na każdej z 3 linii względem masy. Silnik BLDC nic jednak o potencjale masy "nie wie" bo jest podpięty tylko do tych trzech drutów a ponieważ jesteśmy sprytni, przełączamy jego uzwojenia tak by raz prąd płynąl przez nie w jedną stronę a raz w drugą. Dzieje się tak dlatego, że uzwojenia widzą tylko różnice między sygnałami. Jeśli narysujesz sobie to na kartce (trzy sygnały z obrazka powyżej i trzy różnice między nimi) to zobaczysz, że są bipolarne Pisałem, że aby zrobić z rachitycznego portu procesora sygnał taki jak w sieci AC czyli bipolarny w każdym przewodzie fazowym względem N, to musisz sie trochę postarać. Aby napędzać silnik, nawet malutki - także, tylko mniej. Wstawiasz zatem po dwa tranzystory na każdy sygnał, przełączasz je szybko by po uśrednieniu "udawały" sinusoidę czy co tam potrzebujesz (np. trapez) i masz sygnał 3-fazowy. Do wyjść trzech takich stopni podłączasz uzwojenia i jeśli sygnały pasują do fizyki i mechaniki silnika - dostajesz obroty i moment na wale czyli moc mechaniczną Trzy sygnały sterujące są generowane przez wspólny algorytm, który zapewnia odpowiednią częstotliwość i fazę zawsze przesuniętą o 120° względem poprzednika więc jak to "układ 3 faz nie powstaje"? Może przytocz i opisz kilka metod generowania - w tym te "skrajne", to będziemy mówić o konkretach, bo piszesz że nie rozumiesz, ale niestety nie bardzo wiadomo czego
  7. No ale czego dokładnie nie rozumiesz? Typowy sygnał 3-fazowy sieci AC to trzy sinusiody przesunięte względem siebie o 1/3 okresu czyli o 120°. Każda z nich generowana jest względem punktu neutralnego N. A Ty po stronie odbiorczej możesz włączyć się swoim obciążeniem między przewód neutralny i jeden (lub wszystkie trzy ale osobno) przewody fazowe (tzw. gwiazda) lub każde obciążenie włączyć między inną parę przewodów fazowych bez korzystania z przewodu neutralnego (tzw. trójkąt). Wzięcie takiego sygnału wprost z pinów PWM procesora (plus oczywiście jakieś filtry lowpass) nie jest dokładnie tym samym, bo względem punktu neutralnego jakim jest GND sygnały mają składową stałą czego nie ma w sieci AC. Dlatego żeby to było to samo musisz zrobić układy wyjściowe (wzmacniacze? transformatory? falowniki? kondensatory?) które symetryzują sinusoidy względem linii N lub zwyczajnie przesunąć składową stałą masy wyjściowej o połowę zasilania procesora w górę. Wtedy każdy sygnał "fazowy" będzie symetryczny względem linii N.
  8. Jeżeli chcesz sterować prądem to masz dwa wyjścia: albo robisz źródło prądu czyli układ który niezależnie od tego co do niego podłączysz wypuszcza taki prąd jaki potrzebujesz (tj. taki jaki ustawi Arduino) albo robisz źródło napięcia i dajesz szeregowy rezystor (stały) ustawiony tak, by przy konkretnej rezystancji obciążenia (czyli rezystancji uzwojenia wskaźnika) płynęło tyle co chcesz. Tranzystor sam z siebie nie jest źródłem napięcia a źródłem prądu jest wtedy gdy sterujesz go prądem więc masło maślane plus dodatkowo działanie zależy od wzmocnienia i punktu pracy. Jeżeli przy oporniku 47Ω w obwodzie wskaźnika płynie ok. 200mA to znaczy, że rezystancja uzwojenia jest stosunkowo mała (np. kilkanaście omów) i jest szansa, że poprawne sterowanie możesz osiągnąć nie uciekając się do wysokich (dla Arduino) napięć. Prostota i ostateczny kształt Twojego układu zależy od tego, czy ten wzkaźnik da się napędzać z 5V albo lepiej z 4V. Jeżeli tak, schemat sprowadzi się do prostego filtra RC i jednego trnazystora w układzie wtórnika napięciowego z ew. dodatkowym rezystorem szeregowym. Natomiast jeśli okaże się, że wskaźnik ma więcej niż 20Ω to niestety musisz go sterować z wyższcyh niż 4V napięć a to już oznacza wstawienie jakiegoś wzmacniacza sygnału. Na szczęście jest jeszcze trzecie rozwiąznie: portraktowanie wzkaźnika jak typowego.. silnika i sterowanie nim za pomocą tranzystora, ale pracującego impulsowo. Wtedy w ogóle odpada sprawa jakichkolwiek filtrów, wzmocnień, sprzężeń zwrotnych itp magii a zostaje jeden tranzystor podączony przez opornik do wyjścia procesora i wzkaźnk w kolektorze podpięty do np. +10 czy +12V zależy co tam masz blisko. Wołając fukcję analogWrite() ustawiasz wypełnienie sygnału PWM a fizyka prądu i bezwładność mechaniki zrobią resztę. Pozostaje kwestia wyskalowania tego czegoś, ale przecież procesory nie takie rzeczy robią..
  9. Ja się poddaję. Kolega @daniel89 używa oscyloskopu jak cepa i jakoś nie widzę płaszczyzny porozumienia. Nie zrobiłeś żadnej z rzeczy o które prosiłem. Ani nie widzę dwóch przebiegów na raz więc nadall nic nie wiemy o koincydencji sygnałów które mierzysz (czyli najwazniejszego: kiedy stan niski się pojawia), ani nie korzystasz z całości ekranu w pionie tylko bawisz się w jednej kratce, ani nie ustawiłeś wyzwalania jak prosiłem, ani nie usunąłeś tej idiotycznej tabelki z liczbami i nawet sondę masz podpiętą jakoś od czapy, bo sądząc ze skali pionowej widzimy sygnały o wielkości <1V. Dostałeś drobiazgową instrukcję co poustawiać i nie wysiliłeś się żeby ją wykonać. Ja tam nie widzę żadnej szpilki, bo chyba nie mówisz o zakłóceniu od wkładania wtyczki, jeszcze przed pojawieniem się jakiegokolwiek napięcia. Widzę zamiast tego stan niski wymuszony na 100% przez program, bo trwający prawie 40ms. Nie, nie jest to nic związanego z upływnościami (procesory aż takich nie mają by pokonać opornik kilka kilo) ani pojemnościami czegośtam. To twarde zero - o ile oczywiście mierzyłeś na pinie procesora bo nawet nie chciało Ci się napisać skąd każdy sygnał był zdjęty. Acha, i przypominam, że do łapania szpilek (o ile w ogóle tam są) służy tryb akwizycji Peak Detect (pod przyciskiem Acquire) a nie standardowy Sampling. I warto w takich zabawach ograniczyć pasmo fukcją BW Limit. Może w wolnej chwili poczytaj coś o oscyloskopach w ogóle, a przynajmniej instrukcję do tego Rigola? Wiesz podstawy obowiązujące od czasów sprzętów lampowych: czym się różni NORMAL od AUTO i od SINGLE, tryby wyzwalania (najważniejsze oręże osyloskopu) i akwizycji, itd.. Bez tego nic ciekawego nie zobaczysz a losowe zdjęcia nie posuną Cię ani o krok w kierunku znalezienia przyczyny problemów. To jakbyś próbował wykopać rów nie wiedząc z której strony i jak trzymać łopatę. Przykro mi. Jeśłi pokażesz przebiegi o jakie prosiłem możemy wrócić do dyskusji.
  10. Tu nigdzie nie ma o przetwornicy, nartomiast wyraźnie widzę 5V w kontekście silnika. Drivery silników krokowych to kontrolowane źródła prądowe i wymagają sporego (dwu- trzykrotnego) przewyższenia zasilania nad napięciem nominalnym cewki by sensownie działały dla prędkości większych niz kilka kroków/s. Dlatego rozwiązanie z (nawet) 12V zasilaniem drivera dla 12V silnika jest złe choćby z tego powodu, że biorąc pod uwagę konieczny zapas na driver, zostanie Ci może z 6-7V na silnik. A przetwornica boost im wyżej każesz jej podwyższać tym gorzej działa. Chyba że zrobisz taką z transformatorem - wtedy stosunek wy/we jest obojętny, ale o to Cię nie podejrzewam. Powinieneś tu użyć (jeżeli już koniecznie krokowego) silnika pracującego bardziej prądowo, np. z cewką na 2 .. 3.5V. No i ta uwaga o biednych silnikach krokowych... Każde źródło napędu ma jakieś plusy i minusy. Silniki krokowe stosujemy gdy koniecznie potrzebujemy sporych rozdzielczości kątowych, pracy start-stopowej najlepiej w otwartej pętli, bo tam widać całą ich zaletę "krokowości" przy niezbyt wygórowanym zapotrzebowaniu na moment. Albo gdy godzimy się, że moment ten uzyskamy kosztem ogromnych strat energii dostając w zamian właśnie "kroki". Jeśli już musisz użyć jakiegoś rodzaju enkodera to trudno, ale to pierwsze światełko każące się zastanowić czy silnik wybrałeś sensownie. One są naprawdę słabe - tak jeśli chodzi o moc jak i moment, i aplikacja musi naprawdę do nich pasować by z całą odpowiedzialnością można było powiedzieć, że tu krokowy się spełni. Ja nie mam do nich uprzedzeń i zrobiłem wiele maszyn bazujących na tego typu napędach, ale zawsze musiało to być uzasadnione. A daleko szukać: tu masz zasilanie bateryjne czyli po pierwsze sprawność, po drugie sprawność i po trzecie.. wiadomo. Jeśli rowiązanie ma być kompaktowe, wymaga sporego momentu (rozbawiłeś mnie tą przekładnią ślimakową z plastiku - naiwność ludzi chyba naprawdę nie zna granic, ale szczerze mówiąc patrząc na te obrazki podejrzewałem że tak to planujesz) a jednocześnie nie potrzebujesz praktycznie żadnej kątowej rozdzielczości wału silnika, to widać jak na dłoni, że krokowy to zły pomysł. Od tego masz enkoder gdzieś tam na wale i inteligencję w procesorze by tak sterowała poczciwym silnikiem DC (z odpowiednią przekładnią) by zatrzymywac go w zadanym punkcie z dokładnością do 1/4 obrotu. Oczywiście z punktu widzenia sprawności byłoby najlepeij, gdyby tę przekładnię napędzał silnik BLDC, ale to kolejny stopień wtajemniczenia. Pisząc o serwie 360° miałem na myśli kompatkowy napęd dwukierunkowy który tylko z wyglądu przypomina typowe serwo: https://modelarski.com/produkt-SerwoTowerProMG-90DR,12759.html Tutaj za połowę ceny silnika krokowego z driverem masz ponad 2kgcm przy 5V zasilania i gotowy, wbudowany sterownik do którego podłączasz jeden sygnał cyfrowy regulujący kierunek i prędkość obrotową. A gdy chcesz to wyłączyć bo nikt zamka nie używa, odcinasz mu zasilanie jakimś tranzystorem i jest 0mA. BTW: Jeśli ze źródła 5V możesz pobrać 2.1A to po drugiej stronie przetwornicy, na 12V masz już na pewno poniżej 1A przy gorącej elektronice tuż obok akumulatorków powerbanka. Nie wliczam tu rzecz jasna spadków na blaszkach złącza USB (przy 2A całkiem sporych) i żyłowania akumulatorków, które w tej sytuacji zdechną po niedługim czasie.
  11. 12-woltowy silnik krokowy to powinieneś z 30V pędzić a nie z 5. Wybrałeś najgorszą opcję do tak niskiego zasilania. Ten driver to w ogóle z 5V nie ruszy nie mówiąc o tym, że nic na silnik nie wypuści. Jakiego momentu oczekujesz na wale silnika a jakiego na wyjściu do klucza? Z czego planujesz wykonać tę przekładnię ślimakową? Bo one mają małą sprawność a tu widzimy słabiutki jak paluszek noworodka silniczek napędzany z rachitycznego napięcia i przekładnię, która ma szansę po kilku użyciach sama będzie w stanie zatrzymać ten cały mechanizm. A nie myślałeś - skoro już chcesz wstawiać ( z resztą słusznie) sprzężenie zwrotne - o zwykłym mechanizmie serwa tzw. 360° czyli zwykły silnik DC z przekładnią zębatą? Proste to i tanie a moment ma pewnie ze 100 razy większy niż ten nieszczęsny krokowiec. No i daje się zasilać z 5V, nie potrzebuje drivera (bo ma wbudowany a sterujesz całość w dwie strony jednym sygnałem PWM.
  12. No właśnie chyba nie. A przynajmniej ja tu oczywistego błędu nie widzę. Wyjścia z procka są zrobione poprawnie a program - jeśli tylko nie zrobi czegoś głupiego - nie powinien generować szpilek na wyjściach. Tym dziwniejszy jest objaw i tym łatwiej przyczepiłem się do problemów z zasilaniem bo to właśnie wygląda jak tego typu sprawa. No nic, czekamy aż Kolega @daniel89 coś pomierzy i pokaże wyniki z zimnego startu. Być może gdzieś dalej w kodzie dzieje się coś dziwnego, ale zawsze można zrobić próbę z wykasowanym procesorem. Taki "program" ba pewno nie rusza portów. Wtedy włączyć urządzenie kilkadziesiąt razy i próbować zaobserwować szpilkę oczywiście wciąż mając podpięty i uzbrojony oscyloskop. Jeśli w takim zestawie nic się nie wydarzy, to można zacząć dodawać kawałki kodu, począwszy od inicjalizacji właśnie linii I/O. Dobrze przeprowadzona także nie powinna wygenerować żadnej szpilki. Być może problem leży zupełnie gdzie indziej, np. długie przewody i bliskość transformatora 230V/50Hz powodują, że w chwili wkładania wtyczki do gniazdka na kabelku do transoptora robi się ten 1V i zapala IREDa, albo program nie jest taki jak nam się wydaje... W sumie zagadkowa sprawa, nie wiemy wszystkiego i trzeba trochę improwizować.
  13. Tak, to rozwiązanie które powinno być stosowane, ale już o tym pisaliśmy. Kolega rzeczywiście robi odwrotnie, ale powstająca w ten sposób szpilka ma kilka us. A potem napisał, że odwrócenie kolejności zapisów (czyli postulowane przez Ciebie najpierw PORTx a potem jego DDRx) nie pomaga..
  14. "Mostek oddaje delikatnie ponad 5V DC" Jak miałem to zrozumieć?
  15. To już jest bardzo źle i to może być przyczyną problemów a przynajmniej jest poważną poszlaką. Mostek ma dawać grubo powyżej 7V żeby 7805 miał w ogóle szansę działać. Masz za mały (w sensie napięcia) transformator.To co piszesz oznacza także, że nie rozumiesz tego co na oscyloskopie widzisz. Jeżeli na Vcc dostajesz choć minimalne zmiany/zapady/dołki poniżej 5V to znak, że na wejściu stabilizator ma za mało. To nie są pretensje, raczej irytacja. Prosiłem o wyniki pewnych pomiarów a Ty wrzucasz coś starego. Prosiłem o woltomierz a pokazujesz mi kreskę na oscyloskopie - to nie są te same narzędzia. Nie. Z definicji porty tych procesorów nie generują szpilek a my szukamy w którym miejscu Twój układ jest ułomny. Ani sterowanie zerem (optotriak) ani sterowanie jedynką (buzzer) nie są ani dobre ani złe. Ze schematu wynika, że obie linie mają odpowiednio zaprojektowane obwody by nie dawać żadnych stanów nieustalonych (ktoś miał o tym pojęcie, brawo, bo to rzadkość): pnp ma pullup do Vcc a npn ma pulldown do masy. Tu wszystko jest w porządku. O ile Twój układ jest zmontowany jak na schemacie (wartości elementów i ich istnienie na PCB), to nie tu musisz szukać. Projekt elektryczny otoczenia procesora jest dobry. Osobiście podejrzewam, że dzieje się coś złego w momencie narastania napięcia z samym zasilaniem procesora. Prawdopodobnie nie narasta monotonicznie tylko impulsami tak jak dochodzą kolejne doładowania 100Hz z mostka: mając okresy wzrostów i zapadania się i to powoduje, że programu rusza jakby z czkawką - być może wielokrotnie, a spadki i wzrosty Vcc powodują od czasu do czasu wejście kodu w jakieś niepoprawne obszary i wyprodukowanie śmieci na portach. Także skup się na tej jednej chwili załączania i pokaż przebiegi. Dwa-trzy obrazki zrobione w odpowiednim momencie są warte dni spędzonych na kombinowaniu z programem i robieniu ślepych prób z kondensatorami, opóźnieniami czy co tam jeszcze wymyślisz. Chorego na gruźlicę nie leczy się przez zatkanie mu ust żeby nie kasłał tylko niszcząc bakterie antybiotykiem. Oczywiście może się zdarzyć, że wyjdzie iż kondensator jest (pomocniczym) rozwiązaniem, ale musisz to wiedzieć a nie zgadywać. Co do zasady: w dobrze zrobionym zasilaniu układu tych szpilek nie ma prawa być. Więc.. do roboty. BTW: Jeśli rzeczywiście na wejściu 7805 ma <7V to od razu , w ciemno zmieniasz trafo na takie, które po wyprostowaniu daje min 8V lub odpalasz układ z zasilacza DC 9-12V zamiast z mostka. Oczywiście wszelkie pomiary o które prosiłem robisz na starej konfiguracji.
  16. Chłopie, skup się. Nie kombinuj niczego z biliotekami tylko szukaj problemu w tym co jest. Dopiero gdy będziesz miał pewność gdzie leżą grabie, zaczniesz coś poprawiać. To nie łapanie pcheł tylko normalna procedura uruchmiania elektroniki. Żle że jej nie rozumiesz, ale dobrze, że zacząłeś zamiast wywalać układ do kosza "bo jakiś zły jest". Chodząc po omacku głównie ponabijasz sobie guzów. Miałeś zrobić pomiary bo poszukujesz pewnej anomalii a nie w celu udowodnienia sobie tezy, że wszystko jest dobrze. Chciałem byś pokazał (a przede wszystkim samemu zobaczył) jak wygląda narastanie wszystkich zasilań i stan wyjścia OUT bo to w tym momencie masz problem a nie gdy wszystko jest stabilne, czyż nie?. Oscyloskop jest teraz dla Ciebie nieocenionym narzędziem wsparcia a nie telewizorkiem do oglądania seriali. Zwyczajnie zrób to o co prosiłem, powtarzam jeszcze raz: dwa kanały, pierwszy podłączony do wejścia 7805 drugi do jego wyjścia, masa oscyloskopu do GND układu obie sondy sprzężone DC, czułość kanałów: pierwszego 5V/dz (a jeśli się zmieści to i 2V/dz), drugiego 1V/dz wyzwalanie NORMAL (nie AUTO), źródło triggera z kanału 1 (czyli z wejścia 7805), tryb sprzężenia DC, poziom ok. 2V, podstawa czasu na 5, 10 lub 20ms/dz - w zależności od prędkości narastania napięć I tak jak napisałem: upewniasz się że ustawiłeś wszystko jak powyżej, wyłączasz urządzenie, czekasz kilkanaście sekund, przygotowujesz oscyloskop i włączasz wtyczkę do sieci. Oscyloskop wyzwoli się raz i ten ekran nam pokaż. Gdyby sie okazało, że dostałeś więcej niż jeden skan przełączasz oscyloskop z NORMAL na tryb SINGLE, uzbrajasz go i powtarzasz całą próbę - musisz mieć pierwszy przebieg tylko z samego włączania i narastania napięć. Ew. zmieniasz podstawę czasu by było widać całość narastania. Punkt triggera ustaw gdzieś w 1/4 szerokości ekranu żeby więcej zmieściło się po jego prawej stronie. A potem to samo, ale drugi kanał przełączony na pin OUT procesora. Na trzecim obraku możesz pokazać Vcc (pierwszy kanał) vs OUT (drugi kanał). Dopiero to da pogląd jak zachowują się zasilania i rzeczony pin w sytuacji krytycznej - to tam masz jakiś kłopot i jeśli tego nie obejrzysz, to cała reszta jest zgadywnaiem. Skorzystaj z drogiego sprzętu jakim dysponujesz tak jak na to zasługuje. BTW: Wciąż nie wiemy jakie napięcie w stanie ustalonym oddaje mostek (nie masz woltomierza? naprawdę?) i jakie jest na wyjściu 7805. To takie trudne zmierzyć i napisać? Przecież to podstawowe pomiary w takim układzaie, konieczne do przeprowadzenia niezależnie od tego czy wszystko działa czy nie.
  17. To może skupmy się na tym schemacie? Uściślijmy fakty a Ty popraw mnie jeśli masz połączone inaczej albo gdy inaczej rozumiesz schemat. Ja tam widzę procek zasilany z 5V i wyjście OUT sterujące tranzystorem pnp załączającym diodę optotriaka. Rzeczywiście, stan niski włącza tranzystor, ale masz tam przecież wszystko co trzeba: rezystor w bazie i rezystor od bazy do Vcc. Nie potrzebujesz żadnych podciągów i jeśli eksperymentowałeś z opornikiem to znaczy, że nie bardzo kumasz co tam jest narysowane. Czy to Twój schemat? Jak rozumiem - bo nie mamy opisu kabla łączącego oba schematy - pin X1-3 ma połączenie z pinem X2-1 i to jest sygnał dla anody diody a oprócz tego łączymy X1-2/9 z X2-2 (GND) oraz X1-6 z X2-3 (jakieś zasilanie,ale nie wiemy jakie). No to zacznij od prostych pomiarów: ile napięcia jest na wejściu 7805 (woltomierz)? Ile na wyjściu? Potem pokaż na dwóch kanałach oscyloskopu jednocześnie: narastanie napięcia z wyjścia mostka i zasilanie procesora Vcc. Potem drugi obrazek: narastanie napięcia na mostku (czyli wejście 7805) i wyjście OUT procesora. Wszystko z podstawą czasu 10-20ms/dz, sprzężenie DC od wyjścia z mostka na poziomie ok. 2V. Poczekaj aż kondensatory się rozładują (może być kilkanaście sekund), podłącz oba kanały oscyloskopu ioczywiśxcie jego masę do GND układu i włącz wtyczkę do sieci. A wcześniej usuń z ekranu tę całą tabelkę z pomiarami - to do niczego nie jest potrzebne. Chcemy zobaczyć jak wygląda proces startu całości i jak zachowują się wtedy napięcia +5V i wyjście procesora. Do czego jest pin X1-1? Czekamy na obrazki.
  18. W pierwszej chwili myślałem, że chodzi Ci o szpilkę która powstaje gdy najpierw zapiszesz do rejestru DDR kierunek OUTPUT a za chwilę do rejestru PORT stan wysoki. Wtedy na pewno powstaje impuls z twardym stanem zero, ale trwa on tyle ile w Arduino wykonuje się funkcja digitlWrite() więc jakieś mikrosekundy. Jeśłi masz problem z niezrozumieniem działania portów i w konsekwencji błędem na schemacie, to żadne takie zamienianie nie pomoże, bo stan niski wymuszony obciążeniem (przypominam, że wciąż nie widzieliśmy schematu) podłączonym do pinu liczysz teraz w setkach milisekund. Cóż, różne są znaczenia pojęcia "ułamek sekundy". Jedynym wyjściem dla Ciebie jest schowanie dumy do kieszeni i wstawienie opornika podciągającego. Znajdź na PCB jakies miejsce gdzie ścieżka sygnału przechodzi blisko zasilania i w zależności od tego co masz podłączone weź kilka kΩ (1-22k) i podepnij od tego krytycznego pinu portu do Vcc procesora. Wtedy masz pewność, że od włączenia zasilania do zaprogramowania portu na wyjście w stanie 1 będziesz tam miał stan wysoki. Pewne cechy procesora warto znać wcześniej. W sumie to nie rozumiem dlaczego zakładałeś, że będzie tam fajna jedynka od samego początku. Rozumiem, gdyby to była diodka LED to może błysnąć i katastrofy nie ma, ale tak ważne wyjście w systemie i nie zastanowiłeś się jak zrobić to dobrze lub nie zapytałeś? Chociaż, w sumie mogło być jeszcze gorzej. Przecież mogłeś robić zapalnik do rakiety za milion dolarów... A procki jak procki. Żaden nie startuje w czasie zero mikrosekund a dodatkowo żadne zasilanie nie wstaje od zera w takim czasie. Na włąsnych błędach uczymy się najlepiej i teraz na pewno sekwencję startową Arduno zapamiętasz.
  19. Też bym tak zrobił w pierwszym przybliżeniu, bo wiadomo że to proste i pewne. Używałem jednak zarówno starszej u8glib jaki i u8g2 tego autora, grzebałem w kodach, przerabiałem te biblioteki na własny użytek i wiem, że dobrze to działa. Nie, akurat tutaj rysowanie bitmapy nie woła drawPixel Dobra, ciekawe co napisze @hawli gdy już wróci do domu i przeczyta swój wątek. Trochę się tego uzbierało. Bo gdy ja wrócę, to na pewno spróbuję odpalić któryś z powyższych pomysłów i zmierzyć frame rate. Teraz widzę, że użyta płytka to nano every na Mega4809 a ta ma trochę więcej RAMu, FLASHa i zegara niż poczciwa M328 więc.. można zaszaleć
  20. Pewnie, że w RAMie a w bibliotekę wstawiony jest mechanizm blokowego przesłania całego nowonamalowanego obrazu do pamięci OLEDa. Oszczędzić tu możesz na wielkości przesyłanego fragmentu, ale akurat taki okrągły wskaźnik nie daje szansy jakichś dużych oszczędności względem prostokątnego obszaru. Tym bardziej, że wysyłając tylko poszczególne bajty musisz wachlować rejestrami adresów kontrolera. Chodziło mi o to, że rysowanie bitmapy w RAMie przez jednokrotne wywołanie funkcji drawBitmap jest szybsze niż dziesiątki razy wołana drawPixel nawet jeśli ta pierwsza musi narysować dwa razy więcej punktów. Potem i tak wszyscy lądują w jednym barszczu czyli przepisywaniu bufora do OLEDa. To trochę akademicka dyskusja, bo z góry trudno powiedzieć który pomysł będzie najszybszy.Moim zdaniem bez prób się nie obejdzie. Na pewno rozwiązanie szyte na miarę będzie najdoskonalsze, ale nie każdy ma umiejętności pisania driverów do chipów graficznych i optymalizacji kodu jak Ty. Czasem szuka się prostej porady jak zrobić trochę szybciej małym kosztem. Z trzeciej strony to tylko wyświetlacz parametrów silnika, wystarczy mu 10 FPS a poza tym OLEDy mają paskudną cechę migotania, bo diody są szybkie. Osobiście nie chciałbym mieć tego w samochodzie np. w nocy.. EDIT: Twój pomysł na stworzenie tablicy nie wydaje się prosty i wymaga napisania nietrywialnego programu, który najpierw rysuje te wskaźniki (jak?) w każdym położeniu a potem analizuje co narysował. To już nie wiem czy dla pola 64x40 nie warto zrobić tego na kartce A4z ołówkiem w ręku.. Ile tych pixeli będzie wewnątrz tego wskaźnika przy tak małej rozdzielczości? 200? 300?
  21. A po trzecie - kontynuując za @Elvis - Arduino nie ustawia pinów na zera tylko na wejścia.Właśnie po to, byś mógł zrobić sobie dowolny stan opornikiem pullup lub pulldown. Trzeba było o tym pomyśleć wcześniej i tak zaprojektować sprzęt by podciągał sobie pin do jedynki albo korzystał z aktywnego stanu wysokiego - tak czy tak jakiś opornik jest potrzebny. A zanim zaczniesz grzebać w sekcjach pomyśl ile w takim prostym programie trwa rozbiegówka zanim wywoła setup() - zero kropka nic. Albo może inaczej: rozpisz sobie ile trwają poszczególne etapy wstawania kodu Arduino: Po narośnięciu zasilania reszta układów wokół procesora już działa - czas start. Procesor stoi w stanie RESET wymuszonym przez wewn BOR i/lub specjalny licznik- ten czas ustawiasz fusami, plus czas startu generatora. RC jest najszybszy a oscylator ceramiczny używany w Arduino - duużo wolniejszy. Po wyjściu z zerowania rusza bootloader Arduino i sprawdza czy na uarcie jest jakaś komunikacja z PC - to mogą być setki milisekund. Jeśli kontakt nie został nawiązany, bootloader startuje aplikację Ta zaczyna od inicjalizacji swoich podstawowych rejestrów i zmiennych oraz zmiennych w obszarze data programu w C - to w małym procesorku trwa dziesiątki mikrosekund, nie ma o czym mówić. Potem następuje wywołanie funkcji main() a ta na dzień dobry odpala setup() gdzie możesz ustawiać do woli swoje piny. I na koniec pytanie za 100 punktów: gdzie jest największa oszczędność i czym trzeba zająć się w pierwszej kolejności? Odpowiedź - niczym z ww. Tak czy tak zawsze będzie szpilka i bez zmian sprzętowych się nie obejdzie.
  22. Zamień kolejność tych dwóch wywołań a przede wszystkim pokaż co tym sterujesz.Przecież od włączenia zasilania do przejęcia sterowania przez funkcję setup() może minąć mnóstwo czasu. To właśnie ten "ułamek sekundy" w którym otoczenie już pracuje a aplikacja procesora jeszcze nie i nic z tym nie zrobisz. Trochę możesz zaoszczędzić wywalając bootloader, ale wtedy płytka przestaje być "Arduino" a zaczyna "AVR", do której potrzebny jest programator ISP.Potem możesz skracać fuse bitami czas przebywania procka w stanie RESET. Najlepszym jednak wyjściem jest modyfikacja sprzętu tak, by zanim program ustawi kierunki i stany na pinie był już stan wysoki.Dlatego musimy wiedzieć co tam podłączasz i jak.
  23. Trochę Cie nie poznaję. Przecież biblioteka jest pierwszym wyborem gdy zaczynasz robić tego typu projekt. Ma drivery do mnóstwa chipów, umie rysować podstawowe prymitywy graficzne, ma wbudowanych wiele krojów a przede wszystkim (akurat ta) jest prosta pojęciowo i aplikacyjnie. To naturalne, że Kolega @hawlizacząl od takiego podejścia i być może po kilku modyfikacjach kodu wymagana prędkość zostanie osiągnięta. Jeśli rzeczywiście oprze się o ścianę, można będzie myśleć o wywaleniu całego kodu u8g2 i zaczęciu de facto projektu od nowa, ale to chyba jeszcze nie ten moment. Pomysł z tablicą współrzędnych pixeli zapalanych dla kolejnych przyrostów jest całkiem OK choć pamiętaj, że specyfiką bibliotek tego autora jest to, że rysowany jest cały obraz za każdą ramką lub inaczej: po każdej zmianie. Co więcej, w zależności od tego ile RAMu pozwoliłeś zarezerwować bibliotece, tyle razy musisz ten obraz narysować dla każdej nowej ramki. A ponieważ rysowanie bitmap jest szybsze niż rysowanie pixeli (licząc nawet w ilości wywołań funkcji biblioteki) to dlatego pomysł gotowych, prerenderowanych obrazków przyszedł mi do głowy jako pierwszy. Czy mógłbyś zaproponować sposób jak stworzyć taką tablicę pixeli? Pytam z czystej ciekawości, bo nie przychodzi mi do głowy żaden dobry pomysł nie licząc kartki i ołówka lub nietrywialnego programu graficznego.
  24. Ojej, liczenie trygonometrii w tym procesorze podczas wyświetlania to musi być jakiś żółw. Nie dość, że powolna, to metoda jest okropnie nadmiarowa. Przecież te kreski muszą być tak gęste by nie zostawić żadnego czarnego pixela a to oznacza rysowanie wielu punktów na sobie. Ja bym skorzystał z tego, że wyświetlacz jest niewielki i monochormatyczny więc stosunkowo potrzebuje niewiele pamięci by zrobić bitmapę jego obszaru. I tu mam dwa pomysły. Pierwszy to gotowe obrazki we FLASHu i ograniczenie rozdzielczości samego wskażnika. Jeśli wystarczy wskazanie powiedzmy 0..100% w krokach co 1 to daje tylko 100 różnych obrazów. Jeśli każdy zajmuje obszar powiedzmy 64x40 to daje 2560 bitów/pixeli czyli 320 bajtów. W podejściu najbardziej rozrzutnym zużywa to 32000 bajtów FLASHa co jest (chyba) nie do przyjęcia. Można jednak zauważyć, że lewa i prawa strona są lustrzanym odbiciem , więc wystarczy trzymać zapełnienie 0d 0 do 50% co daje już tylko 16000 bajtów obrazków. Po zmniejszeniu rozdzielczości do 2% zapotrzebowanie zmniejsza się do 8K a to jest już zupełnie spoko nawet na małym procesorku Arduino. Tak więc robisz 26 obrazków np. lewej połowy wskaźnika z zapełnieniem 0-50% z krokiem 2% a potem rysujesz dwie połówki odpowiednio wybierając obrazki lewej i prawej, gdzie po prawej stronie odwracasz kierunek rysowania. Drugi pomysł to odżałowanie 320 bajtów RAMu na umieszczenie w nim prerenderowanego obrazka pustego wskaźnika (0%) jako konturu, narysowanie na nim jednej kreski pokazującej aktualny stan po czym metodą wypełniania obszaru zamalowanie całego paska jedną ze standardowych metod grafiki komputerowej (np.wylewanie wody). Teraz wystarczy skorzystać z funkcji rysowania bitmapy i przenieść cały obrazek na odpowiedni obszar wyświetlacza. Nie wiem w jakim trybie masz zainicjowaną u8g2 na ten wyświetlacz, ale tu można trochę przyoszczędzić pamięci kosztem czasu wykonania. Ponieważ rysowanie bitmap jest sporo szybsze niż sinusy, to być może możesz pracować w trochę wolniejszym trybie 1/2 albo jeszcze mniejszym a odzyskany RAM przeznaczyć na renderowanie wskaźnika. Wtedy "rysujesz" go (np. zalewasz wodą) dla siebie tylko raz na ramkę a w pętli rysowania wołasz funkcję bitmapy. Niestetym gdy potrzebujesz kilku wskaźników na jednym wyświetlaczu to generowanie obrazków trzeba będzie powtarzać dla każdego osobno w pętli do{} - jeśli mają korzystać ze wspólnego obszaru RAMu No chyba, że masz prawie kilobajt wolny na trzy renderingi na raz. Zamiast lania wody (funkcje rekurencyjne wymagają RAMuna stos) można wyobrazić sobie także szybki algorytm zamalowywania obszaru liniami poziomymi lub pionowymi, które są bardzo szybkie. I pomysł dodatkowy: rysowanie okręgów jest wbrew pozorom dużo szybsze niż te Twoje obliczenia, bo zupełnie nie wymaga trygonometrii. Być może warto dopisać specjalizowaną funkcję rysowania wycinka łuku o zadanej długości (i grubości?) liczonej (lub stablicowanej?) w pixelach wg kąta i stałego promienia. Koniecznie zapoznaj się z tzw. "Bresenham circle drawing algorithm". Jest zaskakująco prosty a na jego podstawie można rysować fragmenty łuków szczególnie łatwo jeśli zaczynają się od pełnych wielokrotności 90° a to chyba Twój przypadek
  25. Nie wiemy co to za zasilacz, ale popularne wtyczkowe bywają bardzo zaśmiecone. Pokaż jak to wszystko masz połączone (bo może to być problem jednoczesnego podłączenia do kompa, zasilania z czegoś innego i jeszcze długiego kabla lutownicy) a w międzyczasie zrób po prostu filtr na wejściu z zasilacza. Jak rozumiem będziesz tędy zasilał także grzałkę, więc układ nie powinien być bardzo stratny dla DC. Szumiący zasilacz może wpływać albo na kabel lutownicy albo wchodzić przez zasilanie. Zewrzyj wejście wzmacniacza do masy gdzieś blisko jego pinów i zobacz czy nadal widzisz odchyłki. Walka z takimi objawami jest trudna. Trzeba uzbroić się w kilka dławików i kondensatorów i zwyczajnie próbować. Zacząłbym od wejścia 7805, bo przez niego zakłócenia przechodzą jak ludzie po pasach. Możesz spróbować dławika common mode i dwóch kondensatorów po 100nF na samym kablu zasilacza. Zakres napięć wejściowych powinien jak najlepiej pokrywać zakres przetwornika. Jeśli uważasz, że napięcia wejściowe jeszcze sporo urosną względem tego co masz teraz to rzeczywiście można trochę zdjąć wzmocnienia. Na pewno nie trzy razy, bo tu żadnego niebezpieczeństwa nie ma. Napięcie wyższe niż VREF zostanie zmierzone jako 1023, ale dopóki nie przekracza zasilania ADC nic scalakom nie grozi.
×
×
  • Utwórz nowe...