Как прошить загрузчик в Atmega8515 и работать с контроллером через Arduino Ide

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Задался вопросом и много искал инфы, но пока ничего не получилось. Короче нужно работать с Atmega8515. Писать на Си сложно. Хочу писать прогу в Ide. Кто поможет инфой как залить загрузчик для данной Atmega  (или на любой другой AT вообще) и надо ли менять что-то в Ide. Заранее спасибо.

MaksMS
Offline
Зарегистрирован: 11.03.2013

попробовать скомпилировать загрузчик optiboot и добавить секцию в ардуино ,то же самое как м/к атмега8

ARDUIN
Offline
Зарегистрирован: 10.11.2013

А как быть с Arduino.pins??? Ноги у всех контроллеров-то разные... Как тут быть?

MaksMS
Offline
Зарегистрирован: 11.03.2013

да.. возможно тут нужно ядро avrnetio ,которое используется для атемега16 и 32- почитал сейчас даташит

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Optiboot в codevision компилирует с ошибкой.

MaksMS
Offline
Зарегистрирован: 11.03.2013

К сожалению надо вплотную разбиратся с этим м/к на сколько он похож с мегой16 и 32 .Проще купить ардуинку или мегау32 и не мучатся ))

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Я согласен, но походу распиновка разная!!! Питание у 8515 по углам, а у 32 в центре. + нет АЦП

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Да если сложно писать в других средах разработки то лучше вообще не смотреть в сторону других микроконтроллеров.

MaksMS
Offline
Зарегистрирован: 11.03.2013

тут главное не другая распиновка ,а внутреннее строение ... вижу только разницу,что у 8515 на одну инструкцию меньше :) кроме объема флеш..

В общем ..используя avrnetio добавляем блок в board.txt и пробуем стандартые функции работы с портами,типа блинка..

ARDUIN
Offline
Зарегистрирован: 10.11.2013

У 8515 есть порт Е. Как с ним быть... Ладно. Попробую. Спасибо, что обнадёжил.

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Короче ничего не получилось. Ругается за FUSE биты. Банальное переименование 644 в 8515 в файле boards не дало плоды. Короче я так понимаю, что не получится ничего. В тщетных поисках загрузчика скомпилированного под 8515 стоптал пальцы. Скомпилировать optiboot в codevision тоже не получилось - бесконечные ошибки в библиотеках.

ARDUIN
Offline
Зарегистрирован: 10.11.2013

:(

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Чтобы поблинкать надо сначало загрузчик залить, а не получается

Клапауций
Offline
Зарегистрирован: 10.02.2013

ARDUIN пишет:

Чтобы поблинкать надо сначало загрузчик залить, а не получается

для этого загрузчик не нужен

MaksMS
Offline
Зарегистрирован: 11.03.2013

Надо смотреть какие ошибки - думаю там можно под его загрузчик переделать.

Загрузчик не обязателен,если прошивать через программатор или ардуину.

со фьюзами надо внимательнее и не трогать их ,если не знаешь что куда..

ARDUIN
Offline
Зарегистрирован: 10.11.2013

А как скетч из Arduino IDE залить в 8515 без boot loader-a?? Ведь я так понимаю IDE компилирует скетч под определенный тип МК которые имеются в списке плат. Просветите пожалуйста

MaksMS
Offline
Зарегистрирован: 11.03.2013

Выбрать в меню "прошить с помощью программатора".

Как добавить м/к в список, я описывал тут http://homes-smart.ru/index.php/oborudovanie/arduino/dobavlyaem-podderzhku-ne-rodnykh-m-k-v-sredu-arduino-ide . Смотрим пример для ATmega32 ,но фьюзы не пишем,т.к. их  надо сначала расчитать

ARDUIN
Offline
Зарегистрирован: 10.11.2013

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

MaksMS
Offline
Зарегистрирован: 11.03.2013

На эту ошибку можно не обращать внимания,а вот карта пинов нумерации надо аналогично по атмега32 смотреть,но с учетом того,что там другая распиновка

ARDUIN
Offline
Зарегистрирован: 10.11.2013

analog и digital Write не хотят и всё. Надо лезьт в Arduino pins. Ща буду пробовать. Хотя там чёрт ногу сломает

А прописывать ATMEGA8515 вместо 32?

ещё раз спасибо.

MaksMS
Offline
Зарегистрирован: 11.03.2013

ARDUIN пишет:

 

А прописывать ATMEGA8515 вместо 32?

ДА

 

Кстати,карту пинов надо править в папке ядра avrnetio 

ARDUIN
Offline
Зарегистрирован: 10.11.2013

отут? D:\Дуня\arduino-1.0.1\hardware\arduino\varian\avrnetio ???

MaksMS
Offline
Зарегистрирован: 11.03.2013

да ,указали же ядро  avrnetio  в блоке board.txt

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Суть понял, но реализовать тяжеловато. Напишу что вышло.

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Порт А не заработал как дискретный выход. Пины идут как-то не по порядку. В тексте описания ног много условий, с адресацией "сом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

 

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Тихо сам с собой.

Вобщем порты A,B,C,D - работают. ШИМ на порту Д работает, на А - нет. Порт Е пока не работоспособен.

Пока что поменял только значение количества аналоговых входов на ноль. Ту би континуе

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Порт Е заработал и ШИМ на нём. Остался только ШИМ на порте Б. В конце выложу исходник.

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Все порты и шимы заработали. Вешаю на доску почёта 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

 

maksim
Offline
Зарегистрирован: 12.02.2012
MaksMS
Offline
Зарегистрирован: 11.03.2013

А чего за ошибки с компиляцией бутлоадера ? попробовал сейчас - даже не пикнуло и компилируется без проблем.

 

Добавил сюда загрузчик http://homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik

Проверяйте ,особенно фьюзы перепроверить не помешает..

 

ARDUIN
Offline
Зарегистрирован: 10.11.2013

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

MaksMS
Offline
Зарегистрирован: 11.03.2013

Это при попытке прошивки через последовательный порт ?

MaksMS
Offline
Зарегистрирован: 11.03.2013

Больше попыток запуска загрузчика не было ? 

Поправил код загрузчика в конструкторе для адаптации под ATmega8515

msgen1
Offline
Зарегистрирован: 19.11.2013

Arduin, будьте добры кликните мне на почту msgen1@mail.ru. Очень нужна Ваша помощь.

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Спасибо за помощь, но я и без зашрузчика шью его. Меня пока устраивает. Если будет свободное время, которого у меня всё меньше - попробую обязательно.

ARDUIN
Offline
Зарегистрирован: 10.11.2013

И самое главное забыл написать. А кто так по ракишному расставил номера портов на avernetio?... Сплошная путаница! Надо было по кругу от 1 ноги и до самого конца, а так как будто бык насцсал, специальное усложнение. Это наверное какой-то гений решил подкинуть заподлишка))))))

