Spisu treści:

Samodzielne Arduino 3,3 V z zewnętrznym zegarem 8 MHz programowane z Arduino Uno przez ICSP / ISP (z monitorowaniem szeregowym!): 4 kroki
Samodzielne Arduino 3,3 V z zewnętrznym zegarem 8 MHz programowane z Arduino Uno przez ICSP / ISP (z monitorowaniem szeregowym!): 4 kroki

Wideo: Samodzielne Arduino 3,3 V z zewnętrznym zegarem 8 MHz programowane z Arduino Uno przez ICSP / ISP (z monitorowaniem szeregowym!): 4 kroki

Wideo: Samodzielne Arduino 3,3 V z zewnętrznym zegarem 8 MHz programowane z Arduino Uno przez ICSP / ISP (z monitorowaniem szeregowym!): 4 kroki
Wideo: Atmel AVR AtTiny13 - Kurze Einführung zu den Chips und den Möglichkeiten 2024, Grudzień
Anonim
Samodzielny Arduino 3,3 V z zewnętrznym zegarem 8 MHz programowany z Arduino Uno przez ICSP / ISP (z monitorowaniem szeregowym!)
Samodzielny Arduino 3,3 V z zewnętrznym zegarem 8 MHz programowany z Arduino Uno przez ICSP / ISP (z monitorowaniem szeregowym!)
Samodzielny Arduino 3,3 V z zewnętrznym zegarem 8 MHz programowany z Arduino Uno przez ICSP / ISP (z monitorowaniem szeregowym!)
Samodzielny Arduino 3,3 V z zewnętrznym zegarem 8 MHz programowany z Arduino Uno przez ICSP / ISP (z monitorowaniem szeregowym!)

Cele:

  • Aby zbudować samodzielny Arduino, który działa na 3,3 V przy zewnętrznym zegarze 8 MHz.
  • Aby zaprogramować go przez ISP (znany również jako ICSP, programowanie szeregowe w obwodzie) z Arduino Uno (działającego przy 5 V)

    Aby edytować plik bootloadera i nagrać bootloader (przez ISP)

  • Aby móc odczytać informacje szeregowe z samodzielnego Arduino za pomocą kabla FTDI

    Aby móc odczytać informacje szeregowe z samodzielnego Arduino bez kabla FTDI

Preambuła:

Próbowałem zbudować mój samodzielny projekt, ale nie widziałem żadnych kompleksowych przewodników dotyczących uruchamiania, programowania i monitorowania samodzielnego Arduino – szczególnie takiego, który działa z zewnętrznym zegarem 8 MHz i napięciem 3,3 V i jest zaprogramowany przez Arduino UNO. Zebrałem kilka oddzielnych przewodników i próbowałem odnieść się do tego, skąd mam informacje, aby podać kredyt tam, gdzie jest należny. Ten przewodnik jest wynikiem wielu dni szukania rozwiązań i znajdowania jego części w czasie, gdy budowałem własny projekt. Ponadto połączyłem kilka przydatnych produktów, które przydałyby się nie dlatego, że jestem związany z którymkolwiek z firmy, ale dlatego, że istotne jest uwzględnienie konkretnych pozycji, do których się odnoszę.

Często zadawane pytania przed rozpoczęciem:

Dlaczego musisz programować go z ISP i monitorować przez FTDI? Dlaczego nie możesz go po prostu zaprogramować przez FTDI?

Będziemy musieli zmienić ustawienia bezpiecznika poprzez wpalenie nowego bootloadera, a nie można tego zrobić przez komunikację szeregową. Musisz nagrać bootloader przez ISP. Jest to również przydatne dla tych, którzy nie mają wstępnie załadowanego układu ATMEGA328.

Dlaczego po prostu nie użyję kabla ISP z monitorowaniem szeregowym, takiego jak ten?

Być może, tak jak ja, po prostu nie masz takiego i zamiast czekać na wysłanie, wolisz korzystać z tego, co masz! Tak się składa, że mam kabel FTDI (chociaż ostatecznie okaże się, że nawet go nie potrzebujesz: po prostu ułatwia ci życie).

Czy nie potrzebuję przełącznika poziomu logicznego z Uno do samodzielnego Arduino?

Tak, robisz, ale pokażę ci, jak to zrobić samemu. Podobnie jak kabel ISP, tak się składa, że go nie mam.

Chcę go uwolnić od zasilania zewnętrznego. W jaki sposób mogę to zrobić?

