Jak przejść z Arduino do bezpośredniego korzystania z mikrokontrolera?

19

Pracowałem nad projektem Arduino. Po tym, jak wszystko działa z Arduino, chciałbym przejść do rozwiązania, które NIE korzysta z Arduino. To znaczy, chciałbym użyć mikrokontrolera bez angażowania płyty Arduino. Pozwoli to na pojedynczą płytę, bez rozwiązania tarczy.

Wiem, że istnieją metody tworzenia własnego Arduino na desce do krojenia, ale tak naprawdę nie chcę tego robić.

Nie jestem do końca pewien, jak to zrobić.

O ile nie ma lepszej opcji, skłaniam się ku użyciu ATmega328, z której korzysta Arduino. Rozumiem, że narzędzia programistyczne są dostępne bezpłatnie lub przynajmniej niezbyt drogie.

Dla celów tego pytania, załóżmy, że mogę uzyskać + 5 V do mojego obwodu.

Moje pierwsze pytanie brzmi: jak zaprogramować MCU. Wierzę, że są dwie opcje:

  1. Kup programator, zaprogramuj MCU, a następnie umieść układ w moim obwodzie.
  2. Zaprojektuj mój obwód tak, aby zawierał obsługę programowania w obwodzie.

Zakładam, że jeśli wybiorę opcję nr 1, jest to tak proste, jak wstawienie zaprogramowanego układu do mojego obwodu; Nie potrzebuję nic więcej. Oczywiście zmiana oprogramowania byłaby niewygodna.

Ale w przypadku opcji nr 2 nie jestem pewien, czego potrzebuję. Po odrobinie czytania, myślę, że potrzebuję kabla do programowania i złącza na mojej płycie (jaki typ?). Potem chyba (prawidłowo) podłączam złącze do niektórych styków ATmega.

Tak czy inaczej będę potrzebować studia Atmel.

Po drugie, poza zasilaczem, czy w Arduino jest coś, czego absolutnie potrzebuję? Chyba może przełącznik resetowania?

Stóg
źródło
2
Możesz użyć Arduino do programowania AVR. Osobiście lubię używać narzędzi wiersza poleceń i makefile, a nie IDE.
jippie
1
To pytanie może być bardziej odpowiednie dla Arduino Stack Exchange. arduino.stackexchange.com Jest teraz w publicznej wersji beta
akellyirl
4
Ale moim celem jest projekt bez arduino.
Rick
„czy jest coś w arduino, czego absolutnie potrzebuję?” Myślę, że będziesz potrzebował pinów UART (aka port szeregowy), przydaje się do debugowania.
vvy
Studio Atmel absolutnie nie jest wymagane. Programuję swoje żetony z wiersza poleceń (i edytora tekstu). Choć przyznane za duże projekty studio Atmel na pewno to ułatwi
Chris Laplante

Odpowiedzi:

10

Witamy w cudownym świecie Atmel. Pozwól, że przedstawię Ci odpowiedzi na pytania w oparciu o moje hobby i doświadczenie zawodowe.

Nie przejmuj się niczym, ALE programowaniem w obwodzie. Chyba że jesteś doskonałym programistą, usuwanie chipa za każdym razem, gdy chcesz go zaprogramować, to koszmar. Polecam AVRISPmkII jako narzędzie do programowania na poziomie podstawowym. Wadą jest brak obsługiwanego debugowania sprzętowego. Alternatywą jest smok, ale nie mam z tym doświadczenia. Mogę powiedzieć, że JTAGICEmk3 jest dobrym narzędziem do debugowania.

Studio Atmel jest dobre do programowania. To właściwie moje ulubione osadzone środowisko programistyczne. Możesz używać narzędzi CLI, takich jak AVRDUDE i AVR-GCC, ale IDE dba o to za Ciebie.

W PODSUMOWANIU:

Kup AVRISP dla samego programowania (łatwiej, plug & play) lub DRAGON (nie mogę zaoferować porady).

Na swojej płycie wyciągnij piny ICSP do 6-pinowego podwójnego nagłówka 0.100 "- połączenia opisano w tym arkuszu danych .

Przełączniki resetowania nie są potrzebne.

