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

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

Сб май 08, 2021 15:23:06

Здравствуйте!
Всех с наступающим)

Есть вопросик чисто теоретический (да бы потом не вылезли грабли на практике).

Хочу использовать i2c для работы с датчиком температуры. Но также, хочу использовать прерывания int0, int1 для кнопок. Известно, что во время срабатывания прерывания, весь код прерывается и начинает выполняться код, который прописан для прерывания. Также, известно, что невозможно выполнить два прерывания одновременно. Так вот вопрос то... Не нарушат ли мои прерывания от кнопок работу протокола i2c и, соответственно, не получу ли я зависание или сбой при работе с датчиком? Ведь я не знаю как это все работает... А вдруг у датчика таймаут есть какой при ожидании ответа от МК (а МК в это время не ответит т. к. занят прерыванием от кнопки), а когда ответит, то уже датчик не поймет что от него хочет МК. Или это все учтено и все будет работать?
Или же для такого обязательно нужно использовать аппаратную i2c (TWI) (ведь аппаратный i2c работает сам по себе и не зависит от программы на низком уровне).

P. S.: Вот например в Ардуино если использовать Analog Write(), говорят, что занят какой-то таймер... То есть, этот таймер уже никак нельзя использовать. А что по i2c в Баскоме?

Спасибо.

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

Сб май 15, 2021 11:52:03

Здравствуйте!
Хочу использовать i2c для работы с датчиком температуры. Но также, хочу использовать прерывания int0, int1 для кнопок.


если протокол подразумевает жесткие временные интервалы, то нарушит.

1. если решать "в лоб", то запрещать прерывание в момент обмена (на всё время),
2. убрать кнопки с прерываний, разницы в сотую долю секунды не заметно,
3. аппаратный I2C в АВР (да и не только в оном) кривой и не имеет никакого особого смысла. Делайте программный, особой разницы ни в скорости, ни в простоте кода не будет.

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

Пн май 31, 2021 05:10:50

Здравствуйте, написал программу под камень ATmega328, программа имеет два прерывания по таймерам и сторожевой пёс", общение с внешними устр.ми по протоколам I2C и 1Wire.
Было замечено, что устройство перезагружается (зависает и "пёс" его ресетит). Эти перезагрузки проявляются спонтанно. может раз в неделю, может несколько раз в день. время и дату и кол.во раз я посчитываю.
Вопрос. Как найти место зависания? На устройстве есть UART, может можно метку какую сохранять... Кто имел дело с похожей ситуацией, как решали проблему.
Как вариант отключить watchdog и посмотреть где повиснет...

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

Пн май 31, 2021 07:05:52

Приветствую.

А watchdog на сколько настроен? Не факт ведь, что программа без него виснет, ей всего лишь достаточно где-то задержаться дольше чем положено. Отключите для начала пса конечно, и посмотрите, как устройство себя поведет. И если действительно будут зависания то хоть станет понятнее, в какие моменты они происходят. А так watchdog затирает все улики...

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

Пн май 31, 2021 07:13:28

watchdog настроен на 4 сек. Проверю, отключу... Спасибо

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

Пн май 31, 2021 07:32:41

Ну 4 секунды это конечно уже много. Похоже и правда виснет, вряд ли выполнение где-то шляется такое время...

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

Ср июн 30, 2021 16:17:19

Кстати, о watchdog. Обнаружил, что некоторые устройства с ним всё равно ухитряются намертво зависнуть. В упор не понимаю причины. Такое ощущение, что в них останавливается внутренний тактовый генератор (а такое вообще может быть??).
Также наблюдаются "отвалы" последовательного порта. Когда МК работает, реагирует на остальные прерывания, но перестаёт что-либо принимать или передавать на UART. Правда там ещё драйвер 485 порта висит, может быть это его фокусы.

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

Пт окт 22, 2021 07:23:14

Всем доброго дня. Пытаюсь запустить прогу, найденную когда-то давно в сети. Управление LCD-индикатором на двух драйверах КР1820ВГ1. С этим кодом отображаются только нули и точка: "000000.00". Хотя это по сути частотомер. Но никакую частоту он не меряет. Что в коде исправить, чтобы измерял частоту?

Даташит по КР1820ВГ1 искурил весь напрочь, но что то не особо помогло.

Добавлено after 12 minutes 18 seconds:
Уточнение по теме: индикатор от кассового аппарата "ЭКР-2102". На плате индикатора еще был впаян инвертор К561ЛН2. Я его выпаял и закоротил перемычками входы и выходы бывших инверторов на плате. То есть теперь сигнал получился прямой. Для этого в коде добавлена инверсия: I = Not I в подпрограмме передачи данных в КР1820ВГ1.
Есть подозрение, что надо бы прерывание TIMER1 переделать на захват по входу ICP1. Или как то по-другому можно? Например вход T1 использовать? Как тогда сконфигурировать таймеры?
Может быть вот так сделать?

Вот теперь бы надо как то эти два куска кода подружить между собой :shock:

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

Сб дек 18, 2021 22:05:21

Всем доброго времени суток. Кто-нибудь имел дело с Китайским модулем MP3-TF-16P. Хочу сделать манок на птицу на Atmega8 и Oled дисплее. Мне-бы хоть пример какой нибудь, пытался с даташита отсылать команды не какой реакции.ПОМОГИТЕ!!!

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

Сб дек 18, 2021 22:34:34

Это тот же DFPlayer_mini. Здесь есть примеры. https://bascomavr.3bb.ru/viewtopic.php?id=2213

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

Сб дек 18, 2021 23:24:11

Спасибо. Но там на МК я не нашёл только терминал.

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

Вс дек 19, 2021 08:56:52

Ковырял когда то,пример-
циклическое воспроизведение:
Код:
Printbin &H7E; &HFF; &H06;&H11; &H00; &H00; &H01; &HEF

Основные комманды-
Код:
0x01 Следующая песня.
0x02 Последняя песня.
0x03 Указать дорожку(NUM) 0-2999
0x04 Громкость+
0x05 Громкость-
0x06 Укажите громкость 0-30
0x07 Обозначение EQ(0/1/2/3/4/5) Normal/Pop/Rock/Jazz/Classic/Base
0x08 Укажите режим воспроизведения (0/1/2/3) Петли / папки петли/одиночные петли/случайные
0x09 Обозначение оборудования (0/1/2/3/4) U/TF/AUX/SLEEP/FLASH
0x0A В сон -- потребление низкой мощности
0x0B Нормальная работа
0x0C Сброс микросхемы
0x0D Играть
0x0E Пауза.
0x0F Задает воспроизведение папки 1-10(требуется настройка)
0x10 Настройки PA {DH=1:Open PA}{DL: установка усиления, 0-31}
0x11 Воспроизведение петли {1: loop}{0: остановить loop}

Еще переводил даташит на русский,но там многое переведено криво

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

Вс дек 19, 2021 14:18:01

Здравствуйте, искал на просторах интернета готовые библиотеки для дисплея на контроллере GC9A01. Не нашел. Переделал найденную для SSD1351.
Решил поделиться, берите кому надо.
Использован аппаратный SPI, подключение следующее -
DIN - MOSI контроллера
CLK - CLK контроллера
CS - Portb.0 (можно менять на любой другой)
DC- Portl.0 (можно менять на любой другой)
RST - Portl.1 (можно менять на любой другой)

Изображение Изображение Изображение

Цель - использование круглых дисплеев, очень они красиво показывают.

Такие тоже будут работать -
Изображение
Вложения
GC9A01.7z
(163.49 KiB) Скачиваний: 291

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

Вт мар 22, 2022 06:13:40

Удалил,разобрался сам

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

Сб мар 26, 2022 14:52:18

Всем привет. Хочу снова поднять одну тему, которой я занимался

года два назад. Суть проблемы. Есть аппарат, каретка приводится

в движение мотором и ходит поочередно влево-вправо. В конце

движения - концевики на замыкание.Каретка идет влево, концевик

выключает мотор. Через 30 сек таймер запускает мотор, каретка

идет вправо, правый концевик его выключает. И так по кругу.

Проблема в том, что в момент включения мотора концевик

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

Привожу основной цикл кода. Может, кто посмотрит свежим

взглядом.
Код:
Do

If V = 30 Then                                              'таймер отсчитал заданное время
   If L_end = 0 Then                                        'сработал левый концевик
      If R_end = 1 Then                                     'правый концевик разомкнут
         Set Rele                                           'реле включило мотор
         Set Red                                            'загорелся светодиод
      End If
   End If

   If R_end = 0 Then                                        'сработал правый концевик
      If L_end = 1 Then                                     ' левый концевик разомкнут
         Set Rele                                           'реле включило мотор
         Set Red                                            'загорелся светодиод
      End If
   End If

   If L_end = 1 Then                                        'каретка - в промежуточном положении
      If R_end = 1 Then
          Set Rele
          Set Red
      End If
   End If
   V = 0
End If

If L_end = 0 Then                                           'сработал левый концевик
   Reset Rele                                               'выключение мотора и диода
   Reset Red
End If

If R_end = 0 Then                                           'сработал правый концевик
   Reset Rele                                               'выключение мотора и диода
   Reset Red
End If

Loop

Timecount:                                                  'счетчик времени таймера
Incr V
Return

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

Вс мар 27, 2022 20:54:21

так разные ж концевики....
Режим 1. Ждем таймер.
Режим 2. Начинаем движение вправо, левый концевик игнорируем, мониторим состояние только правого концевика. Крутим, пока правый разомкнут.
Режим 3. Ждем таймер.
Режим 4. Начинаем движение влево, правый концевик игнорируем, мониторим состояние только левого концевика. Крутим, пока левый разомкнут.
Идем в режим 1.

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

Пн мар 28, 2022 00:07:05

rojnov писал(а):Суть проблемы. Есть аппарат, каретка приводится

в движение мотором и ходит поочередно влево-вправо. В конце

движения - концевики на замыкание.Каретка идет влево, концевик

выключает мотор. Через 30 сек таймер запускает мотор, каретка

идет вправо, правый концевик его выключает. И так по кругу.
:facepalm:
Ваша проблема решается без всяких МК одной релюшкой на переключение, двумями :))) концевиками на размыкание и 555 таймером.. :dont_know:

зы.. Вроде как можно использовать прерывания - есть некоторые "настройки" - прерывание по перепаду из 0 в 1 или наоборот- перепад из 1 в 0.. :dont_know:
Тогда, если у вас с концевика идёт 0 или 1- программа на это не реагирует.

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

Пн мар 28, 2022 16:40:46

Ваша проблема решается без всяких МК одной релюшкой на переключение, двумями :))) концевиками на размыкание и 555 таймером.. :dont_know:

Идея интересная. Хотелось бы увидеть схему.

Добавлено after 35 minutes 18 seconds:
Переделал я немного код, убрал все лишнее. В принципе у меня

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

концевика. Но все равно при замкнутом концевике мотор не хочет

запускаться. Инж
дикаторный светик коротко моргнет и тухнет. И все. Никак не

могу понять, чего ему не хватает.
Код:
Do

If V = 30 Then                                              'таймер отсчитал заданное время
   If R_end = 1 Then                                        'правый концевик разомкнут
         Set Rele                                           'реле включило мотор
         Set Red                                            'загорелся светодиод
   End If

   If L_end = 1 Then                                        ' левый концевик разомкнут
         Set Rele                                           'реле включило мотор
         Set Red                                            'загорелся светодиод
   End If

   If L_end = 1 Then                                        'каретка - в промежуточном положении
      If R_end = 1 Then
          Set Rele
          Set Red
      End If
   End If
   V = 0
End If

If L_end = 0 Then                                           'сработал левый концевик
   Reset Rele                                               'выключение мотора и диода
   Reset Red
End If

If R_end = 0 Then                                           'сработал правый концевик
   Reset Rele                                               'выключение мотора и диода
   Reset Red
End If

Loop

Timecount:                                                  'счетчик времени таймера
Incr V
Return

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

Пн мар 28, 2022 17:11:38

А так?
для примера взял аттини2313,добавил зеленый светодиод для отладки
Код:
$Regfile="attiny2313a.dat"
$Crystal=4000000
$hwstack=40
$swstack=16
$framesize=32
L_end alias pinb.0:config PORTB.0=input:portb.0=1
R_end alias pinb.1:config PORTB.1=input:portb.1=1
Rele alias portb.2:config PORTB.2=output
Red alias portb.3:config PORTB.3=output
green alias portb.4:config PORTB.4=output  'светодиод,пока идет отсчет времени горит,по истечении 30 сек гаснет-для отладки
' настраиваем таймер
Config Timer1 = Timer , Prescale = 64
On Timer1 Timecount
timer1=3036
Enable Timer1
Enable Interrupts
dim v as byte


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

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

Loop
Timecount:                                                  'счетчик времени таймера
timer1=3036
Incr V
Return

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

Вт мар 29, 2022 20:07:59

Добрый вечер. Попробовал я на макетке предложенный мне

последний вариант. Проблема осталась - реле не хочет

включаться, пока замкнут концевик. А по условиям концевик

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

остается открытым. Жду, может еще кто-нибудь подскажет умную

мысль.
Ответить