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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » проблема с uart в attiny13a


проблема с uart в attiny13a

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

1

Здравствуйте, при запуске данной проги напряжение на 3 порту меняется от 0в до 5в - напряжение питания (на вход uart  идет постоянный поток данных).  При комментировании строки  "Input #2 , Temp" на 3 порту устанавливается 5в. Разве не должно быть так, что я установил высокий уровень на порту и, пока не поменяю, он не должен меняться и зависеть от телодвижений на других портах? Спасибо.

$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 16
$swstack = 16
$framesize = 16

Dim Temp As String * 4
Config Portb.3 = Output
Open "comb.4:4800,8,n,1" For Input As #2

Do
Input #2 , Temp
Portb.3 = 1
Loop

0

2

Вы уверены, что МК не битый?

Исходники+эмуляция - скачать

0

3

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

Код это весь, было больше, но после поиска причины такой работы он сократился до этих строк. Если строка "Input #2 , Temp" комментирована, то на Portb.3 устанавливается напряжение питания - 5в.
Если не комментирована и данных на входе uart нет, то на Portb.3 - 0в. Если не комментирована и данные на входе uart есть, то на Portb.3 - 2в, на него через полевик подключен мотор, он крутится рывками, т.е. предполагаю, что напряжение на ножке МК плавает от 5в до 0в.

0

4

В высшей степени странно, противоречит всякой логике!

Попробуйте заменить МК, проверьте монтаж (наверное уже делали)

0

5

Собрал в железе,

Atmega8A = Output

Исходник

$regfile = "m8adef.dat"

$crystal = 8000000
$hwstack = 16
$swstack = 16
$framesize = 16

Dim Переменная As Word
Dim Temp As String * 4
Config Portb.2 = Output

Open "comb.4:9600,8,n,1" For Output As #1

Do

Incr Переменная

Temp = Str(Переменная)

Print #1 , Temp

Portb.2 = 1
Waitms 250
Portb.2 = 0
Waitms 250

Loop
End

Atmega32A = Input

исходник

$regfile = "m32def.dat"

$crystal = 8000000
$hwstack = 16
$swstack = 16
$framesize = 16

Dim Temp As String * 4
Config Portb.2 = Output

Open "comb.4:9600,8,n,1" For Input As #1

Do
Input #1 , Temp
Portb.2 = 1
Waitms 500
Portb.2 = 0
Waitms 500

Loop
End

Всё замечательно работает!!!

Скрин терминала
http://s5.uploads.ru/t/sXeqS.jpg

Еще скрин терминала

исходник

$regfile = "m8adef.dat"

$crystal = 8000000
$hwstack = 16
$swstack = 16
$framesize = 16

Dim Переменная As Word
Dim Temp As String * 20
Config Portb.2 = Output

Open "comb.4:9600,8,n,1" For Output As #1

Temp = "Проверка работы"

Do

Incr Переменная
Print #1 , Переменная

Print #1 , Temp

Portb.2 = 1
Waitms 250
Portb.2 = 0
Waitms 250

Loop
End

http://s5.uploads.ru/t/Lkn2A.jpg

Скрин осцилографа Atmega8A
http://s4.uploads.ru/t/Hv120.jpg

Скрин осцилографа Atmega32A
http://s4.uploads.ru/t/ZgYKf.jpg

Скрин эмуляции в "Протеус"
http://s5.uploads.ru/t/YizZB.jpg

Отредактировано sasha_1973 (2013-08-24 15:03:37)

0

6

Разобрались?

0

7

пока нет, разбираюсь

0

8

Attiny13 у меня нет, а на других МК всё работает!

0

9

ничего не получается, на КЗ проверил, контакты перепаял, МК заменил, никаких изменений!

0

10

Чудес не бывает!
В реальном железе исходники работают, проверено, так что, утро вечера мудреней, отложите до завтра и все у Вас получится!

Отредактировано sasha_1973 (2013-08-24 20:53:23)

0

11

А фьюзы у Вас правильно зашиты?

В новом МК Attiny13 с завода зашит фьюз (CLKDIV8) делитель на 8, получается, что частота МК не соответствует частоте исходника, рвется приём и передача по USART, одна из возможных причин!

Чтобы не трогать фьюзы, в иходнике напишите 1.200.000, частоту USART понизьте до 2400-4800, попробуйте так.

Отредактировано sasha_1973 (2013-08-24 21:45:15)

0

12

Проверил в железе, только на МК Atmega88. Поведение  соответствует описанному Вами, хаотичное изменение уровня на ноге МК.

Прошейте правильно фьюзы или измените частоту МК в исходнике.

0

13

получается, при выполнении input программа останавливается, ожидая данные с uart и при этом ноги контроллера переходят в низкий уровень (по крайней мере в attiny 13a я такое увидел). Попробую использовать команду Inkey (Var = Inkey(#2)) - она работает без ожидания данных.

0

14

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

Проверил в железе, только на МК Atmega88. Поведение  соответствует описанному Вами, хаотичное изменение уровня на ноге МК.

Прошейте правильно фьюзы или измените частоту МК в исходнике.

прошу прощения, не увидел Вашего сообщения. Завтра попробую фьюзы поменять.  CLKDIV8 выключен.

0

15

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

Проверил в железе, только на МК Atmega88. Поведение  соответствует описанному Вами, хаотичное изменение уровня на ноге МК.

Прошейте правильно фьюзы или измените частоту МК в исходнике.

Подпись автора

    "Чем больше узнаешь, тем больше понимаешь, как мало знаешь!" - Сократ


еще вопрос, если можно - разве частота МК может меняться из исходника не трогая фьюзы?

0

16

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

еще вопрос, если можно - разве частота МК может меняться из исходника не трогая фьюзы?

Частота МК не меняется, она программируется только фьюзами, а вот для расчета всевозможных задержек (например: waitms или usart), компилятор её использует!!!

В Вашем случае получается несоответствие, из-за этого USART шлёт и принимает чепуху, а т.к. МК пока что-нибудь не примет дальше не идет, получается хаотичиное изменение уровня на нужной ноге МК, в зависимости от того, что там принимает МК.

Поторяю, проверил в железе. Ситуация стала схожа с Вашей! Как только восстановил фьюзы, восстановилась работа обоих МК!

Отредактировано sasha_1973 (2013-08-25 01:59:56)

0

17

У Вас есть чем USART посмотреть на компе, что там, кому передается?

Отредактировано sasha_1973 (2013-08-25 02:01:12)

0

18

Как успехи?

0

19

Здравствуйте, извините за молчание. USART смотрю переходником USART -USB и прогой terminal v1.9b. При совпадении частот в исходнике и фьюзах передатчика идут нормальные данные, при изменении в исходнике получается бред. Я, наверное, стормозил не указав что в передатчике и приемнике использую attiny13a. при понижении частот и скорости в лучшую сторону ничего не менялось.  Стоит еще наверно сказать, что это схема управления двумя двигателями с реверсом, для этого использую 4 ноги МК и  ключи на полевиках. То что хотел, получилось наоборот, при максимальной частоте МК 9.6Мгц, скорости передачи 19200 или 28800 и использовании команды Inkey (программа не останавливается, ожидая данные USART ). Я уже написал, что это схема управления поэтому 4 команд (передаваемых байт) мне хватает, а если какие то байты и теряются, то за счет инерционности двигателей и байт передаваемых позже этого не заметно.
Примерно так:

передатчик
Open "comb.4:28800,8,n,1" For Output As #1 
Do
  If Pinb.2 = 1 Then
  Print #1 , 2
  End If

  If Pinb.1 = 1 Then
  Print #1 , 1
  End If
Loop

приемник
Open "comb.4:28800,8,n,1" For Input As #2
Do
Cmd = Inkey(#2)

  If Cmd = "2" Then
  Portb.2 = 1
  End If

  If Cmd = "1" Then
  Portb.1 = 1
  End If
Loop

Но когда ножны будут сами данные а не их количество, я attiny13 использовать не буду. :-)

Большое спасибо за поддержку и помощь. :-)

0

20

По идее, от модели используемого контроллера ничего не должно менятся, если правильно сконфигурирован МК в исходнике!

0

21

я имею ввиду программный UART на всех контроллерах, в нем после передачи каждой строки передаются символы перевода строки/возврата каретки. Может, здесь еще причина.

0

22

А в аппаратном, что, не передаётся???

+1

23

ну юартом пока не пользовался никаким поэтому не могу утверждать, но здесь http://decada.org.ru/project/lessons/bascom_avr/14/ читал отличия аппаратного от программного (в конце статьи). "Обратите внимание, что программный UART не посылает эхо. Еще одно отличие, что после передачи каждой строки передаются символы перевода строки/возврата каретки."

0

24

Даже если так, у меня Ваши исходники работают, значит причина не в этом!

0

25

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

я имею ввиду программный UART на всех контроллерах, в нем после передачи каждой строки передаются символы перевода строки/возврата каретки. Может, здесь еще причина.

нет
перевод строки важен только в команде приёма input и тот настраивается в конфигурации
inkey и waitkey не ждут никаких доп знаков кроме как 1 принятого байта (причем inkey просто опрашивает порт на момент вызова, т.е. данные должны быть уже подготовлены для приёма (извне), иначе на выходе будет 0)

0

26

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

перевод строки важен только в команде приёма input и тот настраивается в конфигурации


если не трудно, где прочесть подробнее о настройках input? все что я видел по bascom uart это только строка конфигурации без объяснений.

0

27

вы хелп в программе открывали?
вот его клон:

http://avrhelp.mcselec.com/index.html?_timeout.htm
http://avrhelp.mcselec.com/index.html?input.htm
http://avrhelp.mcselec.com/index.html?_timeout.htm

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » проблема с uart в attiny13a