avatar_UriBas

Моргалка на Arduino. Этюды для начинающих.

Автор UriBas, 08 Март 2017 в 16:08

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Alex_N

Для моргалки на базе ардуино никакой реалтайм не нужен. Тут гораздо важнее точность измерений. Вот тут у ардуины большие проблемы.

Dunkel

#811
Цитата: Alex_N от 05 Фев. 2018 в 10:04
Для моргалки на базе ардуино никакой реалтайм не нужен. Тут гораздо важнее точность измерений. Вот тут у ардуины большие проблемы.

Прежде (удалено - постановка диагнозов, провокация флейма), попробуйте сделать хоть одну нормальную моргалку.
Многофункциональная облачная моргалка/логгер:
https://morgalka78.wordpress.com/

Alex_Soroka

#812
Цитата: Alex_N от 03 Фев. 2018 в 08:33
Как говорил старина Винер - "Кто в здравом уме и твердой памяти будет программировать на ассемблере ?". Вы бы ещё в машинных кодах пример привели.
я программирую  :hello:
и считаю что все должны начинать именно с ассемблера, потому что иначе начинают писать код для "сферического коня в вакууме", не монимая вообще тонкостей "как это работает".
извращения на С++ и всяких "скетчах" джавах и т.п. - считаю извратом, от лени человеческой.
вы скомпилите ваш скетч, а потом посмотрите ASM файл который родил компилятор  :hello:
там  :facepalm: из одних CALL , а потом у такого разработчика вопросы "почему память течет", и почему при разных прерываниях "рвет" картинку повторяемых интервалов и скорости работы.


Добавлено 05 Фев 2018 в 10:50

Цитата: bones от 04 Фев. 2018 в 03:26
К примеру, на stm32, мы можем получать данные АЦП с частотой 1МГц.
O_O вы серьезно ???
вы видели ЭТИ ДАННЫЕ ? поставьте тактовую АЦП 1МГц и покажите сюда что там намеряется.
...
тактовая частота АЦП в МК выбирается близкой к 200кГц, это при 13 тактов на измерение (Атмега) дает порядка 15000 замеров в сек, осмысленной информации, а не записей "переключений внутреннего мультиплексора и его дребезга"

Alex_Soroka

Цитата: Кass от 04 Фев. 2018 в 13:20
к примеру С шарп.
да-да! именно на шарп ! ;-D все на шарп ! ...потом волосья рвать на всех местах от "чудес" которые вам компилятор натыкает в реалтайм.
Писатели Игр на С шарпе это постоянно доказывают  B-)

Кass

Цитата: Alex_Soroka от 05 Фев. 2018 в 10:51все на шарп ! ...потом волосья рвать на всех местах от "чудес" которые вам компилятор натыкает в реалтайм.

Александр, я говорю только о профессиональном применении, а не любительском. Понятно, что если слесарь возьмется за программирование МК на Си шарп, то ничего хорошего не выйдет. В профессиональной среде реалтайм, протоколы и периферию обеспечивает ОС. Тот кто пишет алгоритм, уже не запаривается организацией реалтайма. Поэтому алгоритм даже куда более сложный, чем ЗУ пишется не более чем за час вместе с сетевым обменом. Просто на Си в некоторых платформах можно написать ФБ или подредактировать какой то из библиотеки. Это только один ФБ. Но мне не очень нравится ФБ на Си. Мне больше нравится на ST. Это более прикладной язык в АСУ ТП.
АРМ стенда онлайн: http://scada.kontar.ru Пользователь: Электротранспорт, Пароль: 111111

Гербалайф от всех болезней, Кашпировский лучший врач,  Орифлейм самая лучшая косметика, а МММ самый лучший способ вложения денег. Кто бы спорил. ;)

Alex_N

Цитата: Alex_Soroka от 05 Фев. 2018 в 10:46попробуйте сделать хоть одну нормальную моргалку.
Сейчас делаю вторую. Пришли детали из Китая. Первую демонтировал. А по поводу ассемблера - что кто то считает себя круче Винера ?
Ну ну.
Писал я и на ассемблере и не JSL. И по 200 страниц кода по обработке акустического сигнала рожал. Молодой был, зелёный.

Alex_Soroka

Цитата: Alex_N от 06 Фев. 2018 в 08:19
Писал я и на ассемблере и не JSL. И по 200 страниц кода по обработке акустического сигнала рожал. Молодой был, зелёный.
а мне нравился 1801ВМ1, который содрали с TI MSP430...
MSP430FRxxxx сейчас весьма интересный МК, не то что недоделанные ST...

Alex_N

 1801, если не путаю - советский вариант Intel 8086. Или 1802 аналог.Не помню. Я на нем первую прогу на асемблере наваял.
А у ардуино С по возможностям не уступает ассемблеру. Размер кода конечно больше, зато пишется быстро.

Alex_N

Кстати, если кому интересно, то таймеры (для изменения частоты ШИМ) можно перепрограммировать двумя способами, например :
  TCCR1A = TCCR1A & 0xe0 | 3;
  TCCR1B = TCCR1B & 0xe0 | 0x0a;    // 9,10 pin 2 kHz
 
  TCCR2B = TCCR2B & 0b11111000 | 0x07;   // 3,11 pin 32 Hz
Нулевой лучше не трогать, т.к. он системный и при его изменении изменятся такие функции как delay.

UriBas

Цитата: Alex_N от 06 Фев. 2018 в 19:38
Кстати, если кому интересно, то таймеры (для изменения частоты ШИМ) можно перепрограммировать двумя способами, например :
  TCCR1A = TCCR1A & 0xe0 | 3;
  TCCR1B = TCCR1B & 0xe0 | 0x0a;    // 9,10 pin 2 kHz
 
  TCCR2B = TCCR2B & 0b11111000 | 0x07;   // 3,11 pin 32 Hz
Нулевой лучше не трогать, т.к. он системный и при его изменении изменятся такие функции как delay.
Хорошо бы прокомментировать, что означает каждая команда и код с примером, как можно использовать в программе..  к примеру  ШИМ с изменением как частоты, так и скважности..  все таки тема для начинающих.
Восточная мудрость - "Шакал воет - караван идет"  Эл.вел. 350Вт.   Верую в Иисуса Христа, НЛО.  тема "продвинутой моргалки" https://electrotransport.ru/index.php?msg=1669651

Alex_Soroka

Цитата: Alex_N от 06 Фев. 2018 в 19:38
Кстати, если кому интересно, то таймеры (для изменения частоты ШИМ) можно перепрограммировать двумя способами, например :
  TCCR1A = TCCR1A & 0xe0 | 3;
  TCCR1B = TCCR1B & 0xe0 | 0x0a;    // 9,10 pin 2 kHz
:facepalm:
лучше так не делать, а делать как писано в учебниках: методом принудительной записи всего числа в регистр таймера.
обьяснять почему не буду. Задолбали "пейсатели на С++".

ЦитироватьНулевой лучше не трогать, т.к. он системный и при его изменении изменятся такие функции как delay.
delay в "библиотеках" делают как цикл из nop.
Запомните: Если у вас есть ЛЮБЫЕ прерывания, в которых вы че-то там процессором делаете, про delay лучше забывайте сразу, и сразу пишите свою delay, которая жестко завязана на неизменяемый аппаратный таймер.
Иначе будет горе с задержками и вообще с реалтаймом.


Добавлено 07 Фев. 2018 в 12:01

Цитата: UriBas от 07 Фев. 2018 в 11:30
к примеру  ШИМ с изменением как частоты, так и скважности..  все таки тема для начинающих.
чайники должны научиться пользоваться Гуглем:
урок раз:
http://mkprog.ru/avr/avr-dlya-nachinayushhih-urok-5-tajmery.html
урок два:
http://narodstream.ru/avr-urok-10-tajmery-schetchiki-preryvaniya/

Alex_N

Я показал информацию не ради обучения ШИМ-у. Это и на ардуиновском сайте хорошо расписано. Но там нет ни слова, что частота привязана к таймерам и её можно менять.
И ссылки на прерывания от таймера здесь ни причем. Оба варианта, которые я показал будут полезны начинающим. Они частоту по разному меняют. Ведь ШИМ - основа для моргалки.
Прерывания в моргалке нужны тем, кто ставит кнопки управления например. А прерывания от таймера я здесь и не знаю куда применить. В машине у меня оно будит микропроцессор каждую
минуту. т.к. он в режиме спячки постоянно находится для экономии потребления. А в моргалке не знаю, может со временем что то в голову придёт.

Alex_N

Вот такой девайс нарисовался в первом приближении. БП от HP 18.5В, 6,5А ( на нем написано ) реально 19В с копейками.
Сверху разъем USB для связи с ноутом. Пока запрограммировал качели 14.2 - 11.8. Зарядка идёт 35Гц модифицированных 2кГц.

mr.Dream

Цитата: Alex_Soroka от 07 Фев. 2018 в 11:57
:facepalm:
лучше так не делать, а делать как писано в учебниках: методом принудительной записи всего числа в регистр таймера.
обьяснять почему не буду. Задолбали "пейсатели...
Зачем все число писать в регистр, если например нужно изменить только три младших бита? что, уже отменили логические операторы? Сначала обнуляем нужные биты логическим и и нулями, а потом устанавливаем логическим или или.
Если не то имели ввиду, то обясните на хлопский розум) а не обзывайтесь.

Добавлено 09 Фев. 2018 в 21:57

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

bones

Цитата: Alex_Soroka от 05 Фев. 2018 в 10:46вы видели ЭТИ ДАННЫЕ ? поставьте тактовую АЦП 1МГц и покажите сюда что там намеряется.
речь не о тактовой частоте, а о получении измерений каждую микросекунду, т.е. тактовая на порядок выше. Сам не видел, но верю, что подали 50 кГц и получили картинку при помощи stm32.

взял отсюда https://mysku.ru/blog/china-stores/41070.html

"тактовая АЦП в МК 200 кГц" видел здесь

но это не имеет отношения к stm32 и прочим контроллерам, на которых нет логотипа Atmel.


Кass

Цитата: bones от 10 Фев. 2018 в 04:16речь не о тактовой частоте, а о получении измерений каждую микросекунду,

Сорока не различает разницы между этими двумя понятиями. Я это понял, когда он 100 ksps проглотил как тактовую частоту. Понятно, что для получения тактовой частоты нужно умножить сей параметр на разрядность АЦП последовательного приближения, плюс такты на запись в регистры. Поэтому не вступайте в эту полемику. Это безрезультатно.
АРМ стенда онлайн: http://scada.kontar.ru Пользователь: Электротранспорт, Пароль: 111111

Гербалайф от всех болезней, Кашпировский лучший врач,  Орифлейм самая лучшая косметика, а МММ самый лучший способ вложения денег. Кто бы спорил. ;)

Alex_Soroka

Цитата: mr.Dream от 09 Фев. 2018 в 21:55
А компилятор может все равнопо своему ссделать
вот поэтому и надо избегать сложных конструкций в своих программах.
Керниган & Ричи "Язык С"  :hello: "С" стандарта 1989 года, никаких "С++ 11 версии"

Alex_Soroka

Цитата: Кass от 10 Фев. 2018 в 12:00
Сорока не различает разницы между этими двумя понятиями.
Модератор, уймите троля! он не может знать о чем я думаю!

ЦитироватьПонятно, что для получения тактовой частоты нужно умножить сей параметр на разрядность АЦП последовательного приближения, плюс такты на запись в регистры.
Бред!
тактовая АЦП берется из постулата о том, что разряд-заряд конденсаторов тракта мультиплексора на входе в АЦП, должны завершаться и "успокаиваться" ДО ТОГО как АЦП начнет счет.
В типовых коммерческих МК (не важно - это ПЛК, PIC, Atmega , STM или кто еще) АЦП при тактовой частоте выше 200кГц показывает "число звезд на небе", вместо реального измеряемого напряжения.
Поэтому ТАКТОВУЮ ЧАСТОТУ АЦП выбирают (и рекомендуют все производители МК) не выше 200кГц!
при этом сами АЦП успевают "досчитать" за примерно 13-15 циклов ТАКТОВОЙ частоты АЦП, т.е. 200000 делим на 13 получаем всего 15384 раз в секунду. Это если мультиплексор входов не дергать, а если дергать - то меньше отсчетов из-за "времени на успокоение".
если у вас 8 каналов надо, то будет 15384 / 8 = 1923 Гц каждый кала можно успевать мерять, это в теории, без "времени на успокоение".