Skocz do zawartości

Przeniesienie projektu na własną płytkę.


sith114

Pomocna odpowiedź

Ostatnio używając arduino uno i płytki prototypowej zmontowałem sterowanie do robota jednak chciałbym wszystko przenieść na własne pcb i tu pojawia się pytanie ponieważ chciałem w celu zmniejszenia płytki użyć atmegi 328 w obudowie smd. Atmegę w obudowie DIP mógłbym kupić z bootloaderem lub wgrać go na płytce stykowej. Czy przy podłączeniu i/o mosi jako pwm do sterowania silnikiem mogę jednoczesnie użyć go do wgrania bootloadera?

Myslałem zeby zrobić druga płytke z potrzebnymi peryferiami do wgrania bootloader'a z jakimś dociskiem żeby atmega dotykała padów i pózniej wlutować na pcb do robota już z wgranym bootloaderem.

Link do komentarza
Share on other sites

Gdyby był problem, zawsze możesz zrobić zworkę do programowania 😉 Ja tak zrobiłem, gdy przeniosłem projekt arduino na płytkę PCB. Arduino wymusza sygnał reset podczas programowania, a pod pin resetu miałem wpięty układ resetujący (kondensator, rezystor, przycisk). W takiej sytuacji układ nie chciał się programować. W momencie, gdy rozłączyłem układ resetujący, wszystko się udało 🙂

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

sith114 a czemu nie skorzystasz po prostu z ISP? Rozumiem że trzeba trzymać rygor rozmiaru, ale są małe gniazda albo można też wyprowadzić to na polach i użyć szpilek dociskowych do programowania, albo podlutować się kynarem na czas programowania.

Link do komentarza
Share on other sites

sith114 a czemu nie skorzystasz po prostu z ISP? Rozumiem że trzeba trzymać rygor rozmiaru, ale są małe gniazda albo można też wyprowadzić to na polach i użyć szpilek dociskowych do programowania, albo podlutować się kynarem na czas programowania.

Problem nie w gniazdku, tylko w tym, że kiedy do nóżek od SPI jest podłączone coś jeszcze (ściągając nóżkę do masy lub zasilania), to może to powodować problemy przy programowaniu.

Link do komentarza
Share on other sites

deeshipu: Hmmm dobra w pierwszej chwili nie ogarnąłem tego:

Ostatnio używając arduino uno i płytki prototypowej zmontowałem sterowanie do robota

Oraz zapomniałem bardzo ważnego faktu, że arduino ma swoje bootloadery na tych płytkach 🙂

Wychodziło mi że skoro działa z płytką stykową i arduino to, i będzie działać to ISP. tyle że tam ISP nie jest używane 😃

Czy przy podłączeniu i/o mosi jako pwm do sterowania silnikiem mogę jednoczesnie użyć go do wgrania bootloadera?

Może to nie działać, wszystko zależy od tego jak całość jest zrealizowana. Jak wspomniał już deshipu - gdy coś jest ściągane w którąkolwiek stronę programowanie isp może nie działać prawidłowo/w ogóle nie działać. Jak nie chcesz robić drugiej płytki, to można zrobić to na pierwszej przy użyciu mostków cynowych.

Coś takiego jak tutaj:

http://chat.stackexchange.com/transcript/15/2014/1/16/6-22

Tyle że w "domyślnym" stanie byłyby te zworki zalutowane (domyślny w sensie że układ pracuje i nie będzie programowany), a na czas programowania przez ISP potrzebne do tego sygnały byłyby rozlutowane, albo po prostu przy użyciu pionowych goldpinów SMD.

Niestety bardziej szczegółowych informacji trudno udzielić gdyż nie ma wystarczającej ilości informacji.

Link do komentarza
Share on other sites

Bez przesady, nie trzeba aż tak na zimne dmuchać. Przecież SPI procesora w trybie programowania ISP potrzebuje 3 sygnałów:

SCK które jest wtedy wejściem do procesora,
MOSI które także jest wejściem,
oraz MISO które podczas programowania jest wyjściem.

Ponieważ kolega sith114 użył pinu SCK jako wyjścia z procesora, to po drugiej stronie ścieżki ma wejście do jakiegoś mostka. Skoro procesor radzi sobie ze sterowaniem tego wejścia w trybie PWM to i programator sobie poradzi podając na tę linię sygnał zegara. Będzie on odbierany zarówno przez procesor jak i przez mostek. Jeżeli pozostałych linii w swoim projekcie nie użył lub podłączył tam wejścia innych układów, w niczym to nie przeszkadza i interfejs ISP będzie działał.

Jedyną niedogodnością będzie to, że w czasie programowania mostek silnikowy dostanie sygnał SCK, który może załączać silnik. Jeżeli mostek nie ma innych sygnałów zezwalających na pracę napędu, to takie przypadkowe załączanie może to być niebezpieczne dla całej konstrukcji. Może na czas programowania odłączać silnik? Jeżeli PWM jest tylko kontrolą prędkości a o kierunku decydują dwa inne sygnały to wystarczy zapewnić, by w czasie RESETu procesora zostały "zaparkowane" w stanach nieaktywnych.

