roboforum.ru

Технический форум по робототехнике.
Текущее время: 20 май 2025, 21:41

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Нужна помощь. в UART приходят одни нули
СообщениеДобавлено: 26 июл 2012, 13:12 
Не в сети
Аватара пользователя

Зарегистрирован: 28 авг 2005, 08:30
Сообщения: 440
Откуда: деревня - Тюмения
прог. языки: с++
Начинаю делать новый проект,
робот на базе компонентов от pololu.
Точнее на avr atmega328p.
Прикрутил два сдвиговых регистра, которые управляют матрицей светодиодной. Заработало.
Далее мне нужно реализовать usart.
Написал программу. Пока еще в робота не залил.
Но решил протестировать прошивку в proteusе.
Сделал схему.
Запустил, матрица типа заработала (вру светодиоды неправельно горят, ну и ладно, главное они светятся).
А вот по терминалу, какаято херь идет. Одни нули.
Сдается мне, я неправельно сконфигурировал проект симуляции?
Или неправельно инцеализировал USART.
Может у когонибудь есть время поковырять мой код?

Весь проект прикрепил к посту.
Там есть файлы и папки:
/Симуляция/1.dsn - проект протеуса
/TrackPixel/TrackPixel.atsln - проект на atmel studio 6
/TrackPixel/Debug/TrackPixel.hex - прошивка



В краце опишу как инициализирую usart
где F_CPU = 20000000
Код:
   /* настройка скорости
   */
   int baud = 9600;
   unsigned int baud_ubrr = (F_CPU - 8 * baud) / (16 * baud);
   UBRR0 = baud_ubrr;
   
   /* разрешаем прерывания при риеме и передачи данных
   */
   UCSR0B = (1<<RXCIE0)|(1<<TXCIE0)|(1<<RXEN0)|(1<<TXEN0);
   UCSR0C = (1<<UCSZ01)|(1<<UCSZ00); //размер слова 8 разрядов
   
   
   
   UCSR0A = (1<<RXC0)|(1<<UDRE0);
   
   // Enable interrupts in general.
   sei();


Добавлено спустя 2 часа 26 минут 51 секунду:
Запустил на эмуляторе, что идет в комплекте со студией. Там прекрасно обрабатывается вызываются прерывания на то что данные доставлены.
Интересно, в протеусе можно поднять листинг программы? там брекпоинты хочется поставить итд.


Вложения:
TrackPixel.rar [245.35 КиБ]
Скачиваний: 0
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь. в UART приходят одни нули
СообщениеДобавлено: 30 июл 2012, 13:42 
Не в сети
Аватара пользователя

Зарегистрирован: 28 авг 2005, 08:30
Сообщения: 440
Откуда: деревня - Тюмения
прог. языки: с++
УРА нашел проблему.
Все дело в этой строчке

int baud = 9600;
unsigned int baud_ubrr = (F_CPU - 8 * baud) / (16 * baud);
UBRR0 = baud_ubrr;

переменную baud нужно объявить не как int а как unsigned long.
И тогда все встанет на свои места.
Почему так происходит?
Компилиятор, он ведь оптемезирует код бездушно. Видит что указанно число как int и соответственно строит кусок кода для вычесления с учетом int. Но в процессе вычисления, реультат становится очень большим, и он невлеает в те переменные которые заготовил компилятор в прогамме.
выход - явно указать максимальный большой тип чисел.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь. в UART приходят одни нули
СообщениеДобавлено: 30 июл 2012, 14:50 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
а если не чудить, а
1) посчитать в калькуляторе
2) написать #define - компилятор развернет
3) переписать формулу как (F_CPU/baud - 1)/2

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Нужна помощь. в UART приходят одни нули
СообщениеДобавлено: 30 июл 2012, 15:07 
Не в сети
Аватара пользователя

Зарегистрирован: 28 авг 2005, 08:30
Сообщения: 440
Откуда: деревня - Тюмения
прог. языки: с++
У меня программно настраивается скорость уарта. Передается скорость передачи, и оно само настраивает порт.
--
теперь пишу оболочку для управлением системы через терминал. В протеусе все отлично работает. В железе еще не тестировал, ибо замучил досмерти свой контроллер.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO