Witam was drodzy majsterkowicz, dzisiaj chciałbym podzielić się z wami moim doświadczeniem z przenoszenia prototypu termometru z arduino na atmege 8 lub 328 (Pan Łukasz mi to zaproponował). Ten artykuł pokaże wam jak przenieść projekt, który najpierw został opracowany za pomocą arduino a potem przeniesiony na atmege 8 lub atmege 328.
Potrzebne części do wykonania projektu:
- wyświetlacz tekstowy 2×16
- arduino uno
- płytka stykowa
- kabelki do płytki stykowej
- 2 sztuki czujnik temperatury LM35
- potencjometr
- atmega 8 lub 328 uno bootloader / 328
Schemat połączeń dla arduino:
Kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <LiquidCrystal.h> #define tempe_pin A0 // podajemy piny z czujnikami temperatury #define tempe2_pin A1 int tempepin, tempepin2; float tempe, tempe2; // zaokrąglamy liczbę zmienną przeciekową unsigned long czas; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); } void loop() { czas = millis(); tempe = analogRead(tempe_pin); //odczytujemy wartość z czujnika tempe2 = analogRead(tempe2_pin); tempe = (5.0 * tempe * 100.0)/1024.0; // wyliczmy temperaturę i przypisujemy do zmiennej tempe2 = (5.0 * tempe2 * 100.0)/1024.0; lcd.print("temp dom:"); // wyświetlamy tekst lcd.print(tempe); // wyświetlamy ziemną lcd.setCursor(0, 2);// przechodzimy do drugiej lini na wyświetlaczu lcd.print("temp dwor:"); // wyświetlamy tekst lcd.print(tempe2); //wyświetlamy zmienną delay (1500); //czekamy 1500 milisekund lcd.clear(); // czyścimy ekran } |
Kod dla termometru z jednym czujnikiem temperatury:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <LiquidCrystal.h> #define tempe_pin A0 // podajemy piny z czujnikami temperatury int tempepin; float tempe; // zaokrąglamy liczbę zmienno przecinko-wą unsigned long czas; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); } void loop() { czas = millis(); tempe = analogRead(tempe_pin); //odczytujemy wartość z czujnika tempe = (5.0 * tempe * 100.0)/1024.0; // wyliczmy temperaturę i przypisujemy do zmiennej lcd.print("temp dom:"); // wyświetlamy tekst lcd.print(tempe); // wyświetlamy zmienną delay (1500); //czekamy 1500 milisekund lcd.clear(); // czyścimy ekran } |
Przenosimy termometr na mikrokontroler:
Strona z powyższym schematem w pełnej rozdzielczości.
Niestety dla atmegi 8 nie ma takiego pięknego schematu, dlatego będziemy musieli zadowolić się tym z arduino.cc
Na powyższych schematach widać które piny na mikrokontrolerze odpowiadają określonym pinom w ardnuio.
Wgrywanie bootloadra:
Najłatwiej jest jak zakupimy mikrokontroler z wgranym bootloaderem. Jeśli zakupiłeś mikrokontroler bez wgranego bootloadera wykonaj poniższe czynności.
Na początek trzeba ściągnąć bootloader dla danego mikrokontrolera i rozpakować go do katalogu/hardware/arduino/bootloaders/atmega/:
Bootloader dla ATmega8 i ATmega8
Następnie trzeba dodać na końcu pliku /hardware/arduino/boards.txt następujący wpis:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
majsterkowo_atmega8a.name=ATmega8a @ 8 MHz majsterkowo_atmega8a.upload.maximum_size=7168 majsterkowo_atmega8a.upload.using=arduino:arduinoisp majsterkowo_atmega8a.bootloader.low_fuses=0xe4 majsterkowo_atmega8a.bootloader.high_fuses=0xc4 majsterkowo_atmega8a.bootloader.path=atmega majsterkowo_atmega8a.bootloader.file=ATmegaBOOT_8.hex majsterkowo_atmega8a.bootloader.unlock_bits=0x3F majsterkowo_atmega8a.build.mcu=atmega8 majsterkowo_atmega8a.build.f_cpu=8000000L majsterkowo_atmega8a.build.core=arduino majsterkowo_atmega8a.build.variant=standard ################################################################# majsterkowo_atmega328p8.name=ATmega328P @ 8 MHz majsterkowo_atmega328p8.upload.maximum_size=30720 majsterkowo_atmega328p8.upload.using=arduino:arduinoisp majsterkowo_atmega328p8.bootloader.low_fuses=0xE2 majsterkowo_atmega328p8.bootloader.high_fuses=0xDA majsterkowo_atmega328p8.bootloader.extended_fuses=0x05 majsterkowo_atmega328p8.bootloader.path=atmega majsterkowo_atmega328p8.bootloader.file=ATmegaBOOT_328.hex majsterkowo_atmega328p8.bootloader.unlock_bits=0x3F majsterkowo_atmega328p8.bootloader.lock_bits=0x0F majsterkowo_atmega328p8.build.mcu=atmega328p majsterkowo_atmega328p8.build.f_cpu=8000000L majsterkowo_atmega328p8.build.core=arduino majsterkowo_atmega328p8.build.variant=standard ################################################################# majsterkowo_atmega328p16.name=ATmega328P @ 16 MHz majsterkowo_atmega328p16.upload.maximum_size=30720 majsterkowo_atmega328p16.upload.using=arduino:arduinoisp majsterkowo_atmega328p16.bootloader.low_fuses=0xE2 majsterkowo_atmega328p16.bootloader.high_fuses=0xDA majsterkowo_atmega328p16.bootloader.extended_fuses=0x05 majsterkowo_atmega328p16.bootloader.path=atmega majsterkowo_atmega328p16.bootloader.file=ATmegaBOOT_328.hex majsterkowo_atmega328p16.bootloader.unlock_bits=0x3F majsterkowo_atmega328p16.bootloader.lock_bits=0x0F majsterkowo_atmega328p16.build.mcu=atmega328p majsterkowo_atmega328p16.build.f_cpu=16000000L majsterkowo_atmega328p16.build.core=arduino majsterkowo_atmega328p16.build.variant=standard |
Dla innych typów mikrokontrolera trzeba znaleźc odpowiednio zmodyfikowany plik w internecie.
Jeżeli zakupiłeś mikrokontroler z wgranym bootloaderem pomijasz tą cześć.
- Otwieramy arduino IDE
- plik / przykłady/ arduino ISP
- wgrywamy program na arduino
- narzędzia /płytka – wybieramy nasz mikrokontroler
- narzędzia / programator Arduino as ISP
- podłączamy mikrokontroler według poniższej listy
- narzędzai /wypal bootloader
- Po tej operacji będziemy mieć możliwość programowania mikrokontrolerów ATmega8 z taktowaniem 8 MHz, oraz ATmega328P z taktowaniem 8 MHz lub 16 MHz.
Przenoszenie na mikrokontroler:
Podłączmy mikrokontroler według poniższej listy:
aTmega 8:
Arduino pin 10 – atmega pin 1
Arduino pin 11 – atmega pin 17
Arduino pin 12 – atmega pin 18
Arduino pin 13 – atmega pin 19
aTmega 328:
Arduino pin 10 atmega pin 1
Arduino pin 11 atmega pin 17
Arduino pin 12 atmega pin 18
Arduino pin 13 atmega pin 19
Teraz w arduino IDE musimy dokonać jednej zmiany:
Narzędzia > płytka > wybieramy nasz mikrokontroler, następnie narzędzia > programator Arduino as ISP. Wgrywamy program na mikrokontroler i podłączmy według powyższych schematów.
Przydatne linki
- https://majsterkowo.pl/forum/programowanie-atmega8a-oraz-atmega328p-za-pomoca-arduino-t280.html#p6201
- http://arduino.cc/en/Tutorial/ArduinoToBreadboard
- http://www.instructables.com/id/Burning-the-Bootloader-on-ATMega328-using-Arduino-/?ALLSTEPS
- http://pdp11.byethost12.com/AVR/ArduinoAsProgrammer.htm
Brak schematów. Rysunek z fritzinga nie jest schematem.
Schemat połączeń? Nie może tak być?
Jest grafika “Schemat połączeń dla arduino” a nie ma “Schemat połączeń dla atmegi”.
Mogę prosić o dodanie?
Dla typowych układów elektronicznych schematy są wskazane, ale tutaj, gdzie mamy praktycznie samo Arduino (które na schemacie byłoby dużo mniej czytelne) i dosłownie kilka elementów taka rycina chyba w zupełności wystarczy :)
kolega chyba pyta o schemat ideowy
jednym słowem IDEAFIX
niech mi ktoś powie jak zasilić taki mikro-kontroler jak mam do niego np podpięte kilkanaście Led . ile max mA mogę tam podpiąć ?
Jak chcesz podpinać po jednej diodzie (takiej normalnej – ciągnącej 20mA) do każdego wyjścia, to nie ma problemu. Jak byś chciał podpiąć do jednego wyjścia kilka diod, to musisz je podłączyć za pośrednictwem tranzystora i zasilać osobno.
Uważam, że ten artykuł już był, tyle że w wersji z wysyłaniem danych przez internet, tu jest to samo tyle, że bez tego modułu internetu, więc chwilowo powstrzymam się od oceny.
Dodaj coś w rodzaju np. wyłączenia wyświetlacza w nocy(czujnik oświetlenia) i wtedy ocenię.
Było … !
Niemniej jednak dla żółtodzioba uproszczona wersja tamtego termometra się przyda.
Gdybyś dodał jakieś tak zwane “bajery” było by zacnie i 5 piąteczka by poleciała :)
Zrób coś spontanicznego niekoniecznie przydatnego w termometrze ale coś co zwróci uwagę.
Pozdrawiam
Może troszkę off-topic ale jak się robi takie ładne schematy z płytką testową ? wygląda bardzo przejrzyście ładnie
jednym słowem IDEAFIX :)
A można to przenieść na ATTINĘ2313
Można, zresztą na majsterkowo jest o tym artykuł
Ciekawi mnie, czemu w rozpisce pinów rozgraniczyles atmege8 i 328, skoro mają one dokładnie tak samo wyprowadzone piny….
Jestem laikiem w Arduino więc proszę o wyrozumiałość, mam pytanie. Dlaczego w kodzie programu w miejscu gdzie wyliczamy temperaturę występują akurat takie a nie inne współczynniki, mam na myśli to miejsce:
“tempe = (5.0 tempe 100.0)/1024.0;
tempe2 = (5.0 tempe2 100.0)/1024.0;”
Zmontowałem cały termometr jednak wyświetla mi się temperatura 46 stopni a gdy czujnik ogrzewam to temperatura nie rośnie tylko spada. Proszę o pomoc i wyrozumiałość jeżeli w jakiś sposób wykazałem się rażącą niewiedzą.
Witam wszystkich!
Przepraszam, że w ten sposób, ale artykulik nie nadaje się chyba do publikacji… Pokazane jest jak podłączyć termometry i LCD do arduino a nie do mikrokontrolera ATMEGA328 czy ATMEGA8 jak w tytule i wstępie
Wygląda to tylko na „zapowiedź” teorii, że się da. Gdy próbuje się to zrobić z gołym mikrokontrolerem, to trzeba zapewnić poza paroma kabelkami jeszcze odpowiednie warunki pracy dla mikrokontrolera. Czyli filtrowanie zasilania, samo zasilanie itd…
Śmiem twierdzić, że dla nikogo ten artykuł nie może być pomocny. Do pomiaru temperatury używany jest przetwornik Analogowo-Cyfrowy mikrokontrolera (termometry LM35 są przecież analogowe). Wyświetlacz podłączony jest do portu „B” mikrokontrolera. Nikt nawet nie wspomniał, że aby to poprawnie działało, potrzebny jest jeszcze: stabilizator napięcia, dławik, ze dwa kondensatory, kilka rezystorów…
Skąd początkujący ma to wszystko wiedzieć, nie mówiąc już o tym, jak ma to wszystko podłączyć do kupy, by działało… W tym projekcie trzeba zapewnić prawidłowe zasilanie i filtrowanie co ma kolosalne znaczenie dla działania przetwornika analogowo – cyfrowego i portu B, który jest zasilany z pary analogowej zasilania.
Przepraszam, że to wszystko w ten sposób pokazuję, ale niestety, ten artykuł w tej postaci jest wręcz szkodliwy…
Poza tym, skoro i tak potrzebujemy zasilania z arduino do gołej atmegi, to po co się męczyć na samym mikrokontrolerze, skoro i tak angażuję do pracy arduino?
I muszę wszystkich przestrzec przed tym artykułem! Nigdzie w opisie podłączenia pinów ATMEGA ARDUINO nie jest wykazane podłączenie MAS! A to jest niedopuszczalne!
Jednym słowem, nie jest tutaj pokazane jak przenieść projekt z arduino na mikrokontroler, jak to jest we wstępie.
Pozdrawiam, Daniel.
Chciałbym spytać czy zaprezentowany opis stosuje się również do ATMEGI168 ?
Nadaje się do atmega168 przy wprowadzeniu kilku zmian w pliku boards.txt:
Czemu po wgraniu bootloadera do Atmegi 328p przestał działać PWM??
Wejścia i wyjścia cyfrowe działają, analog write do 127: stan niski, od 128: wysoki.
Czemu po wgraniu bootloadera do Atmegi 328p przestał działać PWM??
Do czego jest używana zmienna czas?