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

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

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

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


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


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

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

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

Нордик, ты апять за "своё"???
Disable Interruptsв теле обработчика ---  :rofl:
Waitms в теле обработчика ---  :crazyfun:
Enable Interrupts вканце Return-а  ---   :D
Япацталом с таких "кодерофф"  --- >>  :cool:

-1

9

knop:
If PIND.2 = 0 Then Goto knop       ' Ждем окончания сигнала DV от модуля
А если условие ВЫполнится, долго "мы" буИм "торчать" "фприрЫвании-> считай нирване" ??? А ???
ваАаще вафиге с таких "кодерофф"  :rofl:  :canthearyou:

-1

10

Читай даташит.

+1

11

-NMi- написал(а):

Disable Interruptsв теле обработчика
Waitms в теле обработчика
Enable Interrupts

А я вот лицезрею не "обработчик прерывания", а способ ухода от постоянного сканирования наличия сигнала DV от модуля в обычную подпрограмму по появлению INT.
И не один "квазигуру" не сможет запретить мне этого.

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

0

12

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

0

13

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

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

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

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

0

14

Вот ты туда 18В20 пару штук "прикрути" и всё у тебя "всплывёт" с твоими "пирирыванийами" прерываниями.
I2C аппаратная то-же "хромать" будет...

-1

15

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

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

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

-NMi- не нужно коверкать русский язык!
Ознакомитесь с правилами форума. http://bascomavr.3bb.ru/misc.php?action=rules

0

16

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

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

Из приведенного листинга перед публикацией были удалены:
- запущенный 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

17

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

Назовём это "абсолютно НЕПРАВИЛЬНЫЙ подход" для написания обработчика прерываний.
Я бы сделал так:
Как ты и сам говоришь, что модуль довольно медленный... взял бы любой таймер прям вот самый медленный, и...
В обработчике таймера сделал счётчик и по тикам управлял бы сигналами входа микрухи и "попутно" читал выход с неё-же.
Заметь, НИЧЕГО ждать не придётся и обработчик займёт не более 100-200 ТАКТОВ процессора вместе с входом и выходом в прерывание!!!
Учись, пока я добрый      :D

0

18

Вот тебе в качестве примера "разбивка" квантов времени для "чОткой" синхронизации событий в программе.
Работает этот модуль с небольшими изменениями уже во многих моих поделках + поддерживает PWM режим одновременно!!!

Кусок кода:

$asm
      push R16
      in r16,sreg
      push r16
      push r17
      ldi r17,1
      lds r16,{Timer0_ovf_l_counter}
      inc r16
      cpi r16,10
      brlo t0_ovf10
      clr r16
      sts {Need_keyboard_scan_counter},r17
rcall led11

T0_ovf10:
      sts {Timer0_ovf_l_counter},r16
      lds r16,{Need_display_update_counter}
      inc r16
      cpi r16,50
      brlo t0_ovf20
      clr r16
rcall led10

T0_ovf20:
      sts {Need_display_update_counter},r16
      lds r16,{Need_ds18b20_scan_counter}
      inc r16
      cpi r16,100
      brlo t0_ovf30
      clr r16
rCall Led13

T0_ovf30:
      sts {Need_ds18b20_scan_counter},r16

      lds r16,{Need_dht11_scan_counter}
      inc r16
      cpi r16,200
      brlo t0_ovf40
      clr r16

0

19

Модуль 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

20

Еще одни модуль...
Статическая индикация на 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

21

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

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

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

0

22

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

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

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

0

23

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

+1

24

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

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

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

+2

25

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

+2

26

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

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

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

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

0

27

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

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

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

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

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

0

28

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

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

0

29

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

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

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

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

0

30

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

0


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