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

Re: BASCOM AVR в вопросах и ответах

Чт окт 08, 2020 07:54:00

Всем привет! Нащёл интересную статью, может для кого то это и не новость, но я был приятно удивлён. (ОС реального времени AQUA RTOS для МК AVR в среде BASCOM AVR) https://habr.com/ru/post/453708/ Думаю многим пригодится

Re: BASCOM AVR в вопросах и ответах

Вт ноя 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) Скачиваний: 340

Re: BASCOM AVR в вопросах и ответах

Вт ноя 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

Re: BASCOM AVR в вопросах и ответах

Вт ноя 03, 2020 21:39:38

То, что вы написали, примерно понятно. Но дело то не в этом, к этой части кода вопросов у меня нет. Тем более, что высокая точность отработки этих интервалов не требуется. Мне надо решить вопрос, как работать с концевиками. Я уперся именно в это, и пока не могу ничего придумать. Может быть, у кого-то есть образец кода, где обрабатываются концевики. В инете я не нашел.

Re: BASCOM AVR в вопросах и ответах

Ср ноя 04, 2020 01:32:19

Что значит фраза "работать с концевиками". Ты работаешь с портами. Тобишь, проверяешь их состояние.
И наплевать что там, концевик или 3.14здовик.
Рискну предположить что дело в монтаже. О влиянии сработок(отпусканий) реле и прочих индуктивных пакостей (особенно для AVR) написано туева хуча войнов и миров.

Re: BASCOM AVR в вопросах и ответах

Ср ноя 04, 2020 17:46:46

Моя фраза "работа с концевиками" означала логику работы с ними. Но, кажется, я нашел выход. Попробую сделать так: сделаю 2 геркона рядом, чтобы срабатывали от 1 магнита. Первый будет стоять в цепи питания мотора, будет шунтировать сработавший концевик. А второй будет запускать схему, как и было раньше. Примерно так. Но это пока в голове. Проверить в железе смогу только через пару дней, т.к. нахожусь на работе.

Re: BASCOM AVR в вопросах и ответах

Ср ноя 04, 2020 17:57:40

Ну какая может быть логика работы, так или иначе вам необходимо проверять состояние "порта". Естественно на контактах концевиков у вас присутствует дребезг, его устраняем как в железе (RC цепочки) так и програмно, делаем выборку из состояний пина либо используем оператор Debounce

Re: BASCOM AVR в вопросах и ответах

Ср ноя 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

Re: BASCOM AVR в вопросах и ответах

Ср ноя 04, 2020 23:18:00

Когда Ваш мотор выключится если отгниёт/ оборвётся провод концевика? Что будет если сработают оба концевика? Подсказка: Контакты должны быть НЗ.
После срабатывания концевика запретить его опрос не на 30 мс. а поболе. 100 или даже 200
А по схеме- не мешало бы и по резюку в базы. И диод к реле.

Re: BASCOM AVR в вопросах и ответах

Чт ноя 05, 2020 17:42:03

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

Добавлено after 57 minutes 33 seconds:
Насчет диода для реле - обычно я ставлю. Но в данном случае я специально проверил - при включении или при выключении реле нет скачка тока в цепи, поэтому я не стал ставить реле.
Насчет второго геркона - посидел, подумал и решил, что такой вариант не прокатит.
Насчет предложенного варианта кода - буду пробовать завтра.

Re: BASCOM AVR в вопросах и ответах

Вс ноя 08, 2020 10:52:24

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

Re: BASCOM AVR в вопросах и ответах

Сб ноя 14, 2020 15:29:03

Потихоньку осваиваю BASCOM, не могу понять как написать сообщение первому по списку сохранённому номеру из сим Карты.

Какой командой пользоваться?

ATD>1 это вызов абоненту первому из списка, а как сообщение написать первому?

Re: BASCOM AVR в вопросах и ответах

Вс ноя 15, 2020 21:33:01

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

Программа следущая, при отправке сообщения nomer в память сохраняется номер телефона с которого пришло это смс., но почему то сохраняется с ковычкой в конце, то есть 89хххххххх"

Соответсвенно при Попытке достать из памяти и совершить звонок на сохранённый номер получается ERROR

Добавлено after 6 minutes 33 seconds:
Вот тут видно лишнюю кавычку.

Изображение
Вложения
5026AD12-2B7C-49DA-83A2-68DED3058704.jpeg
(53.06 KiB) Скачиваний: 279

Re: BASCOM AVR в вопросах и ответах

Ср ноя 18, 2020 20:24:37

Как вычислить необходимое значение для $timeout? Чтобы долго не ожидать и успевать принимать сообщения.

Re: BASCOM AVR в вопросах и ответах

Ср ноя 18, 2020 21:33:13

Как вычислить необходимое значение для $timeout? Чтобы долго не ожидать и успевать принимать сообщения.

В описании каждой команды дано максимальное время выполнения - Max Response Time

Re: BASCOM AVR в вопросах и ответах

Пт дек 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

Re: BASCOM AVR в вопросах и ответах

Пт дек 18, 2020 13:36:02

Попробуйте убрать toggle. А перед циклом установите ногу в 1.

Re: BASCOM AVR в вопросах и ответах

Пт дек 18, 2020 14:43:04

Если можно, напишите как должно быть, цельный код, если не сложно. Я в программировании ничего не понимаю. тугл ещё убрать можно, а вот что такое цикл- это уже загадка:)

Re: BASCOM AVR в вопросах и ответах

Пт дек 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

Re: BASCOM AVR в вопросах и ответах

Пт янв 15, 2021 21:05:16

Можно ли реализовать загрузку прошивки по rs485 во внешнюю EEPROM, а потом прошиться?
Ответить