И снова Atmega8 как arduino

fayvlad
Offline
Зарегистрирован: 27.03.2014

Завалялось у меня 4-5 атмег8, было время, программировал их, но теперь стал ленив и перешел на ардуино.

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

В общем,

1 какая минимальная обвязка должна быть? (атмега8, 2 конденсатора, кварц) - как я понимаю этого хватает?

2 как залить правильно бутлоадер 

 2.1 - с помощью usb to rs232

 2.2 - с помощью программатора (mosi miso...)

 2.3 - когда, как и какие фюзы надо выставить, а именно - они сами ставятся при прошивке бутлоадеа или чем-то надо выставлять? если надо выставлять чем-то, то какой прогой. и какие выставлять?

3 с дохлыми атмегами уже попрощатся или попытатся исправить ошибку - подпаять кварц, конденсаторы и как-то лечить?

 

Помогите пожалуйста, не пропадать же добру, возможно какие-то небоьшие проекты заливать буду.

std
Offline
Зарегистрирован: 05.01.2012
##############################################################

atmega8.name=ATmega8 (Arduino NG or older)
atmega8.upload.protocol=arduino
atmega8.upload.maximum_size=7168
atmega8.upload.speed=19200
atmega8.bootloader.low_fuses=0xdf
atmega8.bootloader.high_fuses=0xca
atmega8.bootloader.path=atmega8
atmega8.bootloader.file=ATmegaBOOT-prod-firmware-2009-11-07.hex
atmega8.bootloader.unlock_bits=0x3F
atmega8.bootloader.lock_bits=0x0F
atmega8.build.mcu=atmega8
atmega8.build.f_cpu=16000000L
atmega8.build.core=arduino
atmega8.build.variant=standard

##############################################################

atmega88.name=ATmega8 at 8 MHz (w/o crystal)
 atmega88.bootloader.low_fuses=0xE4
atmega88.bootloader.high_fuses=0xCF
atmega88.bootloader.unlock_bits=0x3F
atmega88.bootloader.lock_bits=0x0F
atmega88.upload.maximum_size=7168 
atmega88.build.mcu=atmega8
atmega88.build.f_cpu=8000000L
atmega88.build.core=arduino:arduino
atmega88.build.variant=standard

любой isp программатор сгодится, USBASP скажем

fayvlad
Offline
Зарегистрирован: 27.03.2014

А этот код куда и чем заливать? Вместо того, что в arduino Ide? И просто как и тогда жать " записать бутлоадер" ?
Извиняюсь за столь много и возможно тупых вопросов, просто после уже 2х положенных атмеги хочется хоть одну оживить

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

fayvlad пишет:
А этот код куда и чем заливать? Вместо того, что в arduino Ide? И просто как и тогда жать " записать бутлоадер" ?
Извиняюсь за столь много и возможно тупых вопросов, просто после уже 2х положенных атмеги хочется хоть одну оживить

Ржу не могу. И это пишет человек, который громко заявил что вот типа шил раньше асм...

fayvlad
Offline
Зарегистрирован: 27.03.2014

Да в том то и дело, что шил через winavr и там надо было только код писать без всяких там)
С фюзами столкнулся, когда убил первую мегу

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

С помощью USB-RS232 конечно не получится ибо этим как раз загрузчик и занимается. А вот программатором легко! Правите файл boards.txt с опубликованым выше куском конфига, идете в Arduino IDE и даете команду - прошить загрузчик прямо оттуда, предварительно выбрав правильно процессор, плату и программатор. Ну или выковырять из папки с Arduino IDE бинарный файл загрузчика и прошить любым программатором, предварительно фьюзы выставив. Фьюзы выше написаны какие должны быть. Profit! 

fayvlad
Offline
Зарегистрирован: 27.03.2014

Походу я опять положил атмегу...

Вчера залил с папки бутлоадер hex файл  в ардуино с помощью eXtreme Burner - AVR,

выставил лоу и хайт фюзы, прошил, после этого уже через программатор к ардуине невозможно обратится...

вставляю rs2323, надеюсь через него залить программу миганием светодиода, после компиляции 2-3 раза мигает слабо светодиод на rs232 и все, ошибка. В атмегу программа не ложится. Что делать? Как-то можно менять фьюзы еще раз, после смены этих?

AVJ
Offline
Зарегистрирован: 11.10.2014

Загляни сюда. Здесь восстанавливают фьюзы.

http://www.getchip.net/posts/059-ispravlyaem-avr-fyuzy-pri-pomoshhi-atme...

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

http://forum.cxem.net/index.php?s=bf53c6fe0c94554e07c74d943cdd1463&showt...

сам пользуюсь. я в смысле про бутлоадер, что в board прописать тоже указано

Coolerr
Offline
Зарегистрирован: 30.06.2014

Объясните мне смысл фразы "из атмеги сделать ардуино".

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

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

мега просто мк пока не сделать заливку скетчей по какому нибудь интерфейсу

как двигатель без шасси

Coolerr
Offline
Зарегистрирован: 30.06.2014

Я в смысле Ардуино как плату с дырочками или чтоб писать в Arduino IDE. Мой процесс разработки девайса на мк(почти любом АВР): концепция>написание кода в ArduinoIDE с отладкой и отлавливанием багов в SIM for Arduino и обкаткой в условияx приближенных к боевым в Proteus>заливка в Уно или Мегу(от запросов проги)отлов багов(если есть) в реальном железе>подбор по перефирии и объему памяти подходящей АВРки(если АВРка меньше по размеру чем исходные, перебивка в скетче пинов под выбраный МК)>заливка скетча с помощью Arduino as ISP в пустой МК>прошивка фьюзов(заводские не трогаем, кроме CKDIV8(если он есть(у разных контроллеров по разному(на меге 8 его нет) и CKSEL(выставляем на внешний кварц) и все. Никаких бутлоадеров и прочей фигни. Имея программатор и ардуина в принципе нафиг не нужна.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ага подход такой зачем тебе ардуина вообще, как и среда

CVAVR и в путь

Coolerr
Offline
Зарегистрирован: 30.06.2014

Лень )))). Писать хренову тучу инициализаций пинов, УАРТОВ, таймеров и т.д. одну перифирию запариваешься писать, когда до кода доходит репа уже не соображает.

З.Ы. в SIM for Arduino можно обкатать код не компилируя с просмотром пошагово как чего происходит, прерывания, вызов функций и т.д. Именно моего кода как я его вижу, а не скачками по адресам, переходам, регистрам.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну тут ведь дело вкуса. не каждому это надо. достаточно например в терминале видеть значения переменных и т.д.

Coolerr
Offline
Зарегистрирован: 30.06.2014

Ну так то да. Но количество перезаписей камня неумолимо тает))))))))))))). К живой дуине нужно цеплять все внешние цепи, датчики исполнительные устройства, а если правила меняются во время полета мяча то это засада. Ну это лирика. Я непойму у ТСа задача какая, 4-5 ардуин наклепать?

Вопрос1:(минимальная обвязка кварц кондеры=Недоардуина)нафига иметь 4-5 мег с залитым бутом если работать с ними можно и без оного(тем более, что у мега8 распиновка один в один с Уной).

Вопрос2: (если нужна полноценная дуина со всеми плюшками, кнопками, диодами прошивающим МК или FTDI ) то 1 вопрос ТСа непонятен.

И вопрос3: (если хочется писать в ArduinoIDE)нафига иметь 4-5 мег с залитым бутом если работать с ними можно и без оного(тем более, что у мега8 распиновка один в один с Уной).

И стеб Пухлявого в силе. Как так писал код шил меги, а про фьюзы незнает(странно). Это как-чинил телевизоры, а как каналы настраивать незнаю.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

не суть. у меня лежит штук 5 меги8 с залитым бутлоадером

кварц кондеры не нужны с минимальной обвязкой

насчет как раньше программировал а теперь не знает про isp это да странно

про фьюзы вопрос наверно привязан с работой идэ

Coolerr
Offline
Зарегистрирован: 30.06.2014

Все вопросы снимаются в случае.

Есть дуина с паленым камнем нужно её оживить. 

Есть задача залить бут. 

Истина где-то рядом (С).

Кстати тоже нужно себе мегу в 328ю запилить бут и пусть валяеся, а то мало ли чего уна здохнет.)))))))

Вопрос к ТСу. Программатор есть USBASP, LPT 5проводов, Громова, любой для АВР?

Kлапаyций 99.99
Offline
Зарегистрирован: 11.10.2014

Coolerr пишет:

Кстати тоже нужно себе мегу в 328ю запилить бут и пусть валяеся, а то мало ли чего уна здохнет.)))))))

Программатор есть USBASP...

продай уну и запили загрузчик в USBasp, что бы ничего в лесу не сдохло.

*закопал денег под вишней, а то мало ли от чего банк сдохнет.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Не возьму никак я в толк : за каким ТС-у шить в 8ку , ПРОГРАММАТОРОМ бут ?

на просто камне и без бута все прекрасно работает.

gppsoft
Offline
Зарегистрирован: 13.10.2014

Делал недавно из Atmega8 мини-дуину для себя. Будет работать без внешнего кварца, на внутреннем(8mhz)

1. Скачать вот тут нужный вам загрузчик(optiboot). Положить нужный вам файл в "C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot". Загрузчик почти не занимает места :)

2. Добавить в boards.txt

##############################################################

atmega8_8.name=ATmega8 Optiboot (8MHz internal OSC)
atmega8_8.upload.protocol=arduino
atmega8_8.upload.maximum_size=7680
atmega8_8.upload.speed=57600
atmega8_8.bootloader.low_fuses=0xa4
atmega8_8.bootloader.high_fuses=0xcc
atmega8_8.bootloader.path=optiboot
atmega8_8.bootloader.file=optiboot_atmega8_8mhz.hex
atmega8_8.bootloader.unlock_bits=0x3F
atmega8_8.bootloader.lock_bits=0x0F
atmega8_8.build.mcu=atmega8
atmega8_8.build.f_cpu=8000000L
atmega8_8.build.core=arduino
atmega8_8.build.variant=standard

##############################################################

atmega328_8.name=ATmega328P Optiboot (8MHz internal OSC)
atmega328_8.upload.protocol=arduino
atmega328_8.upload.maximum_size=32256
atmega328_8.upload.speed=57600
atmega328_8.bootloader.low_fuses=0xe2
atmega328_8.bootloader.high_fuses=0xde
atmega328_8.bootloader.extended_fuses=0x05
atmega328_8.bootloader.path=optiboot
atmega328_8.bootloader.file=optiboot_atmega328_8mhz.hex
atmega328_8.bootloader.unlock_bits=0x3F
atmega328_8.bootloader.lock_bits=0x0F
atmega328_8.build.mcu=atmega328p
atmega328_8.build.f_cpu=8000000L
atmega328_8.build.core=arduino
atmega328_8.build.variant=standard

##############################################################

atmega168_8.name=ATmega168 Optiboot (8MHz internal OSC)
atmega168_8.upload.protocol=arduino
atmega168_8.upload.maximum_size=15872
atmega168_8.upload.speed=57600
atmega168_8.bootloader.low_fuses=0xe2
atmega168_8.bootloader.high_fuses=0xde
atmega168_8.bootloader.extended_fuses=0x04
atmega168_8.bootloader.path=optiboot
atmega168_8.bootloader.file=optiboot_atmega168_8mhz.hex
atmega168_8.bootloader.unlock_bits=0x3F
atmega168_8.bootloader.lock_bits=0x0F
atmega168_8.build.mcu=atmega168
atmega168_8.build.f_cpu=8000000L
atmega168_8.build.core=arduino:arduino
atmega168_8.build.variant=arduino:standard

3. Прошить через USBAsp загрузчик.

Все! Теперь Atmega8 можно программить через UART с помощью Arduino IDE

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

хороший материал

gppsoft
Offline
Зарегистрирован: 13.10.2014

Да, очень удобно. И места намного больше с этим загрузчиком.

fayvlad
Offline
Зарегистрирован: 27.03.2014

Отдалился я од темы. Вся суть была в том, чтобы сделать платку на подобии с 20 поста.

Про программатор были вопросы из-за того, что и до сих пор не получается через spi залить бутлоадер.

У меня получилось бутлоадер зашить через ардуину мини, но атмега вела себя очень плохо, как с кварцем, так и без. передача по порту со скоростью свыше 4600 - выводило крякозябры. А все это для того, чтобы программировать в этой IDE т.к много библиотек и всяких наработок на ардуино, а с остальным некогда заниматся - надо что-то для дома, написал, залил, готовый рабочий прибор.

В общем суть темы в том, чтобы сделать платку (как в посте 20) и шить через uart, т.к. валяются без дела пару плат атмеги8 и не занимать лишнюю ардуинку на мини проект такой как градусник для аквариума с поддержкой заданой температуры.

fayvlad
Offline
Зарегистрирован: 27.03.2014

gppsoft пишет:

Делал недавно из Atmega8 мини-дуину для себя. Будет работать без внешнего кварца, на внутреннем(8mhz)

Автор, можешь скинуть больше фото, не пойму зачем там резисторы и интересна разводка платки.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

извини чувак. решения нет. было бы - не жалко, а так даже не знаю что делать

будь как все. не делай сам, не отбирай кусок хлеба у китайской девочки, купи ардуину на алиэкспрессе

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

fayvlad
Offline
Зарегистрирован: 27.03.2014

jeka_tm пишет:

извини чувак. решения нет. было бы - не жалко, а так даже не знаю что делать

будь как все. не делай сам, не отбирай кусок хлеба у китайской девочки, купи ардуину на алиэкспрессе

Первое не понял, о каком ты решении?

Так то ты прав, 328 атмега почти 2$ стоит на ибее, а ардуинка про мини 2,23$  разница в 30 центов, но если нужно очень маленькое устройство, не выпаевать же с ардуинки атмегу =)

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ты что иронии не понимаешь? в 20 посте, про который ты в пример приводил все что нужно есть. я про первую часть. правда что за резисторы и сам не понял

про вторую ты все понял

fayvlad
Offline
Зарегистрирован: 27.03.2014

Ирония дошла, по свободе еще его код попробую залить, но все же не пойму, почему через SPI не шьет, там же только программатор надо заменить и все, нажать "залить загрузчик" ?

gppsoft
Offline
Зарегистрирован: 13.10.2014

fayvlad пишет:

gppsoft пишет:

Делал недавно из Atmega8 мини-дуину для себя. Будет работать без внешнего кварца, на внутреннем(8mhz)

Автор, можешь скинуть больше фото, не пойму зачем там резисторы и интересна разводка платки.

Там два делителя напряжения для замера двух источников питания. Вообщем не обращай внимание на все кроме МК. Я просто представил фото, чтобы не быть голословным. 

gleco1
Offline
Зарегистрирован: 22.12.2015

Puhlyaviy пишет: "Ржу, не могу..."

Увидел твой тупой сарказм и решил вставить свои 5 копеек. Не надо РЖАТЬ! Лучше бы помог человеку. Твой скрипт не катит.  Запись его в борд.тхт в Arduino IDE V.1.65>, V1.66 не активирует МК ATMega для программирования через USBAVR.  Попробуй сначала сам, а потом посмейся на самим собой!

vk007
Offline
Зарегистрирован: 16.06.2015

gleco1 пишет:

Puhlyaviy пишет: "Ржу, не могу..."

Увидел твой тупой сарказм и решил вставить свои 5 копеек. Не надо РЖАТЬ! Лучше бы помог человеку. Твой скрипт не катит.  Запись его в борд.тхт в Arduino IDE V.1.65>, V1.66 не активирует МК ATMega для программирования через USBAVR.  Попробуй сначала сам, а потом посмейся на самим собой!

Я было подумал, что Пухлявого и след простыл, а нет - призрак его из некропостов неофитам спать не дает. )))

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

вопрос по атмеге 8 и вочдогу в ней...

как удлиннить время работы с 2 секунд до 8 секунд??

использую 8 секунд  в 328,  и все работает как нужно, а вот в атмега8 всего 2 сек? как быть?

 

Green
Offline
Зарегистрирован: 01.10.2015

Офигеть! Считаем 8 / 2 = 4. Не?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Short Circuit пишет:

 в атмега8 всего 2 сек? как быть?

Смирица.  

Ну, или взять с Китаю Atmega88, она 1в1 как 328, кроме памяти. 

Green
Offline
Зарегистрирован: 01.10.2015

Тут всё зависит от схемотехники. Реально определять причину сброса и, если это wdt, считать требуемое кол-во сек. До 8-ми ли, да хоть до 1000! С 88-ми проще, потому как там отдельный вектор, но идея в том же.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

есть у меня 88 мега.. но есть и 8я.. 

мне нужно именно на 8й. неужели никак??

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

причина сброса....  ну это gprs.. и хотя я библиотеки не использую, пишу сак как передавать и когда.. тем не менее, ситуци бывают разные, и с ответной стороны бывает просто мусор сыпится вместо вменяемой инфы. Плюс ко всему, 8 сек - реже wdt_reset(); приходится вписывать. Догадываюсь,  что вопрос можно решить, но как - не знаю куда смотреть. 

Green
Offline
Зарегистрирован: 01.10.2015

Ты шо, дурной, или прикидываешься?
Ну ведь смотришь MCUCSR и видишь WDRF и пляшешь от него. Или нет?

 

bizzon
Offline
Зарегистрирован: 29.03.2016

Наступили на больную мозоль с 88 мегами. Есть их у меня с десяток, будут ещё, но в корпусе самом малипусеньком. Заказал платки универсальные на али. Для моих поделок их хватает. Но вот припаять... будем тренироваться. Выкинуть жалко. Халява.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

не знаю еще..

пример есть? менно для сброса, не для экономии питания.

Green
Offline
Зарегистрирован: 01.10.2015

Не всё так просто. Вернее, просто это если пишешь на асм. Тогда можно делать как я говорил выше. На Си же нужно лезть в стартап секцию, а gcc, в отличие от других, этого не позволяет делать. Поэтому проще в самой программе делать чаще wdt_reset().

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

там не везде можно поставить чаще..

а периодически  детачить вочтог  - тоже не выход.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

жать, что разработчики не предусмотрели универсального варианта например типа 20 сек вочдога.. ведь для многих проектов этого хватило бы, часто достаточно длительной проверки, главное чтобы не зависал процессор навседа.

 

nik182
Offline
Зарегистрирован: 04.05.2015

Чем 20 сек отличаются от 8. В космическом масштабе?

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

а подобным направлением, чтото можно решить? :

#include <avr/wdt.h>   
 
class Reg
{
  public:
    Reg()
    {
      if (MCUSR&(1 << WDRF)) mdrf = 1; else mdrf = 0;
    }
  bool mdrf;
};
Reg reg;
 
void setup() 
{
  Serial.begin(9600);
  Serial.print("WDRF=["); Serial.print(reg.mdrf); Serial.println("]");
  Serial.print("MCUSR=["); Serial.print(MCUSR); Serial.println("]");
  wdt_enable(WDTO_1S); 
}
 
void loop() 
{   
  delay(2000);
  wdt_reset();
}
 
Результат:
WDRF=[0]
MCUSR=[0]
 
Тоесть создать решение, которое будет выполняться до сетапа и работать правильно?
Green
Offline
Зарегистрирован: 01.10.2015

Нет. Стартап инициализирует переменные и стек, со всеми вытекающими.
Как вариант, можно исправить загрузчик, с тем что бы определять причину сброса по WDT и выполнять желаемые действия. Но это как то не очень... Да и загрузчик вообще может отсутствовать. КМК, игра не стоит свеч.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

загрузчик я не использую, программа иначе не помещается.

Выходит процы с короткой собакой - не подходят на длинногиграющий контроль зависания.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Short Circuit пишет:

загрузчик я не использую, программа иначе не помещается.

Выходит процы с короткой собакой - не подходят на длинногиграющий контроль зависания.

Нет. Это всего лишь значит, что артихектура твоего приложения никуда не годица. 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

приложение несовершенно, регулярно делаю улучшения.

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

Например, ожидание коннекта состороны провайдера может и 10- и 20 сек быть.. Нужно ждать ответа после запроса на сессию gprs.

Пределов совершенству - нету. Например ответы от модема обрабатываю так:

//============= анализ ответа и таймер ожидания  ответа 20/04/21 ===========
//int8_t sendATcommand(char* ATcommand, char* expected_answer, unsigned int timeout)
int8_t GetAnsw1(const char*  expected_answer, unsigned int timeout)
{    uint8_t x=0, answer=0; char response[100]; unsigned long previous;  //val = "";
     memset(response, '\0', 100); delay(100); wdt_reset(); // очистка буфера и задержка
     while( gsm.available() > 0)  gsm.read();     // Wait for clean input buffer
   //  gsm.println(ATcommand);                    // Send the AT command 
     previous = millis();                          // this loop waits for the answer
     do{ if (gsm.available() != 0) { response[x] = gsm.read(); x++; wdt_reset(); delay(5);  // если есть данные,записываем и проверяем   
        if (strstr(response, expected_answer) != NULL)  {answer = 1;}              // check if the desired answer is in the response of the module
        } 
         //if (gsm.available() == 0) {Serial.println(response);  }
        wdt_reset(); //Serial.print (F("answer= "));  delay(1000); Serial.println(answer); delay(10);  
       } while((answer == 0) && ((millis() - previous) < timeout));  // Waits for the answer with time out 
        Serial.println(response);  val = (response);
        return answer;
}

Даю АТ команду модему и сразу пишется 

if (GetAnsw1("200 OK", 7000) == 0) {}

Если есть рекомандации что улучшить в этом  куске, и можно ли так собаку мучить как там - выслушаю.