AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
13.11.2013, 19:53
|
|
Прохожий
Регистрация: 16.08.2009
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Atmega162 и второй USART
Нужна помошь.. уже всю голову себе сломал. У меня был проект под Atmega16 с использованием UART/ Теперь возникла необходимость перекомпилировать проект под Atmega162A-AU. Использую второй UART
вот вырезка кода по инициализации UART
Код:
|
#define F_CPU 7372800
#define BAUD 19200
#include baud.h //там макросы для расчета UBRR
void USART_Init(void)
{
UBRR1H = UBRRH_VALUE;
UBRR1L = UBRRL_VALUE;
UCSR1A 0;
UCSR1B = (1‹‹RXCIE1)|(1‹‹TXCIE1)|(1‹‹RXEN1)|(1‹‹TXEN1); //разр. прерыв при приеме и передачи, разр приема, разр передачи.
UCSR1C = (1‹‹URSEL1)|(1‹‹UCSZ11)|(1‹‹UCSZ01); //размер слова 8 разрядов
} |
Проблема следующего характера. в терминале (через ft232) приходит какой то бред на отправку символа микроконтроллером. Например отправляю 0x01 а приходит 0xB1
Подключил логический анализатор и увидел что если замкнуть RX и TX на ft232 и отправить 0x01 то прриходит 0x01 и длительность посылки на скорости 19200 около 475мкс. А вот с микроконтроллера приходит сигнал такой же формы но с длительностью фрейма около 20 мс!!!
Кварц стоит 7372800Гц , фьюз делителя на 8 отключен . Самое интересное длительность фрейма с микроконтроллера не поддается изменению - меняю BAUD на 115200 - то же самое, стал напрямую прописывать UBRR1H=0 UBRR1L=23 что соответсвует скорости 19200 по даташиту - ничего не меняется...
В чем может быть загвозlка? такое впечатление что есть какой то предделитель для Usart1? но тогда почему не изменяется длительность при изменении UBRR1?
Выручайте к пятнице плата должна сдаваться руководству
Последний раз редактировалось dosikus; 13.11.2013 в 20:15.
|
|
|
|
13.11.2013, 20:16
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
|
Re: Atmega162 и второй USART
den_sad, Оформляйте код как положено.
__________________
Осторожно , злой кот
|
|
|
|
13.11.2013, 20:23
|
|
Прохожий
Регистрация: 16.08.2009
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Atmega162 и второй USART
А что не так? Как правильно?
понял.. надо было теги ставить
А по проблеме не подскажете? Перелопатил даташит - все вроде правильно, подозревал кварц, но _delay_ms(1000) дает секундную задержку, значит с кварцем порядок
Последний раз редактировалось den_sad; 13.11.2013 в 21:15.
|
|
|
|
14.11.2013, 08:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Atmega162 и второй USART
RTFM
The UBRRH Register shares the same I/O location as the UCSRC Register. Therefore some
special consideration must be taken when accessing this I/O location.
Write Access When doing a write access of this I/O location, the high bit of the value written, the USART Register Select (URSEL) bit, controlswhich one of the two registers that will be written. If URSEL is
zero during a write operation, the UBRRH value will be updated. If URSEL is one, the UCSRC
setting will be updated.
The following code examples show how to access the two registers:
|
|
|
|
14.11.2013, 09:23
|
|
Прохожий
Регистрация: 16.08.2009
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Atmega162 и второй USART
Сообщение от niXto
|
RTFM
The UBRRH Register shares the same I/O location as the UCSRC Register. Therefore some
special consideration must be taken when accessing this I/O location.
Write Access When doing a write access of this I/O location, the high bit of the value written, the USART Register Select (URSEL) bit, controlswhich one of the two registers that will be written. If URSEL is
zero during a write operation, the UBRRH value will be updated. If URSEL is one, the UCSRC
setting will be updated.
The following code examples show how to access the two registers:
|
И этот момент я проверил, в коде не видно, но URSEL бит равен 0 когда я записываю данные в регистр, и как видно из кода, когда я записываю UCSR1C бит устанавливается в 1... код я сам брал из даташита
|
|
|
|
15.11.2013, 11:38
|
|
Частый гость
Регистрация: 15.11.2007
Сообщений: 34
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Atmega162 и второй USART
Сообщение от den_sad
|
Нужна помошь.. уже всю голову себе сломал.
|
Как вариант могу посоветовать для инициализации твоих усартов использовать CodeVision от HPInfortech. Скачай Евалюшин версию, воспользуйся кодевизардом с указанием типа проца и скорости. Хоть я сам пишу на иаре CV-шным генератором пользуюсь часто для настройки аппаратки. Лично у меня никаких проблем на 162-й меге с двумя портами не было.
|
|
|
|
15.11.2013, 12:38
|
|
Прохожий
Регистрация: 16.08.2009
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Atmega162 и второй USART
Сообщение от kovkaa
|
Как вариант могу посоветовать для инициализации твоих усартов использовать CodeVision от HPInfortech. Скачай Евалюшин версию, воспользуйся кодевизардом с указанием типа проца и скорости. Хоть я сам пишу на иаре CV-шным генератором пользуюсь часто для настройки аппаратки. Лично у меня никаких проблем на 162-й меге с двумя портами не было.
|
Раньше я так тоже делал, теперь стараюсь пользоваться даташитами..
Проблема решилась. Просто заново собрал проект - то есть сделал чистый, копи-паст и все заработало. Встречаюсь с таким уже где то раз третий за 2 года работы с аврками. Необъяснимо но факт. Avr studio 6.1? программаторы USBASP и avrdude через ft2322
|
|
|
|
15.11.2013, 14:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Atmega162 и второй USART
Может, фуз совместимости с мега161 стоял?
|
|
|
|
15.11.2013, 14:20
|
|
Прохожий
Регистрация: 16.08.2009
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Atmega162 и второй USART
Сообщение от niXto
|
Может, фуз совместимости с мега161 стоял?
|
Нет, фьюзы были запрограммированы один раз и больше их не трогал
|
|
|
|
15.11.2013, 15:04
|
|
Частый гость
Регистрация: 15.11.2007
Сообщений: 34
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Atmega162 и второй USART
Сообщение от den_sad
|
Раньше я так тоже делал, теперь стараюсь пользоваться даташитами..
|
Это тоже полезно, пару раз в начале, а потом начинает надоедать)
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:02.
|
|