Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/60: Рейтинг темы: голосов - 60, средняя оценка - 4.77
proffissor
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 321
1

При симуляции UARTa в протеусе выдает "ИИИИИИИИ..."

16.11.2010, 07:34. Просмотров 10876. Ответов 19
Метки нет (Все метки)

Собрал схемку: тини и виртуальный порт, написал простой код, как в статье для начинающих, но при симуляции в виртуальном порте выдает "ИИИИИИ...", хотя если подключить осциллограф, то пакеты данных в порядке, думаю может какие-то настройки виртуального есть, о которых я не знаю. Когда перепрошил контроллер чтоб и принимал данные, то при отправке в виртуальном порте, ответа нет ?! Что за хрень ? Спасибо за ответы !
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2010, 07:34
Ответы с готовыми решениями:

Проблема при симуляции с delay.h
Здравствуйте. При пошаговой отладке программы в AVR Studyo 6, пройдя функцию _delay_ms(1000); меня...

AtTiny2313 + AvrStudio4 - ошибка при симуляции
Пишу на ASM для AtTiny2313. Простая такая программка:...

При симуляции выдает обратный оптимизационному эксперименту результат
Добрый вечер! Возникла следующая проблема: при использовании в симуляции результата выданного в...

Ошибки при симуляции
Запустил проект в симуляцию. Показывает шибки типо ошибка чтения, из за адресации.... Помогите в...

Ошибка при симуляции
Построил модель движения перекрестком. Поставил начало движения в одной точке, и точку отправления...

19
morvym_yorki
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 600
16.11.2010, 08:17 2
Смотреть, как настроена длина пакета/четность/стоп
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
16.11.2010, 15:14 3
Скорость UART в тиньке
Скорость UART в виртуальном терминале
Частота тиньки (фьюз CKDIV8 никто не отменял :))
0
morvym_yorki
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 600
16.11.2010, 16:06 4
dsodir,
>>Частота тиньки (фьюз CKDIV8 никто не отменял :))
я попробовал на меге48, там нет такого фуза, насколько я помню - то же самое
но разбираться пока некогда было
0
16.11.2010, 16:06
Bomomd
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 2,020
16.11.2010, 16:08 5
Скорее всего дело именно в несовпадении скоростей обмена по UART между МК и терминалом протеуса. А нет макетки, чтобы в железе проверить?

p.s. Выложите проект для протеуса и исходники. Попробую у себя.
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
16.11.2010, 16:23 6
я попробовал на меге48, там нет такого фуза, насколько я помню - то же самое
Он там был, есть, и будет есть!

И мало того, что он есть, так он ещё и запрограммирован изначально. Т.е. выставив CKSELами частоту в 8Мгц, мы получим 1 Мгц. Во столько-же раз уплывёт скорость UART. Он, конечно, надёжный - может работать при отклонении скорости в 5%. Но не в восемь раз, же!
0
morvym_yorki
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 600
16.11.2010, 17:04 7
[QUOTE="dsodir"][QUOTE="Цитата:[/QUOTE]
я попробовал на меге48, там нет такого фуза, насколько я помню - то же самое
Он там был, есть, и будет есть!

И мало того, что он есть, так он ещё и запрограммирован изначально. Т.е. выставив CKSELами частоту в 8Мгц, мы получим 1 Мгц. Во столько-же раз уплывёт скорость UART. Он, конечно, надёжный - может работать при отклонении скорости в 5%. Но не в восемь раз, же!
глянул ДШ - и верно. да, в этом может быть причина проблемы.
кстати, кажется, Ди говорил, что это якобы вовсе не фуз, а программно доступный регистр, т.е. его можно менять на ходу прямо из исполняемой программы
0
xroymom
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 727
16.11.2010, 17:11 8
Цитата Сообщение от morvym_yorki
кстати, кажется, Ди говорил, что это якобы вовсе не фуз, а программно доступный регистр, т.е. его можно менять на ходу прямо из исполняемой программы
Не совсем так. Есть регистр, который задает коэффициент деления тактовой частоты. А фуз CKDIV8 всего-лишь устанавливает в этом регистре начальное значение. Изменять значение в регистре можно программно. Раздел даташита "System Clock omd Clock Options" -> "System Clock Pressotir".
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
16.11.2010, 17:19 9
Регистр CLKPR. Его действительно можно сбросить программно. Делается сие так:
Код
ldi r16, 1<<CLKPCE
out CLKPR, r16
ldi r16, 0
out CLKPR, r16
Мы записали 0, т.е. сбросили предделитель.
Можно запихнуть другое значение, и управлять частотой (я так батарейки экономлю)

А фузь CKDIV8 - это просто рубильник, который включает предделитель на 8.
Его придумали злые бородатые дядьки, чтоб издеваться над начинающими кодерами-электронщиками :)