Istnieje wiele przewodników, które pokazują, jak uruchomić samodzielne Arduino bez zasilania bateryjnego. Napiszę jak to zrobiłem i podlinkuję tutaj [wstawię później].

PRZEWODNIK

Krok 1: Budowanie samodzielnego Arduino

Budowanie samodzielnego Arduino
Budowanie samodzielnego Arduino
Budowanie samodzielnego Arduino
Budowanie samodzielnego Arduino

1) Zbuduj samodzielne Arduino z tego linku. Jedyną częścią przewodnika, której potrzebujesz, jest „Podstawy ATMEGA8/168/328”.

  • możesz zasilać samodzielne Arduino z 3,3 V z Arduino Uno. (Możesz pominąć pierwszą sekcję samouczka zatytułowaną „Dodawanie obwodów do zasilacza”.
  • Zastąp zegar 16 MHz zegarem 8 MHz.
  • Dodaj czapki 0,1 uF pomiędzy: VCC i Gnd (obie strony) VRef i Gnd.

    • Nie mam ich na zdjęciu, ale mam je w swoich projektach!
    • Wiem, że na zdjęciu oscylator 16 MHz. Zrobiłem zdjęcie, zanim zorientowałem się, co zrobiłem w przewodniku!

Źródło obrazu wyprowadzeń ATMEGA328p tutaj.

Typowe wskazówki dotyczące rozwiązywania problemów

  • Upewnij się, że ustawiłeś wysoki reset poprzez rezystor 10k z VCC do pinu 1 ATMEGA. Jeśli pin jest uziemiony lub pływający, nie będzie działał.
  • Dokładnie sprawdź, czy prawidłowo włożyłeś przewody i oscylator.
  • Upewnij się, że używasz kondensatorów 22pF dla oscylatora 8 MHz. W przeciwnym razie nie zadziała.
  • Upewnij się, że urządzenie jest zasilane.

Krok 2: Okablowanie ISP

Okablowanie dostawcy usług internetowych
Okablowanie dostawcy usług internetowych
Okablowanie dostawcy usług internetowych
Okablowanie dostawcy usług internetowych

2) Utwórz część ISP

Będziesz podążał za tym przewodnikiem, wykonując mały, ale bardzo ważny krok.

Powodem, dla którego nie możesz po prostu postępować zgodnie z przewodnikiem, jest brak kluczowej części: nie możesz zaprogramować urządzenia 3,3 V bezpośrednio z połączeń 5 V. (Przynajmniej nie mogłem: to nie zadziała, dopóki tego nie zrobię). Musisz wstawić przesuwnik poziomu logicznego, który przesuwa sygnały 5 V z UNO do niezależnego Arduino 3,3 V.

Jeśli nie masz płytki zmiany poziomu logicznego, możesz ją wykonać za pomocą rezystorów. Wszystko, co tak naprawdę przesuwacz poziomu logicznego (o ile przesuwasz się w dół), jest dzielnikiem napięcia. Potrzebujesz 6 takich samych rezystorów, ani za wysokich ani za niskich. Użyłem rezystorów 220 omów, ale jestem pewien, że zadziałałyby nawet rezystory 10k.

W przypadku SCK (cyfrowy pin 13) i MOSI (cyfrowy pin 11) użyj dzielnika napięcia, aby zmniejszyć napięcie o jedną trzecią. Zasadniczo będziesz mieć jeden Uno SCK i MOSI, następnie rezystor (220 omów), następnie SCK i MOSI podłączone do samodzielnego Arduino i 2 rezystory (łącznie 440 omów) do masy.

Przeczytaj więc przewodnik połączony na początku tej sekcji, ale dołącz dzielniki napięcia między SCK i MOSI. Pamiętaj, że SCK, MISO, MOSI i RESET to piny 13, 12, 11 i 10 w Uno, ale są to piny 19, 18, 17 i 1 na samodzielnym Arduino!

Typowe wskazówki dotyczące rozwiązywania problemów

  • SPRAWDŹ OKABLOWANIE

    • Jeśli podczas pisania programu otrzymujesz sygnaturę urządzenia złożoną z samych zer, oznacza to, że okablowanie jest prawie na pewno wyłączone lub samodzielny Arduino nie otrzymuje zasilania.
    • Upewnij się również, że masz przewód resetujący z 10 na Uno do 1 na samodzielnym Arduino
  • SPRAWDŹ ROZDZIELNIKI NAPIĘCIA

    Upewnij się, że masz dzielniki napięcia o stosunku 1:2 (strona wysoka: strona niska) dla rezystorów zarówno dla SCK, jak i MOSI. Np. rezystor 220 po stronie +5 V, a następnie 2 rezystory 220 omów (łącznie 440 omów) w kierunku masy z sygnałem w kierunku samodzielnego Arduino pośrodku

Krok 3: Edytuj plik bootloadera, nagraj bootloader i prześlij swój szkic

Edytuj plik bootloadera, nagraj bootloader i prześlij swój szkic
Edytuj plik bootloadera, nagraj bootloader i prześlij swój szkic
Edytuj plik bootloadera, nagraj bootloader i prześlij swój szkic
Edytuj plik bootloadera, nagraj bootloader i prześlij swój szkic

3) Edytuj plik bootloadera (boards.txt) i wypal bootloader na samodzielnym Arduino. Prześlij swój szkic

Edycja pliku bootloadera

Aby uruchomić samodzielne Arduino, musisz edytować ustawienia bezpiecznika brownout bootloadera. W przeciwnym razie będziesz mógł nagrać na nim bootloader, ale nie będziesz w stanie uruchomić żadnych szkiców.

Możesz całkowicie usunąć wykrywanie spadku napięcia, ale nie polecam tego. Zamiast tego obniżymy go z 2.7V (co było domyślnie na moim chipie) i zastąpimy 1.8V. Ostatecznie jednak możesz wybrać, jakie ustawienia brownout chcesz, korzystając z kalkulatora bezpieczników tutaj.

Mój plik tablic znajdował się w następującej lokalizacji:

C:\Program Files (x86)\Arduino\hardware\arduino\avr

Jednak w folderze sprzętowym innym niż /arudino/ może znajdować się więcej niż jeden plik boards.txt. Będziesz edytować plik boards.txt w lokalizacji /arduino/, ponieważ będziesz modyfikować sekcję ATMEGA328p (3.3V, 8 MHz).

Możesz stracić edytowany plik boards.txt, jeśli ponownie zainstalujesz lub zaktualizujesz Arduino IDE (zgodnie z tym postem). Oznacza to, że jeśli zaktualizujesz Arduino IDE, będziesz musiał ponownie zmienić te ustawienia, jeśli chcesz utworzyć inny taki sam samodzielny Arduino.

W pliku boards.txt przewiń w dół lub wyszukaj „Pro Mini”. Sekcja nosi tytuł „pro.name=Arduino Pro lub Pro Mini”. Przewiń w dół do podsekcji „pro.menu.cpu.8MHzatmega328=ATmega328P (3,3V, 8 MHz)”.

Poszukaj wiersza z napisem „pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses=_”

Zmień ustawienia na xFE. (pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses=0xFE).

Zapisz i wyjdź.

Nagrywanie bootloadera

Gdy to zrobisz, możesz postępować zgodnie z sekcją „Instrukcje” w przewodniku ISP od kroków 1 do 5.

Kilka rzeczy do wyjaśnienia:

  • Podczas przesyłania szkicu „Arduino jako ISP” musisz upewnić się, że wybrano prawidłowy port COM i procesor.

    W tym przypadku oznacza to, że wybrałeś port COM swojego Arduino w Narzędzia->Port: COM X (Arduino Uno), a płytka to Arduio Uno

  • Wybierz odpowiedni programator: w menu Tools->Programmer->Arduino jako ISP.

    NIE ArduinoISP ani ArduinoISP.org

  • Przed wypaleniem bootlodera zmień płytę „Pro lub Pro Mini” i procesor na „ATMEGA328p (3,3 V, 8 MHz)”.

    Nie zobaczysz sekcji procesora, dopóki nie wybierzesz odpowiedniego typu płyty

Wypal bootloader na samodzielnym Arduino ZANIM spróbujesz napisać na nim szkice.

Przesyłanie szkicu

To jest bardzo ważne. Możesz teraz zaprogramować Arduino: Uno i Standalone. Jeśli nie wgrasz do właściwego urządzenia, musisz powtórzyć powyższą sekcję i przepisać Arduino jako program ISP na Uno.

Kiedy przesyłasz swój szkic, upewnij się, że klikałeś Narzędzia -> Prześlij za pomocą programatora LUB kliknij Ctrl+Shift+U. Możesz także przytrzymać Shift i kliknąć ikonę strzałki, ale nie klikaj ikony strzałki bez przytrzymania Shift.

