Skocz do zawartości

MWuinoUNO-Bootloader programmer i Arduino w jednym!!!


Pomocna odpowiedź

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

Dnia 19.01.2021 o 00:42, Matthias napisał:

Diody na liniach MOSI, MISO, SCK, sprawiają, że każda linia może przysyłać dane tylko w jednym kierunku.

To jakaś nowatorska koncepcja, bo nie wiem czy wiesz, ale wysyłanie jedynek i zer do pasywnego portu (bez podciągów) wymaga aktywnego generowania tych stanów za pomocą tranzystorów (schowanych wewnątrz scalaka), które zwierają pin wyjściowy do masy i do plusa. To nie prąd do zaróweczki, że możesz wstawić diodę i będziesz "przysłać dane tylko w jednym kierunku". Dioda zwyczajnie separuje jeden z tranzystorów portu i stan niski lub wysoki (w zależności od jej kierunku) jest zdegenerowany: czas narastania jest ogromny i nie ma żadnej pewności, że w ogóle stan ten dotrze do odbiornika. A gdy ten jeszcze będzie czymś obciążony (o czym poniżej), to klęska.

Programator - jeśli jest tak jak tu podpięty na stałe do procka "użytkowego", powinien zwyczajnie odwieszać swoje wszystkie piny SPI do stanów "INPUT" kiedy nie pracuje i tyle. Nie obciąża wtedy sygnałów docelowych a gdy zaczyna programowanie (a przecież wie kiedy to się dzieje) zaczyna od wystawienia RESETu i dopiero po kilku us może "przypiąć się" do SPI przez przestawienie dwóch pinów na OUTPUT. Żadne tu diody nie są potrzebne a to co wymyśliłeś to pomyłka.

Radzę obejrzyj oscylokopem sygnały SPI na pinach procesora za diodami (w szczególności porównaj sygnały np. na pinach 17 obu procesorów w czasie programowania, gdy ten lewy wysyła dane do prawego), a najlepiej od razu je wytnij i zapomnijmy o tej przykrej wpadce. A jeśli nie wierzysz, to jako "układ użytkowy" podłącz do arduinowego pinu ~11 (np. na złączu SV2) opornik 1k podciągający do +5V. Taka głupia symulacja powiedzmy przekaźnika albo diodki LED (włączanych stanem niskim) załatwia Twój programator, bo ten nie jest w stanie wysłać przez Twoją diodę stanu niskiego na linię MOSI (to samo z SCK, choć tutaj 1M do masy trochę poprawia aczkolwiek nie ma szans w przypadku "walki" z 1k).

Jako bufora dla diodki na SCK nie musiałeś dawać żadnego wzmacniacza analogowego. Do separacji wystarczy bramka typu 1G17, 1G04 lub podobna, a nawet mały MOSFET. Wzmacniacze nie są do tego, a akurat ten LMV zasilany z 5V nie powienien widzieć na wejściu więcej niż 4V.

Do czego są D7/D8?

Rozumiem, że użycie dwóch przekaźników odpalanych tym samym sygnałem (zamiast jednego DPDT) było spowodowane tylko ich posiadaniem w szufladzie, tak?

 

  • Lubię! 1
  • Pomogłeś! 1
Link to post
Share on other sites
(edytowany)

@marek1707

Witam. Dziękuje za odpowiedź. Odnośnie tych diod nie miałem do końca pewności czy jest to idealne rozwiązanie. Tak naprawdę nie byłem pewny swoich założeń z tymi diodami, ale ten post je rozwiał i teraz wiem, że w kolejnej wersji nie będzie diod. Ostatnio faktycznie na płytce stykowej zbudowałem fragment tego obwodu i faktycznie okazało się, że mogło się obejść bez tych diod. Generalnie moje pierwsze założenie było takie, że wgrywając bootloadery do procka na IC2 nie będzie nic do niego podłączone. Po prostu ktoś zakupi sobie określoną ilość procesorów i sobie do nich na przyszłość wgra bootloadery. Przydatne kiedy w urządzeniu jeden z procesorów ulegnie uszkodzeniu i będziemy dysponować gotowym aby go zastąpić. Faktycznie zrobiłem próbę z rezystorem i rozumiem teraz o co chodzi. W takim przypadku działanie diody polegające na przewodzeniu w jedną stronę jest faktycznie pomyłką. Bardzo dziękuje za ten wpis i wyjaśnienie działania tych wyjść bo przyznaje się bez bicia nie miałem o tym pojęcia. Postaram się zaktualizować pliki i tą informację o diodach. Faktycznie przekaźniki miałem kiedyś od znajomego z pracy. Rozmiarowo idealnie się nadawały oraz pobór prądu przez 1 przekaźnik wg datasheet to jak pamiętam 15 lub 30 mA. Tak więc przy stabilizatorze o wydajności 1A to mało. Diody na cewkach przekaźnika to standardowe zabezpieczenie, fakt stosowane głównie kiedy przekaźnik jest sterowany z tranzystora ale z tego co wiem to cewka przekaźnika jest elementem indukcyjnym, przez co gromadzi energię w wytworzonym polu magnetyczny w trakcie gdy przekaźnik jest włączony. Diody D7 i D8 Eliminują indukowane napięcia (o odwrotnej polaryzacji niż zasilanie) podczas rozłączania przekaźnika. Rzadko projektuje urządzenia z przekaźnikami i tu też się zastanawiałem ale wiedząc jakie są skutki gromadzenia się energii na cewce przekaźnika wolałem dodać te diody. Zwłaszcza, że elementy zamawiałem na TME a zakup jest od określonej ilości sztuk więc mając ich jeszcze kilka dodałem je do cewek tych przekaźników. Odnośnie wzmacniacza operacyjnego takie samo rozwiązanie jest zastosowane w oryginalnym Arduino i jego klonach. Fakt można to też rozwiązać za pomocą tranzystora. Generalnie aby mieć pewność działania mojego układu korzystałem już rozwiązań, które zostały już wykorzystane w oryginalnym Arduino. Generalnie nie jest buforem tej diody tylko, żeby sygnał z SCK z  IC1 przechodzący przez te diodę mógł zaświecić diodę podobnie jak sygnał SCK z IC2.

2 godziny temu, marek1707 napisał:

Dioda zwyczajnie separuje jeden z tranzystorów portu i stan niski lub wysoki (w zależności od jej kierunku) jest zdegenerowany: czas narastania jest ogromny i nie ma żadnej pewności, że w ogóle stan ten dotrze do odbiornika. A gdy ten jeszcze będzie czymś obciążony (o czym poniżej), to klęska.

Nie powiem dobrze wiedzieć, że takie mogą być skutki ale akurat u mnie o dziwo działa wszystko dobrze bo wgrywałem bootloadery pod rząd do około dziesięciu ATMEG i nie było problemu, ale tak jak napisałem teraz wiem, że pomysł z diodami nie był trafiony. Jeszcze raz bardzo dziękuje za wyprowadzenie mnie z błędu bo gdyby nie ten komentarz miałbym pewność, że moje założenia były słuszne. Generalnie też wychodzę z założenia, że jak nie jestem pewien. Chodzi o te zabezpieczenia to lepiej wstępnie je dać w projekcie, bo jak okażą się nie skuteczne i niepotrzebne to można je odlutować i zastąpić rezystorem 0R lub kawałkiem drutu niż jak pominąć i potem rozcinać ścieżki i rzeźbić na PCB aby dało się przylutować.

Edytowano przez Matthias
  • Lubię! 1
Link to post
Share on other sites

To po kolei:

49 minut temu, Matthias napisał:

ale wiedząc jakie są skutki gromadzenia się energii na cewce przekaźnika wolałem dodać te diody

No to może wiedząc jakie są te skutki, opisz co się będzie działo z tą energią podczas wyłączania zasilania. Wystarczy kilka zdań, chętnie przeczytam. Wtedy wyjdzie czy wstawiłeś je bo teoria i Twoja wiedza to uzasadniała, czy wrzuciłeś bo zwykle obok przekaźników (i tranzystorów) są, to nie zaszkodzi. Oczywiście argument kupowania w celu przekraczania kolejnych progów cenowych w TME rozumiem, sam tak robię.. Ale o diodkach chciałbym coś od Ciebie jeszcze usłyszeć.

53 minuty temu, Matthias napisał:

Odnośnie wzmacniacza operacyjnego takie samo rozwiązanie jest zastosowane w oryginalnym Arduino i jego klonach.

Tak myślałem, że dasz ten przykład (bo kalka jest uderzająca), ale tam jest to zrobione wyłącznie z powodu oszczędności. Potrzebowali komparatora w innym miejscu więc drugi w obudowie został i wstawili go do sterowania LEDa. Ani nie przenosi to pełnego pasma sygnału CLK (więc np. jasność diodki nie będzie dobrze oddawała CLK użytego jako PWM - to tylko przykład błędów wnoszonych przez tego typu separator) ani wejście układu analogowego tego typu nie pasuje do charakteru sygnału cyfrowego. U Ciebie jest to na zrobione "z rozpędu", co więcej, musiałeś specjalnie poszukać wzmacniacz i go wstawić (nie czytając jego karty katalogowej) - naprawdę mimo dobrych chęci, żadnych argumentów "za" nie widzę.

59 minut temu, Matthias napisał:

Generalnie nie jest buforem tej diody tylko, żeby sygnał z SCK z  IC1 przechodzący przez te diodę mógł zaświecić diodę

No właśnie to jest rola bufora: nie obciążamy sygnału wejściowego a na wyjściu mamy spory prąd, np. dla diody LED.

Ogólna moja opinia jest taka: Twój układ cierpi na parę ułomności, ale nie są one krytyczne. Powiedziałbym, że raczej typowe dla człowieka na początku krzywej rozwoju idącej ostro w górę 🙂 Wynikają głównie z braku doświadczenia. Po usunięciu diodek (i zmianie programu na "odwieszający" piny SPI w tryb INPUT) zostaje jedynie to niefortunne przełączanie zasilań przekaźnikami - rozwiązanie łopatologiczne i raczej niestosowane po stronie już stabilizowanego napięcia właśnie z powodu nieuniknionych zakłóceń. Kondensator jest tylko łatą, przy większym poborze prądu (a przecież w końcu dodasz LCD, czujniki czy co tam Ci przyjdzie do głowy) Vcc i tak będzie zdychać. Z tego co jednak widzę, bardziej traktujesz ten projekt jako wygodny programator z podstawką do czystych procesorów niż jako płytę Arduino - chociaż padła ta nazwa w tytule. A jeśli programator, to trochę brakuje mi np. funkcji programowania HV w celu przywracania do życia "zbrickowanych" niechcący kostek. Skoro już podjąłeś taki wysiłek, to może trzeba było pójść jeszcze krok dalej? 

BTW: Co z tym 8-sekundowym wstawaniem układów mega8? Coś tam jest nie tak, sprawdzałeś z jakim zegarem wstają, co się dzieje na wejściu RESET i jak mają ustawione fusebity? Oba procesory (mega8 i 328) mają bardzo podobne mechanizmy startu i o ile mają wgrane to samo robiące bootloadery (bo przecież nie takie same) i podobnie ustawione fusebity, to start powinien zajmować praktycznie tyle samo czasu. Weź podrąż ten temat.

  • Lubię! 1
Link to post
Share on other sites

Odnośnie cewki to cewka przekaźnika jest elementem indukcyjnym, przez co gromadzi energię w wytworzonym polu magnetycznym w trakcie gdy przekaźnik jest włączony. W momencie wyłączenia energia ta jest częściowo oddawana z powrotem do cewki przekaźnika, w bardzo niebezpieczny dla układu sposób, generujący tzw. "szpilki" wysokiego napięcia wielokrotnie przewyższającego napięcie zasilania przekaźnika. Co więcej, generowane przez przekaźnik podczas jego wyłączania szpilki mają przeciwną biegunowość do napięcia zasilania. Z tego co czytałem w zależności od budowy przekaźnika szpilki napięcie mogą mieć nawet kilkaset Volt. Jak widać w obwodzie gdzie znajduje się cewka są stabilizatory, które są półprzewodnikowe. W obwodzie tym znajdują się także kondensatory elektrolityczne oraz ceramiczne, które mają napięcie pracy na 25V. 

Zastosowanie diody ma jedną wadę - wydłuża się około 3-krotnie czas wyłączania przekaźnika. Może to mieć znaczenie w projektach niektórych urządzeń, tak jak tutaj. Bo napisałem, że przy zastosowaniu kondensatora urządzenie włącza się bez zaniku napięcia na procku, natomiast problem zaniku występuje właśnie w momencie odcięcia zasilania cewek przekaźnika, czyli odłączeniu zewnętrznego źródła zasilania. Jeśli chodzi o dobór diody to standardowo stosuje się na przykład: 1N4007 o parametrach 1kV prądzie przewodzenia 1A Prąd w impulsie maks. 30A. Zastosowane przeze mnie diody są o zbliżonych parametrach. Tak jak napisałem w poście, że można dodać kondensator. Zapomniałem napisać też bo nie sprawdziłem obciążenia jakie będzie sterowane przez procesor, ale domyślałem się, że kondensator nie jest idealnym rozwiązanie dla bardziej rozbudowanych obwodów znaczy że nie zapewni w pełni podtrzymania napięcia na procku w chwili przełączania zasilania z konwertera na zasilanie z zewnątrz i odwrotnie. Sprawdzi się jedynie przy prostych projektach, gdzie pobór prądu jest mały. Fakt odnośnie wzmacniacza operacyjnego w Arduino zastosowali układ scalony, który zawiera dwa takie wzmacniacze. Niedawno przeczytałem analizę budowy Arduino i faktycznie tak wykorzystali drugi wzmacniacz. Widziałem że w KAmduino UNO, że tam sterowanie diody L zrealizowane jest na tranzystorze N-MOSFET BSS138 i coś mi się wydaję, że to pewnie byłoby lepsze od tego co zrobiłem. Zwłaszcza, że MOSFET jest sterowany napięciem a nie prądem jak ma to miejsce w przypadku tranzystorów bipolarnych, czyli tym samym też nie obciąży nam linii SCK.

