Пожалуйста помогите чайнику с Binary Angle Modulation
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
При хорошей абстракции да, но в поиске компромисса между качеством кода и скоростью его выполнения приоритет в данной задаче скорее а скорости. Ну и сам алгоритм перевода из числа в код для ВАМа может быть достаточно сложным для переписывания разрядности или количества выходов.
- Реклама
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Оффтоп:
Ys, в очередной раз читаю ваш журнал (если можно так правильно сказать) и натыкаюсь на кучу интересных статей. Нравится стиль изложения, доходчивость, оригинальность. Не планируете ли для начинающих уроки по СТМ32?YS писал(а): идеале стоит придерживаться принципа разграничения уровней абстракции.
Станислав
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
я, конечно, не знаю, что и как делать правильно, но когда-то давно пробовал сделать BAM по-своему. вот пример для 32 каналов. при тактовой 16МГц частота BAM получается 55 Гц. в реальности не проверял (в протеусе только), но по теории мерцать не должно. никаких мер по борьбе со скачками яркости не предпринимал.
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr_helper.h>
#include <stdlib.h>
#define MAX_CH 32
typedef struct{
volatile uint8_t *port;
uint8_t pwm;
uint8_t bitmask;
}chanel_t;
volatile chanel_t chanel[MAX_CH];
static void init_chanels(void){
uint8_t mask = 1;
for(uint8_t i=0; i<MAX_CH; i++){
chanel[i].bitmask = mask;
if(i < 8)
chanel[i].port = &PORTA;
else if(i < 16)
chanel[i].port = &PORTB;
else if(i < 24)
chanel[i].port = &PORTC;
else
chanel[i].port = &PORTD;
chanel[i].pwm = 0;
mask <<= 1;
if(!mask) mask = 1;
}
}
ISR(TIMER0_OVF_vect){
static uint8_t mask = 1;
mask <<= 1;
if(!mask) mask = 1;
for(uint8_t i=0; i< MAX_CH; i++){
if(chanel[i].pwm & mask)
*(chanel[i].port) |= chanel[i].bitmask;
else
*(chanel[i].port) &= ~chanel[i].bitmask;
}
TCNT0 = 255 - mask;
//TIFR = _BV(TOIE0);
}
MAIN(){
init_chanels();
DDRA = DDRB = DDRC = DDRD = 255;
OCR0 = 0x80;
TCCR0 = TIMER_CLK_DIV_1024;
TIMSK = _BV(TOIE0);
sei();
while(1){
for(uint8_t i=0; i<MAX_CH; i++){
chanel[i].pwm = rand();
}
_delay_ms(1800);
}
}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Ну, скорее не переходить, а добавлять его к арсеналу средств.И вообще, надо на Си переходить.
Вообще, честно говоря, на ассемблере я пишу крайне редко (а для x86 вообще никогда на нем не писал). Аккуратный код на Си при оптимизации, выставленной в -Os или -O3, обычно не уступает в скорости и компактности ассемблерному коду. Исключение - случаи, когда и правда надо считать машинные циклы. Так, я писал целиком на ассемблере модули (которые потом подключались к программе на Си) обмена по 1-Wire для AVR и, позже, для MSP430. А так вроде и все за последние годы... Ну если только не считать ситуаций, в которых требуется вставить одну-две инструкции, которые больше никак не вызвать - типа SLEEP в AVR (для работы с режимами сна в составе avr-libc, вообще, есть библиотека, но без нее код получается не слишком сложнее, зато компактнее). Там спасает одна строчка инлайнового ассемблера.
Конечно, до классов с объектами, шаблонов и наследования доходить тут не надо, но в нашей задаче и без этого можно сделать вполне гибкий интерфейс с быстрой обработкой.но в поиске компромисса между качеством кода и скоростью его выполнения приоритет в данной задаче скорее а скорости
#pragma offtopic
Блог, штоле?читаю ваш журнал
Спасибо, я рад, что старался не зря.Нравится стиль изложения, доходчивость, оригинальность.
Скорее всего нет. Тому есть несколько причин.Не планируете ли для начинающих уроки по СТМ32?
Первая и, наверное, основная - у меня сейчас очень мало времени, практически только на поспать. Как-то так внезапно оказалось, что нынче разработчики нужны буквально всем (кроме девушек).
Ну и про STM32 нынче не пишет только ленивый. Уроков, туториалов, инструментов и примеров кода просто навалом. Я не вполне уверен, стоит ли мне лезть в эту толпу...
Вообще, философски, я не вижу смысла в уроках по конкретной архитектуре - это путь Ардуино, и это путь неверный. Человек должен
а) понимать, как вообще устроены контроллеры;
б) иметь навыки декомпозиции задачи и алгоритмизации (навыки программирования);
в) знать схемотехнику.
Если выполняются эти три условия, то человек может взять документацию, прочесть ее, и через неделю он уже будет доделывать устройство на новом МК и/или дописывать программу на другом языке (в рамках той же парадигмы). Да, разумеется, человек должен знать английский. Без этого выше дилетанта в наши дни в электронике не подняться, так что это условие само собой разумеющееся. Я его даже не включаю в перечисление.
Чтобы понимать, как устроены контроллеры, достаточно рассмотреть какую-нибудь простую архитектуру, где обилие наворотов не слишком отвлекает от основной структуры. AVR - хорошая модельная архитектура. MSP430 - тоже. Сразу бросаться на STM32 новичкам я никогда не посоветую.
Приобрести навыки программирования можно экспериментируя на "большом" компьютере.
Ну а со схемотехникой понятно. Минимум для старта - любой учебник по ТОЭ, Хоровиц и Хилл, Linear Circuit Design Handbook.
Так я считаю сам, и так я учу своих студентов.
Так что те же AVR хороши постольку, поскольку это удобная модельная архитектура. Переход с AVR на STM32 заключается по большей части в чтении документации.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Примерно так все и подозреваю. Просто с AVR уже давно ковыряюсь. Пусть не далеко ушел, зато практически основательно. Сильно убивает тот факт, что у меня не профильное образование и до всего приходится доходить самому (с огромными пробелами в физике, математике и т.д.).
Большей частью мои "разработки" - это игрушки: всяческие "свистоперделки".
Но людям, порой, больше и не надо (так и Ди-Халт сказал). Даже малость денег получается на этом заработать, что для непрофессионала считаю очень даже хорошо.
А иной раз, что бы что-то понять, начинаю читать в этой области все подряд и много, потом постепенно складываться мозаика начинает. Времени на это много уходит, а иной раз и интерес пропадает, тогда все... пиши - пропала. А еще бывает, что из всего подряд больше запутываешься, особенно если кто-то навключает туда кучу формул с интегралами..
, а на самом деле, там раз плюнуть было, если объяснить нормально и с другого конца.
Простите за оффтопы в тематических разделах, захотелось выговориться.
З.Ы. Также увидел, что вы где-то работаете (или работали) на предприятии по разработке ОПС. Давно интересует вопрос (если, конечно, это не секретная информация), где можно почитать и изучить принцип действия ППКОП? В частности входы для пожарных извещателей и принцип обработки. Понимаю, что там АЦП мониторит... подробностей хочется.
Большей частью мои "разработки" - это игрушки: всяческие "свистоперделки".
А иной раз, что бы что-то понять, начинаю читать в этой области все подряд и много, потом постепенно складываться мозаика начинает. Времени на это много уходит, а иной раз и интерес пропадает, тогда все... пиши - пропала. А еще бывает, что из всего подряд больше запутываешься, особенно если кто-то навключает туда кучу формул с интегралами..
Простите за оффтопы в тематических разделах, захотелось выговориться.
З.Ы. Также увидел, что вы где-то работаете (или работали) на предприятии по разработке ОПС. Давно интересует вопрос (если, конечно, это не секретная информация), где можно почитать и изучить принцип действия ППКОП? В частности входы для пожарных извещателей и принцип обработки. Понимаю, что там АЦП мониторит... подробностей хочется.
Станислав
- Реклама
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
А вы не убивайтесь. Большинству из тех, у кого профильное образование, это самое образование на пользу не пошло. Так что профильность образования - очень размытый критерий, по которому ориентироваться никак нельзя...Сильно убивает тот факт, что у меня не профильное образование и до всего приходится доходить самому (с огромными пробелами в физике, математике и т.д.).
Вот из ваших рук выходят вполне рабочие устройства. А 90% тех, кто отучился по профилю, вообще не могут спроектировать ничего даже отдаленно рабочего. Это я из опыта говорю.
Да-да, так очень любят делать люди с профильным образованием. Особенно те самые, которые ничего рабочего спроектировать не могут, но зато отучились на отлично, а то и аспирантуру закончили. Я на кафедре встречал людей, которые органически неспособны воспринимать мир никак иначе, кроме как через формулы с привлечением нормальных эллиптических интегралов третьего рода.А еще бывает, что из всего подряд больше запутываешься, особенно если кто-то навключает туда кучу формул с интегралами..
Слава богу, среди моих учителей было гораздо больше нормальных преподавателей, которые способны объяснить суть явления.
Да, работал три года назад.Также увидел, что вы где-то работаете (или работали) на предприятии по разработке ОПС.
Хм. Типа такого? Там в руководстве все описано.где можно почитать и изучить принцип действия ППКОП?
Спойлер
...Прибор контролирует состояния ШС по их сопротивлению.
Для ШС охранной и тревожной сигнализации:
- сопротивление в пределах от 4 до 7 кОм – состояние "Норма";
- сопротивление 10 кОм и более или 2,8 кОм и менее – состояние "На-рушение".
Для ШС пожарной сигнализации, запрограммированных на прием из-вещений от активных извещателей или извещателей с нормально разомкнутой выходной цепью:
- сопротивление в пределах от 4 до 7 кОм – состояние "Норма";
- сопротивление от 1,0 до 2,8 кОм – состояние "Пожар";
- сопротивление 10 кОм и более или 220 Ом и менее – состояние "Не-исправность".
Для ШС пожарной сигнализации, запрограммированных на прием из-вещений от извещателей с нормально замкнутой выходной цепью:
СПНК.425513.024 РЭ 5 ППКОП "Нота-2"
- сопротивление в пределах от 1,0 до 2,8 кОм – состояние "Норма";
- сопротивление от 4 до 7 кОм – состояние "Пожар";
- сопротивление 10 кОм и более или 220 Ом и менее – состояние "Не-исправность".
2.4 Прибор регистрирует нарушение ШС на время 500 мс и более, и со-хранять состояние "Норма" при нарушении ШС на время 300 мс и менее, либо 70 мс и 50 мс соответственно (для ШС тревожной сигнализации).
2.5 Прибор передает на ПЦН извещение "Норма" замкнутым состояни-ем контактов выходного реле, с допустимыми коммутируемыми током не ме-нее 30 мА и напряжением не менее 72 В.
...
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Просто, порой в ППКОП пишут, что он реагирует при сработке дымового извещателя увеличением тока в цепи извещателей, а второй сработавший еще его увеличивает, следовательно прибор определяет увеличение тока в цепи. Так написано. Но логика-то не та...
Точнее та, но маленько по другому. Я же понимаю, что микроконтроллер в приборе не может измерить ток... Он мерит с помощью АЦП напряжение. А где мерит? Значит по выходам стоят делители из резисторов, или шунты. Так оно и есть в итоге, где увеличение тока в цепи вызывает увеличение падения напряжения на резисторе?
Еще там элементы защиты стоять должны.
А еще программная реализация вот этих самых диапазонов и задержек.
А еще, как я понимаю, прибор не способен опрашивать сразу все входы? Он их опрашивает по очереди с какой-то определенной дискретностью. Значит в каждый момент времени вход сигналки отключен?
Т.е. если я "теоретически"
соберу устройство с большим входным сопротивлением и подключу параллельно всем цепям прибора (или даже в один конкретный шлейф), то смогу с помощью МК или компа отследить период опроса, и в период паузы отрезать этот шлейф от датчиков и повесить на него оконечное сопротивление? Т.е. прибор будет видеть что все в порядке, а шлейф работать уже не будет?
Это я так просто спрашиваю. Банк грабить я пока не собирался.
Еще там элементы защиты стоять должны.
А еще программная реализация вот этих самых диапазонов и задержек.
А еще, как я понимаю, прибор не способен опрашивать сразу все входы? Он их опрашивает по очереди с какой-то определенной дискретностью. Значит в каждый момент времени вход сигналки отключен?
Т.е. если я "теоретически"
Это я так просто спрашиваю. Банк грабить я пока не собирался.
Станислав
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
ARV, спасибо за ваш вариант!
Он вполне хорош, но! Но использует основное преимущество ВАМа(сравнительно с софтовым ШИМом) - включение по маске. Такое решение потребует дополнительных буферных схем, чтобы разгрузить контроллер.
И опять же, вы используете предделитель аж на 1024. Почему?
И опять же, вы используете предделитель аж на 1024. Почему?
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Ну, другие методы измерения тока, кроме как с преобразованием оного в напряжение, используются крайне редко.А где мерит? Значит по выходам стоят делители из резисторов, или шунты. Так оно и есть в итоге, где увеличение тока в цепи вызывает увеличение падения напряжения на резисторе?
Да, разумеется.Еще там элементы защиты стоять должны.
Да. Но это не декодирование сжатого видеопотока, все сводится к нескольким if'ам.А еще программная реализация вот этих самых диапазонов и задержек.
Да.А еще, как я понимаю, прибор не способен опрашивать сразу все входы? Он их опрашивает по очереди с какой-то определенной дискретностью.
Нет. Как вы его отслеживать будете?Т.е. если я "теоретически"соберу устройство с большим входным сопротивлением и подключу параллельно всем цепям прибора (или даже в один конкретный шлейф), то смогу с помощью МК или компа отследить период опроса
Период опроса мал. Частота опроса составляет сотни Герц, если не килогерцы. Надежно коммутировать многометровый шлейф с такой скоростью вряд ли удастся... Наличие емкости системы приведет к тому, что на линии в итоге будет что-то непонятное. Да и прибор контролирует обрыв... Контролировать обрыв вполне можно и асинхронно.и в период паузы отрезать этот шлейф от датчиков и повесить на него оконечное сопротивление?
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Это очень старый код. Там по-моему даже 7-битный ШИМ, т.е. ВАМ. А делитель, кажется потому такой, что иначе обработчик прерываний не успевал отработать, он же на Си написан и с указателями. При меньшем числе каналов можно и частоту поднять. В общем, я сильно не старался оптимизировать...MOHCTEP писал(а):ARV, спасибо за ваш вариант!Он вполне хорош, но! Но использует основное преимущество ВАМа(сравнительно с софтовым ШИМом) - включение по маске. Такое решение потребует дополнительных буферных схем, чтобы разгрузить контроллер.
И опять же, вы используете предделитель аж на 1024. Почему?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Пожалуйста помогите чайнику с Binary Angle Modulation
Понял. Спасибо! 


