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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Настройка Uart В Bascom Avr


Настройка Uart В Bascom Avr

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

1

Всем доброго времени суток, подскажите пожалуйста как в Bascom avr по uart принять показания с прибора?   В терминал прибор выводит последовательность:    +00000001B+00000001B+00000001B+00000001B+00000001B+00000001B+00000001B+00000001B+00000001B+00000001B (При нуле)

+00017001D+00017001D+00017001D+00017001D+00017001D+00017001D+00017001D+00017001D+00017001D+00017001D(При показаниях прибора 170 единиц).   Вся проблема у меня в том что прибор не передаёт код 13  (Enter).   Просто через Input принимает только первое число, пробовал через inputbin, принимаю и передаю сразу в uart, в терминале получаю вот такой выход +00000001B+0000000+0000000+0000000+0000000+0000000+0000000001B+000+0000000+0000000+0000000001B(При нуле)

Код такой:
'avrproject.ru
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600

Config Portd = Output
Config Portd.0 = Input
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

Dim A As long

Do

Inputbin A
Printbin A

Loop

End

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

0

2

Табличку сделай хотябы на 10-50 разных показаний от "0" и до "максимума" прибора.

0

3

Есть описание протокола

The transfering data is the current weight (gross weight or net weight) showing on the
indicator. Each frame data is formed by 12 groups of data. The format is as follows:

1    02(XON)             Start
2    +or-                Symbol bit
3    Weighing            Data High Bit
4    Weighing data
5    Weighing data
6    Weighing data
7    Weighing data
8    Weighing data       Low bit
9    Decimal Digit       From Right to Left (0 ~ 4)
10   XOR Checksum        High Four Digit
11   XOR Checksum        Low Four Digit
12   03(X0FF)            Over

XOR Checksums 2+3+……+8+9

0

4

Тут целый пакет данных с контрольной суммой. Нужно курить даташит и смотреть, как данные о весе (я так понял) кодируются.

0

5

Примерно понял как его принимать.  Нужно начинать передавать из буфера уарт в переменную принятые символы по коду "02"(XON) и завершать передачу по коду 03(XOFF)
В сети нашёл код, завершение приёма изменил немного.   Почти хорошо начал принимать, теперь как-то надо написать начало приёма по коду 02.

$regfile = "m8def.dat"                                   ' specify the used micro

$crystal = 8000000                                         ' used crystal frequency

$baud = 9600                                               ' use baud rate

$framesize = 16
$regfile = "m8def.dat"                                   ' specify the used micro

$crystal = 8000000                                         ' used crystal frequency

$baud = 9600                                               ' use baud rate

$framesize = 16
$hwstack = 24
$swstack = 16

Dim Comchar As Byte 'принимаемый символ
Dim Buff As String * 20 'переменная буфер
Dim Flagbuf As Bit 'переменная Флаг конца приема сообщения

On Urxc Getchar 'переопределяем прерывание на передачу по usart
Enable Urxc 'включаем прерывание uart
Enable Interrupts

Reset Flagbuf

'Основной цикл
Do

If Flagbuf = 1 Then
Disable Serial

Print Buff 'отправляем принятое сообщение

Buff = "" 'сбрасываем буфер

Reset Flagbuf 'сбрасываем флаг приема сообщения
Enable Serial
End If

Loop

Getchar:
Comchar = Inkey() 'принимаем 1 символ

If Comchar <> 03 Then 'проверяем является ли этот символ Over
Buff = Buff + Chr(comchar) 'если нет, то добавляем его в буфер
Else
Flagbuf = 1 'если символ оказался "Over", тогда флаг устанавливаем в 1.
End If

Return

0

6

Дайте пожалуйста совет, как осуществить начало строки по коду 02.

0

7

Сделать буфер длиной 12 байт и принимать от и до + таймер при ошибке приёма. Потом разобрать буфер с целью проверки данных на целостность.

0

8

Уважаемые форумчане, дайте пожалуйста совет что почитать по bascom на русском языке....    даже не зная возможности языка программирования я не смогу это сделать. :-(

0

9

Или может кто-то возьмётся написать код за финансовое вознаграждение?

0

10

http://decada.org.ru/project/lessons/bascom_avr
http://avr.ru/beginer/bascom

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Настройка Uart В Bascom Avr