Fakt trochę sam poszedłem na łatwiznę tak jak Ci którzy kopiują 1:1 Arduino, ale tak się zapaliłem do tego, że po prostu chciałem już z programu, w którym projektowałem PCB już mieć to fizycznie. Tak jak też napisałem zrobiłem pewne założenia, które na chwilę obecną były mi na rękę a zakładałem, że prawdopodobnie zrobię drugą wersję lepszą. Metodą małych kroków. Przede wszystkim chciałem zobaczyć jak mi wyjdzie PCB i czy jest ogólnie dobrze zaprojektowane tzn. prawidłowość działania no i ogólnie po paru poprawkach, które opisałem wszystko póki co działa. Ogólnie mój warsztat póki co jest ubogi nie mam oscyloskopu, ale niedługo będę miał dostęp po znajomości. Ogólnie to tylko pracuję z Arduino. Tak więc to moje jedyne narzędzie w jakim programuje procki i pisze programy dla własnych celów. Póki co mi wystarcza do moich projektów. Tak więc programator i wgrywanie skeczy jest w 100% zgodne z tą platformą i nie planowałem innych funkcji póki co. Nie mam także jak sprawdzić ustawień procesora oraz przeprowadzić ich modyfikacji bo nie dysponuje narzędziami do tego.

Problem polega z procesorami polega na tym, że przykładowo mamy ATmegę8 oraz 328. Oczywiście opisuję teraz to co u siebie zauważyłem. Wgrywam bootloader właściwy dla ATmega8 oraz właściwy dla 328. Z resztą próbowałem nawet (bo tego wcześniej nie wiedziałem) wgrać inny bootloader przez Arduino IDE niż ten który powinien być i nie dało się. Bootloadery są dostarczone ze środowiskiem Arduino IDE. Po wgraniu bootloadera wgrywam skecz blink. Procesory podmieniam w podstawce dzięki czemu taktowane są tym samym kwarcem 16MHz oraz podłączonymi do kwarcu kondensatorami 22p. Po włączeniu zasilania procesor ATmega 328 od razu działa to znaczy skecz blink powoduje cykliczne zaświecenie i zgaszenie diody L, natomiast ATmega 8 zaczyna realizować ten skecz dopiero po około 8 sekundach od podłączenia jej zasilania. Mam kilka sztuk tych dwóch procków i zawsze jest tak samo. Na pewno poszukam informacji czy ktoś nie miał podobnie, bo skoro takie zjawisko wystąpiło u mnie to jest też prawdopodobne, że i u kogoś mogło wystąpić. W kolejnej wersji nie zamierzam robić przełączania na przekaźnikach. Na początku jak zabierałem się za projektowanie to szukałem oryginalnego schematu Arduino UNO a nie klonów. Fakt chęci i zapał do pomysłu spowodowały, że nie do końca wszystko przemyślałem. Dopiero jak już zapał ten opadł sam faktycznie zauważyłem, że pewne rzeczy można było zrobić lepiej. Teraz jest mi łatwiej jak mam już działający fizycznie układ, zlokalizować co można poprawić a co zrobić lepiej.

Generalnie powiem tak bo tak działają nawet firmy (nie wszystkie ale niektóre rozwiązania lub fragmenty są skopiowane) , które konkurują też między sobą, co nawet widać po Arduino, generalnie większość to po prostu kopie 1:1. Niektóre firmy nawet dodają coś od siebie przez co jest ciekawy wybór. Ja chciałem dla siebie przede wszystkim zrobić urządzenie, które będzie zawierało przydatne rozwiązania z tego co znalazłem w internecie i scalić je w jednym projekcie. To co zrobiłem na chwilę obecną to jest próba przed tym co będę dalej chciał zrobić. Tak więc dzięki tej dyskusji dowiedziałem się kilku rzeczy jak i także podczas uruchamiania tego projektu. Pozostaje mi tylko wyciągnąć wnioski, nie spieszyć się i dopracować to co już zrobiłem. Naprawdę bardzo dziękuje za wskazanie mi błędów oraz to co można było by lepiej zrobić i na pewno postaram się to zrobić.

Najpierw zajmę się tymi diodami na na liniach MISO, MOSI, SCK. Pozdrawiam   

  • Lubię! 2
Link to post
Share on other sites

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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