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

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

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

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


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


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

Сообщений 31 страница 60 из 100

31

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

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

Странно...
Попробуйте по этому пути:
"Программирование ATMEL в BASCOM. » Примеры применения в среде Баском » Исследование USART"

0

32

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

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

Работает, если использовать протокол UART.
Протоколу фиолетово, проводное соединение, радио или ИК, главное, чтоб аппаратно поддерживалось...
Если автору хочется побитных заморочек, то тоже сгодится, но придется еще и биты считать... ;)

Отредактировано Nord (2018-10-12 18:32:05)

0

33

Nord
Сколько не бился,мне не удалось передать по радиоканалу данные так,как они обычно передаются от мк к мк,или от терминала к мк.Так как в буфере уарт всегда есть хоть один символ мк всё время читает и постоянно будет поднят флаг прерывания уарт.Широкополосный приёмник радиомодуля всегда гонит в уарт хоть что-то.

0

34

Sergik07
Про поймать передачу писал не Вам, а ответил на коммент модератора Александр Д.
Мое устройство, обычные часы. 2х18в20, RTC DS3231, RC5(установка/коррекция времени DS3231). Индикация на высоковольтных неоновых лампах ИН(6 разрядов час:мин:сек) динамическая. Для экономии портов К155ИД1 на цифры. 6 портов + высоковольтные ключи разряды. Переход на показание термометров(Кнопка на корпусе, или хлопнуть ладошками. Кнопка на пульте.) Индицирует t-улица, t-дома(можно переключить с 18в20 на ds3231, или наоборот) с периодом 1 сек. Так захотел мой напарник. С меня только пруга. Монтаж его суета.
Давно хочу освоить передачу данных именно с шумящими приемниками. Люди это уже давно делают. Но я, гововка ...... только учусь.

0

35

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

NordСколько не бился,мне не удалось передать по радиоканалу данные так,как они обычно передаются от мк к мк,или от терминала к мк.Так как в буфере уарт всегда есть хоть один символ мк всё время читает и постоянно будет поднят флаг прерывания уарт.Широкополосный приёмник радиомодуля всегда гонит в уарт хоть что-то.

Мне пришлось это делать один раз, сработало.
Основная задача - заставить приемник реагировать на сигнал от передатчика, как ни банально звучит.
В моем случае сигналом служил одиночный импульс длительностью более 0,1 сек, который вряд ли смоделирует помеха.
После этого приемник уже читал т.н. ID и данные.
Обратной связи не было, да и не требовалось. Все живет в пределах одного РВ корпуса.
Устройство "городилось" для работы в шахте, взамен сдохшего блока (ценник у него конский), где и до сих пор работает.
Прошивки не сохраняли, не видели ценности... Видимо, зря... ;)

0

36

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

Давно хочу освоить передачу данных именно с шумящими приемниками. Люди это уже давно делают. Но я, гововка ...... только учусь.

Почитайте на тему детектирования сигнала, еще раз направляю... ;)

0

37

И мои 5-ть копеек к теме... :)

Почитав немного теории по работе с RF433, у меня передача-прием построен так:
- Сразу передаю преамбулу. 5 символов, символ какой больше нравиться.
            For J = 1 To 5
            Print "*"
            Waitms 20
Что это дает, это дает возможность заткнуть АРУ приемника, т.е. приемник начитает выделять полезный сигнал на время до 70мкс, шумы при этом затыкаются.
Эта информация взята на этом форуме. Спасибо за помощь. :)

- Далее, передаю строчку кода, на первом месте идентификатор1. У меня 170 - 10101010 в двоичном коде, далее сама информация.
            Printbin Идентификатор1 ; T1 ; Идентификатор2 ; T1 ; Crc
Идентификатор2 у меня 85 - 01010101 в двоичном коде.
Crc считается как Crc=Идентификатор1 XOR T1 XOR Идентификатор2

На приемной стороне - прием по прерыванию UART
            Принятый_байт_usart = Udr
Берем из буфера принятый байт и проверяем
            Если байт(1)=170, то берем следующий байт(2),
            Берем следующий байт(3),
            Если байт(3)=85,  то берем следующий байт(4),
            Берем следующий байт(5),
            Если 2-й байт и 4-й равны вычисляем Crc
            Если байт(3)=Crc,  то флаг_данные_готовы=1
ВСЁ.

Взято на польском форуме. Использовано в модернизации кухонного таймера. Работает уже месяц.

0

38

Nord
Про этот импульс, и весь вопрос. Подал выход приемника на два порта. Один программный UART, второй для измерения длительности(помеха/импульс опознавания).

Код:
Config PinD.2 = Input
Config Timer2 = Timer , Prescale = 1024
Stop Timer2
Enable Interrupts
Enable Timer2
начинаем цикл
    If PinD.2 = 1 Then
      Bitwait PinD.2 , Set                                   'signal goes high > start timer
      Start Timer2
      Bitwait PinD.2 , Reset                               'signal goes low  > stop timer
      Stop Timer2
      B = Tcnt2                             'store number of ticks per signal in Signaltime byte
      Tcnt2 = 0
    End If
    If B > 200 And B < 360 Then
     Gosub Kodin
     B = 0
    End If
   Здесь контроль выполнения черезь терминал
 '=======================================================================
 Kodin:
   Inputbin Sinhr
   Input Temp_in Noecho
 Return
'========================================================================

Движение всегда есть. Уже не жду готового ответа. Жаль. Не придумывать же заново кирпичики. Вот, и задал вопрос. Нахрен изобретать велосипед, если у людей есть решения.
Это все равно высчитывать закон Ома снова. Профессора обьясняют науку студентам.
Как детектировать сигнал ..... Первый мой трансивер собран в 1990г.

0

39

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

Движение всегда есть. Уже не жду готового ответа.

Да готовый ответ вам никто, боюсь и не даст... ;)
У каждого своих проектов хватает, чтоб в чужих копаться...
Тут больше принято направлять к поиску, чтоб человек сам дотумкал, заодно и для себя что-то схватить... ;)

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

Как детектировать сигнал ..... Первый мой трансивер собран в 1990г.

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

0

40

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

И мои 5-ть копеек к теме...

Это уже целый рубль ! ;)

0

41

pavel1969

На приемной стороне - прием по прерыванию UART
            Принятый_байт_usart = Udr

Белый шум в эфире сколько в секунду прерываний сделает?

0

42

При появлении на выходе приемника полезного сигнала белый шум тоже присутствует ?

0

43

Nord

Тем более, уже должны знать, как наименьшим потом отделить полезный сигнал от шелухи..

Ни как не отделишь. Передатчик передал, и вырубился на 5 минут. Примерные пять. На морозе мож 6, или 4.
Да, передачу сигнала знаю как делать. Включился передатчик, пошла несущая. На выходе 1. Передача преамбулы(обязательно одинаковые импульсы, что бы не путать собственный pin) вход приемника в режим. Передача импульса опознания, ну скажем 10 мсек(помеха/сигнал). Передача данных по шим.
Все вроде просто. Но не поймать мне пока свой сигнал. Сравнивается он с помехой.

0

44

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

Да готовый ответ вам никто, боюсь и не даст...

Готовый ответ в коде уже был на первой странице.Всё устойчиво работает нон-стоп уже и не помню сколько времени,наливай да пей. Ну,всё что знал,рассказал(с)

+1

45

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

Nord
Тем более, уже должны знать, как наименьшим потом отделить полезный сигнал от шелухи..

Ни как не отделишь.

Данунафиг... ;)
И как же мы радио в машине слушаем ? ;)

Хотя, отчасти правильно...
Нет нормальных р/ст, одна шелуха, отделять нечего... ;)

Отредактировано Nord (2018-10-12 22:05:14)

0

46

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

Белый шум в эфире сколько в секунду прерываний сделает?

Наверное очень-очень-очень много, но мне это не интересно...
У меня была задача поймать приемником кодовую посылку и выполнить действие - продублировать сигнал пЫк-пЫк кухонного таймера. Другой работой приемник и МК не заняты.

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

В качестве бреда - прикрути к приемнику тиньку в качестве бортового МК, и при правильном приеме выдавай в параллельный УАР готовый результат.

Отредактировано pavel1969 (2018-10-13 00:53:36)

0

47

Nord
И как же мы радио в машине слушаем ? ;)
На расстояние о мну, тихая зона. Мжешь флешку поставить.
Вопрос? Сколько нужно Ват, что бы заглушить этот бред?

0

48

Вот такая задумка у мну по поводу передачи импульса опознования в 10мс.
Суть кода. Подаем единицу на передатчик 150 мс. Пошла несущая. Приемник из белого шума переходит на 1. Дальше передача импульса опознования 10мс. Дальше передача по програмному USART. Повторение 3 раза с задержкой 100мс(одно должно совпасть с учетом обработки программы с приемником. Повторение моей программы с часами примерно 300мс.

Код:
  $regfile = "attiny2313a.dat"       ' Используемый контроллер
  $crystal = 8000000       ' 9,6 МГц при CKDIV8 = 0 (смотреть скрин фьюзов)
'  $baud = 4800
'-------------------------  Настройка Watchdog  --------------------------------
  On Wdt Обработка_прерывания_watchdog       ' Nosave       ' Переход на подпрограмму обработки прерывания после переполнения таймера-счётчика Watchdog
  Config Watchdog = 1024     'время срабатывания ~1сек., при соответствии $crystal и фьюзов МК      ' 16   32   64   128   256   512   1024   2048   4096   8192

  Config PORTD.5 = output
  Z alias PORTD.5
  Z = 0
'---------------------  Используемые переменные  -------------------------------
 Dim taim As Byte
 Dim Sinhr As Byte : Sinhr = &B11111111
 Dim Albyte As String * 8
 Dim Sch As Byte
 Dim Id As String * 4 : Id = "1550"
'Переменные 1 датчика 18В20
'============================================================================================================
 Dim Tds1 As Integer                                         'температура получаемая с 1 датчика в 0.1градуса. 10 = 1,0 градус
 Dim Tds1_str As String * 4
 Dim Err_c1 As Bit
'--------------  Разрешаем работу необходимых прерываний  ----------------------
  Enable Wdt        ' Разрешаем прерывание от переполнения таймера Watchdog
'------------  Разрешаем работу всех включенных прерываний  --------------------
  Enable Interrupts ' Глобально разрешаем все взадействованные прерывания
'===============================================================================
'                   Г Л А В Н Ы Й         Ц И К Л
'===============================================================================
  Главный_цикл:

    If taim = 5 Then
      Gosub Temper
   Albyte = Id + Tds1_str
   Config PortD.2 = Output : PORTD.2 = 1
     Z = 1
     Waitms 150

   For Sch = 0 To 3
     PORTD.2 = 0
     Waitms 1
     PORTD.2 = 1
     Waitms 10
     PORTD.2 = 0
    Open "comd.2:4800,8,n,1" For Output As #1
      Printbin # 1 , Sinhr
      Print #1 , Albyte
     Config PortD.2 = Output : PORTD.2 = 1
     Waitms 100
   Next Sch

     Waitms 100
      Z = 0
     taim = 0
    Config Portd.2 = Input       'Для сна. Если оставить выходом, жрать будет
    End If

   Powerdown
  Goto Главный_цикл
 End
'===============================================================================
'                        П О Д П Р О Г Р А М М Ы
'===============================================================================
  Обработка_прерывания_watchdog:
      Incr taim
  Return
'===============================================================================
'Обработка датчика температуры DS18B20
'====================================================================================================
Temper:
    1wreset PinB , 2
   If Err = 1 Then
         Err_c1 = 1                                         'ставим флаг ошибки датчика
         Tds1 = 32767                                       'если при опросе небыло ответа ставим флаг ошибки
      Else
         Err_c1 = 0
         1wwrite &HCC , 1 , PinB , 2                        'пропуск ROM(для всех)
         1wwrite &H44 , 2 , PinB , 2                        'конвертировать температуру(для всех)
   End If

     Waitms 94
                                                            'если небыло ошибки при начале конвертирования
   If Err_c1 = 0 Then
      1wreset PinB , 2
      If Err = 1 Then
            Tds1 = 32767                                    'если при опросе небыло ответа ставим флаг ошибки
          Else                                              'иначе, если ошибки не было, продолжаем опрос датчика
            1wwrite &HCC , 1 , PinB , 2
            1wwrite &HBE , 1 , PinB , 2
            Tds1 = 1wread(2 , PinB , 2)
            Tds1 = Tds1 * 10
            Tds1 = Tds1 \ 16
      End If
       Tds1_str = Str(tds1)
       Tds1_str = Format(tds1_str , "+000")
      Else
       Tds1 = 32767
       Tds1_str = "8888"
   End If
 Return
'===============================================================================

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

0

49

Прием так.

Код:
$map
$regfile = "m328pdef.dat"
$crystal = 16000000                                         'äëÿ óìåíüøåíèÿ ýíåðãîïîòðåáëåíèÿ
$baud = 4800                                                'â òåðìèíàëå òîæå âðîäå ñïåøèòü íåêóäà
$hwstack = 160
$swstack = 160
$framesize = 64
'=====Êîíôèãóðàöèÿ äèñïëåÿ
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcd = 16 * 2
'===============================================================================
 Dim Id_data As String * 4
 Dim Temp_in As String * 18
 Dim Temper As String * 4
 Dim C As Byte
 Dim Cstr As String * 3
 Dim B As Word
 Dim Sinhr As Byte
'===============================================================================
 Dim Ver_log As String * 20

Declare Sub Clearlcd
Call Clearlcd
'===============================================================================
Config Timer2 = Timer , Prescale = 1024
Stop Timer2
'===============================================================================
                                            '÷òîá ñðàçó âèäåòü ïåðåçàãðóçêó èëè íåïðàâèëüíîå ïîäêëþ÷åíèå
Locate 1 , 1
Ver_log = "   Ustanovka    "
Lcd Ver_log
Locate 2 , 1
Lcd "     UART    "
Wait 1
'===============================================================================
Enable Interrupts
Enable Timer2
'===============================================================================

'*******************************************************************************
Do

  Waitms 300

    If PinD.3 = 1 Then
      Bitwait PinD.3 , Set                                   'signal goes high > start timer
      Start Timer2
      Bitwait PinD.3 , Reset                               'signal goes low  > stop timer
      Stop Timer2
      B = Tcnt2                             'store number of ticks per signal in Signaltime byte
      Tcnt2 = 0
     End If
    If B > 200 And B < 360 Then
    Open "comd.3:4800,8,n,1" For Input As #1
     Gosub Kodin
     B = 0
     Config PinD.3 = Input
    End If

 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
    Gosub Ind
  Loop
End
'*******************************************************************************

'=====î÷èñòêà LCD
Clearlcd:
      Initlcd
      Cls
      Cursor Off                                            'åñëè íà ýêðàíå ìóñîð ïåðåèíèöèàëèçèðóåì
Return
'===============================================================================
Ind:

  Cstr = Str(c)
  Cstr = Format(cstr , "000")

  Locate 1 , 1
    Lcd "Priem " ; Cstr ; " " ; Temper

  Locate 2 , 1
    Lcd "HER Priem " ; Temp_in
Return
'===============================================================================
 Kodin:
   Inputbin #1 , Sinhr
   Input #1 , Temp_in Noecho
 Return
'=============================================================================

0

50

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

Повторение 3 раза с задержкой 100мс

Время отработки АРУ приемника предположительно около 70мс.
100мс многовато будет, приемник может снова уйдет в белый шум...

Отредактировано pavel1969 (2018-10-14 23:08:30)

0

51

Чем закончилась-то борьба с помехами ? ;)
Молчание как-то напрягает... ;)

0

52

Поймать сигнал опознования без прерывания не получилось. Остановился на версии предложенной Sergik07
Передача на тини2313, просто в наличии была. Думаю использовать тини84, что бы повесить еще DHT22.

Код:
  $regfile = "attiny2313a.dat"       ' Используемый контроллер
  $crystal = 8000000
'-------------------------  Настройка Watchdog  --------------------------------
  On Wdt Обработка_прерывания_watchdog       ' Nosave       ' Переход на подпрограмму обработки прерывания после переполнения таймера-счётчика Watchdog
  Config Watchdog = 1024     'время срабатывания ~1сек., при соответствии $crystal и фьюзов МК      ' 16   32   64   128   256   512   1024   2048   4096   8192

  Config PORTb.1 = output
  Z alias PORTb.1
  Z = 1
'---------------------  Используемые переменные  -------------------------------
 Dim taim As Word
 Dim Sinhr As Byte : Sinhr = &B10101010
 Dim Albyte As String * 16
 Dim Sch As Byte
 Dim Id As String * 4 : Id = "1550"
'Переменные 1 датчика 18В20
'============================================================================================================
 Dim Tds1 As Integer                                         'температура получаемая с 1 датчика в 0.1градуса. 10 = 1,0 градус
 Dim Tds1_str As String * 4
 Dim Err_c1 As Bit
'--------------  Разрешаем работу необходимых прерываний  ----------------------
  Enable Wdt        ' Разрешаем прерывание от переполнения таймера Watchdog
'------------  Разрешаем работу всех включенных прерываний  --------------------
  Enable Interrupts ' Глобально разрешаем все взадействованные прерывания
'===============================================================================
'                   Г Л А В Н Ы Й         Ц И К Л
'===============================================================================
 Главный_цикл:

   If taim = 300 Then
      Z = 0
   Open "comd.0:2400,8,n,1" For Output As #1
      Waitms 100
      Gosub Temper
   Albyte = Id + Tds1_str

   For Sch = 0 To 3
      Waitms 75
      Printbin #1 , Sinhr
      Print #1 , Albyte
   Next Sch
     Waitms 50
      Z = 1
      taim = 0
   Config Portd.0 = Output : Portd.0 = 0            'Перевод порта для понижения энергопотребления
     Waitms 10
   End If

   Powerdown
  Goto Главный_цикл
 End
'===============================================================================
'                        П О Д П Р О Г Р А М М Ы
'===============================================================================
  Обработка_прерывания_watchdog:
      Incr taim
  Return
'===============================================================================
'Обработка датчика температуры DS18B20
'====================================================================================================
Temper:
   1wreset Pinb , 2
   If Err = 1 Then
         Err_c1 = 1                                         'ставим флаг ошибки датчика
         Tds1 = 32767                                       'если при опросе небыло ответа ставим флаг ошибки
      Else
         Err_c1 = 0
         1wwrite &HCC , 1 , Pinb , 2                        'пропуск ROM(для всех)
         1wwrite &H44 , 1 , Pinb , 2                        'конвертировать температуру(для всех)
   End If

     Waitms 750
                                                            'если небыло ошибки при начале конвертирования
   If Err_c1 = 0 Then
      1wreset Pinb , 2
      If Err = 1 Then
            Tds1 = 32767                                    'если при опросе небыло ответа ставим флаг ошибки
          Else                                              'иначе, если ошибки не было, продолжаем опрос датчика
            1wwrite &HCC , 1 , Pinb , 2
            1wwrite &HBE , 1 , Pinb , 2
            Tds1 = 1wread(2 , Pinb , 2)
            Tds1 = Tds1 * 10
            Tds1 = Tds1 \ 16
      End If
       Tds1_str = Str(tds1)
       Tds1_str = Format(tds1_str , "+000")
      Else
       Tds1 = 32767
       Tds1_str = "8888"
   End If
 Return
'===============================================================================

Так как RX USARTа находится в постоянном приеме из-за шума, поставил отдельный приемный контролер.

Код:
$regfile = "Attiny13a.dat"
$crystal = 9600000
'===============================================================================
Open "comb.0:2400,8,n,1" For Input As #1
Open "comb.4:4800,8,n,1" For Output As #2
'===============================================================================
'Led Alias PortB.1 : Config Led = Output
'===============================================================================
'===============================================================================
 Dim Sinhr As Byte
 Dim Albt As String * 8
 Dim Dat_in As String * 8
 Dim Id As String * 4
 Dim Temper As String * 4
'===============================================================================

'*******************************************************************************
Do
  Waitms 100
   Strt:
    Gosub Kodin
     Albt = Dat_in
     Id = Left(Albt , 4)
  If Id = "1550" Then
     Temper = Mid(Albt , 5 , 4)
     Print #2 , Temper
     Waitms 35
   Else
     Waitms 35
     Dat_in = ""
    Goto Strt
  End If

  Loop
End
'===============================================================================
Kodin:
   Inputbin #1 , Sinhr
   Input #1 , Dat_in Noecho
Return
'=============================================================================

Первая передача всегда неадекватная, три других нормуль. Но из-за задержек в приемном конроллере, всегда две нормальных. Соответственно передает два раза. Снова грабли, но об них ниже. Готовая конструкция использует уже прерывание по USART.

Код:
'=====Включаем прерывание по USART==========================================================================
'===============================================================================
  On URXC Reads
   Enable URXC
  Dim Прием_USART As String * 6
  Dim Id As String * 2
'-----------------------------------------------------------------------------
'======Если пришло по USART==============================================================
Reads:
 $timeout = 4000                                         'ждем
 Input Прием_USART Noecho
 Id = Left(Прием_USART , 1)
 If Id = "-" Or Id = "+" Then Tds2_str = Прием_USART
Return

О граблях. Bascom в конце строки передачи ставит символы ввод, и возврат каретки. Это удобно для работы например с ESP8266. Здесь это необходимо. В нашем случае это мешает.
Если прописано  Print #2 , Temper
В реале выглядит  Print #2 , Temper ; Chr(10) ; Chr(13)
В приемном буфере это выглядит уже хреново. Например Temper = "+256".
Передача:
+256
+256
Прием:
+256

+256

Появляются пустые строки. Если просто прописать Tds2_str = Прием_USART, то возьмешь последнюю пустую строку.

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

0

53

Где то на форумах встречал вопрос. Как отключить в передаче по USART CR, и LF в конце строки. Но ответа небыло.

0

54

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

О граблях. Bascom в конце строки передачи ставит символы ввод, и возврат каретки. Это удобно для работы например с ESP8266. Сдесь это необходимо. В нашем случае это мешает.

Если они присутствуют всегда, то из принятой строки игнорировать последние два символа.
Функция MID.

Допустим, <принятая строка> имеет 10 символов.
Тогда:
<итоговая строка> = MID(<принятая строка>, 1, 8)

Орфографию сами поправите... ;)

0

55

Функция Mid в пустой строке?  o.O
У мну проще
Id = Left(Прием_USART , 1)
If Id = "-" Or Id = "+" Then Tds2_str = Прием_USART
Вместо   Id = "-" буду использовать цифры. То есть передача температуры 18в20 Id = "15", влажности Id = "04", и тд.

0

56

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

Функция Mid в пустой строке?

Почему "пустая строка" ?
Ваши же слова: ;)

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

Если прописано  Print #2 , Temper
В реале выглядит  Print #2 , Temper ; Chr(10) ; Chr(13)

Строка цельная, просто из-за последних двух символов возникает т.н. "пустая строка".
В передаче её нет.

Есть еще выход:
Отправляйте Print #2 , Temper;
Никаких Chr(10) ; Chr(13) не будет...
Только надо будет придумать символ окончания посылки или отправлять фиксированную длину.

Отредактировано Nord (2018-10-19 10:04:33)

0

57

Прими собственную передачу терминалом в десятичном формате. Там будет видно в конце 10, 13 после посылки нужной информации. Делал метеостанцию передачей данных на narodmon.ru. Состав mega8, ESP8266 соединение по Vi Fi, BMP180, 18B20, DHT22, аналоговый датчик скорости ветра ДСВ-1. Общение с ESP8266 по USART AT командами. В описании ESP8266 четко сказано. Обязательное условие, строка должна заканчиваться CR+LF. Ардуинщики так, и прописываю. Разобрался, что на Bascom это Chr(10) ; Chr(13). Тож прописал. Появилась дополнительная пустая строка. На форумах наткнулся, что Bascom это делает сам. Всегда добавляет CR+LF. Видны они только в терминале с отображением DEC.
Здесь уже вторая передача. Следующий приемник USART примет уже четыре пустышки.
http://s9.uploads.ru/t/cOvry.jpg
Извиняюсь за очередность 13, 10. Писал по памяти. Но это небольшая ошибка, и сути не меняет.

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

0

58

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

Прими собственную передачу терминалом в десятичном формате.

В Терминале можно отключить отправку данных символов в Bascom, действительно, не получится...
Я уже ранее давал ссылку на Исследования Александра, предложил свои пути решения.

Когда копался с дисплеем Nextion, то вдоволь наотправлялся и напринимался... ;)
Использую (за основу) код Александра с небольшими (мои пути решения) доработками.
Никакие лишние символы не мешают...
У меня работает, частично уже воплощено в железе и смонтировано, у вас - грабли... ;)

0

59

Nord
С этим кодом Александра без грабель не обошлось. 10 тоже пришлось вышвыривать.

Код:
'======Если пришло по USART==============================================================
Reads:
  Принятый_символ = Udr
   If Принятый_символ <> 13 Then
     If Принятый_символ <> 10 Then Буфер_приема = Буфер_приема + Chr(принятый_символ)
   Else
     Tds2_str = Буфер_приема
'     Print Буфер_приема
     Буфер_приема = ""
   End If

Return

Вот теперь делает нормальную строку. Иначе было вместо Буфер_приема = "+282" ; Chr(13) ; Chr(10) , проходило Буфер_приема = Chr(10) ;  "+282" ; Chr(13) ; Chr(10).
Заканчиваем прием на 13, а за ней идет 10. Достается следующей строке в начале.

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

0

60

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

С этим кодом Александра без грабель не обошлось. 10 тоже пришлось вышвыривать.
Вот теперь делает нормальную строку.

Так я же про то и твержу уже давно ! ;)
Берем за основу, но дорабатываем под свои нужды.

- Как сделать статую ?
- Берем камень и отрубаем все лишнее...
;)

+2


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