Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Zbiór tutoriali związanych z Arduino.
ODPOWIEDZ
Awatar użytkownika
Łukasz
Administrator
Posty: 682
Rejestracja: 12 lis 2011, 09:42
Lokalizacja: Zielona Góra
Kontakt:

Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: Łukasz » 28 lip 2012, 13:31

Poniższy wątek jest uzupełnieniem postów:
- Programowanie mikrokontolerów na przykładzie ATTINY2313
- Programowanie mikrokontrolerów za pomocą programatora USBasp

Na początek trzeba ściągnąć bootloader dla danego mikrokontrolera i rozpakować go do katalogu /hardware/arduino/bootloaders/atmega/:
ATmegaBOOT_8.zip
ATmegaBOOT_328.zip
Następnie trzeba dodać na końcu pliku /hardware/arduino/boards.txt następujący wpis:
Spoiler:
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.

W razie wątpliwości możecie śmiało pytać :)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Życie jest za krótkie, żeby nie majsterkować...

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
macin
Majsterkowicz
Posty: 192
Rejestracja: 1 lip 2012, 11:24
Lokalizacja: Bydgoszcz

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: macin » 6 sie 2012, 12:44

Witam.
Chciałbym się spytać czy jest bootloader do atmega 16. I gdzie go szukać.
crashwr
Młodszy majsterkowicz
Posty: 1
Rejestracja: 9 sie 2012, 23:16

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: crashwr » 9 sie 2012, 23:27

Witam,

jak skonfigurować plik boards.txt żeby móc programować Atmega8A na zewnętrznym kwarcu 8Mhz ?
rumcajz
Młodszy majsterkowicz
Posty: 1
Rejestracja: 13 paź 2012, 00:38

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: rumcajz » 13 paź 2012, 00:41

Programuję Atmegę 8A za pomocą USBasp'a.
Udało się wypalić bootloader (wnioskując po komunikacie w Arduino IDE), natomiast kiedy ładuję dowolny przykładowy sketch, choćby Blink, dostaję komunikat:

avrdude: stk500_getsync(): not in sync: resp=0x30

Czy ktoś wie co może być przyczyną?
dymek
Młodszy majsterkowicz
Posty: 10
Rejestracja: 5 lis 2012, 14:07

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: dymek » 7 lis 2012, 21:38

Witam.
Chcąc zaprogramować ATmega328P przez Arduino muszę podpiąć go tak jak przy programowaniu ATTINY2313? Czyli:
10(Arduino) do 1 (328P reset)
11(Arduino) do 19(328P PCINT5)
12(Arduino) do 9 (328P PCINT6)
13(Arduino) do 12(328P PCINT7)

Czy raczej tak jak znalazłem na jednej stronie czyli
9(Arduino) do 9 (328P)
9(Arduino) do 1 przez rezystor 10k(328P)
10(Arduino) do 1(328P)
11(Arduino) do 12 (328P)
12(Arduino) do 11(328P)
13(Arduino) do 10 (328P)

i dalej analogicznie postępować jak przy programowaniu ATTINY2313 z tematu na majsterkowo?
Mateusz88
Młodszy majsterkowicz
Posty: 43
Rejestracja: 16 wrz 2012, 14:41

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: Mateusz88 » 7 lis 2012, 22:25

Wydaje mi się, że ma być tak:

10(Arduino) do 1 [PC6 (PCINT14/RESET)]
11(Arduino) do 17 [PB3 (MOSI/OC2A/PCINT3)]
12(Arduino) do 18 [PB4 (MISO/PCINT4)]
13(Arduino) do 19 [PB5 (SCK/PCINT5)]
Awatar użytkownika
johny
Majsterkowicz
Posty: 149
Rejestracja: 31 lip 2012, 18:57

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: johny » 7 lis 2012, 22:31

jeszcze gnd
Awatar użytkownika
krzxsiek
Majsterkowicz
Posty: 147
Rejestracja: 24 wrz 2012, 22:50
Lokalizacja: Lublin
Kontakt:

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: krzxsiek » 14 lis 2012, 13:01

Macie może instrukcje programowania ATmega8L-8PU?
Męczę się z nim już parę godzin i nijak nie mogę zaprogramować.
Jedynie prawie mi się udało go zaprogramować przy użyciu ustawienia "Arduino NG or older w/ ATmega8" tylko że jest tam ustawione na 16mhz a mój układ jest na max 8mhz z tego co czytałem i jakoś to działa z opóźnieniem lub wcale nie działa.
Korzystam z tego tutoriala [arduino.cc/en/Tutorial/ArduinoToBreadboard] ale jak widzę z ATmega8L-8PU to nie działa.

Proszę pomóżcie :(
Mateusz88
Młodszy majsterkowicz
Posty: 43
Rejestracja: 16 wrz 2012, 14:41

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: Mateusz88 » 14 lis 2012, 15:14

1) Do pliku boards.txt dodaj wpis:

Kod: Zaznacz cały

atmega8L.name=ATmega8L-8PU (internal 1 MHz)
atmega8L.bootloader.low_fuses=0xe1
atmega8L.bootloader.high_fuses=0xd9
atmega8L.upload.maximum_size=8192
atmega8L.build.mcu=atmega8
atmega8L.build.f_cpu=1000000L
atmega8L.build.core=arduino
atmega8L.build.variant=standard
2) Z menu Tools > Board wybierz ATmega8L-8PU (internal 1 MHz)
3) Tools > Programmer > Arduino as ISP
4) Podłącz według schematu http://arduino.cc/en/uploads/Tutorial/S ... ardAVR.png
5) Kliknij Burn Bootloader

Jak nie działa to spróbuj podłączyć jeszcze kwarc 16Mhz
dymek
Młodszy majsterkowicz
Posty: 10
Rejestracja: 5 lis 2012, 14:07

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: dymek » 14 lis 2012, 23:31

Witam ponownie.
Kolejny problem do rozwiązania, mam nadzieje że ktoś pomoże. Jestem posiadaczem Arduino Duemilanove na Atmega328P-PU i za jego pomocą chciałbym wrzucić program na Atmega328-PU. Wrzucałem już programy na Atmega8 i ATTINY2313 bez żadnych problemów. Ale przy próbie na Atmega328-PU wyrzuca błąd już przy wgrywaniu bootloadera:

Kod: Zaznacz cały

avrdude: Expected signature for ATMEGA328P is 1E 95 0F
         Double check chip, or use -F to override this check.
Czy zadziała to jeżeli wyjmę Atmega z Arduino i włożę Atmega328-PU i wtedy bezpośrednio na Arduino wrzucę program?


Rozwiązanie znalazłem na forum arduino.cc
Awatar użytkownika
krzxsiek
Majsterkowicz
Posty: 147
Rejestracja: 24 wrz 2012, 22:50
Lokalizacja: Lublin
Kontakt:

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: krzxsiek » 14 lis 2012, 23:51

dziękuję za odp. ale niestety dalej nie mogę zaprogramować ATmega8L-8PU

Sprzęt i soft: Arduino Duemilanove | Arduino 1.0.2 oraz 0023

Bez kwarca raz tak:
avrdude: Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check.
Bez kwarca drugi raz tak:
avrdude: stk500_getsync(): not in sync: resp=0x15

Z kwarcem 16mhz:
avrdude: Expected signature for ATMEGA8 is 1E 93 07 Double check chip, or use -F to override this check.

Już mam dość tego badziewia :/ z ATMEGA328P-PU żadnych problemów a z tym... ehh
Mateusz88
Młodszy majsterkowicz
Posty: 43
Rejestracja: 16 wrz 2012, 14:41

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: Mateusz88 » 15 lis 2012, 00:40

dymek - http://arduino.cc/forum/index.php?topic=58670.0

krzxsiek - dziwne sygnatura powinna się zgadzać, dla pewności podłącz jeszcze raz innymi przewodami, może któryś nie łączy. Sprawdź tez czy na pewno programujesz ATmega8L-8PU, ja kiedyś przez identyczny błąd straciłem pół godziny, bo przez pomyłkę wziąłem ATmega168P zamiast ATmega88PA.
Awatar użytkownika
krzxsiek
Majsterkowicz
Posty: 147
Rejestracja: 24 wrz 2012, 22:50
Lokalizacja: Lublin
Kontakt:

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: krzxsiek » 15 lis 2012, 01:36

No niestety ale sprawdziłem nawet miernikiem i wszystko jest poprawnie :|
Może to dlatego że już raz niby mi się udało wgrać bootloader nawet nie działający poprawnie i już się nie da lub coś się zepsuło?
Mam dwa takie same układy i przy każdym jest błąd.

No nic poddaje się, rzucam w kąt to badziewie i zostaje przy 328P-PU

Ale dzięki za dobre chęci :)

Edytowano: Może go zablokowałem wgrywając zły bootloader? Bo właśnie znalazłem informacje że często zdarza się to początkującym że można przez jakiś błąd zblokować atmege.
przemekd
Młodszy majsterkowicz
Posty: 3
Rejestracja: 27 paź 2012, 15:25

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: przemekd » 15 lis 2012, 15:03

Może go zablokowałem wgrywając zły bootloader? Bo właśnie znalazłem informacje że często zdarza się to początkującym że można przez jakiś błąd zblokować atmege.
Kurde, jestem skrajnie początkujący, wczoraj przyszły atmegi8a. Idealnie nadaję się aby je zablokować :-) Czy możesz podać jakieś linki do tych informacji.
Awatar użytkownika
johny
Majsterkowicz
Posty: 149
Rejestracja: 31 lip 2012, 18:57

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: johny » 15 lis 2012, 16:01

nie ma czegos takiego jak zaprogramowanie uC, mozna jedynie sobie zycie utrudnic, no chyba ze go spalisz
Mateusz88
Młodszy majsterkowicz
Posty: 43
Rejestracja: 16 wrz 2012, 14:41

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: Mateusz88 » 15 lis 2012, 17:06

krzxsiek, spróbuj jeszcze odczytać sygnaturę i aktualne fuse bity.

Podłącz wszystko tak jakbyś programował ATmege. Skopiuj plik avrdude.conf z katalogu \hardware\tools\avr\etc do katalogu w którym znajduje się plik avrdude.exe \hardware\tools\avr\bin, uruchom wiersz poleceń cmd i wpisz "cd ścieżka_do_katalogu_z_plikiem_avrdude.exe" u mnie to wygląda tak "cd C:\Users\Ja\Desktop\arduino-1.0.2-windows\arduino-1.0.2\hardware\tools\avr\bin", następnie wklej polecenie

avrdude -p m8 -c AVRisp -P com3 -b 19200 -U lfuse:r:-:h -U hfuse:r:-:h

(zmień tylko "com3" na port pod którym masz podłączone Arduino) i wklej na forum wynik tego polecenia.
Awatar użytkownika
krzxsiek
Majsterkowicz
Posty: 147
Rejestracja: 24 wrz 2012, 22:50
Lokalizacja: Lublin
Kontakt:

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: krzxsiek » 15 lis 2012, 18:05

Mateusz88 pisze:krzxsiek, spróbuj jeszcze odczytać sygnaturę i aktualne fuse bity.

Podłącz wszystko tak jakbyś programował ATmege. Skopiuj plik avrdude.conf z katalogu \hardware\tools\avr\etc do katalogu w którym znajduje się plik avrdude.exe \hardware\tools\avr\bin, uruchom wiersz poleceń cmd i wpisz "cd ścieżka_do_katalogu_z_plikiem_avrdude.exe" u mnie to wygląda tak "cd C:\Users\Ja\Desktop\arduino-1.0.2-windows\arduino-1.0.2\hardware\tools\avr\bin", następnie wklej polecenie

avrdude -p m8 -c AVRisp -P com3 -b 19200 -U lfuse:r:-:h -U hfuse:r:-:h

(zmień tylko "com3" na port pod którym masz podłączone Arduino) i wklej na forum wynik tego polecenia.
zrobione:
avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.11s

avrdude.exe: Device signature = 0x000000
avrdude.exe: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.


avrdude.exe done. Thank you.
przemekd pisze:
Może go zablokowałem wgrywając zły bootloader? Bo właśnie znalazłem informacje że często zdarza się to początkującym że można przez jakiś błąd zblokować atmege.
Kurde, jestem skrajnie początkujący, wczoraj przyszły atmegi8a. Idealnie nadaję się aby je zablokować :-) Czy możesz podać jakieś linki do tych informacji.
niestety nie pamiętam ale gdzieś na elektrodzie o tym pisali
Mateusz88
Młodszy majsterkowicz
Posty: 43
Rejestracja: 16 wrz 2012, 14:41

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: Mateusz88 » 15 lis 2012, 18:23

Tak jak myślałem, jest problem z odczytaniem sygnatury, spróbuj jeszcze wpisać

avrdude -p m8 -c AVRisp -P com3 -b 19200 -B 6 -U lfuse:r:-:h -U hfuse:r:-:h

Jeśli "avrdude.exe: Device signature = 0x000000" nadal pokazuje same zera to już nie mam pomysłu co z tym zrobić :/
Awatar użytkownika
krzxsiek
Majsterkowicz
Posty: 147
Rejestracja: 24 wrz 2012, 22:50
Lokalizacja: Lublin
Kontakt:

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: krzxsiek » 15 lis 2012, 19:06

Mateusz88 pisze:Tak jak myślałem, jest problem z odczytaniem sygnatury, spróbuj jeszcze wpisać

avrdude -p m8 -c AVRisp -P com3 -b 19200 -B 6 -U lfuse:r:-:h -U hfuse:r:-:h

Jeśli "avrdude.exe: Device signature = 0x000000" nadal pokazuje same zera to już nie mam pomysłu co z tym zrobić :/
no niestety avrdude.exe: Device signature = 0x000000
dymek
Młodszy majsterkowicz
Posty: 10
Rejestracja: 5 lis 2012, 14:07

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: dymek » 16 lis 2012, 00:25

Jako początkujący mam kolejne pytanie. Wrzuciłem ten program:

Kod: Zaznacz cały

#include <IRremote.h>
#define irPin 17
IRrecv irrecv(irPin);
decode_results results;
 
#define diodaPin 5
#define diodaPin2 6
int diodaStatus = LOW;
int diodaStatus2 = LOW;
 
 
void setup() {
   Serial.begin(9600);
    irrecv.enableIRIn();
 
    pinMode(diodaPin, OUTPUT);
    pinMode(diodaPin2, OUTPUT);
}
 
void loop() {
   if (irrecv.decode(&results))
   {
 
      switch (results.value) {
         case 0xB883A503:
            Serial.println("lewy");
            diodaStatus = ~diodaStatus;
            digitalWrite(diodaPin, diodaStatus);
            delay(250);
            break;
         }
         
         
         switch (results.value) {
         case 0x8fc6767c:
            Serial.println("prawy");
            diodaStatus2 = ~diodaStatus2;
            digitalWrite(diodaPin2, diodaStatus2);
            delay(250);
            break;
         }
 
   irrecv.resume();
   }
}
na Atmega328 (zewnętrzne przez Arduino), podłączyłem odbiornik podczerwieni i 2 przekaźniki sterowane tranzystorami ale układ nie działa. Ogólnie dążę do zapytania czy w kodzie przy irPin i diodaPin powinny być nr nóżek układu czy tak jak w Arduino irPin 11, diodaPin 3? Próbowałem oba i nie działa. Układ na samym Arduino działa ale nie chce zadziałać na zewnętrznym Atmega. Wgranie kodu na zewnętrzny układ Atmega328 poszło bez problemu.

Wszystkie masy są podpięte, na VCC i AVCC jest +5V. Reset do VCC przez rezystor 10k.
Mateusz88
Młodszy majsterkowicz
Posty: 43
Rejestracja: 16 wrz 2012, 14:41

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: Mateusz88 » 16 lis 2012, 00:38

Piny definiujesz tak jak w Arduino. Sprawdź czy podłączyłeś tranzystory do dobrych pinów.
http://www.hobbytronics.co.uk/arduino-atmega328-pinout
dymek
Młodszy majsterkowicz
Posty: 10
Rejestracja: 5 lis 2012, 14:07

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: dymek » 16 lis 2012, 12:48

Pomógł dopiero kondensator 100n między VCC a GND, nie przypuszczałem że jest on taki ważny.
shymon
Majsterkowicz
Posty: 139
Rejestracja: 6 paź 2012, 20:27

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: shymon » 17 lis 2012, 10:44

Skoro producent w dokumentacji napisał, że trzeba dać (i to jak najbliżej układu), to zrobił to z jakiegoś powodu.
Tak samo jak podciągnięcie resetu do VCC przez rezystor i kondensator na AREF - GND, nawet, gdy nie korzystasz z ADC.
Awatar użytkownika
krzxsiek
Majsterkowicz
Posty: 147
Rejestracja: 24 wrz 2012, 22:50
Lokalizacja: Lublin
Kontakt:

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: krzxsiek » 18 lis 2012, 21:16

Mam pytanko odnośnie ATmega8A.

Tak ma wyglądać podłączenie podczas wgrywania bootloadera? Razem z kwarcem 16MHz?
arduino.cc/en/uploads/Tutorial/BreadboardAVR.png

A ustawienia boards.txt tak jak w temacie? Bo widzę że te są chyba pod wewnętrzne 8MHz. Macie ustawienia na zewnętrzne 16MHz?

Pytam dla pewności bo można by zamieścić w pierwszym poście schemat połączeń dla takich początkujących jak np. ja :D
Mateusz88
Młodszy majsterkowicz
Posty: 43
Rejestracja: 16 wrz 2012, 14:41

Re: Programowanie ATmega8A oraz ATmega328P za pomocą Arduino

Post autor: Mateusz88 » 19 lis 2012, 00:07

Tak, schemat który podałeś jest dobry. Wpis do pliku boards.txt dla zewnętrznego kwarcu 16Mhz powinien wyglądać tak:

Kod: Zaznacz cały

atmega8a.name=ATmega8a @ 16 MHz
atmega8a.upload.maximum_size=7168
atmega8a.upload.using=arduino:arduinoisp
atmega8a.bootloader.low_fuses=0xff
atmega8a.bootloader.high_fuses=0xc4
atmega8a.bootloader.path=atmega
atmega8a.bootloader.file=ATmegaBOOT_8.hex
atmega8a.bootloader.unlock_bits=0x3F
atmega8a.build.mcu=atmega8
atmega8a.build.f_cpu=16000000L
atmega8a.build.core=arduino
atmega8a.build.variant=standard
ODPOWIEDZ

Strony partnerskie: