Как прошить загрузчик в Atmega8515 и работать с контроллером через Arduino Ide
- Войдите на сайт для отправки комментариев
Вс, 10/11/2013 - 16:42
Задался вопросом и много искал инфы, но пока ничего не получилось. Короче нужно работать с Atmega8515. Писать на Си сложно. Хочу писать прогу в Ide. Кто поможет инфой как залить загрузчик для данной Atmega (или на любой другой AT вообще) и надо ли менять что-то в Ide. Заранее спасибо.
попробовать скомпилировать загрузчик optiboot и добавить секцию в ардуино ,то же самое как м/к атмега8
А как быть с Arduino.pins??? Ноги у всех контроллеров-то разные... Как тут быть?
да.. возможно тут нужно ядро avrnetio ,которое используется для атемега16 и 32- почитал сейчас даташит
Optiboot в codevision компилирует с ошибкой.
К сожалению надо вплотную разбиратся с этим м/к на сколько он похож с мегой16 и 32 .Проще купить ардуинку или мегау32 и не мучатся ))
Я согласен, но походу распиновка разная!!! Питание у 8515 по углам, а у 32 в центре. + нет АЦП
Да если сложно писать в других средах разработки то лучше вообще не смотреть в сторону других микроконтроллеров.
тут главное не другая распиновка ,а внутреннее строение ... вижу только разницу,что у 8515 на одну инструкцию меньше :) кроме объема флеш..
В общем ..используя avrnetio добавляем блок в board.txt и пробуем стандартые функции работы с портами,типа блинка..
У 8515 есть порт Е. Как с ним быть... Ладно. Попробую. Спасибо, что обнадёжил.
Короче ничего не получилось. Ругается за FUSE биты. Банальное переименование 644 в 8515 в файле boards не дало плоды. Короче я так понимаю, что не получится ничего. В тщетных поисках загрузчика скомпилированного под 8515 стоптал пальцы. Скомпилировать optiboot в codevision тоже не получилось - бесконечные ошибки в библиотеках.
:(
Чтобы поблинкать надо сначало загрузчик залить, а не получается
Чтобы поблинкать надо сначало загрузчик залить, а не получается
для этого загрузчик не нужен
Надо смотреть какие ошибки - думаю там можно под его загрузчик переделать.
Загрузчик не обязателен,если прошивать через программатор или ардуину.
со фьюзами надо внимательнее и не трогать их ,если не знаешь что куда..
А как скетч из Arduino IDE залить в 8515 без boot loader-a?? Ведь я так понимаю IDE компилирует скетч под определенный тип МК которые имеются в списке плат. Просветите пожалуйста
Выбрать в меню "прошить с помощью программатора".
Как добавить м/к в список, я описывал тут http://homes-smart.ru/index.php/oborudovanie/arduino/dobavlyaem-podderzhku-ne-rodnykh-m-k-v-sredu-arduino-ide . Смотрим пример для ATmega32 ,но фьюзы не пишем,т.к. их надо сначала расчитать
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATMEGA8515
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATMEGA8515
Вот что выдало. Но написал об успешной записи.
И статью я эту прочитал уже n раз.
А вот за "Выбрать в меню "прошить с помощью программатора". - вот за это низкий поклон. Стыдно, что не заметил, но просто она в меню файл.
С помощью DDR и PORT блинкать получается. А вот digitalWrite и остальная компания пока не хочет. Ща буду ещё копать. Благодарю за неравнодушие.
Hail Atmel SS
На эту ошибку можно не обращать внимания,а вот карта пинов нумерации надо аналогично по атмега32 смотреть,но с учетом того,что там другая распиновка
analog и digital Write не хотят и всё. Надо лезьт в Arduino pins. Ща буду пробовать. Хотя там чёрт ногу сломает
А прописывать ATMEGA8515 вместо 32?
ещё раз спасибо.
А прописывать ATMEGA8515 вместо 32?
ДА
Кстати,карту пинов надо править в папке ядра avrnetio
отут? D:\Дуня\arduino-1.0.1\hardware\arduino\varian\avrnetio ???
да ,указали же ядро avrnetio в блоке board.txt
Суть понял, но реализовать тяжеловато. Напишу что вышло.
Порт А не заработал как дискретный выход. Пины идут как-то не по порядку. В тексте описания ног много условий, с адресацией "сом21" и "comob1" . Может это связано с сигнатурой мк??? Может кто помочь отредактировать программу для определения функций ног 8515го [в картинке распиновки в квадратных скопках указаны ноги 8515го если они отличаются от 644го]
#ifndef Pins_Arduino_h #define Pins_Arduino_h 0x20120110 #define AVR_NET_IO 0x20120110 #include <avr/pgmspace.h> #define NUM_DIGITAL_PINS 32 #define NUM_ANALOG_INPUTS 8 #define analogInputToDigitalPin(p) ((p < NUM_ANALOG_INPUTS) ? (p) + 8 : -1) #if defined(COM21) #if defined(COM0B1) #define digitalPinHasPWM(p) ((p) == 20 || (p) == 21 || (p) == 23 || (p) == 27 || (p) == 28) #else #define digitalPinHasPWM(p) ((p) == 20 || (p) == 21 || (p) == 23 || (p) == 27) #endif /* COM0B1 */ #else #if defined(COM0B1) #define digitalPinHasPWM(p) ((p) == 20 || (p) == 21 || (p) == 22 || (p) == 23 || (p) == 27 || (p) == 28) #else #define digitalPinHasPWM(p) ((p) == 20 || (p) == 21 || (p) == 22 || (p) == 23 || (p) == 27) #endif /* COM0B1 */ #endif /* COM21 */ const static uint8_t SS = 28; const static uint8_t MOSI = 29; const static uint8_t MISO = 30; const static uint8_t SCK = 31; const static uint8_t SDA = 1; const static uint8_t SCL = 0; const static uint8_t LED_BUILTIN = 18; const static uint8_t A0 = 8; const static uint8_t A1 = 9; const static uint8_t A2 = 10; const static uint8_t A3 = 11; const static uint8_t A4 = 12; const static uint8_t A5 = 13; const static uint8_t A6 = 14; const static uint8_t A7 = 15; #ifdef PCICR #define digitalPinToPCICR(p) (((p) >= 0 && (p) <= 31) ? (&PCICR) : ((uint8_t *)0)) #define digitalPinToPCICRbit(p) (((p) <= 7) ? 2 : (((p) <= 15) ? 0 : (((p) <= 23) ? 3 : 1))) #define digitalPinToPCMSK(p) (((p) <= 7) ? (&PCMSK2) : (((p) <= 15) ? (&PCMSK0) : (((p) <= 23) ? (&PCMSK3) : (((p) <= 31) ? (&PCMSK1) :((uint8_t *)0))))) #define digitalPinToPCMSKbit(p) ((p) & 7) #else /* no PCINT (mega32) */ #define digitalPinToPCICR(p) ((uint8_t *)0) #define digitalPinToPCICRbit(p) 0 #define digitalPinToPCMSK(p) ((uint8_t *)0) #define digitalPinToPCMSKbit(p) 0 #endif /* PCICR */ #ifdef ARDUINO_MAIN /*********************************************************** * Board: AVR-Net-IO by Pollin.de * On the Arduino board, digital pins are also used * for the analog output (software PWM). Analog input * pins are a separate set. * ATMEL ATMEGA32 & 644(P) / AVR-NetIO * * +---\/---+ * INT0 (D 24) PB0 1 [OCo/To PB0] | |40 PA0 (AI 0 / D8) [VCC] * INT1 (D 25) PB1 2 [T1 PB1] | |39 PA1 (AI 1 / D9) [AD0 PA0] * INT2 (D 26) PB2 3 [AINo PB2] | |38 PA2 (AI 2 / D10) [AD1 PA1] * PWM (D 27) PB3 4 [AIN1o PB 3] | |37 PA3 (AI 3 / D11) [AD2 PA2] *PWM+SS(D 28) PB4 5 [SS PB4] | |36 PA4 (AI 4 / D12) [AD3 PA3] * MOSI (D 29) PB5 6 | |35 PA5 (AI 5 / D13) [AD4 PA4] * MISO (D 30) PB6 7 | |34 PA6 (AI 6 / D14) [AD5 PA5] * SCK (D 31) PB7 8 | |33 PA7 (AI 7 / D15) [AD6 PA6] * RST 9 | |32 AREF [AD7 PA7] * VCC 10 [RxD PD0] | |31 GND [ICP/INT2 PE0] * GND 11 [TxD PD1] | |30 AVCC [ALE PE1] * XTAL2 12 [INT0 PD2] | |29 PC7 (D 7) [OC1B PE2] * XTAL1 13 [INT1 PD3] | |28 PC6 (D 6) [A15 PC7] * RX0 (D 16) PD0 14 [XCK PD4] | |27 PC5 (D 5) TDI [A14 PC6] * TX0 (D 17) PD1 15 [OC1A PD5] | |26 PC4 (D 4) TDO [A13 PC5] * RX1 (D 18) PD2 16 [WR PD6] | |25 PC3 (D 3) TMS [A12 PC4] * TX1 (D 19) PD3 17 [RD PD7] | |24 PC2 (D 2) TCK [A11 PC3] * PWM (D 20) PD4 18 [XTAL1] | |23 PC1 (D 1) SDA [A10 PC2] * PWM (D 21) PD5 19 [XTAL2] | |22 PC0 (D 0) SCL [A9 PC1] * PWM+(D 22) PD6 20 GND | |21 PD7 (D 23) PWM[A8 PC0] * +--------+ * * PWM+ 644 only * * D0 ..D11 are on SubD25 * D12..D15 are on screw connectors * D16..D17 are RS232 * D18..D24,D26 are on EXT. connectors ***********************************************************/ // these arrays map port names (e.g. port B) to the // appropriate addresses for various functions (e.g. reading // and writing) const uint16_t PROGMEM port_to_mode_PGM[] = { NOT_A_PORT, (uint16_t) &DDRA, (uint16_t) &DDRB, (uint16_t) &DDRC, (uint16_t) &DDRD, }; const uint16_t PROGMEM port_to_output_PGM[] = { NOT_A_PORT, (uint16_t) &PORTA, (uint16_t) &PORTB, (uint16_t) &PORTC, (uint16_t) &PORTD, }; const uint16_t PROGMEM port_to_input_PGM[] = { NOT_A_PORT, (uint16_t) &PINA, (uint16_t) &PINB, (uint16_t) &PINC, (uint16_t) &PIND, }; const uint8_t PROGMEM digital_pin_to_port_PGM[] = { /* 0 */ PC, // PC0: SCL - J3_2 PC, // PC1: SDA - J3_3 PC, // PC2: TCK - J3_4 PC, // PC3: TMS - J3_5 PC, // PC4: TDO - J3_6 PC, // PC5: TDI - J3_7 PC, // PC6: TOSC1 - J3_8 PC, // PC7: TOSC2 - J3_9 /* 8 */ PA, // PA0: ADC0 - A0 PA, // PA1: ADC1 - A1 PA, // PA2: ADC2 - A2 PA, // PA3: ADC3 - A3 PA, // PA4: ADC4 - ADC_1 PA, // PA5: ADC5 - ADC_2 PA, // PA6: ADC6 - ADC_3 PA, // PA7: ADC7 - ADC_4 /* 16 */ PD, // PD0: RXD - RS232_RxD PD, // PD1: TXD - RS232_TxD PD, // PD2: INT0 - LED_1 PD, // PD3: INT1 - RFM12_IRQ PD, // PD4: OC1B - LED_2 PD, // PD5: OC1A - RFM12_CS #ifdef COM21 PD, // PD6: ICP1 - LED_3 PD, // PD7: OC2 - SDcard_INS #else PD, // PD6: OC2B - LED_3 PD, // PD7: OC2A - SDcard_INS #endif /* 24 */ PB, // PB0: T0 - IR_Rx PB, // PB1: T1 - JUMP_PROG PB, // PB2: INT2 - ENC28J60_IRQ PB, // PB3: OC0 - SDcard_CS #ifdef COM0B1 PB, // PB4: SS - ENC28J60_CS #else PB, // PB4: SS - ENC28J60_CS #endif PB, // PB5: MOSI - SPI_MOSI PB, // PB6: MISO - SPI_MISO PB, // PB7: SCK - SPI_SCK }; const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { /* 0 */ _BV( 0 ), // PC0: SCL - J3_2 _BV( 1 ), // PC1: SDA - J3_3 _BV( 2 ), // PC2: TCK - J3_4 _BV( 3 ), // PC3: TMS - J3_5 _BV( 4 ), // PC4: TDO - J3_6 _BV( 5 ), // PC5: TDI - J3_7 _BV( 6 ), // PC6: TOSC1 - J3_8 _BV( 7 ), // PC7: TOSC2 - J3_9 /* 8 */ _BV( 0 ), // PA0: ADC0 - A0 _BV( 1 ), // PA1: ADC1 - A1 _BV( 2 ), // PA2: ADC2 - A2 _BV( 3 ), // PA3: ADC3 - A3 _BV( 4 ), // PA4: ADC4 - ADC_1 _BV( 5 ), // PA5: ADC5 - ADC_2 _BV( 6 ), // PA6: ADC6 - ADC_3 _BV( 7 ), // PA7: ADC7 - ADC_4 /* 16 */ _BV( 0 ), // PD0: RXD - RS232_RxD _BV( 1 ), // PD1: TXD - RS232_TxD _BV( 2 ), // PD2: INT0 - LED_1 _BV( 3 ), // PD3: INT1 - RFM12_IRQ _BV( 4 ), // PD4: OC1B - LED_2 _BV( 5 ), // PD5: OC1A - RFM12_CS #ifdef COM21 _BV( 6 ), // PD6: ICP1 - LED_3 _BV( 7 ), // PD7: OC2 - SDcard_INS #else _BV( 6 ), // PD6: OC2B - LED_3 _BV( 7 ), // PD7: OC2A - SDcard_INS #endif /* 24 */ _BV( 0 ), // PB0: T0 - IR_Rx _BV( 1 ), // PB1: T1 - JUMP_PROG _BV( 2 ), // PB2: INT2 - ENC28J60_IRQ _BV( 3 ), // PB3: OC0 - SDcard_CS #ifdef COM0B1 _BV( 4 ), // PB4: SS - ENC28J60_CS #else _BV( 4 ), // PB4: SS - ENC28J60_CS #endif _BV( 5 ), // PB5: MOSI - SPI_MOSI _BV( 6 ), // PB6: MISO - SPI_MISO _BV( 7 ), // PB7: SCK - SPI_SCK }; const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { /* 0 */ NOT_ON_TIMER, // PC0: SCL - J3_2 NOT_ON_TIMER, // PC1: SDA - J3_3 NOT_ON_TIMER, // PC2: TCK - J3_4 NOT_ON_TIMER, // PC3: TMS - J3_5 NOT_ON_TIMER, // PC4: TDO - J3_6 NOT_ON_TIMER, // PC5: TDI - J3_7 NOT_ON_TIMER, // PC6: TOSC1 - J3_8 NOT_ON_TIMER, // PC7: TOSC2 - J3_9 /* 8 */ NOT_ON_TIMER, // PA0: ADC0 - A0 NOT_ON_TIMER, // PA1: ADC1 - A1 NOT_ON_TIMER, // PA2: ADC2 - A2 NOT_ON_TIMER, // PA3: ADC3 - A3 NOT_ON_TIMER, // PA4: ADC4 - ADC_1 NOT_ON_TIMER, // PA5: ADC5 - ADC_2 NOT_ON_TIMER, // PA6: ADC6 - ADC_3 NOT_ON_TIMER, // PA7: ADC7 - ADC_4 /* 16 */ NOT_ON_TIMER, // PD0: RXD - RS232_RxD NOT_ON_TIMER, // PD1: TXD - RS232_TxD NOT_ON_TIMER, // PD2: INT0 - LED_1 NOT_ON_TIMER, // PD3: INT1 - RFM12_IRQ TIMER1B, // PD4: OC1B - LED_2 TIMER1A, // PD5: OC1A - RFM12_CS #ifdef COM21 NOT_ON_TIMER, // PD6: ICP1 - LED_3 TIMER2, // PD7: OC2 - SDcard_INS #else TIMER2B, // PD6: OC2B - LED_3 TIMER2A, // PD7: OC2A - SDcard_INS #endif /* 24 */ NOT_ON_TIMER, // PB0: T0 - IR_Rx NOT_ON_TIMER, // PB1: T1 - JUMP_PROG NOT_ON_TIMER, // PB2: INT2 - ENC28J60_IRQ TIMER0A, // PB3: OC0 - SDcard_CS #ifdef COM0B1 TIMER0B, // PB4: SS - ENC28J60_CS #else NOT_ON_TIMER, // PB4: SS - ENC28J60_CS #endif NOT_ON_TIMER, // PB5: MOSI - SPI_MOSI NOT_ON_TIMER, // PB6: MISO - SPI_MISO NOT_ON_TIMER, // PB7: SCK - SPI_SCK }; #endif #endifТихо сам с собой.
Вобщем порты A,B,C,D - работают. ШИМ на порту Д работает, на А - нет. Порт Е пока не работоспособен.
Пока что поменял только значение количества аналоговых входов на ноль. Ту би континуе
Порт Е заработал и ШИМ на нём. Остался только ШИМ на порте Б. В конце выложу исходник.
Все порты и шимы заработали. Вешаю на доску почёта MaksMS-а. Не знаю будут ли работать i2c TxRx пррерывания но мне кажеться что да. Кому интересно код файла распиновки.
#ifndef Pins_Arduino_h #define Pins_Arduino_h 0x20120110 #define AVR_NET_IO 0x20120110 #include <avr/pgmspace.h> #define NUM_DIGITAL_PINS 35 #define NUM_ANALOG_INPUTS 0 #define analogInputToDigitalPin(p) ((p < NUM_ANALOG_INPUTS) ? (p) + 8 : -1) #if defined(COM21) #if defined(COM0B1) #define digitalPinHasPWM(p) ((p) == 20 || (p) == 21 || (p) == 24 || (p) == 27 || (p) == 28) #else #define digitalPinHasPWM(p) ((p) == 20 || (p) == 21 || (p) == 24 || (p) == 27) #endif /* COM0B1 */ #else #if defined(COM0B1) #define digitalPinHasPWM(p) ((p) == 20 || (p) == 21 || (p) == 22 || (p) == 24 || (p) == 27 || (p) == 28) #else #define digitalPinHasPWM(p) ((p) == 20 || (p) == 21 || (p) == 22 || (p) == 24 || (p) == 27) #endif /* COM0B1 */ #endif /* COM21 */ const static uint8_t SS = 28; const static uint8_t MOSI = 29; const static uint8_t MISO = 30; const static uint8_t SCK = 31; const static uint8_t SDA = 1; const static uint8_t SCL = 0; const static uint8_t LED_BUILTIN = 18; const static uint8_t A0 = 8; const static uint8_t A1 = 9; const static uint8_t A2 = 10; const static uint8_t A3 = 11; const static uint8_t A4 = 12; const static uint8_t A5 = 13; const static uint8_t A6 = 14; const static uint8_t A7 = 15; #ifdef PCICR #define digitalPinToPCICR(p) (((p) >= 0 && (p) <= 34) ? (&PCICR) : ((uint8_t *)0)) #define digitalPinToPCICRbit(p) (((p) <= 7) ? 2 : (((p) <= 15) ? 0 : (((p) <= 24) ? 3 : 1))) #define digitalPinToPCMSK(p) (((p) <= 7) ? (&PCMSK2) : (((p) <= 15) ? (&PCMSK0) : (((p) <= 24) ? (&PCMSK3) : (((p) <= 31) ? (&PCMSK3) : (((p) <= 34 ? (&PCMSK1) :((uint8_t *)0))))) #define digitalPinToPCMSKbit(p) ((p) & 7) #else /* no PCINT (mega32) */ #define digitalPinToPCICR(p) ((uint8_t *)0) #define digitalPinToPCICRbit(p) 0 #define digitalPinToPCMSK(p) ((uint8_t *)0) #define digitalPinToPCMSKbit(p) 0 #endif /* PCICR */ #ifdef ARDUINO_MAIN /*********************************************************** * Board: AVR-Net-IO by Pollin.de * On the Arduino board, digital pins are also used * for the analog output (software PWM). Analog input * pins are a separate set. * ATMEL ATMEGA32 & 644(P) / AVR-NetIO * * +---\/---+ * INT0 (D 24) PB0 1| |40 PA0 (AI 0 / D8) * INT1 (D 25) PB1 2| |39 PA1 (AI 1 / D9) * INT2 (D 26) PB2 3| |38 PA2 (AI 2 / D10) * PWM (D 27) PB3 4| |37 PA3 (AI 3 / D11) *PWM+SS(D 28) PB4 5| |36 PA4 (AI 4 / D12) * MOSI (D 29) PB5 6| |35 PA5 (AI 5 / D13) * MISO (D 30) PB6 7| |34 PA6 (AI 6 / D14) * SCK (D 31) PB7 8| |33 PA7 (AI 7 / D15) * RST 9| |32 AREF * VCC 10| |31 GND * GND 11| |30 AVCC * XTAL2 12| |29 PC7 (D 7) * XTAL1 13| |28 PC6 (D 6) * RX0 (D 16) PD0 14| |27 PC5 (D 5) TDI * TX0 (D 17) PD1 15| |26 PC4 (D 4) TDO * RX1 (D 18) PD2 16| |25 PC3 (D 3) TMS * TX1 (D 19) PD3 17| |24 PC2 (D 2) TCK * PWM (D 20) PD4 18| |23 PC1 (D 1) SDA * PWM (D 21) PD5 19| |22 PC0 (D 0) SCL * PWM+(D 22) PD6 20| |21 PD7 (D 23) PWM * +--------+ * * PWM+ 644 only * * D0 ..D11 are on SubD25 * D12..D15 are on screw connectors * D16..D17 are RS232 * D18..D24,D26 are on EXT. connectors ***********************************************************/ // these arrays map port names (e.g. port B) to the // appropriate addresses for various functions (e.g. reading // and writing) const uint16_t PROGMEM port_to_mode_PGM[] = { NOT_A_PORT, (uint16_t) &DDRA, (uint16_t) &DDRB, (uint16_t) &DDRC, (uint16_t) &DDRD, (uint16_t) &DDRE, }; const uint16_t PROGMEM port_to_output_PGM[] = { NOT_A_PORT, (uint16_t) &PORTA, (uint16_t) &PORTB, (uint16_t) &PORTC, (uint16_t) &PORTD, (uint16_t) &PORTE, }; const uint16_t PROGMEM port_to_input_PGM[] = { NOT_A_PORT, (uint16_t) &PINA, (uint16_t) &PINB, (uint16_t) &PINC, (uint16_t) &PIND, (uint16_t) &PINE, }; const uint8_t PROGMEM digital_pin_to_port_PGM[] = { /* 0 */ PC, // PC0: SCL - J3_2 PC, // PC1: SDA - J3_3 PC, // PC2: TCK - J3_4 PC, // PC3: TMS - J3_5 PC, // PC4: TDO - J3_6 PC, // PC5: TDI - J3_7 PC, // PC6: TOSC1 - J3_8 PC, // PC7: TOSC2 - J3_9 /* 8 */ PA, // PA0: ADC0 - A0 PA, // PA1: ADC1 - A1 PA, // PA2: ADC2 - A2 PA, // PA3: ADC3 - A3 PA, // PA4: ADC4 - ADC_1 PA, // PA5: ADC5 - ADC_2 PA, // PA6: ADC6 - ADC_3 PA, // PA7: ADC7 - ADC_4 /* 16 */ PD, // PD0: RXD - RS232_RxD PD, // PD1: TXD - RS232_TxD PD, // PD2: INT0 - LED_1 PD, // PD3: INT1 - RFM12_IRQ PD, // PD4: OC1B - LED_2 PD, // PD5: OC1A - RFM12_CS #ifdef COM21 PD, // PD6: ICP1 - LED_3 PD, // PD7: OC2 - SDcard_INS #else PD, // PD6: OC2B - LED_3 PD, // PD7: OC2A - SDcard_INS #endif /* 24 */ PB, // PB0: T0 - IR_Rx PB, // PB1: T1 - JUMP_PROG PB, // PB2: INT2 - ENC28J60_IRQ PB, // PB3: OC0 - SDcard_CS #ifdef COM0B1 PB, // PB4: SS - ENC28J60_CS #else PB, // PB4: SS - ENC28J60_CS #endif PB, // PB5: MOSI - SPI_MOSI PB, // PB6: MISO - SPI_MISO PB, // PB7: SCK - SPI_SCK /* 32 */ PE, PE, PE, }; const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { /* 0 */ _BV( 0 ), // PC0: SCL - J3_2 _BV( 1 ), // PC1: SDA - J3_3 _BV( 2 ), // PC2: TCK - J3_4 _BV( 3 ), // PC3: TMS - J3_5 _BV( 4 ), // PC4: TDO - J3_6 _BV( 5 ), // PC5: TDI - J3_7 _BV( 6 ), // PC6: TOSC1 - J3_8 _BV( 7 ), // PC7: TOSC2 - J3_9 /* 8 */ _BV( 0 ), // PA0: ADC0 - A0 _BV( 1 ), // PA1: ADC1 - A1 _BV( 2 ), // PA2: ADC2 - A2 _BV( 3 ), // PA3: ADC3 - A3 _BV( 4 ), // PA4: ADC4 - ADC_1 _BV( 5 ), // PA5: ADC5 - ADC_2 _BV( 6 ), // PA6: ADC6 - ADC_3 _BV( 7 ), // PA7: ADC7 - ADC_4 /* 16 */ _BV( 0 ), // PD0: RXD - RS232_RxD _BV( 1 ), // PD1: TXD - RS232_TxD _BV( 2 ), // PD2: INT0 - LED_1 _BV( 3 ), // PD3: INT1 - RFM12_IRQ _BV( 4 ), // PD4: OC1B - LED_2 _BV( 5 ), // PD5: OC1A - RFM12_CS #ifdef COM21 _BV( 6 ), // PD6: ICP1 - LED_3 _BV( 7 ), // PD7: OC2 - SDcard_INS #else _BV( 6 ), // PD6: OC2B - LED_3 _BV( 7 ), // PD7: OC2A - SDcard_INS #endif /* 24 */ _BV( 0 ), // PB0: T0 - IR_Rx _BV( 1 ), // PB1: T1 - JUMP_PROG _BV( 2 ), // PB2: INT2 - ENC28J60_IRQ _BV( 3 ), // PB3: OC0 - SDcard_CS #ifdef COM0B1 _BV( 4 ), // PB4: SS - ENC28J60_CS #else _BV( 4 ), // PB4: SS - ENC28J60_CS #endif _BV( 5 ), // PB5: MOSI - SPI_MOSI _BV( 6 ), // PB6: MISO - SPI_MISO _BV( 7 ), // PB7: SCK - SPI_SCK /* 32 */ _BV( 0 ), _BV( 1 ), _BV( 2 ), }; const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { /* 0 */ NOT_ON_TIMER, // PC0: SCL - J3_2 NOT_ON_TIMER, // PC1: SDA - J3_3 NOT_ON_TIMER, // PC2: TCK - J3_4 NOT_ON_TIMER, // PC3: TMS - J3_5 NOT_ON_TIMER, // PC4: TDO - J3_6 NOT_ON_TIMER, // PC5: TDI - J3_7 NOT_ON_TIMER, // PC6: TOSC1 - J3_8 NOT_ON_TIMER, // PC7: TOSC2 - J3_9 /* 8 */ NOT_ON_TIMER, // PA0: ADC0 - A0 NOT_ON_TIMER, // PA1: ADC1 - A1 NOT_ON_TIMER, // PA2: ADC2 - A2 NOT_ON_TIMER, // PA3: ADC3 - A3 NOT_ON_TIMER, // PA4: ADC4 - ADC_1 NOT_ON_TIMER, // PA5: ADC5 - ADC_2 NOT_ON_TIMER, // PA6: ADC6 - ADC_3 NOT_ON_TIMER, // PA7: ADC7 - ADC_4 /* 16 */ NOT_ON_TIMER, // PD0: RXD - RS232_RxD NOT_ON_TIMER, // PD1: TXD - RS232_TxD NOT_ON_TIMER, // PD2: INT0 - LED_1 NOT_ON_TIMER, // PD3: INT1 - RFM12_IRQ NOT_ON_TIMER, // PD4: OC1B - LED_2 TIMER1A, // PD5: OC1A - RFM12_CS #ifdef COM21 NOT_ON_TIMER, // PD6: ICP1 - LED_3 NOT_ON_TIMER, // PD7: OC2 - SDcard_INS #else NOT_ON_TIMER, // PD6: OC2B - LED_3 NOT_ON_TIMER, // PD7: OC2A - SDcard_INS #endif /* 24 */ TIMER0A, // PB0: T0 - IR_Rx NOT_ON_TIMER, // PB1: T1 - JUMP_PROG NOT_ON_TIMER, // PB2: INT2 - ENC28J60_IRQ NOT_ON_TIMER, // PB3: OC0 - SDcard_CS #ifdef COM0B1 NOT_ON_TIMER, // PB4: SS - ENC28J60_CS #else NOT_ON_TIMER, // PB4: SS - ENC28J60_CS #endif NOT_ON_TIMER, // PB5: MOSI - SPI_MOSI NOT_ON_TIMER, // PB6: MISO - SPI_MISO NOT_ON_TIMER, // PB7: SCK - SPI_SCK /* 32 */ NOT_ON_TIMER, // PB5: MOSI - SPI_MOSI NOT_ON_TIMER, // PB6: MISO - SPI_MISO TIMER1B, // PB7: SCK - SPI_SCK }; #endif #endifПочитайте Вставка программного кода в тему/комментарий.
А чего за ошибки с компиляцией бутлоадера ? попробовал сейчас - даже не пикнуло и компилируется без проблем.
Добавил сюда загрузчик http://homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik
Проверяйте ,особенно фьюзы перепроверить не помешает..
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATMEGA8515
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATMEGA8515
avrdude: invalid byte value (null) specified for immediate mode
avrdude: read from file 'null' failed
Это при попытке прошивки через последовательный порт ?
Больше попыток запуска загрузчика не было ?
Поправил код загрузчика в конструкторе для адаптации под ATmega8515
Arduin, будьте добры кликните мне на почту msgen1@mail.ru. Очень нужна Ваша помощь.
Спасибо за помощь, но я и без зашрузчика шью его. Меня пока устраивает. Если будет свободное время, которого у меня всё меньше - попробую обязательно.
И самое главное забыл написать. А кто так по ракишному расставил номера портов на avernetio?... Сплошная путаница! Надо было по кругу от 1 ноги и до самого конца, а так как будто бык насцсал, специальное усложнение. Это наверное какой-то гений решил подкинуть заподлишка))))))
Здравствуйте, уважаемые форумчане!
Заинтересовала данная тема, т.к. недавно мне попались несколько ATmega8515 и ATmega8535. Захотелось программировать их через Arduino IDE. Ну чтобы там как у всех нормальных людей типа.
Прочитал данную тему, а также статьи:
Добавляем поддержку не родных м/к в среду Arduino IDE
Конструктор Bootloader`а для Arduino
Программируем м/к Atmega через Arduino
Однако положительного результата добиться пока не удалось. Вот вкратце описание моих действий.
В конструкторе загрузчика выбрал следующие параметры:
- внешний кварц
- частота 16000000
- галочку «использовать делитель на 8» не ставил
- модель м/к: atmega8515
- установил галочку «программный UART». Порт D, RX-0, TX-1
- галочку «отключить светодиод загрузчика» не ставил
С этими параметрами создал hex-файл.
Далее скачал предлагаемый архив avr-netino, который распаковал в папку с IDE: C:/ARDUINO/hardware/avrnetio/
В файле boards.txt (тот, что лежит папке C:/ARDUINO/hardware/avrnetio) добавил следующий блок (строчки сформированы Конструктором при создании hex-файла с указанными выше параметрами):
hex-файл загрузчика поместил в папку C:/ARDUINO/hardware/avrnetio/bootloaders/optiboot
Супер-программатора специального у меня нет, поэтому решил попробовать использовать Arduino Mega для загрузки загрузчика.
Подключил ATmega8515 Arduino Mega следующим образом. Для наглядности также приведу распиновку ATmega8515 из даташита:
нога6: PB5(MOSI) -> digital_51(MOSI Arduino Mega)
нога7: PB6(MISO) -> digital_50(MISO Arduino Mega)
нога8: PB7(SCK) -> digital_52(SCK Arduino Mega)
нога9: RESET -> digital_53(SS Arduino Mega)
нога20: GND -> GND Arduino Mega
нога 40: Vcc -> 5V от Arduino Mega
Также подключил кварц 16МГц на ноги 18(XTAL2) и 19(XTAL1). Конденсаторы 22пФ также присутствуют как показано на схемке:
Использую версию IDE 1.0.3. Далее опять по рецептам из упомянутых статей. Выбираю из меню Файл-Примеры-ArduinoISP. Далее в меню Cервис выбираю соответствующий COM-порт, плату – atmega8515 и заветное «Записать загрузчик».
После этого светодиод RX на Arduino Mega моргает ровно три раза, и затем IDE выдает ошибку:
avrdude: stk500_getsync(): not in sync: resp=0x00
Ну что-то вроде "фиг-фиг сказали вашей морде!"
Пытался также в файле
C:/ARDUINO/hardware/avrnetio/variants/avrnetio/pins_arduino.h
заменить код на тот, что приводится в этом комментарии (я так понял это и есть исправленное описание пинов именно для ATmega8515 ?!).
Однако после перезапуска IDE возникает аналогичная ошибка.
Уважаемые ARDUIN, MaksMS и все другие камрады, кто в теме! Подскажите, в чем может быть трабл?!
P.S. сорри за столь длинный пост.
К сожалению мне никто так и не отписался по поводу того что рабочий ли загрузчик создает конструктор )).
Прошивать программы конечно можно и без загрузчика..
Что в случае прошивки программы ,что в случае прошивки загрузчика должен быть выбран программатор Arduino as ISP
Сначала надо добится загрузки(найти ошибки) прошивки в микроконтроллер ,а потом уже устанавливать загрузчик- он нужен только для загрузки прошивки через UART переходник.
MaksMS, спасибо, что ответили!
В общем-то проблема благополучно разрешилась. Всего лишь нужно было мне повнимательнее прочитать статью
Превращаем Arduino Duemilanove в Uno
Оказывается я не залил сначала скетч из примера ArduinoISP в мою arduino mega, которую я использовал в качестве программатора.
После заливки скетча ArduinoISP мне удалось прошить загрузчик в atmega8515 без каких-либо проблем.
Потом удалось поблинькать, когда я нашел соответствие к распиновке atmega8515. Также нашлись три ШИМа, упомянутых в даташите. Они даже работают.
Т.е. ваш конструктор создает вполне рабочий загрузчик! Огромный респект вам! Это реально круто!
Чуть позже попробую сконфигурировать загрузчик на другой кварц. 16МГц у меня в дефиците, зато есть свободный 14,318МГц. По результату напишу.
Возник такой еще вопрос. В даташите на atmega8515 не упоминается ничего про аналоговые входа. И в использованном файле с распиновкой также количество указанных выводов выставлено в 0:
Т.е. atmega8515 в принципе не может работать с аналоговым сигналом? Или можно все же как-то использовать аналоговые датчики? Датчик освещенности на основе фоторезистора к примеру.
Повторюсь , загрузчик нужен только если необходима заливка через UART -так работают все платы ардуино,где установлен USB-UART переходник..
Если прошивать микроконтроллер через ардуину загрузчик не нужен !
Кварц другой поставить по идее можно , работать будет ,просто в конфиге boards необходимо поменять на частоту кварца.
На счет аналоговых входов - необходимо просто посмотреть даташит , там все должно быть ясно расписано..
Повторюсь , загрузчик нужен только если необходима заливка через UART -так работают все платы ардуино,где установлен USB-UART переходник..
Если прошивать микроконтроллер через ардуину загрузчик не нужен !
Да, это понятно. Заливать скетчи через другую arduino ничего не мешает, просто мне хотелось заливать именно через UART. Как будет готов переходник попробую.
На счет аналоговых входов - необходимо просто посмотреть даташит , там все должно быть ясно расписано..
ОК, покурю даташит вечерком!
Попробовал создать загрузчик для кварца 14,318 МГц. Все успешно прошилось и работает! Спасибо еще раз за конструктор.
MaksMS, подскажите, а как быть с ATmega8535? Разница между ATmega8515 только в распиновке. Ну еще один ШИМ есть. Можно ли использовать ваш конструктор в этом случае?
По идее должно работать.. НО рекомендую проверить фьюзы - они могут быть другие. Если есть отличия ,то в будущем добавлю и 8535
По идее должно работать.. НО рекомендую проверить фьюзы - они могут быть другие. Если есть отличия ,то в будущем добавлю и 8535
Спасибо! Проверю фьюзы и отпишу по результату.
Здравствуйте. У меня проблема. Так получилось, что неправильно выставил фьюзы, отвечающие за интерфейсы ISP и JTAG в TOOLS\DEVICE PROGRAMMING в ATMEL STIDIO. У меня плата ARDUINO MEGA c ATMEGA2560. Что делать? Ни один из интерфейсов не работает и программировать не получается. ((((((( У меня в наличии программатор JTAGICE3
Здравствуйте. У меня проблема. Так получилось, что неправильно выставил фьюзы, отвечающие за интерфейсы ISP и JTAG в TOOLS\DEVICE PROGRAMMING в ATMEL STIDIO. У меня плата ARDUINO MEGA c ATMEGA2560. Что делать? Ни один из интерфейсов не работает и программировать не получается. ((((((( У меня в наличии программатор JTAGICE3
Как данная тема связана с микроконтроллерами Atmega8515 ?
Учитесь пользоваться гуглом ,почитайте про высоковольтный программатор..
помогите новичку. собрал я из Atmega8515 и PL-2303HX некое подобие клона аруинки. всё прошил, всё работает, диодом поблинькал. но есть одна проблема. никак не могу научить её заливать скетчи без нажатия кнопки reset. в интернетах пишут, что нужно от 2 ноги (DTR) PL-2303HX повесить конденсатор 0.1uF и от +5 резистор 10к на reset. но не помогло. мега перезагружается(это видно по моргающему диоду), но заливка не идёт.
заметил, что автоматически она перезагружается немного раньше, чем надо. если перезагрузить вручную с задержкой примерно 500мс заливка проходит нормально.
я так думаю, где-то в загрузчике надо увеличить время ожидания заливки. там вроде 500 мс стоит. если бы увеличить до 1000 думаю всё пошло бы. вот только пока не разобрался как.
UPD:
Разобрался!
взял исходники с https://github.com/Optiboot/optiboot и дописал для Atmega8515
кому надо вот https://drive.google.com/file/d/0B_ism14iBa7Pb1ZlOTBwLVIzZWc/view?usp=sharing
собирал в Arduino IDE 1.6.3
Здравствуйте.Помогите пожалуста разобратся с листингом соответствия пинов Атмеги 8515 - к пинам ардуины. За ранее спаибо
Задался вопросом и много искал инфы, но пока ничего не получилось. Короче нужно работать с Atmega8515. Писать на Си сложно. Хочу писать прогу в Ide. Кто поможет инфой как залить загрузчик для данной Atmega (или на любой другой AT вообще) и надо ли менять что-то в Ide. Заранее спасибо.