HL-SDK
źródło
1
Miałem doskonałe wyniki z EvUSBasp.
Ignacio Vazquez-Abrams
Czy po wyjęciu pinów ICSP na płytce muszę je poświęcić na programowanie w obwodzie, czy mogę nadal używać ich jako pinów GPIO?
Ricardo
2
Możesz używać ich jako GPIO, ponieważ współużytkują funkcje z SPI. Programator resetuje układ, a następnie komunikuje się z nim.
HL-SDK
1
Powiązana seria samouczków na temat rozpoczynania programowania mikrokontrolera . Korzystają z AVRMega i przechodzą proces łączenia dostawcy usług internetowych oraz luksusowego kodu C w celu mrugnięcia diody LED.
MDMoore313
1
@ HL-SDK ma rację, że tylko pin RESET naprawdę musi być dedykowany dla ICSP, ale należy zachować ostrożność również w przypadku innych pinów, tzn. Prawdopodobnie powinny one być używane jako piny wyjściowe, a nie piny wejściowe (więc sygnały nie t zakłócony przez zewnętrzne obwody w trybie ICSP), a wszystko, co jest do nich podłączone, powinno być tak zaprojektowane, aby nie reagowało niekorzystnie na dowolną kombinację sygnałów losowych wysyłanych przez ruch programujący.
microtherion
10

Nie musisz „kończyć” na raz. Oto jak przekonwertowałem:

Na początek używałem Arduino, ale przekształciłem wywołania biblioteki Arduino w odczyty i zapisy rejestrów, po jednym wierszu na raz, sprawdzając, czy moje programy nadal działają. W ten sposób przyzwyczaiłem się do używania rejestrów i zobaczyłem, że nie były one radykalnie nieciągłe w sposobie robienia Arduino. Funkcje Arduino, takie jak digitalWrite (), po prostu manipulują rejestrami - możesz je czytać i pisać bezpośrednio w swoich szkicach.

Moim następnym krokiem było umieszczenie ATTiny 85 na płycie chleba i zaprogramowanie go w Arduino jako ISP ( http://highlowtech.org/?p=1695 ). Jeśli kupisz zasilacz płytowy i użyjesz wewnętrznego oscylatora ATTiny, wymaga to śmiesznie małego okablowania. Użyłem Arduino IDE do kompilacji, ale nadal korzystałem z rejestrów, jak mogłem.

Następnie zainstalowałem darmowy zestaw narzędzi wiersza poleceń Crosspack i skompilowałem migający program. Po kilku próbach i błędach udało mi się zaprogramować ATTiny tylko avrdude, pozostając całkowicie poza ekosystemem Arudino.

Gdy osiągniesz blinky tylko za pomocą narzędzi wiersza poleceń, jesteś wolny od Arduino. Poznaj różne urządzenia peryferyjne i ich rejestry, a wkrótce stanie się to całkowicie naturalne.

Po tym wszystkim często używam Arduino, ponieważ jest szybszy. Przekonałem się, że przeglądanie opisów rejestrów jest do bani; nie ma sensu tego robić, jeśli nie musisz. Warto jednak wiedzieć, jak to zrobić.

użytkownik24505
źródło
8

Zgadzam się z powyższym komentarzem HL-DSK. Wydałbym dodatkowe pieniądze i zdobyłem programistę z funkcjami debugowania. Używam JTAGICE3, około 110 USD na digi-key.

Przeczytaj o programowaniu ISP tutaj . Pokaże Ci, jak wydobyć połączenia SPI. Połączenia SPI na twoim chipie będą znajdować się w arkuszu danych ATmega. Poszukaj na stronie 2 pinów MISO / MOSI / SCK / RESET. Programator musi mieć możliwość sterowania linią resetowania. Pamiętaj, aby użyć rezystora podciągającego na linii zerowania, aby układ działał po odłączeniu programatora.

Zdobądź tutaj nagłówek 2x3 . Lub stwórz własny, używając odrywalnych nagłówków.

qce88
źródło
2
Po drugie uzyskam programistę z obsługą debugowania. Na początku tego miesiąca zostałem wrzucony w głęboki koniec projektu PIC32 bez wcześniejszego doświadczenia na niskim poziomie. Nawet z kimś innym piszącym funkcjonalność bit bitu na najniższym poziomie, nie chcę nawet myśleć o tym, o ile trudniej jest dowiedzieć się, gdzie są moje problemy, jeśli wszystko, co musiałem zobaczyć w środku, to pojedyncza czerwona / zielona dioda LED.
Dan Neely
To, gdy masz już profesjonalne narzędzia, nie ma już powrotu.
Matt Young
7

Różnica między Arduino a nagim ATmega328 to tylko dwie rzeczy. Program ładujący Arduino i biblioteki Arduino. Możesz kodować Arduino z czystym C lub C ++ bez użycia żadnej biblioteki. Zamiast tego możesz również użyć zestawu. Program ładujący umożliwia ładowanie nowego kodu poprzez szereg bez przechodzenia przez (nieco) bardziej skomplikowane programowanie szeregowe w obwodzie (w zasadzie SPI).

Możesz używać standardowych bibliotek programistycznych i avr-gcc z prawie każdym pomysłem. W przeciwieństwie do tego, co powiedzieliby inni, kodowanie Arduino jest w zasadzie jak kodowanie samego mikrokontrolera, z pewnymi dodatkowymi udogodnieniami kosztem pewnej wydajności.

Przechodzień
źródło
4
Ale możesz także używać bootloadera i bibliotek Arduino z czystym ATmega328.
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams, który zamienia go w arduino bez kości, natch.
Passerby
5

Kupuję wstępnie załadowane układy Atmega328P i programuję je w obwodzie za pomocą kabla FTDI i avrdude, identycznie jak w przypadku programowania Arduino. Lubię środowisko Eclipse IDE, ale możesz używać dowolnego środowiska - Atmel Studio, Arduino IDE, emacsa lub boso w wierszu poleceń.

Ta płyta jest w budowie w punkcie, w którym jest wystarczająco kompletna, aby przetestować za pomocą programu Hello, używając kabla do programowania, zasilania i terminala. Nadal będzie potrzebował zasilacza - LM2936 ultra-niskiej bieżącej quiescient regulator napięcia i złącze baterii, w moim przypadku - i wszelkie inne elementy na pokładzie i połączenia off-board projekt będzie potrzebne:

NotDuino

Ponieważ masz Arduino, możesz zaoszczędzić trochę pieniędzy i użyć niezaprogramowanych układów, używając Arduino do zainstalowania bootloadera. Ładne niebieskie etykiety na pin-out pomagają obniżyć mój współczynnik wygłupów! Używam kryształu 16 MHz, ale jeśli możesz pracować z wewnętrznym oscylatorem, liczba części spada o 3 (xtal i 2 kondensatory).

JRobert
źródło
2

Aby przejść z Arduino, gdzie dostarczany jest sprzęt, a oprogramowanie jest nakładką w języku C, chciałbym przedstawić kilka sugestii. Widzę, że ludzie opublikowali kilka przydatnych odpowiedzi, ale byłem tam, gdzie jesteś i robiłbym rzeczy trochę inaczej.

  1. Wybierz debuger. Debugery umożliwiają programowanie mikrokontrolera, a także debugowanie, które obejmuje przetwarzanie „krok po kroku”, „punkty przerwania”, które pozwalają na zatrzymanie programu w określonym wierszu kodu w celu sprawdzenia, co kod ma na celu. ISP (In-Circuit Programming) to interfejs szeregowy, wykorzystuje 3 styki, co jest dobre, ale nie zapewnia pełnej funkcjonalności, jakiej chciałby początkujący. Interfejs JTAG wykorzystuje 4 piny, co zapewnia w zasadzie pełną funkcjonalność w zakresie używania punktów przerwania i innych rzeczy. Ludzie zwykle bardziej skłaniają się ku ISP, ponieważ jest „stosunkowo” łatwiejszy do skonfigurowania, ale jeśli zapytasz mnie, JTAG nie jest trudny do skonfigurowania, ale sprowadza się również do osobistych preferencji. I jest drut debugowania interfejs, który chciałbym pominąć w tej dyskusji, ponieważ wolisz korzystać z ISP niż z drutu debugującego.
  2. Kup debugger, który ma zarówno funkcje ISP, jak i JTAG. Myślę, że kupujesz raz, ale kupujesz dobrze, co pomoże ci w przyszłości, jeśli chcesz zmienić swój projekt. Polecam AVR Dragon lub JTAGICE. Oba łączą się z komputerem przez USB i oba zapewniają ISP i JTAG. JTAGICE jest nieco droższy niż AVR Dragon, ale zdecydowanie polecam AVR Dragon.
  3. Przekonasz się, że większość mikrokontrolerów Atmel ma funkcjonalność ISP, ale niewiele z nich ma JTAG. Małe mikrokontrolery, takie jak AT90S2313 lub ATTINY, używają serii ISP, ponieważ są one małe. Ale jeśli chcesz nie tylko mrugnąć kilkoma diodami LED, ale chcesz połączyć się z, powiedzmy, ekranem LCD, klawiaturą lub czymś innym, polecam wybrać nieco większy mikrokontroler. Jeśli używasz zasilania 5 V, polecam ATMega8 lub nawet ATMega16 lub ATMega128 (moja ulubiona). ATMega16 i ATMega128 mają interfejs ISP i JTAG.
  4. Jeśli chodzi o IDE, użyłem Code Vision i AVR Studio, ale polecam Atmel Studio 6.0 lub nowszy, który zaspokoi wszystkie Twoje potrzeby.

Mam kilka schematycznych pomysłów, których nauczyłem się sam, dzięki czemu masz czysty i płynny interfejs do swojej mikro. Daj mi znać jeśli potrzebujesz pomocy.

David Norman
źródło
1

Uczciwa rada

Arduino jest dla początkujących, można stąd przejść na dwa sposoby

Sposób 1: Zrozumienie działania mikrokontrolera / procesora (preferowane podejście)

Atmel 8051

Rozumiem przez to uczenie się architektur i kodu asemblera (lub goły metal) dla micro p / c. Jeśli potrzebujesz do tego punktu wyjścia, sugerowałbym Atmel 8051, który jest 8-bitowym mikrokontrolerem z najprostszym zestawem instrukcji architektury i montażu. Każdy inny nowoczesny 32-bitowy lub 64-bitowy procesor ma pochodną formę architektury. Ten mikrokontroler jest nadal używany jako część mojej pracy dyplomowej, ponieważ jest dobrym punktem wyjścia i dostępna jest duża literatura.

Aha, i zestawy do stworzenia twojej płyty ISP są sprzedawane (kompletnie zmontowane zestawy z proceso, przylutuj elementy do zestawów płyt i możesz sam zbudować płytę programistyczną, wymaga tylko kilku kabli / gniazd IC-232)

Ponieważ jest to technologia mało zaawansowana, wszystkie elementy będą tanie.

Sposób 2: Przejdź do podejścia sprzętowo-programowego (mniej preferowane)

Raspberry Pi Kość Beagle Czarna

Jest to podejście dla slackerów, którzy zanurzyli się w trochę montażu i „stuknęli” LUB ludzi, którzy chcą przejść na więcej oprogramowania niż sprzętu. Sugerowałbym przejście do innej płyty dla hobbystów, takiej jak Raspberry Pi lub BeagleBoneBlack z procesorami ARM i rozpoczęcie projektów przy ich kreatywności.

Dexobox
źródło
0

Możesz korzystać z tablicy Arduino, bez korzystania z bibliotek i środowiska piaskownicy, wszystko możesz zaprogramować bezpośrednio. Jeśli chcesz użyć ich programu ładującego przez serial / uart do programowania, to działa dobrze. Ale większość / wszystkie części avr można również zaprogramować w inny sposób, przy czym część jest resetowana, co oznacza, że ​​nie można jej przeglądać. dość łatwo jest bit bit spi z arduino lub innego mikrokontrolera lub z ftdi wyrwać się z jakiegoś smaku. Sparkfun ma tablice arduino i nie-arduino (na przykład 32u), że nagłówek SPI jest oczywisty. oraz tablice rozdzielające ftdi, które można łatwo bitbangować za pomocą biblioteki ftdi lub biblioteki ftdi dostarczanej z linuksem.

Dokumentacja dla każdej części pokazuje opcje uruchamiania i opcje programowania flash. tak, nietrudno jest też kupić niektóre części i stworzyć własną deskę ratunkową. Nie zrobiłbym tego, dopóki nie użyjesz istniejącej karty breakout lub zwykłej karty ewaluacji, a następnie sklonujesz ją w razie potrzeby. Idealnie zacznij od części z wewnętrznym oscylatorem rc, w zasadzie pinów zasilania, uziemienia i programowania ...

old_timer
źródło