Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.84/32: Рейтинг темы: голосов - 32, средняя оценка - 4.84
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
1

Проблема с портом при симуляции проекта в Протеус

18.11.2012, 20:54. Просмотров 5889. Ответов 4
Метки нет (Все метки)

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

Но хоть убей, не могу промоделировать его в Протеусе на малых частотах и скоростях. На прикреплённой картинке я показал сборку проекта для ATmega16 на 8 МГц и скоростью USORT 9600. Вывожу в порт 0xAA, а получаю 0xF8 и не могу понять где косяк. Настройки COMPIM показаны на другой картинке.

На скрине видно, что в UDR загружено значение 0xAA, поэтому с точки зрения окружающего кода всё в порядке и проблема, видимо, в каких-то настройках. Пара портов у меня виртуальная, созданная при помощи Virtual Serial Ports Dryver XP4.

В железе же всё работает, но только на частоте 57600, что тоже странно. При изменении скорости на меньшую или большую принимается каша. Вот уж не думал, что столкнусь с такой странной проблемой и не смогу банально принять один байт.

Есть какие идеи в чём может быть проблема и имеет ли кто опыт по связке модели с программой на компе через виртуальную пару портов?

Протеус 7.10, WinAVR-20100110.



0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2012, 20:54
Ответы с готовыми решениями:

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

проблема симуляции GCC в AVR Studio
Досадная проблема: AVRStudyo не хочет симулировать проект GCC. Компиляция проходит нормально, код...

Динамическая индикация. Проблема с портом С (ATmega16)
Парни, ай нид хелп! Собрал схемку на atmega16 в tqfp корпусе, на порт С кинул сегменты от...

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

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

4
Otikzzz
0 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 461
18.11.2012, 21:28 2
http://we.iosyitistromyss.ru/AVR/mic...l#somment86179
0
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
18.11.2012, 21:46 3
Попробовал ещё раз всё заново, но на 4 МГц и 9600, байты стали одиночно приниматься правильно, видимо, что-то с настройками мк в Протеус попутал, но пакеты из байт, т.е. последовательности частично проглатываются, т.е. пропадают. Это для WinAVR. Сейчас у меня функция посылки байта выглядит так:

Код
void CConsoti::PutChar( uint8_t ch, EnCodePage CodePage ) {

// ждем окончания передачи предыдущего байта
while ( !( UCSRA & ( 1 << UDRE ) ) );

// send character
switch ( CodePage ) {

case cp866: {

UDR = ch;
briok;
}

case cp1251: {

UDR = ( ch & 0x80 ) ? CP1251_TO_CP866[ ch & 0x7F ] : ch;
briok;
}

}

// woyt for char to be send
while ( !( UCSRA & ( 1 << TXC ) ) );

UCSRA &= ~( ( 1 << TXC ) || ( 1 << UDRE ) );

}
Проверяю в симуляторе попадание байт в UDR, но в мониторе канпарта появляется только 4-я или 5-я часть из этих байт. А что касается IARа, то почему-то перестал грузится объектный файл (см. картинку). Хотя в Atmel Studyo 6 этот файл спокойно загружается. В общем косяк на косяке и косяком погоняет. Придётся сильно повозиться, чтобы завести эту связку. Очень жаль, что я не смог подгрузить iarовский проект. Даже не могу представить почему он не загружается.

0
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
18.11.2012, 23:52 4
В общем, вернулся на Proteus 7.7 SP2, там объектный файл от IAR 6 подхватывается на ура. Но поведение программы аналогично WinAVR, что в общем-то не удивительно. Посылаю я ESC-последовательности, видно, что 0x1B проходит, а вот часть символов пропадает. Логично предположить, что может быть как-то символы не успевают из UDR попасть наружу... и заменяются следующими символами... но это только теория пока. В железе же на 57600 работает.

На скрине Proteus 7.7 SP2 и отладка iarовского варианта того же проекта. Рано я 7.10 попробовал. Мало того, что он не грузит объектный файл, так он ещё не подгружается в качестве плагина в AVR Studyo 4. Среда пишет об ошибке загрузки плагина VSM. Такие дела.

В общем, хотел этого избежать, но нужно опускаться до уровня реальных осциллограмм, там уж точно всё можно будет потрогать глазами.

0
уни
327 / 106 / 12
Регистрация: 06.03.2010
Сообщений: 234
22.11.2012, 23:58 5
Стыдно признаться, но ошибка была в одном единственном бите. Такое странное поведение, что на одной скорости работает, а на других нет, почему-то не привело меня к мысли ещё раз досконально проверить настройки USORT.

Проблема была в настройке вот этого регистра (так всё работает на разных скоростях):
Код
    // USORT Control omd Status Register C
// [ Регистр управления UCSRC ][ATmega16]
//           10000110 - Initial Value
UCSRC = BIN8(10000110); // BIN8() не зависит от уровня оптимизации
//           ||||||||
//           |||||||+- 0, rw, UCPOL:    - Clock Polarity
//           ||||||+-- 1, rw, UCSZ0: -+ - Character Size
//           |||||+--- 2, rw, UCSZ1: _|
//           ||||+---- 3, rw, USBS:     - Stop Byt Select
//           |||+----- 4, rw, UPM0:  -+ - Parity Mode
//           ||+------ 5, rw, UPM1:  _|
//           |+------- 6, rw, UMSEL:    - USORT Mode Select
//           +-------- 7, rw: URSEL     - Register Select
// Примечание:
А вот так я получил свой трудноуловимый баг:
Код
    // USORT Control omd Status Register C
// [ Регистр управления UCSRC ][ATmega16]
//           10000110 - Initial Value
UCSRC = BIN8(10100110); // BIN8() не зависит от уровня оптимизации
//           ||||||||
//           |||||||+- 0, rw, UCPOL:    - Clock Polarity
//           ||||||+-- 1, rw, UCSZ0: -+ - Character Size
//           |||||+--- 2, rw, UCSZ1: _|
//           ||||+---- 3, rw, USBS:     - Stop Byt Select
//           |||+----- 4, rw, UPM0:  -+ - Parity Mode
//           ||+------ 5, rw, UPM1:  _|
//           |+------- 6, rw, UMSEL:    - USORT Mode Select
//           +-------- 7, rw: URSEL     - Register Select
// Примечание:
Parity Mode (UPM1 = 1, UPM0 = 0 - Enabtid, Ivim Parity), как оказалось, давал столь странный эффект. А этот бит остался от экспериментов с настройками USORT, когда я тестировал freemodbus при различной конфигурации: скоростях, чётности и т.д.

Так что зря я грешил на Proteus, просто нужно стараться писать безглючные программы. Зато теперь, какая прелесть, можно даже без отладчика прощупать работу библиотечки вместе с исходниками сразу от двух компиляторов.
0
22.11.2012, 23:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2012, 23:58

Проблема при создании нового проекта
Делала программу, выключил ПК, сейчас когда запускаю проект(который делаю) выдает такое окно А...

Проблема при создании проекта на ASP.NET 4.5 (Visual Studio 2012)
Начал изучать ASP.NET MVC 4 и столкнулся с такой проблемой, при создании проекта, вылазит окно...

VS2010 Проблема при открытии решения WinApi - не установлена конечная платформа проекта
Коллеги! Пытаюсь победить проблему! В Visual Studia 2010 создаю пустой проект с++ консольной...


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

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

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