Podsumowując: dla jednoczesnego używania linii SPI i ISP krytyczne jest podłączenie wyjścia jakiegoś zewnętrznego układu do linii MISO. Jeżeli poprzez SPI wczytujemy jakieś dane, trzeba to dobrze zaprojektować by wyjścia danych były od MISO odcinane w czasie ISP (np. poprzez zablokowanie układów stanem wysokim na linii /CS). Jeżeli SPI jest używany tylko jako wyjście (linie SCK i MOSI) np. do rejestrów przesuwających, inteligentnych LEDów lub tak jak w rzeczonym przykładzie jako wyjście PWM, raczej wszystko zadziała. Programatorowi jest wszystko jedno kto odbiera jego sygnały: czy sam procesor czy ktoś obok jeszcze to "podsłuchuje". Ważne, by nikt nie mieszał się do linii powrotnej MISO.

Link do komentarza
Share on other sites

Nie jest wspomniane czy ten sygnał leci do mostka, półmostka, tranzystora czy czegoś innego. Nie wiadomo czy tam są gdzieś po drodze cewki, kondensator, push/pull up/down. Autor tematu nie udzielił takiej informacji więc nie wiadomo czy i jak bardzo sygnał z programatora będzie obciążony i czy nie przysiądzie tam napięcie albo nie będą jakieś odkształcenia sygnału przez ładowanie/rozładowanie kondensatorów. Samo ładowanie kondensatora może przysporzyć sporych problemów.

Jeśli by programowanie zadziałało bez problemu to dobrze, ale przez podłączony silnik/sterownik silnika mogą się dziać różne rzeczy z sygnałami.

Więc w skrócie raczej ciężko będzie stwierdzić czy to zadziała bo nie mamy praktycznie żadnej informacji, poza tym że jest tam używane PWM do sterowania silnikiem.

Link do komentarza
Share on other sites

Dziwnym byłoby takie obciążenie wyjścia PWM by sygnał tracił swoje podstawowe własności "cyfrowe" (poziomy + zbocza) i byłby to raczej błąd w sztuce. Praktyka pokazuje, że początkujący raczej nie wymyślają czegoś skomplikowanego, nie babrają się w tranzystorach tylko biorą jeden z kilku typowych mostków scalonych lub modułów driverów i tyle (a to raczej nie obciąża wyjścia), ale masz rację - wszystko jest możliwe, pewnie nawet cewki i kondensatory... No to czekamy na doprecyzowanie co też tam siedzi.

Link do komentarza
Share on other sites

Ok, ale w zasadzie problem znika gdy bootloader znajdzie się na procku. Przecież po to on służy, żeby programować układ przez USART. Wtedy inne linie służące do programowania przez SPI nie są używane (oprócz Resetu). Więc polecam kupić procka z wgranym bootloaderem (2 zł różnicy), lub wgrać używając Arduino. I po problemie 😉

Link do komentarza
Share on other sites

Ok, ale w zasadzie problem znika gdy bootloader znajdzie się na procku. Przecież po to on służy, żeby programować układ przez USART.

UART? 😋 (tak wiem, czepiam się ale UART i USART to nie to samo 😋)

Nie wiedzieć czemu ale ja chyba nigdy nie byłem zwolennikiem bootloader'ów 🙂

Ale problem może być trochę inny. Co w przypadku gdy przy n-tej poprawce programu bootloader się "walnie"? Zwłaszcza że to sterowanie do robota i częste zmiany softu powinno brać się pod uwagę 🙂

Poza tym bez bootloadera ma się więcej pamięci dostępnej 😃

Link do komentarza
Share on other sites

adam30010, technicznie określenie USART w tym przypadku nie jest błędne. Faktycznie tak nazywa się peryferium układu Atmega328. Pracuje ono zwykle (w tym w Arduino) jednak w trybie asynchronicznym.

Bootloader raczej się nie "walnie" bo powinien mieć zabezpieczenie przed nadpisaniem swoich sektorów.

Link do komentarza
Share on other sites

technicznie określenie USART w tym przypadku nie jest błędne. Faktycznie tak nazywa się peryferium układu Atmega328. Pracuje ono zwykle (w tym w Arduino) jednak w trybie asynchronicznym.

Jeśli pracuje w trybie asynchronicznym (domyslnie to pracuje w trybie UART!!

Tryb USART czasem nie potrzebuje dodatkowego sygnału (zegaru) by wszytko pracowało synchronicznie? 😋

Hmmm no sumie kilka razy uwaliłem bootloadera w arduino (na moją obronę przez moją niewiedzę 😃 )

Link do komentarza
Share on other sites

adam30010, dokładnie tak jest. W datasheecie słowo USART (nazw tego peryferium) występuje 18 razy, a UART (jako nazwa trybu pracy) tylko raz. Chodzi mi o to że ta nazwa nie jest ściśle błędna a

UART? 😋 (tak wiem, czepiam się ale UART i USART to nie to samo 😋 )

jest nieproduktywne. Jak już zwracamy uwagę to warto wytłumaczyć na czym polega różnica: http://www.edn.com/electronics-blogs/embedded-basics/4440395/USART-vs-UART--Know-the-difference

Tryb USART jak najbardziej potrzebuje dodatkowej linii z zegarem. Jak najbardziej używanym praktycznie zawsze protokołem jest UART, ale Atmega328 potrafi zrobić tym peryferium dużo więcej.

Link do komentarza
Share on other sites

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