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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Кто передавал температуру 18в20 по радиоканалу?


Кто передавал температуру 18в20 по радиоканалу?

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

1

Давно мучает эта тема, но ничего на Bascom не найти. Есть хорошая на PICBasic Pro.
       http://ucprog.ucoz.ru/publ/chasy_termom … om/1-1-0-1
Передача в принципе понятна. Код Bascom AVR открывает. Передатчик довольно не сложно повторить например на Тиньке 13. VDT в роли таймера сна, потребление 5мкА. С приемом у меня тупик. Не представляю даже как поймать передачу в нужное время. Посылки идут раз в 5 мин по 3 с паузой 30 мсек. Когда передатчик выключен у приемника на выходе шум.

Отредактировано rom-i (2018-10-09 22:59:27)

0

2

У тини13 нет возможности подключить внешний кварц.От дрейфа питания и температуры частота внутреннего тактирования будет плавать. Делал на меге88 L. Посылал через уарт строкой типа: "1478+12.4144". 1478-ID передатчика; +12.4- температура;144-контрольная сумма. На приёме полученная строка разбиралась на байты и выводилась на экран.Приёмник включен всегда,потому как у сверхрегенеративного приёмника,который обычно используется в радиомодулях,полоса пропускания 3 футбольных поля,вот и лезет мусор со всего мира,а значит можно пропустить свою посылку.

0

3

Тоже думал про уарт. Но хотелось разобраться с побитной темой. Именно прием.

0

4

rom-i
Если по-битно,придётся садиться на прерывание и считать.Стабильность тактирования и там тоже важна.

0

5

rom-i написал(а):

но ничего на Bascom не найти.

Разве?
Раз, два.

0

6

rom-i написал(а):

Не представляю даже как поймать передачу в нужное время.

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

Практически про это же и Sergik07 написал.
Принципиально так же, как и с упомянутым UART-ом...

Отредактировано Nord (2018-10-10 18:09:55)

0

7

Я примеры работы с RF433 брал тут. И по теории немного есть...
Сайт хоть и на польском, но гугл переводчик помог. :)

0

8

Я делал на MRF-49,тема на вртп
В передатчике атмега88,кварц на 32768 Гц и заведены софтовые часы,каждую минуту (можно сделать любое время) атмега просыпается,измеряет температуру,будит MRF49,отправляет в эфир ид и температуру,затем все засыпает
Приемник при включении ждет сигнала с другой мрф49,которая настроена на прием,при поступлении сигнала сбрасывает время в ноль (там тоже софтовые часы),принимает посылку,мрф-ка уходит в сон,как пройдет 59 сек (если в передатчике время 1 минута) снова включает мрф-ку,принимает посылку и снова в сон
довольно экономично...

0

9

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

Вот у меня, и не получается с приемом нужной последовательности. Приемник RF433 в порт фарш хреначит. Как нужное выбрать?
На Польском сайте региться надо. Может, и помогло бы.

Отредактировано rom-i (2018-10-10 21:09:47)

0

10

rom-i написал(а):

Давно мучает эта тема, но ничего на Bascom не найти.

Я делал на nRF24L01.   2 одинаковых модуля: Один на передатчике, а другой на приемнике. Стоят не дорого.
Вот тут подробное описание nRF24L01 и примеры найти можно. В том числе и на этом форуме: ВОТ .   MAX  дал ссылку "два" с примером. 
Модуль  хорош тем, что в режиме приема слушает и сохраняет принятое из эфира в своей памяти. Нужно лишь периодически проверять, читать принятое и очищать его память. Нет нужды засекать "определенное время".  И протоколы обмена не нужно выдумывать.
Кстати, я тоже когда-то хотел сделать радиоканал как на приведенной в первом сообщении ссылке, и даже купил эти модули (так и валяются).  Не лучший вариант.

Отредактировано SV12 (2018-10-11 00:40:42)

0

11

rom-i написал(а):

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

Делал так:принимаем в переменную А всё,что выдаёт приёмник,а послали мы вот это "1478+12.4144"
считываем первые четыре байта
если это 1478 раскладываем дальше,сравниваем контрольные суммы (полученную в посылке и высчитанную самими)
если нет выходим на метку и опять на приём.
Только я посылал  ещё байт синхронизации. Вот так,примерно,выглядит мой код передачи:

Код:
Dim All_out As String * 18 
Dim Sinchr As Byte 
Sinchr = &B11111111

Snd:
      For Sch = 0 To 4
      Printbin Sinchr
      Print
      Print All_out
      Print All_out
      Waitms 75
   Next Sch
   Return


Приём выглядит примерно так:

Код:
 
Dim Id_data As String * 4
Dim Sinhr As Byte 
 
do
Strt:
      Gosub Kodin
Id_data = Left(Temp_in, 4) 
If Id_data = "1478" Then
делаем что надо
Else
   Temp_in = ""
    Goto Strt
  End If

Kodin:
   Inputbin Sinhr
   Input Temp_in
Return

loop

Если в передатчике радиомодуля вход модулятора(DAT,DAT IN),или у кого как обозвано,подключен к ТХ уарт,то на этом входе,даже без передачи, всегда будет единица,а это значит,что передатчик всегда будет дуть в эфир свою несущую.Для приёмника это как глухота.Я делал так:включение питания передатчика,ждём 100-150 мс,передаём(переходим на Snd),ждём 100 мс,отрубаем питание передатчика. Сейчас самодельный приёмник принимает данные с модуля часов,модуля влажности\температуры и модуля температуры на другой стороне дома без сбоев круглые сутки.

Отредактировано Sergik07 (2018-10-11 08:38:26)

0

12

Видимо вопрос в теме задан не корректно. Теперь не знаю как переиначить. Под радиоканалом имел ввиду не готовые модули передачи по радио UART, SPI, 12C. В них уже все сделано. Нужно в сигнале только идномер своего устройства передавать. Один нюанс. Тока они жрут немерино, и цена не копеечная.
А передачу на обычном АМ передатчике, прием на сверегенератор. Модули RF-5V, VL101, или подобное.
Отличная ссылка в начале статьи. Батарейки CR2032 хватает на год. Собирал, отлично работает. Передатчик повторить на Bascom AVR не сложно. Вопрос с приемом. Приемник(сверхрегенератор) без несущей хреначит на выходе шум. Его нужно отсеивать.

0

13

Sergik07
Вы единственный, кто понял мой вопрос. Предложения впринципе понятны. Только в буфере приемника уарт будет собираться каша. Его нужно как то чистить.
Inputbin Sinhr
Input Temp_in
Переменные будут равны непредсказуемым величинам.
Если чистить буфер уарт при каждом начале цикла Do есть вариант поймать сигнал. Цикл в моей теме повторяется примерно раз 500мсек. Значит передатчик нужно включить, задержка 500мсек, передача данных. Тогда мож чего, и получиться.

0

14

rom-i
Если чужая несущая не перебивает несущую моего передатчика,то приём идёт довольно чёткий. Мои часы передают текущее время один раз в восемь секунд(помимо других двух передатчиков)и потерь нет.Но.Зелёненькие модули со здоровой катушкой и их аналоги очень ватные.Там где самоделка принимает без проблем вот такие вот http://s7.uploads.ru/t/DyYNA.jpg
и не дышат. Самоделка сделана на SYN470(приём) и  MICRF113/115(передача).Так что железо приёмника играет очень большую роль.

0

15

Sergik07
Про железо нет споров. В Bascom я новичек. Пытаюсь разбираться по чуть. Буфер RX USART. Как чистишь? Как поставлен на ожидание приема?

Код:
'=====Прерывание по USART==========================================================================
'===============================================================================
  On URXC Reads
   Enable URXC
  Dim Прием_USART As String * 5

Делал вот так. Но тогда использовал модули HC-12. Но это готовые. С них не идет шум.
Дальше так.

Код:
'======Åñëè ïðèøëî ïî USART==============================================================
Reads:
 $timeout = 2000                                         'æäåì
 Input Прием_USART Noecho                                'è çàáèðàåì âñå äàííûå

 If Прием_USART = "Readi" Then
   Waitms 100
   Gosub Send_csv              'Передача лога в CSV формате
 End If

 If Прием_USART = "Reset" Then
   Waitms 100
   Gosub Reset_all               'Стираем содержимое 24с32
 End If
Return

Так с шумом не годится. Он тебе напрерывает грязи.

Отредактировано rom-i (2018-10-11 16:00:51)

0

16

rom-i
В посте №11 код приёма,который у меня работает.Так как приёмник всё время молотит на приём,то буфер забивается очень быстро.От шума избавиться невозможно.Поэтому  то,что оказалось в переменной,то и анализируем(первые четыре байта)Если принят не наш ID,то очищаем переменную,в которую принимаем и уходим на метку,откуда следующий шаг это приём посылки.Важно уравнять скорости передачи и приёма.С моим радиожелезом стабильно работает 4800,чего вполне хватает.

0

17

rom-i написал(а):

Приемник(сверхрегенератор) без несущей хреначит на выходе шум.

Шум какой ?
Если аналоговый, не превышающий цифровые пороги, то пусть шумит себе. Отсечь можно банальным детектором.
Если цифровой, т.е. попадающий в цифровые пороги, то контрольный код начала передачи поможет.

Вероятность получения в "шуме" нужного кода чрезвычайно мала.
Снизить можно 4-х или даже 6-значным кодом.

0

18

Покопайтесь вот здесь Исследование USART , пост 5
Пользуюсь этим примером, работает железно. ;)

0

19

Интересно: человек задает вопрос, а ответ читать не хочет. Нонсенс.

0

20

max
Почему не читал. Просто они мне не подходят.

0

21

rom-i написал(а):

Просто они мне не подходят.

В #14 был поставлен вопрос по работе с буфером UART (USART)...
По указанной мной в #19 ссылке есть ответ.
Пользуюсь этим способом постоянно...

В указанных max ссылках тоже есть об этом...
Что ещё не подходит ? ;)

Отредактировано Nord (2018-10-11 18:46:58)

0

22

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

По указанной мной в #19 ссылке есть ответ.
Пользуюсь этим способом постоянно...

Это работает при приёме данных через радиомодуль?

0

23

У меня не открылась #19. Пишет устарела.

0

24

Sergik07
Мучил кнострукцию долго. Даже без радиомодулей(на прямую передатчик приемник) не опознавал ID. Прописал 1550. Вывел данные приема на терминал. Оказалось перед 1550 есть еще знак. В десятичном формате 10. Если не ошибаюсь эт LF. Возврат каретки. В конце тоже 13, 10(CR, LF). Но конец не нужен. С таким кодом начал работать нормуль

Код:
Do

'  Waitms 100

 Gosub Kodin
  Gosub Ind
 Id_data = Mid(Temp_in , 2 , 4)
 If Id_data = "1550" Then
   Temper = Mid(Temp_in , 6 , 4)
   Print "Temp " ; Temper
  Else
   Print Temp_in
   Temp_in = ""
 End If

  Incr C

  Loop
End

Но по радио ни одного совпадения. В терминал единичные символы. Иногда пара.

0

25

Когда не получается так как хочешь,или получается плохо надо всё сломать и начать строить заново )
Нарезал из своих поделок код,который у меня работает.Передача:

Код:
$regfile = "m88pdef.dat"
$crystal = 8000000
$hwstack = 60
$swstack = 60
$framesize = 80
$baud = 2400

Dim Sinhr As Byte
Dim Albyte As String * 6
Dim Sch As Byte

Txpower Alias Portc.1 : Config Txpower = Output
Led Alias Portc.2 : Config Led = Output

Albyte = "2301A"
Sinhr = &B11111111

Do

   Set Txpower
   Waitms 150
   Gosub Snd
   Waitms 100
   Reset Txpower

   Wait 3

Loop

End

Snd:
   Set Led
   For Sch = 0 To 3
      Printbin Sinhr
      Print Albyte
      Print Albyte
      Waitms 75
   Next Sch
   Reset Led
Return


Приём:

Код:
$regfile = "m88pdef.dat"
$crystal = 8000000
$hwstack = 60
$swstack = 60
$framesize = 80
$baud = 2400

Dim Sinhr As Byte
Dim Albt As String * 6
Dim Dat_in As String * 6
Dim Id As String * 4

Led Alias Portb.0 : Config Led = Output

 Waitms 500

Do

   Strt:

      Gosub Kodin
      Albt = Dat_in

      Id = Left(albt , 4)

      If Id = "2301" Then
         Set Led
         Waitms 100
         Reset Led
      Else
         Albt = ""
         Goto Strt
      End If

Loop

End

Kodin:
   Inputbin Sinhr
   Input Dat_in
Return

Обязательно попробуй подключать питание передатчика через ключ. Примерно такhttp://sd.uploads.ru/t/IqnFL.jpg

В коде это "Txpower Alias Portc.1 : Config Txpower = Output" или любой другой свободный порт

0

26

Вот так оно работает.Оператор из меня хреновый,но в общем всё видно.Пульт передаёт полную посылку,приёмник принимает всю посылку,но программа реагирует только на ID.Всё чётко отрабатывает даже безо всяких контрольных сумм и т.п. При получении ID мигаем светодиодом. Видно,что при таком режиме передачи(несколько повторов)приёмник принимает почти все повторы посылки.

0

27

я пересылаю, у нас производство моих девайсов.
Чтобы не ставить кварц, я использую свой протокол, принцип ШИМ сигнал.
Например, 1=1000 uS и 500 - пауза, а 0=500uS и 1000us - пауза

0

28

Sergik07
Оказывается давно все работает. Просто дальность приема не в метрах, а в сантиметрах.
Только смысла большого в использовании не вижу. Программа работает как прерывание. Пока не примет нормальные данные зациклена. По задумке мой передатчик работает так. Сон 5 минут(потребление в районе 7мкА). Проснулися, включил передатчик, снял данные с датчика, передал данные, отключился, заснул.  Даже если очень хорошая связь программа будет висеть 5 минут. Так прекрасно работает конструкция выложенная в ссылке 1 поста.

0

29

Александр Д.
Вот ищу образец программы с таким формированием сигнала. На Bascom не найти. Нашел только, что в начале темы. Но там на PICBasic Pro. С передачей еще примерно понятно. С приемом сразу тупик. Как поймать свой сигнал? Дальше примерно как обработка данных от DHT22. Мерить длительность таймером. Bascom только учусь. Мне без образцов программ ........................(((.

0

30

rom-i написал(а):

По задумке мой передатчик работает так. Сон 5 минут(потребление в районе 7мкА). Проснулися, включил передатчик, снял данные с датчика, передал данные, отключился, заснул.

Мои передатчики именно так и работают,только один даёт в эфир посылку каждые 8 секунд,второй каждую минуту,третий около трёх минут.Но я что-то совсем запутался,ведь дело было в приёмнике?

rom-i написал(а):

Не представляю даже как поймать передачу в нужное время.

А в промежутках между приёмом передачи устройство что делает?Если тоже спит,то как и на что оно выводит принятые показания датчика?Если не спит,а делает ещё что-то,то можно отключить RX уарта,или питание приёмника,обходить переход в подпрограмму приёма,отсчитать 300 секунд и включить всё обратно,ожидая передачи.Сосвсем не понятно назначение и алгоритм работы устройства приёма.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Кто передавал температуру 18в20 по радиоканалу?