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

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

Вт мар 29, 2022 20:39:45

Вы уж определитесь
Проблема в том, что в момент включения мотора концевик

находится в разомкнутом положении. Никак не могу это победить.

или
А по условиям концевик

замкнут все время до включения реле таймером.

Вот с проверкой размыкания концевиков
Код:
Do
 'обнуляем время,выключаем реле и светодиод
   v=0
   Reset Rele                                               'выключение мотора и диода
   Reset Red
   set green
'ждем когда истечет время
   while v<30
   wend

'время истекло
   reset green                                        'выключаем светодиод зеленый
   Set Rele                                           'реле включило мотор
   Set Red                                            'загорелся светодиод
'здесь проверка,разомкнулись ли концевики
   while R_end = 0 or L_end=0
   wend
   waitms 100
'ждем замыкания концевиков
   while R_end = 1 and L_end=1
   wend

Loop

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

Вс апр 03, 2022 09:23:18

Приветствую всех. Мне кажется, я нашел решение своей проблемы. Код приводить не буду, он получится очень маленьким. Прикладываю схему, нарисовал по быстрому от руки плюс небольшой комментарий.
Концевики включены последовательно, разрывают цепь питания мотора. Пара контактов Р1-1 включают мотор по команде с контроллера. А второе реле Р2 (твердотельное), будет шунтировать концевики за 5 сек до включения мотора, и выключаться через 5 сек после запуска мотора. Т.К полный цикл от концевика до концевика занимает примерно 15 сек. думаю, должно получиться нормально. Думаю, на этом тему можно закрыть.
Вложения
Схема.jpg
(85.17 KiB) Скачиваний: 169

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

Вс апр 03, 2022 12:34:28

А как у вас реверс мотора делается? Я этого что-то не увидел!

зы.. Ещё раз- вы бы ещё туда не МК, а "управляющий компьютер" прилепили бы..
"по минимуму" это вообще на нескольких транзисторах решается, ну, или, на 555 таймере..
Если, конечно, движение мотора вам нужно не "с точностью до микросекунды"

зы.. А концевик "на размыкание" что, поставить нельзя?

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

Вт апр 05, 2022 15:28:20

Реверс мотору не нужен - такая кинематика у механизма. Мотор вращается всегда в одну сторону.
Концевики будут работать на размыкание в цепи питания мотора, об этом я написал выше.
Уже второй человек в комментариях упоминает о схеме на 555, но никто не приводит рабочую схему.

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

Ср апр 06, 2022 10:56:53

Здравствуйте, подскажите кто сможет, вылезает ошибка при компиляции, ссылается на строку: Config Clockdiv = 1, пишет Invalid data type

$regfile = "m128def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 64
$swstack = 64
$framesize = 128

Config Clockdiv = 1
Mcucr.7 = 1
Mcucr.7 = 1

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

Ср апр 06, 2022 15:12:27

Наверное этот контроллер не поддерживает такой метод деления частоты. Поменял на m328def.dat, скомпилировалось без ошибок.

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

Ср апр 06, 2022 20:24:42

Реверс мотору не нужен - такая кинематика у механизма. Мотор вращается всегда в одну сторону.
Концевики будут работать на размыкание в цепи питания мотора, об этом я написал выше.
Уже второй человек в комментариях упоминает о схеме на 555, но никто не приводит рабочую схему.


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


Проще всего введите переменную "куда едем", если едем в лево, то проверять только левый концевик и наоборот.

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

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

Ср апр 06, 2022 21:25:22

Уже второй человек в комментариях упоминает о схеме на 555, но никто не приводит рабочую схему.

Я и третий раз упомяну.. Вы просто нормальное ТЗ и описание самой "механизьмы" сделайте!

зы.. Пока у меня впечатление, что вы пытаетесь запустить механизм от автомобильных дворников в прерывистом режиме- во всяком случае- очень похоже- там тоже- вращение в одну сторону с остановкой в определённом месте, и запуск с определённой периодичностью. :dont_know:


зызы.. 555 таймер- это наиболее дешевый (на сегодня) способ генерации импульсов заданной длительности, следующих с заданной частотой.

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

Ср апр 06, 2022 23:30:32

Приветствую всех. Мне кажется, я нашел решение своей проблемы. Код приводить не буду, он получится очень маленьким. Прикладываю схему, нарисовал по быстрому от руки плюс небольшой комментарий.
Концевики включены последовательно, разрывают цепь питания мотора. Пара контактов Р1-1 включают мотор по команде с контроллера. А второе реле Р2 (твердотельное), будет шунтировать концевики за 5 сек до включения мотора, и выключаться через 5 сек после запуска мотора. Т.К полный цикл от концевика до концевика занимает примерно 15 сек. думаю, должно получиться нормально. Думаю, на этом тему можно закрыть.

Похоже, что в вашей схеме, реле Р1 вообще можно выкинуть, это если по середине не надо останавливать.
Достаточно реле 2 включать на время, что бы успел замкнуться разомкнутый концевик, но не успел разомкнуться второй концевик.

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

Вт июл 26, 2022 13:17:21

Здравствуйте, существует ли некое переполнение EPROOM?
Делал GSM сигнализацию, ситуация следующая, есть программа на меге 328, занимает порядка 60% , при работе спустя около 3 дней происходит некий глюк связанный с епром. Проявляется это в том, что например, номер, сохраненный в памяти МК перестает отвечать, или на экране вылезают выходят лишние символы которые каким то образом загоняются и заменяются в епром

Список всех переменных:
$regfile = "m328pdef.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 68
$swstack = 68
$framesize = 120

Config Clockdiv = 1
Mcucr.7 = 1 'Turn OFF JTAG
Mcucr.7 = 1


'---------- I2C bus ----------
$lib "i2c_twi.lbx" ' hardware I2C
Config Scl = Portc.5 ' used i2c pins
Config Sda = Portc.4
Config Twi = 400000 ' i2c speed
I2cinit
Waitms 5
'---------- Display ----------
$lib "glcdSSD1306-I2C-Buf.lib"
Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"
Dim Lcd_auto As Byte
Lcd_auto = 1
Const Rotate_180 = 0

#if _build < 20784
Dim ___lcdrow As Byte , ___lcdcol As Byte ' dim these for older compiler versions
#endif


Dim I As Byte , N As Byte
'---------- ВСЕ ЧТО ВЫШЕ ЭТО НАСТРОЙКИ ЭКРАНА



Config Watchdog = 4096 ' (4096) Ватчдог


'Cюда лепим 18b20
'=======================
Config Serialin = Buffered , Size = 60
Config 1wire = PortC.0

'Подключение динамика
'=======================
Config Portb.3 = Output : Set Portc.3 ' Кнопка постановки и снятия с охраны
Spkr Alias Pinb.3 ' Динамик
Pc817 Alias Pinc.3

'Для проверки подключения зарядки
'=======================
Config Portd.5 = Input
Kn2 Alias Pind.5

'Пин для включения модуля, вывод DTR
'=======================
Config Portc.1 = Output
Pkey Alias Portc.1
Pkey = 0

'Выход для 1 удаленного управления - реле 1
'=======================
Config Portb.2 = Output : Set Portd.7 ' PIR СЕНСОР
Outpin1 Alias Portb.2
Outpin1 = 0
Pir Alias Pind.7


'Выход для 2 удаленного управления - реле 2
'=======================
Config Portb.1 = Output
Outpin2 Alias Portb.1
Outpin2 = 0


'Выход для 2 удаленного управления - реле 3
'=======================
Config PortB.0 = Output : Set Portd.3 ' Вход для подключения геркона или кнопки - механического датчика
Outpin3 Alias PortB.0
Outpin3 = 0
Gerkon Alias Pind.3


'Вход для RC5
'=======================
Config Rc5 = Pind.6 , Wait = 1500
Config Pind.6 = Input
Dim Address As Byte
Dim Command As Byte


Enable Interrupts

Declare Sub Getline(s As String)
Declare Sub Flushbuf()


' Настройка АЦП для датчика ВОДЫ
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim W As Integer
Dim Wsingl As Single
Dim Wstr As String * 5


'---------- << ПЕРЕМЕННЫЕ
Config Debounce = 50 ' Антидребезг
Dim F As Byte ' Счетчик
Dim M As Byte ' Счетчик как F - запасной
Dim M1 As Byte ' Счетчик для задержки для повторного звонка, чтобы не названивал если дверь открыта.
M1 = 0
Dim M2 As Byte ' Для входа в меню прямо в рабочем режиме.
M2 = 0

Dim Y As Word ' Счетчик для датчика воды
Dim J As Word ' Счетчик для датчика температуры
M = 0
Y = 0
J = 0
Dim Count As Byte ' Счетчик удержания кнопки

Dim Sms_chg As String * 3 ' Состояние входа зарядки для СМС
Dim Chgs As Byte ' Для запрета отправки СМС, если пропало 220 придет СМС 1 раз до след постановки на охрану

Dim Number As String * 11 ' Номер телефона
Dim Temp As String * 10
Dim Temp1 As String * 10
Dim Temp2 As String * 10
Dim Rs As Byte
Dim A As Byte
Dim S As String * 50
Dim B As Byte
Dim R As Byte
Dim Z As String * 15
Dim Sms_num As String * 2 ' Порядковый номер смс
Dim Stmp As String * 1
Dim Sms As String * 120
Dim Otvet As String * 160 ' Сообщение, которое модуль будет отправлять
Dim Sk As String * 66
Dim Tmr As Byte
Dim Sms_val As Byte

Dim Loadpin1 As Bit ' Значение пина выхода 1
Dim Loadpin2 As Bit ' Значение пина выхода 2
Dim Loadpin3 As Bit ' Значение пина выхода 3

Dim Wtrspk As Byte ' Вкл Выкл динамика ( пока настроен на датчик воды, можно настроить так чтобы вообще вырубать звук)
Dim Eeprom_infa5 As Eram Byte
Wtrspk = Eeprom_infa5
'If Wtrspk = 225 Then Wtrspk = 0


Dim Sendsms As Byte ' Переменная для разрешения отправки сообщения по срабатыванию датчик воды - связан с счетчиком количества трех срабатываний
Dim Eeprom_infa3 As Eram Byte
Sendsms = Eeprom_infa3

Dim Zvonok As Byte ' Переменная для разрешения вызовов
Dim Eeprom_infa2 As Eram Byte
Zvonok = Eeprom_infa2
'Zvonok = 0 ' На время тестов

Dim Chargesms As Byte ' Cтатус для контроля зарядки


'---------- << Для динамика
Dim Frq As Word
Dim D As Word

'---------- << Для меню
Dim Temper As Byte ' Значение температуры введенная с пульта RC5
Dim Eeprom_infa1 As Eram Byte
Temper = Eeprom_infa1
If Temper = 255 Then Temper = 45

Dim Rlc As Byte '<<< Разрешаем или запрещаем управлять реле по датчику температуры
Dim Eeprom_infa4 As Eram Byte
Rlc = Eeprom_infa4
If Rlc > 1 Or Rlc < 0 Then Rlc = 0

Dim Wlc As Byte '<<< Разрешаем или запрещаем управлять реле по датчику воды
Dim Eeprom_infa6 As Eram Byte
Wlc = Eeprom_infa6
If Wlc > 1 Or Wlc < 0 Then Wlc = 0

Dim Tsms As Byte '<<< Разрешаем или запрещаем отправку СМС по достижению температуры, работает независимо от постановки и снятия с охраны
Dim Eeprom_infa7 As Eram Byte
Tsms = Eeprom_infa7
If Tsms > 1 Or Tsms < 0 Then Tsms = 0

'Dim Zv As byte ' Переменная для перезвона в случае зависания
'Dim Eeprom_infa11 As Eram Byte
'Zv = Eeprom_infa11

Dim Zad As byte ' Задержка перед вызовом по мех.датчику (пока)
Dim Eeprom_infa12 As Eram Byte
Zad = Eeprom_infa12
If Zad < 0 or Zad > 3 Then Zad = 1

Dim Mm As Byte
Mm = 1 ' Для навигации по меню
'----------

Dim 3sms As Word ' Если три раза сработал датчик воды то больше СМСки не отправляем, т.е. смски шлем только 3 раза до повторной постановки на охрану
Dim Eeprom_infa As Byte
'Soff = 0
If 3sms > 1 Or 3sms < 0 Then 3sms = 0


'''' СОХРАНЕНИЕ РАБОТЫ РЕЛЕ В СЛУЧАЕ ЗАВИСАНИЯ И ПЕРЕЗАГРУЗКИ
Dim k1 As Byte ' 1 релейный канал
Dim Eeprom_infa8 As Eram Byte
k1 = Eeprom_infa8

Dim k2 As Byte ' 2 релейный канал
Dim Eeprom_infa9 As Eram Byte
k2 = Eeprom_infa9

Dim k3 As Byte ' 3 релейный канал
Dim Eeprom_infa10 As Eram Byte
k3 = Eeprom_infa10


Dim Load1 As String * 3 ' RL1 (Статус в СМС словами ОN или OFF)
Dim Load2 As String * 3 ' RL2
Dim Load3 As String * 3 ' RL1


Dim Wtrinf As String * 1 ' Для отображения на экране и в СМС
Dim Kninf As String * 1
Dim Pirinf As String * 1

Dim Secinf As String * 3 ' Сообщение состояния охраны в СМC и на ЖК, YES-NO (Охрана включена или выключена, ОБЩЕЕ СОСТОЯНИЕ СИСТЕМЫ)

Dim Pitanie As String * 3 ' Сообщение для СМС, YES-NO для контроля зарядки

Dim Stwtr As String * 1 ' Статус для СМС было срабатывание или нет (не путать с текущим состоянием)
Dim Stkn As String * 1
Dim Stpir As String * 1
Stwtr = ""
Stkn = ""
Stpir = ""


Dim T As Byte ' Температура
Dim Sign As String * 5 ' Знак температуры
Dim Byte0 As Byte
Dim Byte1 As Byte
Dim T1 As Byte
Dim T2 As Byte
Dim Tstr As String * 4

Dim Numb As Byte
Dim Connect As String * 6 ' Уровень сигнала
Dim Connectvar As Byte ' Уровень сигнала в числовом значении
Dim Operator As String * 20
'Dim Date_str As String * 20
Dim Time_str As String * 20
Dim Bat_str As String * 9 ' Для показа зарядки в процентах
Dim Bat_str1 As String * 9 ' Показ знака напряжения до запятой
Dim Bat_str2 As String * 9 ' Показ знака напряжения после запятой

Dim Phonenumbereeprom As Eram String * 12
Dim Phonenumber As String * 12
Phonenumber = Phonenumbereeprom

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

Вт авг 09, 2022 15:02:11

Вопрос решил, теперь другой вопрос.

Есть проект наверняка всем известный - http://avrproject.ru/forum/13-26-13 или вот http://avrproject.ru/publ/sistema_udale ... /1-1-0-112

Почему при получении СМС от оператора например при пополнении баланса номер телефона ранее сохраненный в EPROOM заменяется разными цифрами? именно при СМС от оператора

участок кода отвечающий за это:

Код:
$regfile = "m328pdef.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 68
$swstack = 68
$framesize = 120

часть переменных.
Dim Sms_num As String * 2                                   ' Порядковый номер смс
Dim Sms As String * 120
Dim Otvet As String * 160                                   ' Сообщение, которое модуль будет отправлять
Dim Sk As String * 66
...

Dim Phonenumbereeprom As Eram String * 12
Dim Phonenumber As String * 12
Phonenumber = Phonenumbereeprom

...

Обработка смски:
If Sms = "savenumber" Then                                   ' Если сообщение содержит данный текст
   Phonenumber = Number                                      ' Номер с которого пришла смс используется как номер для отправки сообщений
   Phonenumbereeprom = Phonenumber                           ' Записываем номер в энергонезависимую память
   Otvet = "Saved: " + Phonenumber
   Setfont Font8x8tt
   Lcdat 1 , 1 , "                "
   Lcdat 1 , 15 , "Save the number"
   Wait 1
   Lcdat 1 , 1 , "                "
   Gosub Atd
   Gosub Cls1
End If


То есть все работает отлично, с любых номеров команды обрабатываются, стоит пополнить баланс - сохраненный номер телефона слетает

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

Вт авг 09, 2022 21:40:37

Подключите модуль к компу и пообщайтесь с ним через терминал, увидите что именно он шлет.
Dim Sms As String * 120 - может и не хватить, оператор любит рекламу пихать в USSD ответ.
Bascom не контролирует переполнение строковых переменных.
Вполне возможно затирание других переменных при переполнении строки.

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

Вт сен 13, 2022 07:12:32

Mcselec тоже для России закончился? :kill:

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

Вт сен 13, 2022 07:31:35

Mcselec тоже для России закончился? :kill:

не могу выйти на сайт и форум

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

Пт сен 16, 2022 13:44:21

через Psiphon можно зайти

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

Ср ноя 23, 2022 20:42:43

Народ ,а как можно склеить 8 байт в переменную типа double?

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

Чт ноя 24, 2022 15:18:53

Вопрос снимается . Не думал что всё так просто ...)

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

Чт ноя 24, 2022 16:00:29

dimon-790, разве мы не увидим, что получилось? (Иначе смысл форумов теряется :/).

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

Пт ноя 25, 2022 07:38:02

Да собсно и рассказывать нечего . Сделал побитовое копирование а баском на автомате преобразовал в double . Вот и весь код...
Код:
  N_bits_double = 0
      For N_byte = 1 To 8                                   'перебираем байты
       For N_bits_byte = 0 To 7
       Vpls.n_bits_double = Value(n_byte).n_bits_byte       'копируем биты
        Incr N_bits_double
       Next                                                 '
      Next

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

Пт дек 02, 2022 18:06:22

Всем привет, коллеги.

Сломал всю голову, уже планирую собрать схему которая будет отслеживать зависание и перезагружать МК.
- - -

Работа s SIM900 SIM800, МК зависает если например замкнуть RX и TX, видимо в буфер сыпится мусор и из за этого программа застревает в цикле и не может из него выйти, я так понимаю.
Как решить этот ребус?

Пробовал задавать переменную и увеличивать ее, например если F=100 то выходим из цикла - см. код ниже

Код:
Sub Getline(s As String)
   S = ""
  dim F as byte
Do

      B = Inkey()                    'берем символ из буфера в формате ASCII
      Select Case B
          Case 0                    'возвращает в случае пустого буфера
          Case 13                    'возврат каретки (Enter), заместо него можно поставить пробел
          Case 10 : If S <> "" Then Exit Do                 'конец строки, значит выходит из подпрограммы
          Case Else : If B > 31 Then S = S + Chr(b)         'печатаемые
символы начинаются с кода 32 по таблице АСКИ, из них составляем строку
      End Select
incr F
  if F>100 then  'выйдем после 100 итераций
   exit do
end if
   Loop
F=0   'обнуляем переменную
End Sub


Но в этом случае программа перестает читать смс сообщения
Ответить