Обсуждаем контроллеры компании Atmel.
Чт окт 08, 2020 07:54:00
Всем привет! Нащёл интересную статью, может для кого то это и не новость, но я был приятно удивлён. (ОС реального времени AQUA RTOS для МК AVR в среде BASCOM AVR)
https://habr.com/ru/post/453708/ Думаю многим пригодится
Вт ноя 03, 2020 19:15:12
Приветствую всех.
Такая проблемка.Никак не могу победить концевики. Суть в
следующем. Есть аппарат, в нем ходит каретка влево-вправо.С обоих
сторон - концевики. Время движения от края до края примерно 15
сек. Вместе с включением мотора привода каретки включается мотор
вентилятора, и работает ( в режиме отладки) 1 мин. Потом -
длинная пауза (в режиме отладки - 3 мин, а реально будет 2 часа).
За второй и третий временные интервалы отвечает Timer1- с этим
проблем нет. Вся загвоздка в первом интервале. Пробовал тоже
посадить его на таймер - нестабильно работает. То недокрутит, то
перекрутит. Решил установить концевики, и бьюсь с ними целый день.
Прога работает так: на Int0 висит геркон, на стрелке часов -
магнит. По прерыванию запускается таймер и моторы с индикаторами.
А в основном цикле концевики выключают мотор привода каретки. Все
работает до срабатывания первого концевика. И все.
Вот с этим бьюсь целый день.
Может, у кого-то есть опыт общения с концевиками? Подскажите, как
с ними бороться.
На всякий случай прикладываю схему и код, конечно.
- Код:
$regfile = "2313def.dat"
$crystal = 4000000
$hwstack = 32
$swstack = 8
$framesize = 16
Dim V As Word
Dim M As Bit
Dim L As Bit
Config Pind.2 = Input
Config Pind.0 = Input
Config Pind.1 = Input
Config Portd.6 = Output
Config Portb.0 = Output
Config Portd.5 = Output
Config Portd.4 = Output
Config Debounce = 30
Config Timer1 = Timer , Prescale = 64 , Clear Timer = 1
Compare1a = 62500
On Oc1a Timecount
Config Int0 = Falling
On Int0 Count
Red Alias Portb.0
Blue Alias Portd.6
Motor1 Alias Portd.4
Motor2 Alias Portd.5
L_end Alias Pind.0
R_end Alias Pind.1
Enable Interrupts
Enable Timer1
Enable Oc1a
Stop Timer1
Enable Int0
V = 0 : M = 0
Do
If L_end = 0 Or R_end = 0 Then 'сработал концевик
Reset Red
Reset Motor1
End If
If V = 60 Then
Reset Blue
Reset Motor2
End If
If V = 180 Then
Stop Timer1
Timer1 = 0
V = 0 : M = 0
End If
Loop
Count:
If M = 0 Then
Start Timer1
Set Motor1
Set Motor2
Set Red
Set Blue
End If
M = 1
Return
Timecount:
Incr V
Return
End
- Вложения
-
- Схема.jpg
- (77.14 KiB) Скачиваний: 342
Вт ноя 03, 2020 20:54:05
Признаться не работал с "цыфровым" компаратором и тонкостей настройки не знаю, но здается мне, что в прирывании Timecount не сбрасывается значение таймера, либо компаратора и весь счет сбивается.
Я сделал бы следуюзим образом.
Настраиваем таймер 1 на счёт.
Config Timer1 = Timer , prescale = 64
On Timer1 Timecount
Stop Timer1
Timer1 = 3036 (нам остаётся как раз 62500 отсчётов до переполнения)
А в прерывании обязательно задаём стартовое значение таймеру
Timecount:
Incr V
Timer1 = 3036
Return
И, чтоб не пропустить событие лучше писать так
If V >= 60 Then...
If V >= 180 Then..
Иначе рискуем просчитать и переполнить переменную V
Вт ноя 03, 2020 21:39:38
То, что вы написали, примерно понятно. Но дело то не в этом, к этой части кода вопросов у меня нет. Тем более, что высокая точность отработки этих интервалов не требуется. Мне надо решить вопрос, как работать с концевиками. Я уперся именно в это, и пока не могу ничего придумать. Может быть, у кого-то есть образец кода, где обрабатываются концевики. В инете я не нашел.
Ср ноя 04, 2020 01:32:19
Что значит фраза "работать с концевиками". Ты работаешь с портами. Тобишь, проверяешь их состояние.
И наплевать что там, концевик или 3.14здовик.
Рискну предположить что дело в монтаже. О влиянии сработок(отпусканий) реле и прочих индуктивных пакостей (особенно для AVR) написано туева хуча войнов и миров.
Ср ноя 04, 2020 17:46:46
Моя фраза "работа с концевиками" означала логику работы с ними. Но, кажется, я нашел выход. Попробую сделать так: сделаю 2 геркона рядом, чтобы срабатывали от 1 магнита. Первый будет стоять в цепи питания мотора, будет шунтировать сработавший концевик. А второй будет запускать схему, как и было раньше. Примерно так. Но это пока в голове. Проверить в железе смогу только через пару дней, т.к. нахожусь на работе.
Ср ноя 04, 2020 17:57:40
Ну какая может быть логика работы, так или иначе вам необходимо проверять состояние "порта". Естественно на контактах концевиков у вас присутствует дребезг, его устраняем как в железе (RC цепочки) так и програмно, делаем выборку из состояний пина либо используем оператор Debounce
Ср ноя 04, 2020 18:40:19
А если так-
..........
L_end Alias Pind.0
R_end Alias Pind.1
Pord.0=1
Pord.1=1
...........
..........
If V = 180 Then
Stop Timer1
Timer1 = 0
V = 0 : M = 0
Enable Int0
End If
Loop
Count:
If M = 0 Then
Disable Int0
Start Timer1
Set Motor1
Set Motor2
Set Red
Set Blue
End If
M = 1
Return
Ср ноя 04, 2020 23:18:00
Когда Ваш мотор выключится если отгниёт/ оборвётся провод концевика? Что будет если сработают оба концевика? Подсказка: Контакты должны быть НЗ.
После срабатывания концевика запретить его опрос не на 30 мс. а поболе. 100 или даже 200
А по схеме- не мешало бы и по резюку в базы. И диод к реле.
Чт ноя 05, 2020 17:42:03
Насчет диода для реле - обычно я ставлю. Но в данном случае я специально проверил - при включении или при выключении реле нет скачка тока в цепи, поэтому я не стал ставить реле.
Насчет второго геркона - посидел, подумал и решил, что такой вариант не прокатит.
Насчет предложенного варианта кода - буду пробовать завтра.
Добавлено after 57 minutes 33 seconds:
Насчет диода для реле - обычно я ставлю. Но в данном случае я специально проверил - при включении или при выключении реле нет скачка тока в цепи, поэтому я не стал ставить реле.
Насчет второго геркона - посидел, подумал и решил, что такой вариант не прокатит.
Насчет предложенного варианта кода - буду пробовать завтра.
Вс ноя 08, 2020 10:52:24
Всем привет. В итоге вернулся к старому коду - выключение мотора по времени. Только заменил геркон на датчик Холла - заколебался подбирать подходящий магнит. Тему концевиков отложил до лучших времен. Так что будем считать тему закрытой.
Сб ноя 14, 2020 15:29:03
Потихоньку осваиваю BASCOM, не могу понять как написать сообщение первому по списку сохранённому номеру из сим Карты.
Какой командой пользоваться?
ATD>1 это вызов абоненту первому из списка, а как сообщение написать первому?
Вс ноя 15, 2020 21:33:01
Почти у цели, но не могу понять почему появляется лишний знак кавычки при вызове номера и попытке отправить смс или совершить вызов...
Программа следущая, при отправке сообщения nomer в память сохраняется номер телефона с которого пришло это смс., но почему то сохраняется с ковычкой в конце, то есть 89хххххххх"
Соответсвенно при Попытке достать из памяти и совершить звонок на сохранённый номер получается ERROR
Добавлено after 6 minutes 33 seconds:Вот тут видно лишнюю кавычку.
- Вложения
-
- 5026AD12-2B7C-49DA-83A2-68DED3058704.jpeg
- (53.06 KiB) Скачиваний: 281
Ср ноя 18, 2020 20:24:37
Как вычислить необходимое значение для $timeout? Чтобы долго не ожидать и успевать принимать сообщения.
Ср ноя 18, 2020 21:33:13
Как вычислить необходимое значение для $timeout? Чтобы долго не ожидать и успевать принимать сообщения.
В описании каждой команды дано максимальное время выполнения - Max Response Time
Пт дек 18, 2020 10:59:12
Здравствуйте, коллеги!
подскажите пож-та есть исходный код подпрограммы звука, программа BASCOM AVR
zvuk1:
pwm3a=127
do
incr zvuk
toggle portb.6
waitus 150
loop until zvuk=2000
portb.6=0
zvuk=0
pwm3a=0
return
это я так понимаю генерация определённой частоты для пассивного пьезо зуммера, хочу поменять его на активный, что мне надо переписать чтоб вместо шима шёл просто лог уровень 1 200мсек? Как мне думается тут надо переписать какие-то цифры чтоб ШИМ с имитировать 100% это и будет типо лог 1
Пт дек 18, 2020 13:36:02
Попробуйте убрать toggle. А перед циклом установите ногу в 1.
Пт дек 18, 2020 14:43:04
Если можно, напишите как должно быть, цельный код, если не сложно. Я в программировании ничего не понимаю. тугл ещё убрать можно, а вот что такое цикл- это уже загадка:)
Пт дек 18, 2020 18:43:21
zvuk1:
pwm3a=127
portb.6=1
do
incr zvuk
waitus 150
loop until zvuk=2000
portb.6=0
zvuk=0
pwm3a=0
return
......
Цикл - всё что между DO и LOOP
Пт янв 15, 2021 21:05:16
Можно ли реализовать загрузку прошивки по rs485 во внешнюю EEPROM, а потом прошиться?
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.