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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Приём данных по UART с ПК


Приём данных по UART с ПК

Сообщений 61 страница 90 из 154

61

В любом случае понадобится система обработки прерываний от устройств, иначе всё равно данные будут пропадать. Например модуль SIM асинхронно отдает данные (например: входящий звонок RING), ну и остальные модули тоже могут быть прыткими, типа ESP-ки.

0

62

Прерывания, в таком случае, абсолютно ни чего не исправят. Шо есть, шо нет. Просто сделать буфер по больше. Или вообще менять алгоритм либо лучше схему.

0

63

Буфер тоже не решит проблемы, если он общий на всё. Будет каша мола. Если только отдельный у каждого порта.

0

64

А я бы предложил и так, и сяк попробовать. Практика - дело такое... 8-)

Отредактировано sevastopolets (2019-02-01 00:35:58)

+1

65

Как в атмеге 128 правильно включить два апаратных уарт ?

0

66

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

Как в атмеге 128 правильно включить два апаратных уарт ?

Ссылку уже потерял, но однажды скачал полный перевод даташита на Мега128 в формате Word.
Могу переслать, но только завтра после обеда.

0

67

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

Ссылку уже потерял, но однажды скачал полный перевод даташита на Мега128 в формате Word.
Могу переслать, но только завтра после обеда.

Мне любая информация пригодится , можно и после обеда.

0

68

Вот еще вариант того же, только в формате DJVU.
http://mega-avr.com.ua/atmega128rus/

0

69

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

Как в атмеге 128 правильно включить два апаратных уарт ?

Разве это сложно?
Делаем Config com1 и com2
На первом просто Print, на втором Print #1
Для приёма можно использовать буфер
Config SERIALIN = BUFFERED , size = от 1 до 255
Config SERIALIN1 = BUFFERED , size = от 1 до 255

0

70

sva-don написал(а):

Разве это сложно?
Делаем Config com1 и com2
На первом просто Print, на втором Print #1
Для приёма можно использовать буфер
Config SERIALIN = BUFFERED , size = от 1 до 255
Config SERIALIN1 = BUFFERED , size = от 1 до 255

Если знаеш как то нет, спасибо . И в гугле ни чего не нашол .

0

71

http://avrhelp.mcselec.com/configcomx.htm

0

72

Код:
 $regfile = "m128def.dat"                                   ' мега128
$crystal = 8000000
'$baud = 4800
$hwstack = 220                                              ' default use 32 for the hardware stack
$swstack = 220                                              ' default use 10 for the SW stack
$framesize = 220                                            ' default use 40 for the frame space

Config Com1 = 4800 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com2 = 4800 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

'Config Serialin = Buffered , Size = 255
'Config Serialin1 = Buffered , Size = 255

Open "com2:" For Binary As #1

Dim Сколько_времени As Byte , Часы_sim900 As Integer , Esp8266 As Integer

 '*******SIM900 *********

 If Сколько_времени = 0 Then
 'Print #1 , "AT+CCLK?"
 Сколько_времени = 1
 End If

 Input #1 , "AT+CCLK?" , Часы_sim900


 '*******ESP8266 *********
 'Print "ESP8266"
 'Incr Tel
  'Print ; " test serial port 1"
'  Print #1 , ; " test serial port 2"

Input , "ESP8266" , Esp8266


Вот два УАРТ работают как будто у них взаимная блокировка, если запустить програму то в один из терминалов приходит AT+CCLK? в другой ни чего не приходит пока не отправить чего то из первого терминала микроконтролеру и так далее. Как их разблокировать?

0

73

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

Вот два УАРТ работают как будто у них взаимная блокировка

Такими методами не пользовался, но...

У вас только одна строка:
Open "com2:" For Binary As #1

Объявлены два Com, а "первый" кто открывать будет ? ;)

Возможно, я неправ, но вижу так...

0

74

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

Вот два УАРТ работают как будто у них взаимная блокировка


Посмотрите здесь

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

Объявлены два Com, а "первый" кто открывать будет ?


Первый он же usart0, обычно работает без открывания, остальные надо открывать.

+1

75

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

Отредактировано olegkaras (2019-03-05 12:33:09)

0

76

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

Подключение нескольких устройств по UART
Проверено и не раз, работает.

Отредактировано SyncMVGP (2019-01-25 15:50:51)

Я чот нипонял... А как это будет работать?
Давай прикинем PIN к носу и включим мосх. Ну, диодная развязка с подтяжкой на (+) и шо? Ежли ОДИН её "придавит" к земле - остальные будут уже "пофиг" ...... оОоченянама "правильное" решение,
Глюки,  :flag:

-1

77

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

Я чот нипонял... А как это будет работать?

Работает. И железно.
Проверено практически сразу же после появления поста, не зря там "+" стоит за это решение.
Не всегда ваш "мосх" сочетается с реалиями...

А вот правописание у вас продолжает хромать, несмотря на "железные" указания Модераторов...

+1

78

Мне сейчас не на чем проверить... но, я сомневАюся.

0

79

Повторяю - проверялось. На макетке.
Мастером выступал Мега16, три слейва - Мега48 весело мигали светодиодами при приеме правильного (!) байта с указанием адреса принимающего.

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

0

80

Так я даже и не спорил, тем более не опровергал тот факт, что оно работает. Идея мне понравилась, много чего можно "прикрутить" таким способом.... НО! Пока сам не проверю --- нИпаверю. Как-то так.  :flag:

0

81

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

У вас есть пример для атмега128 , как передать понятно  не понятно как принять


Если Usart_0_flag_data_input > 0 значит есть принятые данные

Gosub Usart_0_clearing_buffer_receive  -  здесь сбрасываете буфер

аналогично и usart1

0

82

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

Я чот нипонял... А как это будет работать?
Давай прикинем PIN к носу и включим мосх. Ну, диодная развязка с подтяжкой на (+) и шо? Ежли ОДИН её "придавит" к земле - остальные будут уже "пофиг" ...... оОоченянама "правильное" решение,
Глюки,


Вот и я сейчас соображаю: Mega328p (1 UART) задача подключить SIM800C и модуль BT HC-05 (наладка и прошивка МК).
Физически на одну шину посадить можно, работать будет. Но во время обмена с HC-05 будем иметь пропуски данных от SIM800C, что не есть гуд.

на mega128 как то не хочется переходить.

0

83

SIM800C - это как бы асинхронный модуль (события могут приходить независимо от команд).
HC-05 - обычный модуль, т.ч. логика скорее должна быть на оборот, приоритет у СИМа, но да, потеря данных неизбежна, из чего делаем вывод, оба модуля иметь одновременно на одном порте - недопустимо. Лучше запустить ещё софт-порт, скажем по INT.

0

84

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

Если Usart_0_flag_data_input > 0 значит есть принятые данные

Gosub Usart_0_clearing_buffer_receive  -  здесь сбрасываете буфер

аналогично и usart1


В вашем примере если на вход ни чего не приходит то программа будет просто стоять на месте ?

0

85

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

В вашем примере если на вход ни чего не приходит то программа будет просто стоять на месте ?


Конкретно в примере МК будет спать.

В других случаях, будет крутиться в  цикле, пока не изменятся флаги ( Usart_0_flag_data_input; Usart_1_flag_data_input )

0

86

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

Вот и я сейчас соображаю: Mega328p (1 UART) задача подключить SIM800C и модуль BT HC-05 (наладка и прошивка МК).
Физически на одну шину посадить можно, работать будет. Но во время обмена с HC-05 будем иметь пропуски данных от SIM800C, что не есть гуд.

на mega128 как то не хочется переходить.


32 - Atmega328_PB

44 - Atmega1284P

64 - Atmega128_1281_2561

100 - Atmega1280_2560

0

87

Прошу помощи у знающих людей. Как практически на АТМЕГЕ 128 задействовать два УАРТ что бы прием не останавливал мк если на вход ни чего не приходит ? Очень нужно сделать удаленный контроль помещения. А то получается даже принять звонок от сим900 не получается , ну не брать же от него сигнал вызова и цеплять на вход мк для контроля.

0

88

https://avrhelp.mcselec.com/ischarwaiting.htm

0

89

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

Прошу помощи у знающих людей. Как практически на АТМЕГЕ 128 задействовать два УАРТ что бы прием не останавливал мк если на вход ни чего не приходит ? Очень нужно сделать удаленный контроль помещения. А то получается даже принять звонок от сим900 не получается , ну не брать же от него сигнал вызова и цеплять на вход мк для контроля.


Вы что, шутите ?
Выложил готовый вариант и он у Вас не работает ?

Закомментируйте "Idle"  и МК будет всё время крутиться в главном цикле

0

90

Да , действительно все прекрасно работает , извините.
Как из такой строки AT+CCLK="13/09/25,13:25:33+05" отобрать числа для дальнейшего использования ?

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Приём данных по UART с ПК