Спящий режим wachdock проблемы с Pro mini
- Войдите на сайт для отправки комментариев
Пт, 06/03/2015 - 12:58
Добрый день уважаемые знатоки. Столкнулся с проблемой, ардуино про мини, отказывается работать с wachdock. Есть метеостанция и датчик температуры на окне, темпереатура отсылается по nrf. На Uno код работает, а на Pro mini нет.
Симптомы следующие: через пару минут после включения, Pro mini один раз отсылает значения температуры, затем начинает тускло светиться светодиод на 13 пине, еще через некоторое время он просто начинает моргать. Думаю, что она начинает постоянно перезагружаться.
Подскажите в чем проблема.
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" #include <avr/sleep.h> #include <avr/wdt.h> #define power_nrf 4 //питание nrf #define power_tmp 9 //питание tmp #define analogPin 6 //tmp36 термометр int count; //переменная для счётчика циклов volatile boolean wdt_tripped=1; int tmp36 = 0; const uint64_t pipe = 0xF0F1F2F3F4LL; // идентификатор передачи, "труба" RF24 radio(7, 10); // CE, CSN } int t; //режим сна для МК void system_sleep(byte t) { delay(2); // Wait for serial traffic _SFR_BYTE(ADCSRA) &= ~_BV(ADEN); // Switch ADC off set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); sleep_mode(); // System sleeps here sleep_disable(); _SFR_BYTE(ADCSRA) |= _BV(ADEN); // Switch ADC on } void wdt_interrupt_mode() { wdt_reset(); WDTCSR |= _BV(WDIE); // Восстановить режиме прерывания WDT } ISR(WDT_vect) { wdt_tripped=1; // set global volatile variable } void setup() { Serial.begin(9600); wdt_disable(); wdt_reset(); wdt_enable(WDTO_8S); //пробуждение каждые 8 сек count = 0; pinMode(power_nrf, OUTPUT); //Пин на который подключено питание радио модуля digitalWrite(power_nrf,HIGH); delay(1000); // Подождать первой конверсии } void loop(void) { wdt_interrupt_mode(); if (wdt_tripped) { count++; wdt_tripped = 0; if (count == 3) //тут можно увеличить интервал времени между отправками данных по RF24 за счёт счётчика циклов 8*3 { count = 0; //Читаем температуру digitalWrite(power_tmp, HIGH); delay(500); tmp36 = analogRead(analogPin); // считываем значение Serial.println(tmp36); digitalWrite(power_tmp, LOW); // включаем радио digitalWrite(power_nrf,HIGH); //подаём питание на NRF24, затем готовим канал radio.begin(); delay(2); radio.setChannel(9); // канал (0-127) // скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS // RF24_250KBPS на nRF24L01 (без +) неработает. // меньше скорость, выше чувствительность приемника. radio.setDataRate(RF24_1MBPS); radio.setPALevel(RF24_PA_HIGH); // мощьность передатчика, RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM, radio.openWritingPipe(pipe); // открываем трубу на передачу. radio.powerUp(); radio.write(&tmp36, sizeof(tmp36)); delay (20); radio.powerDown(); // гасим штатно RF24 digitalWrite(power_nrf,LOW); // отключаем питание RF24 } } system_sleep(WDTO_8S); //МК засыпает }
читать про "Crazy Led"
Это еще что?
Это бутлодер такой. Прошейте оптибут....
http://habrahabr.ru/post/189744/
Спасибою Проблема именно в этом. Пытаюсь разобраться, но пока не получилось.
Делайте так.
1. Цепляйте USBASP или другой совместимый программатор.
2. Скачивайте самую свежую бету IDE.
3. В IDE выбираете плату Arduino Mini, именно эту, а не Pro_Mini, это важно.
4. Даем команду Burn Bootloader
5. Profit!!!
Понять что прошился оптибут можно по отсутствию мигания светодиода на 13 пине. В штатном загрузчике сразу и blink шьется. По статье с Хабра у меня тоже не взлетело, как не старался.
Ну.... так вы оптибут и прошили......
##############################################################
mini328.name=Arduino Mini w/ ATmega328
mini328.upload.protocol=arduino
mini328.upload.maximum_size=28672
mini328.upload.speed=115200
mini328.bootloader.low_fuses=0xff
mini328.bootloader.high_fuses=0xd8
mini328.bootloader.extended_fuses=0x05
mini328.bootloader.path=optiboot
mini328.bootloader.file=optiboot_atmega328-Mini.hex
mini328.bootloader.unlock_bits=0x3F
mini328.bootloader.lock_bits=0x0F
mini328.build.mcu=atmega328p
mini328.build.f_cpu=16000000L
mini328.build.core=arduino
mini328.build.variant=eightanaloginputs
##############################################################
А я как сказал? Говорю же, по статье с Хабра не шьется. Что я только не менял в бордсе. А тут и не надо ничего, выбрать другую плату и сразу шить. Сегодня опять так делал с новыми ПроМини. В большом инкубаторе вачдог пожалуй таки нужен.
В большом инкубаторе вачдог пожалуй таки нужен.
Для большого наверно все таки хардовый с оповещением или дубляжом управления. Потери и затраты несопоставимы.
Добрый день, наверно, тему надо перенести в другой раздел. Так пока ничего не получилось, плата pro mini 3.3v.
Пытался прошить через УНО:
1. соединил 6 проводов одон к одному(11,12,13,3.3В,gnd.reset). Может надо MISO - MOSI? Еще вопрос на счет 3.3v брать или 5в. Может уровни не соответствуют?
2. Залил в Уно пример ISP
3. Добавил в папку с бутлодером optiboot_atmega328_pro_8MHz, дописал в boards.txt, скорость поставил 19200.
4. Выбираю программатор arduino as ISP, плата новая Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328
5. Записать загрузчик.
Может что-то делаю не так, какую нужно выставлять скорость.
1. MOSI MISO SCK RESET +5V GND Всё по сигналам Думаю лучше 5 Вольт использовать. Подавать с 5 Вольт УНО на 3.3 Вольта вашей мини. Отключив критичные к 3.3 вольтам компоненты. Или даже всё лишнее. Уровни соответствуют по любому, но так "кошернее".
2. Попробуйте включить подробный отчёт????? Может что будет видно в нём. Никогда не шил так, использую USBASP, но разницы никакой.
А так вроде всё правильно.
Ваша платка? http://hardware-libre.fr/2013/11/en-arduino-atmega-isp-programming/
http://arduino.cc/en/Hacking/MiniBootloader
Прошил через LPT в Pro mini 3.3v, хекс как написано выше optiboot_atmega328-Mini (скачал оптибут 3.0, из папки с ардуиной не работает). Пока wachdock работает.
Можете объяснить, что означают эти строки:
mini328.bootloader.low_fuses=0xff
mini328.bootloader.high_fuses=0xd8
mini328.bootloader.extended_fuses=0x05
Во первых лучше не трогать !
Во вторых зайдите сюда: http://www.engbedded.com/fusecalc/ выберите процессор и введите внизу в соответствующие клеточки ваши значения. Апплай. А потом глядите что они делают выше.
Кстати я нашёл вроде поновее https://code.google.com/p/optiboot/downloads/list
Глянул ваши фьюзы- подозрительно большой размер загрузчика....
Вот что оптибут из этого архива даёт:
##############################################################
pro328o.name=[Optiboot] Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328
pro328o.upload.protocol=arduino
pro328o.upload.maximum_size=32256
pro328o.upload.speed=115200
pro328o.bootloader.low_fuses=0xff
pro328o.bootloader.high_fuses=0xdc
pro328o.bootloader.extended_fuses=0x05
pro328o.bootloader.path=optiboot
pro328o.bootloader.file=optiboot_atmega328_pro_8MHz.hex
pro328o.bootloader.unlock_bits=0x3F
pro328o.bootloader.lock_bits=0x0F
pro328o.build.mcu=atmega328p
pro328o.build.f_cpu=8000000L
pro328o.build.core=arduino:arduino
pro328o.build.variant=arduino:standard
##############################################################
Пробовал хекс из этого архива (ошибся про оптибут 3.0). Получается что нужно использовать optiboot_atmega328_pro_8MHz.hex или все таки optiboot_atmega328-Mini.hex.
Закрываем ИДЕ.
Вводим в boards.txt ( не заменяем, а добавляем через редактор то что лежит в архиве в boards.txt, не перепутайте.)
Копируем хексы в папочку оптибут D:\AVR\arduino\hardware\arduino\bootloaders\optiboot
Находим плату [Optiboot] Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328 и прошиваем загрузчик
За вас всё сделают.....
Я записываю бутлодер optiboot_atmega328_pro_8MHz через lpt программатор, и через другую прогу.
Проблема в том, что после прошивки среда разработки ардуино перестает программировать мою плату.
Настройки в boards.txt ставлю, как положено.
##############################################################
pro328o.name=[Optiboot] Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328
pro328o.upload.protocol=arduino
pro328o.upload.maximum_size=32256
pro328o.upload.speed=115200
pro328o.bootloader.low_fuses=0xff
pro328o.bootloader.high_fuses=0xdc
pro328o.bootloader.extended_fuses=0x05
pro328o.bootloader.path=optiboot
pro328o.bootloader.file=optiboot_atmega328_pro_8MHz.hex
pro328o.bootloader.unlock_bits=0x3F
pro328o.bootloader.lock_bits=0x0F
pro328o.build.mcu=atmega328p
pro328o.build.f_cpu=8000000L
pro328o.build.core=arduino:arduino
pro328o.build.variant=arduino:standard
##############################################################
А "ресет" пробовали проверять-дёргать?
Загрузите пример ACSII table через вашу дапу на 115200 и гляньте : сериал работает?
Или считайте флеш и гляньте в самом конце- там должно быть что-то отчичное от FF.
Если можете СЧИТАТЬ фьюзы- расшифруйте их.
Может быть ваш программатор фьюзы не записал?
Гляньте его коммандную строку- если он её выводит при программировании
Главные- BOOTRST=0(птичка), BOOTSZ0=0 ( птичка) и BOOTSZ1=1 ( нет птички)
Ну и CKSEL проверить на 8 мгц
Калькулятор здесь http://www.engbedded.com/fusecalc/
Только не записывайте не проверив 10 раз.
И фьюзы RSTDISBL=1 ( нет птички) и SPIEN=0 ( птичка) не трогайте!
Помохоже нашел проблему, глючил переходник RS232. trembo большое спасибо за помощь.
USBASP возьмите. Стоящая вещичка. И переходник на 6 пинов.