Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Периферия » Использование готовых модулей


Использование готовых модулей

Сообщений 1 страница 26 из 26

1

Применительно к имеющимся в продаже готовым модулям...

Упомянутый здесь Кухонный таймер модуль сенсорной клавиатуры 4х1
http://sh.uploads.ru/t/UHqrl.jpg
был использован следующим образом:
- позиция "кнопки 2" была просверлена и использована для крепления модуля к лицевой панели.
Винт М2.5х10 с металлической проставкой h=3мм.
- к "кнопка 1" и "кнопка 4" припаяны удлиняющие провода ~ 4см.
- установлена перемычка "SM", чтоб модуль не отрабатывал на "соседние" касания.

Каких-то временнЫх задержек для "адаптации" модуля не потребовалось.

Отредактировано Nord (2019-04-19 20:30:31)

0

2

А от батареек без гальванической связи с электросетью сие чудо будет работать ???

0

3

Работает же в указанном устройстве... ;)

0

4

Принцип работы данных сенсоров основан не на "электронаводках" , а замере количества кулонов в штуках.

+1

5

Еще один модуль на м/с TTP229...
http://sd.uploads.ru/t/0fBPu.jpg
Отличается от модуля 4х1 тем, что передает данные по последовательному интерфейсу, сходным с SPI.
Если использовать модуль в режиме 4х2, то данные можно читать с выходов OUT1-OUT8 в "параллельном" виде.
В этом режиме будут задействованы только "кнопки" 1...8.
При установке перемычки JP3 (см. ниже, отмечена красным) читаются все "кнопки".
В обоих случаях при касании двух соседних "кнопок" на выходе получим значение первой "нажатой", т.е. совместное считывание исключено.
http://s8.uploads.ru/t/6uj89.jpg
Подключение:
SCL - вход тактирования
SDO - выход сигнала "нажатия" (DV) и передача данных.

Модуль довольно медлительный, один сеанс - более 30 мс, поэтому тактировать можно "вручную", без использования таймеров. ;)
Код для работы с модулем по последовательному интерфейсу, 16 кнопок, активный уровень сигналов Low.

Свернутый текст

Config PORTA.0 = Output         ' Тактирование модуля
PORTA.0 = 1
Config PORTD.2 = Input           ' Прием сигналов от модуля

CLOCK Alias PORTA.0               ' Определение бита CLOCK
DIN Alias PIND.2

Const tc = 250                         ' Длительность задержки при тактировании
Dim key As Word                      ' Считанное значение

'====================================================================

knop:
If PIND.2 = 0 Then Goto knop       ' Ждем окончания сигнала DV от модуля
Waitus 10

For a = 0 To 15
    CLOCK = 0                              ' Активный фронт тактирования
    Waitus tc                                 ' Задержка
    key.a = DIN                            ' Чтение бита данных
    CLOCK = 1
    Waitus tc                                 ' Задержка
Next a

Waitms 2                                     ' Задержка-сигнал окончания сеанса

Хочется отметить, что модуль адекватно реагирует, если к сенсорным площадкам будут припаяны удлиняющие проводники до 40см (длиннее не пробовал).
Обязательно припаяны (!), простых зажимов недостаточно.
Прокладка этих проводников не критична за одним моментом - не прокладывать жгутом.
А свободная прокладка, хоть с перекрещиванием - без проблем.

PS. На очереди еще модуль 4х2 на TTP226... ;)

Отредактировано Nord (2019-04-22 00:27:52)

+1

6

Брал отдельно микросхемы, при простое 10 мин чуйки уже не было, то ли подделка или брак.

0

7

Возможно, действительно брак или подделка, что в конечном итоге одно и то же... ;)
Я свои эти "испытания" провожу, гоняя по часу-два, изредка касаясь "кнопок" и слежу за результатом.
Живут... ;)

0

8

Обработка прерывания должна быть выполнена как можно быстрее. Задержки не рекомендованы. Если первая на 10 мкс еще допустима, то 2 мс это много для прерывания.

0

9

Пётр написал(а):

Обработка прерывания должна быть выполнена как можно быстрее. Задержки не рекомендованы. Если первая на 10 мкс еще допустима, то 2 мс это много для прерывания.

Согласен на "все 100", но я, вроде бы понятно объяснил использование прерывания.
Да, оформлено вроде бы как обработчик, но нас никто не заставляет как можно быстрее его заканчивать.

Крутиться в главном цикле и сканировать сигнал ?
Можно пропустить, т.к. импульс DV всего чуть более 90 мксек (по факту - 78, определено лог.анализатором)...
А если другие операции в главном цикле или вывод на LCD...

0

10

Nord написал(а):

Да, оформлено вроде бы как обработчик, но нас никто не заставляет как можно быстрее его заканчивать.

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

-NMi- не нужно коверкать русский язык!
Ознакомитесь с правилами форума - Правила Форума "Программирование ATMEL в BASCOM."

0

11

Пётр написал(а):

В этой программе да, но в реальном устройстве где много другого кода в т. ч. прерываний, на которые нужно реагировать как можно быстрее, такой метод не сработает.

Из приведенного листинга перед публикацией были удалены:
- запущенный Timer0
- прерывание таймера для счетчика мксек (использовались при отладке)
- вывод значений на LCD 20*4

Пётр написал(а):

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

Назовем это - "нестандартный подход к использованию прерывания"... ;)

Я дал лишь отработанный алгоритм считывания.
Можно было бы ограничиться только этим, сопроводив комментариями и тогда бы вопросов было меньше. ;)
Поправлю... ;)

Свернутый текст

knop:
If PIND.2 = 0 Then Goto knop       ' Ждем окончания сигнала DV от модуля
Waitus 10

For a = 0 To 15
    CLOCK = 0                              ' Активный фронт тактирования
    Waitus tc                                 ' Задержка
    key.a = DIN                            ' Чтение бита данных
    CLOCK = 1
    Waitus tc                                 ' Задержка
Next a

Waitms 2                                     ' Задержка-сигнал окончания сеанса

Странно, что использование прерывания здесь Кто передавал температуру 18в20 по радиоканалу? (нижний листинг) никого не заинтересовало, даже нашего "суперкодера"... ;)

Отредактировано Nord (2019-04-22 01:16:15)

0

12

Модуль 4х2 на TTP226
http://s7.uploads.ru/t/EHtoz.jpg
Для включения последовательного интерфейса с активным уровнем сигналов Low - на плате модуля замкнуть перемычки AHL, OP1.
Не устанавливая OP1 получим параллельный выход.

Подключение для последовательного интерфейса:
DV - выход модуля, импульс "есть нажатие"
OUT1 - выход данных
OUT7 - вход RST
OUT8 - вход тактирования

Методика чтения практически идентична модулю 4х4, за исключением того, что после получения импульса DV модуль надо "пнуть" подачей импульса RST, после этого включаем тактирование и читаем состояние "кнопок".

Модуль отдает данные в виде байта, где каждая "кнопка" соответствует позиции "своего" бита, т.е. "кнопка 1" отдаст &B0000_0001, "кнопка 5" отдаст &B0001_0000, а "кнопка 8" отдаст &B1000_0000.

При параллельном выходе выходы OUTx соответствуют номеру "кнопки".

Свернутый текст

Const tc = 70                             ' Длительность задержки при тактировании
Dim key As Byte
Dim a As Byte

'==============================================================

'==============================================================
dread:                                         ' Прочитать состояние клавиатуры

knop:
If DV = 0 Then Goto knop             ' Ожидаем окончания импульса DV
Waitus 10

RS = 0                                        ' Формируем импульс RST
    Waitus tc                                 ' Задержка
RS = 1
Waitus tc                                     ' Задержка

For a = 0 To 7
    CLOCK = 0                              ' Активный фронт тактирования
    Waitus tc                                 ' Задержка
    key.a = DIN                              ' Чтение оставшихся битов данных
    CLOCK = 1
    Waitus tc                                 ' Задержка
Next a

Заметил одно неудобство - достаточно длительное (на мой взгляд) время готовности между "нажатиями" - более 3 сек при использовании настроек "по умолчанию"...
На предыдущих модулях этого не наблюдалось...
Лечится установкой соответствующих перемычек (в даташите описаны, на практике не проверял).

+1

13

Еще одни модуль...
Статическая индикация на SD16739.
Где брались (год назад) уже не помню  :blush: , на сегодня видел их тут https://ekits.ru/catalog/modules/displays/, но уже далеко не по той цене... ;)
Взял 10 шт., 8 использованы.
http://s9.uploads.ru/t/qo8M4.jpg
http://sh.uploads.ru/t/Ewma6.jpg
Интерфейс последовательный, схожий с MAX7219...
Модули можно каскадировать, конструкция позволяет это сделать "без напильника" ;)

Подключение (тестовое) на ATMega32:
PORTA.0 - CLOCK
PORTA.1 - OUT
PORTA.2 - LATCH
PORTB.3 - ENABLE
где:
CLOCK - тактирование при загрузке данных
OUT - данные для загрузки в регистр
LATCH - "защелка" данных в выходном регистре
ENABLE - разрешение выхода выходного регистра.

Линию ENABLE можно использовать для регулировки яркости индикатора силами ШИМ, резисторы "не катят"...
Шкала от 1 до 32, причем 32 - практически потушенный индикатор (!), виден только в глубокой темноте и то еле-еле...
Если этого не требуется - просто на GND.

Тестовая программа:

Свернутый текст

$Regfile="m32adef.dat"
$Crystal=8000000
$hwstack=16
$swstack=16
$framesize=32

'=======================================================
Config Timer0 = Pwm, Compare Pwm = Clear Up, Prescale = 64

Config PORTA.0 = Output        ' CLOCK
Config PORTA.1 = Output        ' OUT
Config PORTA.2 = Output        ' LATCH
'Config PORTB.3 = Output         ' ENABLE

CLOCK Alias PORTA.0             ' Определение бита CLOCK
DOUT Alias PORTA.1                ' Определение бита OUT
LATCH Alias PORTA.2              ' Определение бита LATCH
'ENABL Alias PORTB.3              ' Определение бита ENABLE (выход ШИМ)

Const tc = 5                               ' Требуемая задержка для работы SD16739

Dim a As Byte
Dim b As Byte
Dim c As Byte
Dim symb As Byte
Dim shim As Byte                      ' значение ШИМ
Dim br_counter As Byte             ' значение яркости

Dim symbols(12) As Byte
'                                                    Таблица символов
symbols(1) = 252     ' 0
symbols(2) = 96       ' 1
symbols(3) = 218     ' 2
symbols(4) = 242     ' 3
symbols(5) = 102     ' 4
symbols(6) = 182     ' 5
symbols(7) = 190     ' 6
symbols(8) = 224     ' 7
symbols(9) = 254     ' 8
symbols(10) = 246   ' 9
symbols(11) = 1       ' . (точка)
symbols(12) = 0       ' пустой разряд

'=======================================================
'=======================================================
Do

For br_counter = 1 To 32              ' Цикл управления яркостью
Gosub bright

For symb = 1 To 12                      ' Перебор символов из таблицы
    Gosub show
    Waitms 500
Next symb

Next br_counter

Loop
End
'=======================================================
'=======================================================
bright:                                              ' Значение ШИМ (управление яркостью)

'                                                        Таблица ШИМ
'-------------------------------------------------------------------------------------------------------
'ШИМ         255    247     239     231     223     215     207     199     191    183    175    167
'яркость     32      31       30       29       28       27       26       25       24      23      22      21
'-------------------------------------------------------------------------------------------------------
'ШИМ         159    151     143     135    127     119      111      103     95      87      79      71
'яркость     20      19       18       17       16       15       14       13       12      11      10      9
'-------------------------------------------------------------------------------------------------------
'ШИМ         63       55       47      39      31      23      15      7
'яркость     8         7         6        5        4        3        2       1
'-------------------------------------------------------------------------------------------------------

shim = br_counter * 8
shim = shim - 1
PWM0 = shim

Return

'=======================================================
show:                                             ' Показать текущие значения
a = symbols(symb)                       ' Выбор символа из таблицы
Gosub send
LATCH = 1                                     ' "Щелк" для загрузки в выходной регистр ;)
LATCH = 0
Waitms 250

b = symb + 1
a = symbols(b)
Gosub send
LATCH = 1
LATCH = 0
Waitms 250
Return

'=======================================================
send:                                              ' Отправить 1 байт в SERIAL_IN
For c = 0 To 7
    CLOCK = 0
    DOUT = a.c
    Waitus tc
    CLOCK = 1
Next c
Return

'=======================================================

Несмотря на то, что используется статическая индикация, модуль нельзя назвать "жрущим" - 4-х разрядная сборка кушает при индикации "88" не больше 95mA (практический замер).

Имеется разработанная модель SD16739 для Протеуса.

Отредактировано Nord (2019-04-22 19:46:52)

0

14

Nord написал(а):

Несмотря на то, что используется статическая индикация, модуль нельзя назвать "жрущим" - 4-х разрядная сборка кушает при индикации "88" не больше 95mA

Если это нежруший модуль, то как назвать конструкцию с 4-ех разрядным индикатором (правда динамическая индикация), которая потребляет 10 ма (вместе с МК) и светит так что яркость кажется чрезмерной при комнатном освещении и нормальной на улице в тени?

0

15

Пётр !
Вопрос подхода... ;)
Я, например, никогда не озадачиваюсь, если питание конструкции будет сетевое.
Нынешние м/с - далеко не 580-й комплект... ;)
Для батарейного питания - тут да, модуль не самый подходящий вариант... ;)

Но у "статики" есть свои "плюсы":
- отсутствует мерцание.
- в цепях, критичных к цифровым шумам, работает стабильнее
- требует меньше ресурсов МК

Отредактировано Nord (2019-04-22 22:15:44)

0

16

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

+1

17

Радиомодули HC-12...
Казалось бы, всем известны, много про написано...
Однако, есть ньюансы. ;)

В результате поисков решения для реализации цели "минимум энергопотребления + устойчивость сигнала" пришёл к выводу:
- передающий и принимающий модули должны быть включены в одном режиме (AT+FUx)
Иначе - все потуги в битрейтах и т.п. - "ноль без палочки"
- питание модуля должно быть не менее 3,1в !!!
Иначе - все ваши потуги что-либо добиться от него обречены на провал...
- при использовании других режимов работы (не FU3), в случае отключения питания модуля - перед передачей делать паузу не менее Waitms 80 (опробовано практически)
Иначе - потеря первых 1...3 бит передачи (читай - первый байт)

Отредактировано Nord (2019-06-24 18:58:14)

+2

18

вообще-то это есть в даташите и рекомендациях. Да и логично: у передатчика и приёмника ОБЯЗАНЫ быть одинаковые настройки :)
так же рекомендую вблизи модуля поставить 2-3 керамических конденсатора с общей ёмкостью не менее 40uF. Можно и один электролитический на 100uF - нормальная работа.

+2

19

Александр Д. написал(а):

вообще-то это есть в даташите и рекомендациях.

Я с аглицким плохо дружу, потому, видимо, этого не вычитал... ;)

С конденсаторами - согласен, только можно подправить  - х10 ;)
Не 40, а 400, не 100, а 1000...
Хужее не станет. ;)

0

20

Александр Д. написал(а):

Да и логично: у передатчика и приёмника ОБЯЗАНЫ быть одинаковые настройки

А с другой стороны - отчего ?
Указан битрейт - чего еще надо ?
Эти модули позиционируются, как "удлинитель UART"... ;)

Указание режима работы (битрейта) передатчика определено...
В приемнике (МК и HC-12) битрейт определен...
Связи нет, пока не укажешь в принимающем модуле такой же режим, как и в передающем...

Отредактировано Nord (2019-06-22 22:50:12)

0

21

не соглашусь: "оттого" :)
изменение режиме это НЕ только битрейт, а физ.сигналы в эфире: длительность и методы кодирования. В даташите половина под это отведена.

Не понравились они мне, точнее, сама частота - не для города. Что у меня работало на 100 метров, то в Питере - метров 30.

0

22

Александр Д. написал(а):

Не понравились они мне, точнее, сама частота - не для города.
Что у меня работало на 100 метров, то в Питере - метров 30.

В моих случаях применения дальности хватает "за глаза".

Пробовали nRF24L01Pluss - проявили себя нехорошо. Отказались в пользу НС-12.

0

23

nRF24L01 я тоже щупал, осталось неприятное послевкусие... Уже и не помню, от чего.

0

24

Использование HC-12 при условии батарейного питания...
Не годятся от слова "совсем" при всех остальных "плюсах" в их адрес.
Речь идет о "домашнем" применении.

Пробовались в разных режимах "экономии" (как FU2, так и SLЕЕP).
Что в первом случае, что во втором - проверенная "батарейка" 2800мАЧ формфактора 18650 смогла "продержать" систему не более 10 суток...

Задача "системы" - раз в ~10 мин считывать DS18B20 и отправлять полученное...
Рулит всем ATTiny85.  Индикатором отправки служит светодиод, включенных "по-минимуму", от силы 5мА
МК и датчик не "спят"...

В результате - спустя указанное время (см. выше) с/д "мигает", но физической отправки нет...
Отключение питания, как, например, тут http://avrproject.ru/publ/besprovodnaja … /1-1-0-176 , результат не дает (не знаю, как у автора что-то работало)...

Пробовались: PRAB37S, IRL540N, BS170...
Толку "ноль" - при снижении Ubat ниже 3в МК продолжает работать (выход на UART есть), а HC-12 что-то передавать категорически отказывается...

Очередное подтверждение - как бы ни бы хороши и удобны HC-12 - питание для них должно быть не менее 3.1в !

0

25

Nord
Для питания чего-то пятивольтового от трёх вольт и ниже я использовал старенький NCP1402,у него есть вывод ENABLE. Если надо передать,то включаем NCP1402,запитываем датчик,снимаем данные,запитываем передатчик,отсылаем,всё вырубаем. Если уарт всё время включен,он даёт на вход передатчика лог.единицу,если у передатчика отрубить плюс питания,он всё равно будет запитан через уарт(на ASK передатчиках так),а значит надо у передатчика отрубать минус по питанию. У меня почти такая же конструкция=18в20+мега88V+самодельный ASK на MICRF115 (только все спят)работал от двух полудохлых обычных батареек больше полугода,потом прикрутил к этим же батарейкам самодельную солнечную панель на 3 вольта.Прошёл почти год,даже боюсь заглядывать в корпус,наверняка всё потекло и заржавело(на подоконнике стоит)а всё равно всё работает.

+1

26

Sergik07 написал(а):

Для питания чего-то пятивольтового от трёх вольт и ниже я использовал старенький NCP1402,у него есть вывод ENABLE.

Были и такие мысли, возможно, тоже пойду по этому пути.

Просто сейчас снял упомянутую здесь конструкцию Универсальная сигнализация Xmega Si4463 Рация AVR-DOS для изучения и доработки. Вот и начались "исследования" ;)
Здесь питание было сделано от двух соединенных последовательно 18560 через LDO стабилизатор LM2931AZ-5.0G.
Первое включение было в конце октября 2017 года, с тех пор устройство не выключалось и не трогалось.
HC-12 в режиме FU2, 9600.
Напряжение на входе LDO перед выключением - 5,62в.

Отредактировано Nord (2019-07-01 11:35:40)

0


Вы здесь » Программирование ATMEL в BASCOM. » Периферия » Использование готовых модулей