Обсуждаем контроллеры компании Atmel.
Ответить

Re: Помогите понять проект написанный в AlgorithmBuilder

Вт май 17, 2022 16:31:59

это датчик приближения, что ли?

да, это он самый. вариант в живую. проверил осциллографом как работает ИК диод и ИК приемник. Он действительно реагирует на простую генерацию 37500 кГц. Формирует короткую пачку ипульсов а потом все время низкий уровень сигнала пока сигнал не прервать и не возобновить. Не понимаю пока как это можно эксплуатировать. Пока пишу программу.

Re: Помогите понять проект написанный в AlgorithmBuilder

Вт май 17, 2022 16:42:53

Я делал подобное. Скажу честно, тот проект заглох. По нескольким причинам. Главная, нехватка времени. Проект: передатчик, приемник. То есть, не на одном мк, а в каждом устройстве МК. Система оказалась капризной. Засветка обычным светом. Паразитная засветка, то есть переотраженка. Тупо подавать частоту не вышло. Система зависала. На тот момент я остановился на пачках импульсов. Дальше не занимался.

Re: Помогите понять проект написанный в AlgorithmBuilder

Вт май 17, 2022 18:06:51

Проверил что схема правда работает. Осталось добиться работы с сигналом своим.

Вот это уже другое дело.

Для попробовать можно записать сигнал от ИК пульта (записать в датчик код любой кнопки от дистанционки)… и посмотреть как будет работать. Кстати на нажатие записанной кнопки пульта, датчик будет реагировать с большего расстояния. То есть, данный датчик удобно использовать как бесконтактный выключатель чего либо (к примеру освещения)… тем самым можно включать и отключать свет с пульта.

Re: Помогите понять проект написанный в AlgorithmBuilder

Вт май 17, 2022 18:36:39

не надо ничего записывать от пульта! датчик демодулирует несущую и выдает низкий уровень огибающей. для датчика приближения надо промодулировать, допустим, пачку из 10 импульсов типа 1мс импульс, 2мс пауза (непринципиально вообще), сигнал с датчика завести на пин с прерыванием (у тиньки все такие), и по прерываниям считать импульсы. алгоритм такой:
1. обнулили счетчик
2. выдали пачку
3. посмотрели в счетчик: если там число импульсов в пачке, значит, есть преграда, от которой сигнал отражался. если число другое - это помеха. если там ничего - нет преграды.

как-то так

Добавлено after 2 minutes 37 seconds:
само собой, надо исключить в принципе прямое попадание луча от светодиода на датчик. в частности, то, что показано на фото, никуда не годится в этом отношении

Re: Помогите понять проект написанный в AlgorithmBuilder

Вт май 17, 2022 18:55:55

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

Мы говорили о конкретном датчике... и я описал его дополнительные возможности этого конкретного данного датчика:
http://www.getchip.net/posts/094-datchi ... -attiny13/
А Вы о каком?

Re: Помогите понять проект написанный в AlgorithmBuilder

Вт май 17, 2022 19:22:47

я о датчике приближения, который мастерит топикстартер

Re: Помогите понять проект написанный в AlgorithmBuilder

Вт май 17, 2022 22:26:21

Он как раз о нём и писал…
1.png
(49.78 KiB) Скачиваний: 44

там в архиве его исходник на АВ этого датчика... смотрите по моей ссылке...

Re: Помогите понять проект написанный в AlgorithmBuilder

Ср май 18, 2022 10:49:42

Я делал подобное. Скажу честно, тот проект заглох. По нескольким причинам. Главная, нехватка времени. Проект: передатчик, приемник. То есть, не на одном мк, а в каждом устройстве МК. Система оказалась капризной. Засветка обычным светом. Паразитная засветка, то есть переотраженка. Тупо подавать частоту не вышло. Система зависала. На тот момент я остановился на пачках импульсов. Дальше не занимался.

Буду думать над защитой от чрезмерных засветок. Пока мощности ИК диода мало но для тестов хватит. Путем тыка осциллографом определил расстояние в 30 см примерно. А, на пульт в телефоне реагирует то же хорошо (в телефоне есть ИК передатчик).

Добавлено after 6 minutes 47 seconds:
не надо ничего записывать от пульта! датчик демодулирует несущую и выдает низкий уровень огибающей. для датчика приближения надо промодулировать