Typowe wskazówki dotyczące rozwiązywania problemów

  • Włącz szczegółowe wyjście w celu rozwiązywania problemów.
  • "Podpis urządzenia to same zera!" [To jest bardzo prawdopodobne.]

    • patrz sekcja Okablowanie ISP. Albo podłączyłeś samodzielny Arduino nieprawidłowo, albo nie jest włączony.
    • Upewnij się, że wybrałeś właściwy port COM i płytę/procesor. Kiedy nagrywasz bootloader, MUSISZ upewnić się, że nagrywasz na nim bootloader Pro Mini 3.3V 8 MHz, w przeciwnym razie bezpieczniki nie będą ustawione poprawnie.
  • „Edytowałem plik boards.txt, ale nie widzę zmian”

    Upewnij się, że edytowałeś poprawny plik boards.txt. Spróbuj zaktualizować Arduino IDE, jeśli edycje nie działają, lub tymczasowo usuń inne foldery w folderze /hardware/

  • "Nie mogę znaleźć sekcji pro mini pliku board.txt!"

    Nie szukasz odpowiedniego pliku boards.txt. Sprawdź folder Arduino//hardware/arduino/

Krok 4: Komunikacja szeregowa

4) Monitoruj samodzielne urządzenie za pomocą komunikacji szeregowej

Naprawdę możesz to zrobić za pomocą 2 metod, więc jeśli nie masz nawet kabla FTDI / tabliczki zaciskowej, to nie koniec świata. I pamiętaj, że szkic, który przesłałeś do samodzielnego Arduino, musi zawierać instrukcje Serial.print do przeczytania: jeśli nie napisałeś go w programie, nic nie zobaczysz!

Jeśli nie masz kabla FTDI

Po spaleniu bootloadera i napisaniu żądanego programu, możesz (bardzo ostrożnie i pamiętając, w którą stronę wraca) usunąć układ ATMEGA328 DIP z Arduino Uno. Polecam do tego użyć płaskiej głowicy.

Możesz podłączyć samodzielny RX Arduino do RX Uno i TX do TX. Tak, zwykle jest odwrotnie, ale możesz myśleć o Uno jako „przesyłaniu” informacji do monitora szeregowego IDE. Dlatego w tym przypadku nie podłączasz RX do TX i TX do RX. Kiedy uruchamiasz swój program, upewnij się, że wybrałeś port COM Arduino Uno i otwórz szeregowy montor. Będziesz mógł zobaczyć wyjście szeregowe samodzielnego Arduino.

(To rozwiązanie przypisuje się Robin2.)

Jeśli masz kabel/płytkę FTDI

(Używam płytki FTDI Sparkfun, którą przekonwertowałem na 3,3 V za pomocą podkładki lutowniczej z tyłu)

Wystarczy podłączyć GND tabliczki zaciskowej do samodzielnego uziemienia Arduino i podłączyć RX tabliczki zaciskowej do TX Arduino i TX do RX. (Jeśli TYLKO monitorujesz szeregowo i nic nie odpisujesz, możesz po prostu podłączyć RX płyty głównej do Arduino TX).

Pamiętaj, że w tym momencie masz możliwość zasilania samodzielnego Arduino za pomocą kabla Uno LUB kabla FTDI. Nie podłączaj jednocześnie obu źródeł zasilania! Zauważ, że będziesz musiał zmienić port COM, ponieważ będzie on inny niż port COM Arduino Uno.

Typowe wskazówki dotyczące rozwiązywania problemów

  • "Nic nie widzę!"

    • Sprawdź, czy masz włączony poprawny port COM.
    • Sprawdź, czy masz najnowsze sterowniki FTDI.
    • UPEWNIJ SIĘ, ŻE UZIEMIENIE JEST PODŁĄCZONE.
  • „Wszystko, co widzę, to wyjście śmieci na monitorze szeregowym!”

    • Dostajesz coś, co jest dobrym znakiem.
    • Sprawdź jednak napięcie na płycie FTDI.
    • Samodzielny Arduino wysyła napięcie 3,3 V na swoim TX, a płyta FTDI może go nie odebrać, jeśli spodziewa się 5 V.
    • Sprawdź szybkość transmisji.
    • Upewnij się, że masz podłączone uziemienie i tylko jedno źródło zasilania! (Tj. nie zasilaj samodzielnego Arduino z Uno I płyty FTDI.

Zalecana: