Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: serter - 16 Mayıs 2019, 17:53:45

Başlık: ATMEGA328p Arduino bootloader
Gönderen: serter - 16 Mayıs 2019, 17:53:45
İyi Günler herkese,

elimde Arduino Uno
Arduino ide 1.8.9
Atmega328P
16 MHZ kristal
22 pf kondasatör
10k direnç ve board var.

Board üzerinde atmega328p nin bağlantılarını yapıyorum.

http://codelama.com/atmega328e-arduino-bootloader-yukleme/ (http://codelama.com/atmega328e-arduino-bootloader-yukleme/)

linkinden faydalanıyorum.  Bağlantıları 6 7 kez kontrol ettim. Bağlantılar doğru.

ide üzerindenden burn bootleader dediğim zaman bu adımı gerçekleştiremiyor.

avrdude: stk500_initialize(): (b) protocol error, expect=0x10, resp=0x01
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x10

hatasını alıyorum. Bu hata ile karşılaşan arkadaşlar var mı?
Başlık: Ynt: ATMEGA328p Arduino bootloader
Gönderen: Kabil ATICI - 16 Mayıs 2019, 21:34:42
Niye Arduino ide'si üzerinden yapmıyorsun. Hazır kodu da var.
Arduino uno üzerine Dosya menüsünden Örnekler>ArduinoISP>ArduinoISP programını yüklüyorsun. Gerekli bağlantıları yapıyorsun, bağlantılar için internete bakabilirsin, (bu arada bootloader yüklemek istediğin işlemcinin bağlı olduğu ve çalışmaya hazır olduğuna emin oluyorsun.
-Araçlar menüsünden> bilgisayara bağlı olan arduino'yu seçiyorsun(port seçimi dahil);
-Araçlar menüsünden>Programlayıcı: Arduino as ISP seçiyorsun ve seçili olduğundan emin oluyorsun;
-Araçlar menüsünden>Ön Yükleyiciyi yazdır seçiyorsun ve Arduino ide işlemini tamamlandığına bildirene kadar bekliyorsun.

Yok hala hata alıyorum diyorsan işlemciyi değiştir. Veya temas etmeyen bir kablon var.
Başlık: Ynt: ATMEGA328p Arduino bootloader
Gönderen: serter - 16 Mayıs 2019, 21:44:50
Arduino IDE sini kullanıyorum sonuçta. Ben söylemiş olduğun adımları yapıyorum. Ön yükleyiciyi yazarken vermiş olduğum hatayı veriyor. O aşamayı geçemiyor.
Başlık: Ynt: ATMEGA328p Arduino bootloader
Gönderen: mehmet - 16 Mayıs 2019, 22:22:22
Demek ki eksik veya yanlış
bir şeyler var.
@Kabil ATICI Hoca 'nın yazdıklarını
tekrar gözden geçiriniz.
Başlık: Ynt: ATMEGA328p Arduino bootloader
Gönderen: ipek - 16 Mayıs 2019, 23:10:32
bir hafta evvel USBasp ile bootloader yüklemeye kalktım mümkün olmadı izlediğim yöntem doğru idi,sonunda eski versiyon bir arduino ide sanırım 1.65r idi kusursuzca yükledi,yeni versiyon iyi versiyon değil izlenimi kaldı bende...
Başlık: Ynt: ATMEGA328p Arduino bootloader
Gönderen: serter - 15 Temmuz 2019, 12:35:42
@ipek Hanım kesinlikle haklısınız. Yeni versiyonunda bir sıkıntı var. Eski sürümlerine aldım ben de düzeldi. Durduk yere saçma bi yerden 1 haftam gitti.
Başlık: Ynt: ATMEGA328p Arduino bootloader
Gönderen: mehmet - 15 Temmuz 2019, 15:21:42
 ;D
Başlık: Ynt: ATMEGA328p Arduino bootloader
Gönderen: mehmet - 15 Temmuz 2019, 15:29:57
Atmel mcu programlayıcı programların
tamamı "avrdude" yi kullanıyor.

GUI sevdası yüzünden konsoldan
çalışamıyoruz.
Bir satırlık CLI de yazılacaklar ile
tüm işimiz anında bitecek.

http://www.nongnu.org/avrdude/user-manual/avrdude_6.html#Example-Command-Line-Invocations

Örnek:
avrdude -v -p atmega328p -c stk500v1 -P /dev/ttyACM0 -b19200 -e -u \
                                    -U flash:w:ATmegaBOOT_168_atmega328.hex \
                                    -U lock:w:0x3F:m \
                                    -U efuse:w:0xFD:m \
                                    -U hfuse:w:0xDE:m \
                                    -U lfuse:w:0xFF:m
Başlık: Ynt: ATMEGA328p Arduino bootloader
Gönderen: volkanunal - 15 Temmuz 2019, 20:48:09
Alıntı yapılan: mehmet - 15 Temmuz 2019, 15:29:57Atmel mcu programlayıcı programların
tamamı "avrdude" yi kullanıyor.

GUI sevdası yüzünden konsoldan
çalışamıyoruz.
Bir satırlık CLI de yazılacaklar ile
tüm işimiz anında bitecek.

http://www.nongnu.org/avrdude/user-manual/avrdude_6.html#Example-Command-Line-Invocations

Örnek:
avrdude -v -p atmega328p -c stk500v1 -P /dev/ttyACM0 -b19200 -e -u \
                                    -U flash:w:ATmegaBOOT_168_atmega328.hex \
                                    -U lock:w:0x3F:m \
                                    -U efuse:w:0xFD:m \
                                    -U hfuse:w:0xDE:m \
                                    -U lfuse:w:0xFF:m


Merhabalar hocam , şu şekilde kendi bootloader programımı yazıyorum , atmel studiodan flash segment bölgesinde bulunan .text=3800 olarak ayarlıyoru memory bölgesini.


#define  F_CPU 16000000
#include <avr/boot.h>
#include <util/delay.h>
#include <avr/interrupt.h>

uint8_t prog[] = {

0x0C,0x94,0x34,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,
0x82,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,
0x00,0x68,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,
0x3E,0x00,0x58,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,
0x94,0x3E,0x00,0x48,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,
0x0C,0x94,0x3E,0x00,0x38,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,
0x00,0x0C,0x94,0x3E,0x00,0x28,0x0C,0x94,0x3E,0x00,0x0C,0x94,0x3E,0x00,0x11,0x24,
0x1F,0xBE,0xCF,0xEF,0xD8,0xE0,0x4C,0xDE,0xBF,0xCD,0xBF,0x0E,0x94,0x40,0x00,0x0C,
0x94,0x56,0x00,0x0C,0x94,0x00,0x00,0xDF,0x25,0x9A,0x2D,0x9A,0x2F,0xEF,0x8F,0xE4,
0x93,0xEC,0x21,0x50,0x80,0x40,0x90,0x40,0xD9,0xE1,0xF7,0x00,0xC0,0x00,0x00,0x2D,
0x98,0x2F,0xEF,0x8F,0xE4,0x93,0xEC,0x21,0x50,0x82,0x80,0x40,0x90,0x40,0xE1,0xF7,
0x00,0xC0,0x00,0x00,0xEB,0xCF,0xF8,0x94,0xFF,0xCF,0x14,
};

void boot_program_page (uint32_t page, uint8_t *buf)
{
uint16_t i;
uint8_t sreg;

// Disable interrupts.

sreg = SREG;
cli();

eeprom_busy_wait ();

boot_page_erase (page);
boot_spm_busy_wait ();      // Wait until the memory is erased.

for (i=0; i<SPM_PAGESIZE; i+=2)
{
// Set up little-endian word.

uint16_t w = *buf++;
w += (*buf++) << 8;

boot_page_fill (page + i, w);
}

boot_page_write (page);     // Store buffer in flash page.
boot_spm_busy_wait();       // Wait until the memory is written.

// Reenable RWW-section again. We need this if we want to jump back
// to the application after bootloading.

boot_rww_enable ();

// Re-enable interrupts (if they were ever enabled).

SREG = sreg;
}

int main(void) {


DDRB |= 1<<5; // Configuring PB5 as Output
PORTB |= 1<<5; // Writing HIGH to PB5
_delay_ms(3000); // Delay of 1 Second
PORTB &= ~(1<<5); // Writing LOW to PB5
_delay_ms(3000); // Delay of 1 Second*/

//start at flash_start = 0x0000
     boot_program_page( 0, prog);
   
//start the actual program
asm volatile("jmp 0x0000");



}


array içerisinde flasha yazmak istediğim programın hex kodu bulunuyor.

avrdude -c usbasp -p m328p -U flash:w:boot.hex:i -U lock:w:0x3F:m -U efuse:w:0xFD:m -U hfuse:w:0xDF:m -U lfuse:w:0xFF


Komut satırından programlıyorum , fakat program application kısmına zıplamıyor. Hep bootloader kısmında kalıyor. Booloader kısmında arduino üzerinde bulunan 13.pine bağlı ledi yak söndür yapıyorum ve led 1 saniye aralıklarla yanıp sönüyor. Diğer yere zıplamıyor. Fuse settings kısmında bir problem mi var acaba?

Başlık: Ynt: ATMEGA328p Arduino bootloader
Gönderen: tunahanfıtlamak - 18 Temmuz 2019, 14:04:34
@serter ben bu linkteki uygulamayı yaptım benimki çalıştı hala çalışmazsa bağlantılarda bi yanlışlık olmalı bu video size yardımcı olacaktır. (mrcl bacağını direk ardunio ya götürmek daha iyi olacaktır.)
https://www.youtube.com/watch?v=xGkDt5C0Cx8
Başlık: Ynt: ATMEGA328p Arduino bootloader
Gönderen: mehmet - 22 Temmuz 2019, 02:39:33
@volkanunal

efuse -> 0x05
hfuse -> 0xDA
lfuse -> 0xDF

şeklinde deneyiniz.