Мы говорили о конкретном датчике... и я описал его дополнительные возможности этого конкретного данного датчика:
http://www.getchip.net/posts/094-datchi ... -attiny13/
А Вы о каком?

Я взял идею как раз отсюда. Ссылки были указаны в начале. Мне не понятны принципы работы с программой алгоритм билдер, я хочу на Си переписать. У меня исходник с этого сайта не компилируется, пишет какую то ошибку но из за наложения текста на текст не прочитать. Опорный сигнал я настроил, мне теперь бы понять как обработать сигнал с датчика, много читал но торможу. Ps исходников наСи я не видел, ассемблер я не понимаю. Если кто то разбирается как там что работает я бы был очень рад :)

Добавлено after 5 minutes 14 seconds:
не надо ничего записывать от пульта! датчик демодулирует несущую и выдает низкий уровень огибающей. для датчика приближения надо промодулировать, допустим, пачку из 10 импульсов типа 1мс импульс, 2мс пауза (непринципиально вообще), сигнал с датчика завести на пин с прерыванием (у тиньки все такие), и по прерываниям считать импульсы. алгоритм такой:
1. обнулили счетчик
2. выдали пачку
3. посмотрели в счетчик: если там число импульсов в пачке, значит, есть преграда, от которой сигнал отражался. если число другое - это помеха. если там ничего - нет преграды.


Добавлено after 2 minutes 37 seconds:
само собой, надо исключить в принципе прямое попадание луча от светодиода на датчик. в частности, то, что показано на фото, никуда не годится в этом отношении


Я вас понял. По алгоритму 1 2 3 теперь мне стало более понятно что делать. PS на фото не смотрите, это испытатльный образец. Будет у него корпус нормальный, разделение приемной и передающей части перегородкой. Защитное ИК проницаемое "стекло" и свой источник питания. Тут еще нет многих элементов. Моя цель сейчас это отладка и перепись кода с графичского билдера в Си. PPSS надел трубку на ИК диод за кадром.

Добавлено after 1 hour 26 minutes 59 seconds:
не надо ничего записывать от пульта! датчик демодулирует несущую и выдает низкий уровень огибающей. для датчика приближения надо промодулировать, допустим, пачку из 10 импульсов типа 1мс импульс, 2мс пауза (непринципиально вообще), сигнал с датчика завести на пин с прерыванием (у тиньки все такие), и по прерываниям считать импульсы. алгоритм такой:
1. обнулили счетчик
2. выдали пачку
3. посмотрели в счетчик: если там число импульсов в пачке...

Добавлено after 2 minutes 37 seconds:
само собой, надо исключить в принципе прямое попадание луча от светодиода на датчик. в частности, то, что показано на фото, никуда не годится в этом отношении

И так, я знаю что пачки должны быть по 30 импульсов и 10мс паузы (смотрел даташит на TSOP31238 или 1738).
Пока провел испытания максимально по тупому. Так же прилагаю текущий код. (слегка замусарено)
Изображение Изображение


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

Re: Помогите понять проект написанный в AlgorithmBuilder

Ср май 18, 2022 10:57:55

я же вам рекомендовал ознакомиться с моей статьёй и приложенным к ней кодом, где вопросы модуляции сигнала рассмотрены и продемонстрированы.
если кратко - несущий сигнал 37кГц надо формировать аппаратно, без прерываний, как у вас, - настроили таймер на генерацию меандра на пине, и радуйтесь. а модуляция сигнала осуществляется включением и выключением таймера, примерно так:
Код:
// TIMER_MODE - константа, задающая режим работы таймера


// функция выдачи модулированного импульса 1 мс
void pulse(void){
  TCCR0 = TIMER_MODE; // включили генерацию
  _delay_ms(1); // задержка 1 мс
  TCCR0 = 0; // выключили генерацию
  // тут для страховки установить 0 на нужном пине
}

// функция выдачи пачки импульсов из N штук
void pulse_block(uint8_t N){
  for(;N; N--){
    pulse();
    _delay_ms(1);
  }
}

Re: Помогите понять проект написанный в AlgorithmBuilder

Ср май 18, 2022 14:16:51

У меня исходник с этого сайта не компилируется, пишет какую то ошибку

Видимо у Вас не те настройки установлены во вкладке компилятора… Опции/Опции проекта/Компилятор… установите как на картинке и компилятор не будет ругаться… :)
1.png
(17.45 KiB) Скачиваний: 37

Или если хотите, то я могу Вам скомпилировать тот вариант или с какими ни будь изменениями… ещё есть немаловажный момент, на который не обращают внимание – это фьюзы… хотя Вы наверняка прошиваете МК не с помощью АВ, но всё же… установите фьюзами контроль питания (если будете использовать изучение клавиши пульта), иначе EEPROM будет затираться при отключении питания.
Опорный сигнал я настроил, мне теперь бы понять как обработать сигнал с датчика, много читал но торможу.

Ну если Вам это чем-то поможет, я могу описать все процедуры в прерывании по INT, своими словами. Правда я не профессионал и мои дилетантские термины могут означать не то, что принято у программистов. Уж как то так. Так что, описывать? :write:

Re: Помогите понять проект написанный в AlgorithmBuilder

Ср май 18, 2022 14:45:35

Мой следующий шаг должен был быть следующим: я не помню, на какой частоте работал тот tsop. Не суть. Сделать какие нибудь осмысленные пачки импульсов, на случай сбоев игнорировать настраиваемое количество попыток посылок. Если число попыток превышено, значит сработка. Но, заказчик на тот момент отказался, его поджимало время. И я забросил проект. Кстати, можно посмотреть проект, на чем все остановилось. Посмотрим, будет ли время. Выше написанное, для информации. В чем были мои затруднения.

Re: Помогите понять проект написанный в AlgorithmBuilder

Ср май 18, 2022 15:11:47

[uquote="PE4ENbKA_173",url="/forum/viewtopic.php?p=4233470#p4233470"]У меня исходник с этого сайта не компилируется, пишет какую то ошибку

Видимо у Вас не те настройки установлены во вкладке компилятора…

Настройки компилятора моего AB
Изображение
В них чего то не хватает.
Об ошибке у меня в АВ
Изображение
установите фьюзами контроль питания (если будете использовать изучение клавиши пульта)

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

Если можно скомпилируйте вариант где как в примере PB0 выход "ШИМ", РВ1 это вход с TSOP, светодиод зажигается мгновенно на входе РВ2 при отражении сигнала и сделать то же самое для РВ3 только к нему я буду реле или транзистор подключать. Остальные выходы останутся не задействованы. В принципе это все изменения которые я хотел. И если можно потом еще проект закиньте. Посмотрю чем отличается и может пойму что то с АВ, попробую скомпилировать если не вылезет ошибка.
Ну если Вам это чем-то поможет, я могу описать все процедуры в прерывании по INT, своими словами.

Про процедуры в прерывании расскажите)

Добавлено after 11 minutes 35 seconds:
я же вам рекомендовал ознакомиться с моей статьёй и приложенным к ней кодом, где вопросы модуляции сигнала рассмотрены и продемонстрированы.
если кратко - несущий сигнал 37кГц надо формировать аппаратно, без прерываний, как у вас, - настроили таймер на генерацию меандра на пине, и радуйтесь. а модуляция сигнала осуществляется включением и выключением таймера, примерно так:


Кажется я начал понимать. Мне теперь осталось понять, вот пошлю я пачку 30 импульсов. А сколько потом прийдет импульсов с демодулятора... Я с начала хотел записать какой то осмысленный сигнал в передачу, что бы было например число 0х50 и потом смотреть получил я это ил и нет. Кстати а будет работать в том вид как у вас? У меня же есть прерывание при входном сигнале, это разв не собъет тайминги модуляции?

Re: Помогите понять проект написанный в AlgorithmBuilder

Ср май 18, 2022 15:15:26

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

Re: Помогите понять проект написанный в AlgorithmBuilder

Ср май 18, 2022 17:36:28

Настройки компилятора моего AB

У Вас АВ какого года? Установите в место своего этот…
https://disk.yandex.ru/d/6X1pB8Rl3Flbr
Он последней версии.
Об ошибке у меня в АВ

Что касается того исходника, то вот как он открывается у меня…
Изображение
Видимо Вы что-то хотели с этой процедурой сделать и не получилось… и она приняла такой вид как у Вас на скрине?
Вот описание той процедуры…
То есть когда счётчик импульсов (Pulse_Count) равен единице, то переходим на выполнение подпрограммы под названием _Res_TSOP_Count (подпрограмма запуска замера импульсов по новой).
Мои фьюзы, я устанавливаю через аврдуду

Да, с фюзами у Вас всё впорядке. Пусть такими и останутся. Хотя можно было бы выбрать контроль 4,3 В в место 1,8 В как у Вас. Но то такое… не принципиально.
Если можно скомпилируйте вариант где как в примере PB0 выход "ШИМ"

Не понял, это о каком варианте? Поподробнее можно?
светодиод зажигается мгновенно на входе РВ2 при отражении сигнала

Выход «Статус» (РВ2) согласно данной схеме:
Изображение
практически отрабатывает мгновенно… есть конечно некая задержка, но она обусловлена задержками самого TSOP (как я полагаю), а вот отключение выхода «Статус» имеет практическое значение… сделано это для уверенного состояния выходного сигнала выхода «Триггер» (РВ0). Могу немного скорректировать, для попробовать...
Вот прошивка с небольшой коррекцией…
main.hex
(1.53 KiB) Скачиваний: 73

Пробуйте и отпишитесь.
и сделать то же самое для РВ3 только к нему я буду реле или транзистор подключать.

Это вывод предназначен управлять ИК светодиодом… может Вы хотели управлять реле с выхода РВ4? Это вход у автора задействован для отключения работы ИК светодиода. Подробно поясните данный момент.
Остальные выходы останутся не задействованы.

Так остальных по сути и нет, кроме вывода RESET, но он нужен для перепрограммирования МК.
Про процедуры в прерывании расскажите)

Хорошо.

Re: Помогите понять проект написанный в AlgorithmBuilder

Ср май 18, 2022 18:20:55

Печенька, сишный код поймёте? Могу дать тот свой проект. Разбираться будете сами.

Re: Помогите понять проект написанный в AlgorithmBuilder

Ср май 18, 2022 21:06:13

Про процедуры в прерывании расскажите)

Изображение
Описание процедур от внешнего прерывания:
1 Подпрограмма макроса Reg_Push это сохранение трёх регистров в стек (R16; R17; и SREG). Это обусловлено именно нюансами АВ и в Си в данном случае думаю она не нужна (но это решать Вам).
2 Pulse_Count – это однобайтная переменная счётчика импульсов (у автора рабочий регистр R21 объявлен этой переменной). (Pulse_Count >= 34) – Если значение этой переменной больше или равно 34 (десятичное значение), то переходим по стрелке вниз на подпрограмму Reg_Pop (пунк 8 ).
Если переменная Pulse_Count меньше 34, то выполняем следующую процедуру пункт 3.
3 В данном алгоритме это Pulse_Count++, что означает увеличение на единицу данной переменной.
4 Следующая процедура это (Pulse_Count = 1). Если переменная равна единице, то это первый импульс, а значит необходимо выполнить подпрограмму под названием _Res_TSOP_Count.
5 Подпрограмма _Res_TSOP_Count.
Процедура TSOP_Count -> r17 – Это переменная под названием TSOP_Count (Счётчик TSOP), у автора рабочий регистр R20 объявлен этой переменной. Так вот, значение данной переменной копируется в рабочий регистр R17.
Процедура ^TSOP_Count – означает очищение значений данного регистра.
Затем выход из подпрограммы на пункт 6.
4 Если переменная Pulse_Count не равна единице, то переходим на следующую процедуру – пункт 6.
6 Следующая процедура это (Pulse_Count = 33). Если переменная равна 33, то уходим по стрелке на вершину «Последний замер» (это пунктом 8 ). Если переменная меньше 33, то продолжаем замер (пункт 7).
7 Пункт 5 – замер периодов.
Выполняем подпрограмму _Res_TSOP_Count (пункт 5).
Процедура r17 = 60 – это рабочий регистр R17 сравнивается с десятичным значением 60. То есть предварительно в R17 было скопировано значение переменной TSOP_Count в подпрограмме _Res_TSOP_Count (пункт 5). Так вот, если регистр R17 меньше 60, то в переменную Rec_Probing_Seq записывается в старший бит 1, а если регистр R17 равен 60 или больше, то в переменную Rec_Probing_Seq записывается в старший бит 0. Это происходит в пункте 7в.
Процедура >Rec_Probing_Seq>> - это логический сдвиг вправо переменной с переносом. Переменная Rec_Probing_Seq является четырёхбайтная, и расположил автор её в рабочих регистрах R26; R27; R28; R29. Затем переход на пункт 11.
8 «Последний замер»
Выполнить подпрограмму _Res_TSOP_Count (пункта 5).
Процедура r17 = 60 – уже описана выше.
Процедура >Rec_Probing_Seq>> - уже описана выше.
Процедура (Stud -= 1) – данная процедура нужна лишь когда необходимо читать иную последовательность сигнала с пульта и сохранять её в EEPROM. Но так как Вам это не нужно, то эту и две следующие процедуры можно исключить. Таким образом, переходим к процедуре пункта 9


9 Процедура (Rec_Probing_Seq = EE_Probing_Seq)_Add_Status - эта процедура сравнивает принятые импульсы переменной Rec_Probing_Seq с ранее записанными импульсами в переменной EE_Probing_Seq, которая находится в памяти EEPROM. И если принятый код совпадает с кодом из EEPROM, то выполняется подпрограмма под названием _Add_Status (пункт 10). Если коды не совпадают, то выполняется пункт 11.
10 Подпрограмма _Add_Status.
10а Процедура (Status < 3)Status + 2 – если переменная под названием Status меньше десятичного значения 3, то к значению данной переменной прибавляется десятичное значение 2. У автора рабочий регистр R30 объявлен этой переменной.
10б Процедура (Status -= 2) - если переменная не равна двум, то уходим по стрелке на пункт 10д. Если переменная равна двум, то выполняется пункт 10в.
10в Процедура (PinB2 = 0)1 -> PinB.0 - если бит входного регистра вывода РВ2 равен нулю, то в регистр PinB.0 (вывода РВ0) записывается значение 1. Не все контроллеры позволяют проделывать такую манипуляцию с входным регистром… но у этого МК это позволяет управлять выходом в триггером режиме. Потому как раз вывод РВ0 назван «Триггер». Если на выходе вывода РВ2 уже имеется единица, то просто переходим к пункту 10с, без манипуляций с выводом РВ0.
10с Процедура 1 -> PortB2 - записывается единица в бит порта РВ2, для получения данного логического сигнала на этом выводе. Далее выполняется пункт 10д.
10д Процедура ret – выход из подпрограммы.
11 Подпрограмма макроса Reg_Pop. Макрос подпрограммы Reg_Pop – как Вы наверняка догадались, возврат ранее сохранённых регистров из стека (R16; R17; и SREG).
12 И далее выход из прерывания (reti) с разрешением глобальных прерываний (I = 1).

Если возникнут вопросы – задавайте. Попробую ответить, если это в моей компетенции. Кстати в АВ есть справка в формате PDF на русском языке... всё подробно там описано...

Re: Помогите понять проект написанный в AlgorithmBuilder

Чт май 19, 2022 04:44:10

поправлю: reg_push(pop) это не для АБ, а для контроллера надо (так делают вообще в ассеаблере) в С тоже это делается (и там дкже больше регистров обычно в стек уталкивается), но делается это тайком от программиста...

Re: Помогите понять проект написанный в AlgorithmBuilder

Чт май 19, 2022 09:24:43

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

У этого замечательного человека куча полезного.

Re: Помогите понять проект написанный в AlgorithmBuilder

Чт май 19, 2022 09:48:56

остальным участникам топика повезло меньше - зря старались

Re: Помогите понять проект написанный в AlgorithmBuilder

Чт май 19, 2022 14:43:29


Если возникнут вопросы – задавайте. Попробую ответить, если это в моей компетенции. Кстати в АВ есть справка в формате PDF на русском языке... всё подробно там описано...

Очень подробно, спасибо так стало понятнее. А я тут нашел готовую программу) там кинул сообщение с видосом. Когда закончу переделывать программу то поделюсь тут со всеми. Может кому пригодится.

Добавлено after 14 minutes 16 seconds:
остальным участникам топика повезло меньше - зря старались

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

Добавлено after 3 hours 42 minutes 41 second:
И так вот он проект, под мои нужды. ВХОД для ИК TSOP это PB1, ВЫХОД сигнала - PB0. Выходы под внешние устройства, диод или реле PB3, 2.
Актуальная схема Изображение.
Вопрос, если я добавляю хадержку перед включением PB3 почему перестает работать всё?


Добавлено after 13 minutes 19 seconds:
Печенька, сишный код поймёте? Могу дать тот свой проект. Разбираться будете сами.

Да, буду только за. Я на си и шарю только, ассемблер не очень.
Вложения
Attiny13-iksens4.zip
проект AtmelStudio7.0
(28.02 KiB) Скачиваний: 71