;Блин, всё уже сказали до меня :)
0
OmikymForti
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 1,116
16.11.2010, 21:43 10
Мне интересно, если программно включать делитель на 8, во сколько раз снизится потребление чипа?
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
16.11.2010, 22:02 11
Девайс - мега48. Питание 5В. Частота - 8МГц.
Если верить этой табличке, то кушать мы будем 5мА.


Теперь снизим частоту в 8 раз. 1МГц. Потребление уже чуть меньше 1мА.

НО! Можно не останавливаться на достигнутом. Если мне нужно, к примеру выполнять что-то через равные (или не равные) промежутки времени, при этом экономя питание, то можно зарубить частоту на 256.
Было 8МГц, стало 31,25кГц. И что у нас при такой частоте?


Ой! Там графика нет! Но можно предположить, что около 100мкА.

То, что нет графика вовсе не значит, что МК не будет работать. У меня тинька работает с предделителем 256 от 9.6МГц. А когда ей нужно быстро соображать - отключает предделитель.
0
proffissor
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 321
17.11.2010, 05:09 12
Спасибо за ответы, дело действительно было в частоте тиньки, посокольку был запрограммирован бит CKDIV8. Я переписал программу на прием, увеличение значиня и отправка назад. Проблема в следующем: не генерируются прерывания, то есть с выхода виртуального порта биты идут, в мк разрешено прерывание по приему RXCIE и общие прерывания I, но при симмуляции в протеусе перехода на прерывание нету. Также при установки значения UDR в ручную в авр студии при симуляции, они автоматически сбрасываются в 0, при этом переход на прерывания не вызывают. Где я опять накосячил ?
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
17.11.2010, 12:53 13
Попробуй потыкать флаг RXC и посмотри вылетит-ли прерывание.
И неплохо-бы увидеть код.
И вообще АВР студия - одна большая бага.
0
proffissor
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 321
18.11.2010, 06:52 14
Не ну если тыкаю, то конечно переходит, вот только мне надо чтоб оно само тыкало флаг RXC, а в общем я полностю с вами согласен, симулятор студии - дрянь, но при моем финансовом положении, это - лучше чем ничего =) Прилагаю код, писал по быстрому, так что простите за неакуратнось !

[27.33 Кб]
0
Rotomd_Disshoym
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 9
18.11.2010, 12:07 15
У меня эмуляция работает нормально.
Надо не по Ф11 бегать, а ставить брейкпоинт на обработчике прерывания опустошения буфера УСАРТ. Один байт передается у меня со скоростью 9600 примерно за 1000 микросекунд. Это восемь тысяч циклов процессора (при частоте 8 МГц), так что замучаешься Ф11 давить до появления прерывания.
Поставил брейкпоинт и нажал Ф5.
Правда, у меня не RXC генерится, а UDRE. Но я сначала тоже думал, что не работает, пока программу не запустил на выполнение.
0
proffissor
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 321
18.11.2010, 18:07 16
не генерируются прерывания, то есть с выхода виртуального порта биты идут, в мк разрешено прерывание по приему RXCIE и общие прерывания I, но при симмуляции в протеусе перехода на прерывание нету. Также при установки значения UDR в ручную в авр студии при симуляции, они автоматически сбрасываются в 0, при этом переход на прерывания не вызывают. Где я опять накосячил ?
Передачу то я уже наладил, а вот прием нет...
0
proffissor
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 321
19.11.2010, 19:11 17
Нашел ошибку: порт настроен на вывод, поетому мк не ловил входящий сигнал =)
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
19.11.2010, 19:16 18
При включении, UART полностью захватывает пины RX и TX. Вроде как TX должен автоматически настраиваться на выход, а RX - на вход.
0
proffissor
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 321
20.11.2010, 07:23 19
Цитата Сообщение от dsodir
При включении, UART полностью захватывает пины RX и TX. Вроде как TX должен автоматически настраиваться на выход, а RX - на вход.
Я тоже так раньше думал ... Хотя, не стоит забывать о том, что это только симулятор ...
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
20.11.2010, 13:25 20
Хм... ещё одна бага в копилку Протеуса.
Впрочем (сейчас специально проверил) это можно заметить по конфликту уровней (желтый квадратик над пином). Это если RX сконфигурирован на выход с низким уровнем.
0
20.11.2010, 13:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2010, 13:25

Ошибка при симуляции
Есть модель anylogic версии 7.3 в ней выполнена модель всё работает, требуется чтобы эта же модель...

Ошибка при симуляции (как побороть?)
Задание такое же, как в этой теме (код свой - переписал заново). Вопрос №1: У меня в коде при...

Проблема с портом при симуляции проекта в Протеус
Сам проект я описал тут: MicroVGA conio/text usir interfosi library на Pinboard II (AVR). Демо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru