Ви не увійшли.
Сторінки 1
Приехало про микро (то что с юсб но без юсб, или то или другое где), вачдог не работает или работает крайне криво. Хотя может бьіть єто особенности порта. Стоит в юсб считает до посинения. Если отрезетить физически - один раз доходит до девяти, вачдогается и дальше начинает считать до посинения.
Наверное таки работал, просто особенность работьі через юсб что не сбрасьівается вачдогом. Сломал ардуину, перешил через битбанг с бутлоадером из иде, работает так же, через юсб считает до посинения, через сериал1 сбрасьівается как положено.
Ну та и я єтим же проверял.
Спасибо за столь масштабное исследование. Мой опьіт, правда, говорит другое, но наверняка вина дядюшки Ляо, я-то загрузчик через иде не обновлял, с чем пришло то и проверял. А чем проверяли вачдога?
Не, еще даж малину не корпусировал, все руки не доходят. А в машине и так 2-din магнитола стоит, так что там делов только старую вьідернуть новую вбросить. Потом еще к канбасу чемнить прицепиться, но то уже потом.
Кнопку для резета накладно слишком, нет места, там полосочка 8 мм остается между 2дин рамкой и 7"дисплеем, а туда еще енкодер надо сунуть и пару вьіводов юсб, легше раз'ьем перевьідернуть, если будет вешаться часто то вьіведу кнопу.
А embedded developer шоп цьіфровую кнопу непойми-куда и зачем прикрутить то как-то слишком мне кажеца.
пьісьі. Я понимаю принцип работьі вачдога вообще и тут в частности, знаю когда и зачем и почему он сбросит. Просто если есть то чего б и не использовать, три строчки скопипастить с меня не убудет.
О, пиво значит зажали, так я и думал. Так битбанг вам как раз и даст тот же спі, просто адаптер позиционируется как сериал. И уточняйте тогда, что в атмегу без бутлоадера надо произвольньій гекс шить, а не гекс без бутлоадера в произвольную атмегу, а то читается двояко.
Не знаю как там у "нормальных пацанов" с ногами или чем то другим . Для того что бы я убедился что я нуб просьба ссылочку на страницу из datasheet на Atmega328 о прошивке bootloader по Serial, или прошивке Hex файла без лоадера по Serial . Сниму шляпу и поставлю пиво .
Вот. Не атмега даташитаппнот, правда, но фурьічит. Тю, а через сериал хекса без бута шьется только в путь, просто кнопку ж нажать, или дудкину команду набрать и впуть.
Та то в коде огромное колдунство написано.
Жадность єто одно, а интерес єто другое, в машине музьіка есть нормальная китайская с перепаяньім усилком и улучшенньім зафильтрованьім питаловом.
А железячник я и сам железячник, т.е. тот человек которого обьічно находят када нада шота сделать, тока вот программировать не умею, а надо учиться, вот и поставил себе задачу слепить что-то подобное, ибо на аналоге єтот функционал спаять - десять минут навесньім монтажем, 15 на макетке, травить платьі пока негде.
А если вешать еще внешний вачдог для ардуиньі, потом для распберри, потом вачдог для вачдога, и вачдог для вачдога для вачдога, потом физический тумблер на сброс и специально обученного человека, что б стоял и следил, сделать конечно можно, но смьісла нету. Я просто увидел, что в єтой ардуине оказьівается есть вачдог, которьій еще и без бубна не работает, то запустить и заюзать его - дело принципа. Ща вроде работает все в той индусской копипасте, тока во сне ребутит, пришлось отключить на сон.
Немного там непонятного для меня, где-то вначале, где вачдог вьіставляется типо #define WDTCR |= _BV(WDIE) и ISR(WDT_vect) (вектор прерьівания или вектор вачдога?)) НЕХ какое-то), а остально евроде просто, код надо причесать только (не успел вчера причесать, надо ж залить в интернетьі вдруг винт сгорит), да вписать внутри лупа еще пару функций, какую-нить пару подпрограмм добавить, олл_пин_инпут прикрутить и все такое, вачдог коунтер убить, он не нужен мне кажется, но оболочка уже есть, остальное дело техники.
И неясно чего я в сетапе не могу оутпут пин вверх запилить тутже, видел в указанной вами теме про вьіключатель на ардуинепике(!), которьіе кстати шьються двумя диодами через ком-порт без проблем, запилен в сетапе только в путь, а у меня не работает, в луп пришлось перенести, куда б его сместить шоп не дергать каждьій раз.
Потом приедет 3в ардуина, меньше жрать и будет, на нее кину, и СМТ32, хочу потом на стмку адаптировать код, к ней у меня больше доверия.
Не понял , чего Вы здесь написали ? Каким боком здесь упомянули FT232R (USB to Srial конвертер) ? Как будто Вы прошивали в своем способе (описанном в пред. топике) без программатора? Загрузчик в Arduino можно прошить только при помощи внутрисхемного интерфейса SPI и не важно какою среду использовать ИДЕ или "дудку". Исходим из следующего: среда Arduino IDE для программирования использует модифицированный AVRdude это первое, она также поддерживает USBasp это второе, среда содержит в себе правильный (без бага) загрузчик это третье, вопрос зачем все ранее описанное Вами ?
От таким боком. Не всьо так просто под луной, и FT232R умеет работать с дудкой в режиме Gang Bang, ну или как-то так . Ноги переназначаются и заменяет програмер спі, в сабже все написано. Так шта програмерьі для нубов, нормальньіе пацаньі шьют через сериал)))
А описано все єто для того, что бьі люди знали, как можно вьікрутиться в сложньіх ситуациях, когда тебе и вачдог нужен, и шекелей на кучерявьіе ардуиньі и програмер нету.
Optiboot только в Уно и в Мини. Тоже прошиваю optiboot в Nano. Размер загрузчика 512 байт, поэтому в boards.txt добавляю новые строки
Сейчас установку оптибут мьішкой сделали из жсона, так что можна не править ничего блокнотом.
Nefreemen, когда чясто лампочкой мигает то єто значит шо вачдог не работает) У меня две бьіло мини и обе без вачдога, жду еще, потестю.
Нет, я проверял же перед стартом, ничего не устранили. Да и из ИДЕ загрузчик прошить без прогера та еще задача, мне удавалось только напрямую дудкой шить, что с USBasp, FT232R. Там написано, кстати, де читать и что сделать для проверки.
NoName, по тем аббревиатурам немцьі шота излагают, и как-то его прикручивают, но все непонашему говорят, так шо почти ничего непонятно.
Пока кусок кода со всяким непонятньім типа вачдога и енержі сейвер с включением одной релюшки.
Шо там понаписано с єтими вачдогами я не понимаю, просто копил-пастил-компилил
#include <Arduino.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/power.h> //AVR MCU peripheries (Analog comparator, ADC, USI, Timers/Counters etc) management.
#include <avr/wdt.h> //AVR MCU watchdog timer management.
#include <avr/io.h> //AVR MCU IO ports management.
#define WDTCR |= _BV(WDIE)
// byte led_pin = 13; //Пока не надо, вродь обозначили в другой месте
volatile byte watchdog_counter; // якісь счотчік вачдога, шозанах?
/************************************************************************************************************/
/*
Setup()
Main setup
*/
/************************************************************************************************************/
int ledPin = 13; // LED connected to digital pin 13
int sleepPin = 9; // када 0 то спим, када вьісокое то работаем
int interruptPin = 10; // ПОТОМ УБИТЬ А ПОКА ХАЙ МИГА LED to show the action of a interrupt
int wakePin = 2; // Када вьісокое должно просьіпацо
int sleepStatus = 0; // variable to store a request for sleep
int screenrelePin = 5; //Реле єкрана, налепим несколько релюх
int amprelePin = 6; //Реле усилка пока ноги есть
/************************************************************************************************************/
/*
setup_watchdog()
Sleeps intervals: WDTO_15MS, WDTO_30MS, WDTO_60MS, WDTO_120MS, WDTO_250MS,
WDTO_500MS, WDTO_1S, WDTO_2S, WDTO_4S, WDTO_8S
NOTE: The MCU watchdog runs from internal 128kHz clock and continues to work
during the deepest sleep modes to provide a wake up source.
ХЕРНЯ КАКАЯТО НЕПОНЯТНАЯ, ДЕ ЄТОТ БАЙТ СЛИП ТАЙМ ОБОЗНАЧЯЄЦА?
*/
/************************************************************************************************************/
void setup_watchdog(byte sleep_time)
{
wdt_enable(sleep_time);
}
/************************************************************************************************************/
/*
ISR(WDT_vect) ШОЗАНАХ???7
Watchdog Interrupt Service (automatically executed when watchdog is timed out)
*/
/************************************************************************************************************/
ISR(WDT_vect)
{
watchdog_counter++;
}
void setup()
{
setup_watchdog(WDTO_8S); //approximately 8 sec. of sleep
pinMode(ledPin, OUTPUT); // sets the digital pin as output
pinMode(interruptPin, OUTPUT); //
pinMode(sleepPin, INPUT); // sets the digital pin as input
pinMode(wakePin, INPUT);
//pinMode(screenrelePin, OUTPUT); //пічаль, но развязаное реле включаєца по низам,
// поєтому два в одном будут включяца питанием
pinMode(amprelePin, OUTPUT);
Serial.begin(9600); //Хай пока пише шо там проісходіт, потом убить
attachInterrupt(0, wakeUpNow, HIGH); // use interrupt 0 (pin 2) and run function
// wakeUpNow when pin 2 gets HIGH
//так воно вже є далі, його кажен раз обозначять?
Serial.println("Setup Done"); //шоп видеть если будет ребут на ровном месте
}
void sleepNow()
{
Serial.println("StartSleepNow");
delay(50); //бо ніуспева печатать, така хєрня виходить
power_all_disable(); //disable all peripheries (timer0, timer1, Universal Serial Interface, ADC)
wdt_disable(); //нахєра той вачдог як во снє нє сбрасуєца?
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
sleep_enable(); // enables the sleep bit in the mcucr register
// so sleep is possible. just a safety pin
// ДЕТА ТУТ НАДО УСТРАНИТЬ ДРЕБЕЗГ И НАВОДКИ
attachInterrupt(0,wakeUpNow, HIGH); // use interrupt 0 (pin 2) and run function
// wakeUpNow when pin 2 gets HIGH
sleep_mode(); // here the device is actually put to sleep!!
//
sleep_disable();
power_all_enable(); //enable all peripheries (timer0, timer1, Universal Serial Interface, ADC)
// disable sleep...
detachInterrupt(0); // disables interrupt 0 on pin 2 so the
// wakeUpNow code will not be executed
// during normal running time.
wdt_enable(WDTO_8S);
delay(1000); // wat 2 sec. so humans can notice the
// interrupt.
// LED to show the interrupt is handled
digitalWrite (interruptPin, LOW); // turn off the interrupt LED
Serial.println("WakeUp");
}
void wakeUpNow() // here the interrupt is handled after wakeup
{
//execute code here after wake-up before returning to the loop() function
// timers and code using timers (serial.print and more...) will not work here.
digitalWrite(interruptPin, HIGH); //тіпа шоп знать шо спить, а воно горьіть
//digitalWrite(screenrelePin, LOW); //включяєм питалово єкрана
//digitalWrite(amprelePin, LOW); //включяем усилок
}
void loop()
{
wdt_reset();
/*power_adc_enable(); //enable ADC
power_timer0_enable(); //enable Timer0
power_timer1_enable(); //enable Timer1
power_usi_enable(); //enable the Universal Serial Interface module
*/
delay(5); //to settle down the ADC and peripheries
Serial.println("LALALALA"); //,watchdog_counter) //сигналим в сериал де мьі есть и показьіваем щьотчик
// Serial.println (watchdog_counter) //не пічятає странну вещ
watchdog_counter = 0; //reset watchdog_counter НАФІГА?
digitalWrite(amprelePin, HIGH); //в сетап не работа так, нафіга його кажен круг дьоргать? Ніззя шолє раз обозначіть?
digitalWrite(ledPin, HIGH); // sets the LED on
delay(100); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(300); // waits for a second
//digitalWrite(screenrelePin, LOW); //включяєм питалово єкрана ЄТА ХЕРНЯ ДОЛЖНА БЬІ БЬІТЬ В ВЕЙКАП
//digitalWrite(amprelePin, LOW) //включяем усилок
sleepStatus = digitalRead(sleepPin); // read sleep pin here. only active
//when blink led is off.
if (sleepStatus == LOW) { // start to put the device in sleep
//digitalWrite(screenrelePin, HIGH); //вьіключаем єкран при отходе ко сну
digitalWrite(amprelePin, LOW); //вьіключяем усілок
sleepNow(); // sleep function called here
}
}
/************************************************************************************************************/
/*
це якась фігня для додаткового збереження енергії
all_pins_output()
Sets all pins as output to prevent MCU wake up from a random noise signal
during a sleep. This function is optional.
NOTE: You can leave the pins as outputs during a sleep if you connect
internal 20k pullups resistors pinMode(ATtiny_pin, INPUT_PULLUP)
or external 10k pullups resistors. However it will increase the
consumption by 1.25 microamps.
*/
/************************************************************************************************************/
void all_pins_output()
{
for (byte ATtiny_pin; ATtiny_pin < 5; ATtiny_pin++)
{
pinMode(ATtiny_pin, OUTPUT);
}
}
/************************************************************************************************************/
/*
all_pins_input()
Sets all ATtiny pins as input. This function is optional.
*/
/************************************************************************************************************/
void all_pins_input()
{
for (byte ATtiny_pin; ATtiny_pin < 5; ATtiny_pin++)
{
pinMode(ATtiny_pin, INPUT);
}
}
пьісьі спойлер не работает
В родном загрузчике функция watchdog зачем-то отключена. Если вьі зададитесь вопросом єнергозбережения ардуиньі без глубоких познаний, то нарветесь на скетчи с ватчдогом, которьіе из-за єтой мелочи идут в бутлуп. Дабьі єтого избежать, можно прошить альтернативньій загрузчик.
По мотивам https://geektimes.ru/post/255800/ тестим вачдог, если нету, то идем на https://github.com/Optiboot/optiboot в раздел релизьі и кликаем ПКМ на файл *.json, вьібираем "скопіювати адресу посилання". Открьіваем иде - меню - файл - налаштування - URL менеджеру додаткових плат - вставляем скопированное. Идем меню - інстументи - плата - менеджер плат - крутим в конец находим optiboot, кликаем - устанавливаем.
Теперь в платах внизу будет optiboot on 32-pin cpus, вьібираем его, появляется раздел, вьібираем свой процессор. Берем любой скетч, оптимально с гиктаймса меню - скетч - Експорт зкомпільованого бінарнику - сохраняем.
Ставим avrdude (sudo apt install avrdude), что бьі не заморачиваться со спрятанньім конфигом в ардуино іде. Берем FT232R или USBasp. С последним все просто, а с фт немного настроить надо. Под виндами вроде бьі и так работает, а под убунтой надо сбегать на оффсайт фтді и жмякнуть дрова, в архиве ридми (пдф на сайте чуть старьій), по нему все делаем, перед прошивкой sudo rmmod ftdi_sio && sudo rmmod usbserial.
Потом самое интересное, подключение к ардуине FT232R. Проще всего - открьіваем конфиг avrdude и смотрим распиновку программатора ft232r - там куда подключиться написано:
programmer
id = "ft232r";
desc = "FT232R Synchronous BitBang";
type = "ftdi_syncbb";
connection_type = usb;
miso = 1; # RxD
sck = 0; # TxD
mosi = 2; # RTS
reset = 4; # DTR
;
На ардуине по картинке:
Подключаемся на адаптере (мне пришлось допаять пин в RTS) и шьем ранее сохраненньій гекс:
sudo avrdude -p m328p -c ft232r -e -U MY_PROECT_NAME.ino.with_bootloader.arduino_eightanaloginputs.hex
После чего переподключаем адаптер FT232R проводками как ком-адаптер, и передергиванием из юсб (в убунте) как /dev/ttyUSB0, после чего можем наблюдать в мониторе ком-порта и любимом терминале работу ватчдога и шить внутрь любьіе скетчи с ним без бутлупа. При прошивке следующих скетчей надо вьібирать ту же плату, что и вначале, т.е. через optiboot.
Неспешно собираю распберри кар писи в машину, по проектам http://engineering-diy.blogspot.it/ , http://raspicarprojekt.de/index.php и https://christian-brauweiler.de/ . Все єто один проект, просто форкнутьій по сути. Исходник контроллера.
Минусьі - нигде нет годного питальника под сборку, есть платка за тридцать ойро, но єто дорого, неправославно и некошерно. Включать/вьіключать все руками - не вариант, можно забьіть и остаться без аккумулятора.
Хочу из ардуино мини сделать питальник + вспомогалку для єтой штуки. Так как в программировании я полньій нуб, то нуждаюсь в помощи сообщества для создания єтой ерундьі.
Задачи ардуиньі -
1. Спать самьім глухим сном все время вьіключенного зажигания, что бьі не садить аккумулятор, ожидая сигнала на пин прерьівания (если я верно єтот механизм понимаю).
2. При появлении сигнала с зажигания (с колодки ISO), просьіпаться, включать реле/мосфет (что лучше?), подающее питание на малину и следить за всем остальньім.
3. При пропадании сигнала зажигания подавать mute на усилитель, ждать три минутьі, при отсутствии появления сигнала в єто время - подавать шутдовн на малину либо через один пин на демона/хрона малиньі, либо как-нить по какому-нить протоколу. UART малиньі занят GPS, I2C занят радио-модулем Si4703 (говорят что радио отваливается если еще что-то подключать, как минимум RTC, сам не проверял ибо нуб), SPI тоже рекомендуют вьіключать ибо что-то там где-то глючит. Пиньі I2S занятьі DAC. Ждать n-минут (или собьітия) пока малина вьіключится, разрьівать реле/мосфет и уходить в сон до прерьівания. Если сигнал с зажигания во время ожидания появляется - снимать с mute усилок и сбрасьівать/забьівать обратньій отсчет на вьіключение малиньі.
4. В процессе работьі:
4.1 Определять, что включилось радио и переключать реле на входе усилителя с DAC-а малиньі на вьіход радио (самое сложное, ибо не представляю как реализовать).
4.2 Получать сигнал с провода включения заднего хода и переключать єкран с HDMI на RCA вьіход камерьі заднего вида (имитация 4-х нажатий на кнопку) и возврат назад (2 нажатия) при пропадании сигнала (єкран вроде должен єто уметь сам по описанию перед покупкой, но в результате не умеет).
Есть в наличии практически все - єкран, малина с установленной системой, радиомодуль, GPS модуль, DAC, єнкодер (все в сборе работает), ардуино мини, пяток модулей реле, IRFL530, 2n7000, жменя сопротивлений и макеток, руки, как минимум одна правая, и вроде бьі все, что может понадобиться. Нет в наличии - ума, знаний и навьіков программирования.
Откуда посоветуете начать? Может почитать что-нибудь, какие-нибудь стетчи для подобньіх проектов уже есть, что бьі только подправить/об'ьеденить под мои задачи?
перепост с ардуино.ру, ибо юа мені подобається більше.
Пока что удалось только в про мини дядюшки Ляо с помощью FT232R поменять загрузчик на optiboot с wathdog, ибо уморился после проб чужих скетчей ловить момент прошивки по подключению питания.
Сторінки 1