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

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

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

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



port rs-485

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

1

Доброго времени суток, извиняюсь за возможно глупый вопрос, но я только изучаю программирование. Проблема организовать 485 в bascom порт на микросхеме adm2483

есть простенькая программка, откуда-то из примеров содрал...

$regfile = "M162def.dat"
' Define used crystal
$crystal = 7372800                                         
$baud = 9600
$hwstack = 80                                             

$swstack = 63                                           

$framesize = 100

Config Portd.4 = Output                                     'in/out 485 port
Config Print0 = Portd.4 , Mode = Set

Dim Firstnumber As Integer
Dim Secondnumber As Integer
Dim Sum As Integer

Do

  Firstnumber = 0
  Secondnumber = 0

Print "input one number:"

Input Firstnumber
Print "input second number:"
Input Secondnumber
Sum = Firstnumber + Secondnumber

  Print "Sum: " ; Sum
  Waitms 100
Loop

End

Проблема в том что после команды Print перестаёт работать input, SUM выводит = 0. Если убрать Print перед Input, то всё считает правильно. Помогите пожалуйста правильно организовать приём и передачу информации по 485 порту. Микросхему порта использую ADM2483 Заранее благодарен.

Отредактировано catalex (2017-05-19 17:28:15)

0

2

Попробуйте сделать на подобии этого примера: https://www.mcselec.com/index2.php?opti … ight=rs485
А вообще гляньте хелп в баскоме, там сказано, что: "Config Pinb.0 = Output". Т.е. почему-то не "portd", а "pind".

0

3

Попробовал оба варианта, но результат тот-же.  Была мысль о неисправности adm2483, но без команды Print перед input, она бы тоже не принимала. По ссылке https://www.mcselec.com/index2.php?opti … ight=rs485  автор использует компилятор версии 2.0.7.9, а у меня 2.0.7.8    может в этом проблема?     К сожалению 2.0.7.9 я не смог найти где скачать.

0

4

catalex
Не пробовал управлять приёмом/передачей самостоятельно?То есть в программе сделать,например, так:set Portd.4,waitms 10, print что-то,reset Portd.4.

Код:
Peredacha:
    Set Dct
   Waitms 20
   Print Slovo
   Waitms 20
   Reset Dct
   Waitms 30
Return

вот так работало без сбоев.
То,что принимается,это число,или символ?Если число,может inputbin попробовать?

0

5

Пробовал самостоятельно управлять приёмом/передачей, не работало. Проблема всё-таки была в микросхеме, поставил adm483 и приём с передачей заработал как хотелось. Одного только не понял, до этого пробовал ставить adm2483 две штуки, не работало. Отличие 2483 от 483 по-моему только одно, у 483 нет гальванической развязки.

Сейчас работает вот с таким кодом:
$regfile = "M162def.dat"
' Define used crystal
$crystal = 7372800                                         
$baud = 9600
$hwstack = 80                                               

$swstack = 63                                               

$framesize = 100

Config Portd.4 = Output                                     'in/out 485 port
Config Print0 = Portd.4 , Mode = Set
Dim Firstnumber As Integer
Dim Secondnumber As Integer
Dim Sum As Integer

Do

  Firstnumber = 0
  Secondnumber = 0
  Input "Enter first number : " , Firstnumber
  Input "Enter second number: " , Secondnumber
  Sum = Firstnumber + Secondnumber
  Print "Sum: " ; Sum
  Waitms 10
Loop

End

Большое всем спасибо кто мне помогал в этом вопросе.

+1

6

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

до этого пробовал ставить adm2483 две штуки, не работало

А подтягивали: DE=1?
Ещё надо соответствующи дергать RE, в зависимости от передачи данных.
И при включении модуля надо по умному стартовать через PV.

Чтобы избежать дребезг на выходах А и В, вызванных медленными переходными процессами включения и выключения питания на VDD1 (> 100 мкс / В), ADM2483 имеет входной сигнал power_valid (PV). Этот вывод должен быть низким до тех пор, пока VDD1 не превысит 2,0 В. Если VDD1 больше 2,0 В, контакт должен быть высоким. И наоборот, после выключения питания PV должен быть низким до того, как VDD1 достигнет 2,0 В.
Вход power_valid может управляться, например, выходом схемы сброса системы, такой как ADM809Z, которая имеет пороговое напряжение 2,32 В.

В общем читайте датащит.

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

поставил adm483 и приём с передачей заработал как хотелось

Ясен пень, чип проще чем "adm2483". :)
Вы бы его вначале запустили в пошаговом режиме, а потом бы уже пытались в принт/инпут пихать.

0

7

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

0

8

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

оказалось нужно выдерживать паузе

Если я правильно понял предложение, то я тебе об этом уже говорил. :)

0

9

Приветствую!
Подниму старую тему, чтобы не плодить сущности.

компилятор 2085

Dim Rx_dat(250) As Byte

Printbin Rx_dat(1) , 8       ' В сеть уходит 250 байт
Printbin Rx_dat(1) ; 8       ' В сеть уходит 250 байт

Temp = 8
Printbin Rx_dat(1) , Temp  ' В сеть уходит 250 байт

Temp = 8
Printbin Rx_dat(1) ; Temp  ' В сеть уходит 250 байт

Как эту @№% заставить работать как указано в Помощи?!

Variable number of bytes

Since version 2082 you can use a variable to specify the number of bytes to send. In order to keep the syntax compatible with older compilers, you must use a comma followed by the number of bytes. The number of bytes can be either a numeric constant or a numerical integer value.

Printbin Z , 1 ; Ar(1 , 1) , Q
In this example we sent 1 byte of variable Z , followed by Q bytes from variable ar(). The number will depend on the value of the variable Q.

Another example:
Dim Array(10) As Byte, Bytes_to_send As Byte

Bytes_to_send = 8
Printbin Array(1) , Bytes_to_send '  this will send 8 bytes

Bytes_to_send = 6
Printbin Array(1) , Bytes_to_send '  this will send 6 bytes, you should use comma if number of bytes is specified with variable

0

10

Printbin Z , 1 ; Ar(1 , 1) , Q
In this example we sent 1 byte of variable Z , followed by Q bytes from variable ar().
The number will depend on the value of the variable Q.

"В этом примере мы отправили 1 байт переменной Z, за которым следовали Q байтов из переменной ar().
Число будет зависеть от значения переменной Q."

Another example:
Dim Array(10) As Byte, Bytes_to_send As Byte

При объявлении массива добавить параметр (выделено) ?
Чтоб выглядело вот так:
Dim Rx_dat(250) As Byte, Q As Byte

UPD. Хотя, у меня и без этого работает...  :dontknow:
Bascom 2.0.8.5

Dim Rx_dat(25) As Byte
...
A = 10
Printbin Rx_dat(1) , A
Print
A = 5
Printbin Rx_dat(1) , A
Print
A = 1
Printbin Rx_dat(1) , A
Print
A = 25
Printbin Rx_dat(1) , A

Скрин из Симулятора
https://upforme.ru/uploads/0000/25/b8/1743/t410664.jpg

0