Evgeny
Offline
Зарегистрирован: 04.02.2013

Здравствуйте, уважаемые форумчане!

Заинтересовала данная тема, т.к. недавно мне попались несколько 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-файла с указанными выше параметрами):

a8515_16MHz.name=atmega8515 (16 MHz)
a8515_16MHz.upload.protocol=arduino
a8515_16MHz.upload.maximum_size=7680
a8515_16MHz.upload.speed=115200
a8515_16MHz.bootloader.low_fuses=0xbf
a8515_16MHz.bootloader.high_fuses=0xdc
a8515_16MHz.bootloader.path=optiboot
a8515_16MHz.bootloader.file=a8515_16MHz_bf_dc.hex
a8515_16MHz.build.mcu=atmega8515
a8515_16MHz.build.f_cpu=16000000L
a8515_16MHz.build.core=avrnetio
a8515_16MHz.build.variant=avrnetio

hex-файл загрузчика поместил в папку C:/ARDUINO/hardware/avrnetio/bootloaders/optiboot

Супер-программатора специального у меня нет, поэтому решил попробовать использовать Arduino Mega для загрузки загрузчика.

Подключил ATmega8515 Arduino Mega следующим образом. Для наглядности также приведу распиновку ATmega8515 из даташита:

Распиновка 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пФ также присутствуют как показано на схемке:

Внешний кварц ATmega8515

Использую версию 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. сорри за столь длинный пост.

MaksMS
Offline
Зарегистрирован: 11.03.2013

К сожалению мне никто так и не отписался по поводу того что рабочий ли загрузчик создает конструктор )). 

Прошивать программы конечно можно и без загрузчика..

Что в случае прошивки программы ,что в случае прошивки загрузчика должен быть выбран программатор Arduino as ISP

Сначала надо добится загрузки(найти ошибки) прошивки в микроконтроллер ,а потом уже устанавливать загрузчик- он нужен только для загрузки прошивки через UART переходник.

Evgeny
Offline
Зарегистрирован: 04.02.2013

MaksMS, спасибо, что ответили!

В общем-то проблема благополучно разрешилась. Всего лишь нужно было мне повнимательнее прочитать статью

Превращаем Arduino Duemilanove в Uno

Оказывается я не залил сначала скетч из примера ArduinoISP в мою arduino mega, которую я использовал в качестве программатора.

После заливки скетча ArduinoISP мне удалось прошить загрузчик в atmega8515 без каких-либо проблем.

Потом удалось поблинькать, когда я нашел соответствие к распиновке atmega8515. Также нашлись три ШИМа, упомянутых в даташите. Они даже работают.

Т.е. ваш конструктор создает вполне рабочий загрузчик! Огромный респект вам! Это реально круто!

Чуть позже попробую сконфигурировать загрузчик на другой кварц. 16МГц у меня в дефиците, зато есть свободный 14,318МГц. По результату напишу.

Возник такой еще вопрос. В даташите на atmega8515 не упоминается ничего про аналоговые входа. И в использованном файле с распиновкой также количество указанных выводов выставлено в 0:

NUM_ANALOG_INPUTS           0

Т.е. atmega8515 в принципе не может работать с аналоговым сигналом? Или можно все же как-то использовать аналоговые датчики? Датчик освещенности на основе фоторезистора к примеру.

MaksMS
Offline
Зарегистрирован: 11.03.2013

Повторюсь , загрузчик нужен только если необходима заливка через UART -так работают все платы ардуино,где установлен USB-UART переходник..

Если прошивать микроконтроллер через ардуину загрузчик не нужен !

Кварц другой поставить по идее можно , работать будет ,просто в  конфиге boards необходимо поменять на частоту кварца.

На счет аналоговых входов - необходимо просто посмотреть  даташит , там все должно быть ясно расписано..

Evgeny
Offline
Зарегистрирован: 04.02.2013

MaksMS пишет:

Повторюсь , загрузчик нужен только если необходима заливка через UART -так работают все платы ардуино,где установлен USB-UART переходник..

Если прошивать микроконтроллер через ардуину загрузчик не нужен !

Да, это понятно. Заливать скетчи через другую arduino ничего не мешает, просто мне хотелось заливать именно через UART. Как будет готов переходник попробую.

MaksMS пишет:

На счет аналоговых входов - необходимо просто посмотреть  даташит , там все должно быть ясно расписано..

ОК, покурю даташит вечерком!

Evgeny
Offline
Зарегистрирован: 04.02.2013

Попробовал создать загрузчик для кварца 14,318 МГц. Все успешно прошилось и работает! Спасибо еще раз за конструктор.

MaksMS, подскажите, а как быть с ATmega8535? Разница между ATmega8515 только в распиновке. Ну еще один ШИМ есть. Можно ли использовать ваш конструктор в этом случае?

MaksMS
Offline
Зарегистрирован: 11.03.2013

По идее должно работать.. НО рекомендую проверить фьюзы - они могут быть другие. Если есть отличия ,то в будущем добавлю и 8535

Evgeny
Offline
Зарегистрирован: 04.02.2013

MaksMS пишет:

По идее должно работать.. НО рекомендую проверить фьюзы - они могут быть другие. Если есть отличия ,то в будущем добавлю и 8535

Спасибо! Проверю фьюзы и отпишу по результату.

nov
Offline
Зарегистрирован: 01.08.2014

Здравствуйте. У меня проблема. Так получилось, что неправильно выставил фьюзы, отвечающие за интерфейсы ISP и JTAG в TOOLS\DEVICE PROGRAMMING в ATMEL STIDIO. У меня плата ARDUINO MEGA c ATMEGA2560. Что делать? Ни один из интерфейсов не работает и программировать не получается. ((((((( У меня в наличии программатор JTAGICE3

MaksMS
Offline
Зарегистрирован: 11.03.2013

nov пишет:

Здравствуйте. У меня проблема. Так получилось, что неправильно выставил фьюзы, отвечающие за интерфейсы ISP и JTAG в TOOLS\DEVICE PROGRAMMING в ATMEL STIDIO. У меня плата ARDUINO MEGA c ATMEGA2560. Что делать? Ни один из интерфейсов не работает и программировать не получается. ((((((( У меня в наличии программатор JTAGICE3

Как данная тема связана с микроконтроллерами Atmega8515 ? 

Учитесь пользоваться гуглом ,почитайте про высоковольтный программатор..

bashmark
Offline
Зарегистрирован: 03.06.2015

помогите новичку. собрал я из 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

kinkk
Offline
Зарегистрирован: 04.11.2016

Здравствуйте.Помогите пожалуста разобратся с листингом соответствия пинов Атмеги 8515 - к пинам ардуины. За ранее спаибо

husan_arduino
Offline
Зарегистрирован: 20.02.2017

ARDUIN пишет:

Задался вопросом и много искал инфы, но пока ничего не получилось. Короче нужно работать с Atmega8515. Писать на Си сложно. Хочу писать прогу в Ide. Кто поможет инфой как залить загрузчик для данной Atmega  (или на любой другой AT вообще) и надо ли менять что-то в Ide. Заранее спасибо.

fuck