AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
26.06.2014, 21:36
|
|
Частый гость
Регистрация: 17.06.2014
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
USART mega162 + эмуляция в ISIS = пляски с частотой
Переношу свой проект с mega8 на mega162, так как софтовый UART не дает стабильной работы, а мне надо 2-ва UART'а в 1-м камне.
На mega8 проект отлично работал, редко искажались пакеты на софтовом UART'е...
Перенос начал как раз с UART'ов, тестирование ведется в ISIS , так как физический камень еще не заказывал.
Настроил UART0, запускаю, а в консоль ползут каракули, я имел секс с этим делом целый день, пока случайно не тыркнул консоль на скорость 1200, и увидел верные символы.
НООО по всем заданным настройкам скорость передачи должна быть 9600...
Код:
|
#include ‹ioavr.h›
#define F_CPU 8000000
void USART0_Init(void){
UBRR0H = 0;
UBRR0L = 51; //9600 при F_CPU 8000000
UCSR0B |= (1‹‹RXEN0)|(1‹‹TXEN0); //Включить прием\передачу
UCSR0B |= (1‹‹RXCIE0); //Прерывания по окончанию приема
UCSR0C |= (1‹‹URSEL0)|(0‹‹UMSEL0); //Асинхронный режим
UCSR0C |= (1‹‹URSEL0)|(0‹‹UPM00)|(0‹‹UPM01); /Без проверки четности
UCSR0C |= (1‹‹URSEL0)|(0‹‹USBS0); //1 стоповый бит
UCSR0C |= (1‹‹URSEL0)|(1‹‹UCSZ00)|(1‹‹UCSZ01); // кадр 8 бит
asm("sei");
};
void USART0_Transmit(unsigned char data){
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1‹‹UDRE0)) );
/* Put data into buffer, sends the data */
UDR0 = data;
};
void main(void){
USART0_Init();
while(1){
USART0_Transmit(0x34);
}
}; |
Настройки ISIS в атаче.
Что интересно!
Я подумал, что-то не то с частотой, я ставлю якобы 8MHz и получаю 1200 бод, а 1200*8 = 9600 бод, и я подумал, что частота на самом деле 1Mhz.
Я выставил в камне (в ISIS) внешний кристал, и установил частоту 64MHz, не будет удивительным, я получил 9600 бод.
Второе интересное наблюлюдение:
void main(void){
DDRB=0xFF;
while(1){
PORTB=0x1;
asm("nop");
PORTB=0x0;
}
}
Вот такой код я запустил на выполнение, к соответствующей ноге порта B прикрутил счетчик, и установил на измерение частоты,врезультате, при установленной якобы 8MHz я получил на счетчике 142857 (~ сто пятдесят тысяч).
Неужели на эти элементарные операции тратится 55 тактов МК?
В общем, кто что думает, я докатился до стадии маразма, или всетаки ISIS глючит??? ( не первый раз натыкаюсь, четность в UART, он точно не верно считает)...
Последний раз редактировалось qweentet; 26.06.2014 в 21:45.
|
|
|
|
26.06.2014, 22:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,794
Сказал спасибо: 2,913
Сказали Спасибо 3,120 раз(а) в 2,111 сообщении(ях)
|
Re: USART mega162 + эмуляция в ISIS = пляски с частотой
Фуз CKDIV8 ?
|
|
|
|
26.06.2014, 22:23
|
|
Частый гость
Регистрация: 17.06.2014
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: USART mega162 + эмуляция в ISIS = пляски с частотой
Сообщение от ForcePoint
|
Фуз CKDIV8 ?
|
Я может снова, что-то недопониманию, но в моем понимании, фьюзы ставятся в физическом камне, а я имею дело с виртуальным, настройки которого я показал в атачах, или я все же чет не до понял?
|
|
|
|
26.06.2014, 22:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,794
Сказал спасибо: 2,913
Сказали Спасибо 3,120 раз(а) в 2,111 сообщении(ях)
|
Re: USART mega162 + эмуляция в ISIS = пляски с частотой
Раз ISIS -симулятор(?), то, в идеале, должен иметь всё, что имеет реальный камень.
Ну или считайте CLKPR и, если там что-то отличное от 0, запишите в него этот нолик.
|
|
|
|
26.06.2014, 23:01
|
|
Частый гость
Регистрация: 17.06.2014
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: USART mega162 + эмуляция в ISIS = пляски с частотой
Сообщение от ForcePoint
|
Раз ISIS -симулятор(?), то, в идеале, должен иметь всё, что имеет реальный камень.
Ну или считайте CLKPR и, если там что-то отличное от 0, запишите в него этот нолик.
|
Нет, фьюзы у него не такие как в реальном, я же говорю, смотрите атач!!! Там выпадающее меню, в котором можно выбрать частоту работы МК...
|
|
|
|
26.06.2014, 23:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: USART mega162 + эмуляция в ISIS = пляски с частотой
Симулятор учитывает фузы
|
|
|
|
26.06.2014, 23:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
|
Re: USART mega162 + эмуляция в ISIS = пляски с частотой
Сообщение от qweentet
|
Нет, фьюзы у него не такие как в реальном, я же говорю, смотрите атач!!! Там выпадающее меню, в котором можно выбрать частоту работы МК...
|
Все настройки нужно сделать как в реальном камне. Или они тут по Вашему для красоты? А то, по вашей логике, и от смены частоты ничего не должно было меняться...
|
|
|
|
27.06.2014, 00:23
|
|
Частый гость
Регистрация: 17.06.2014
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: USART mega162 + эмуляция в ISIS = пляски с частотой
Сообщение от vynt
|
Все настройки нужно сделать как в реальном камне. Или они тут по Вашему для красоты? А то, по вашей логике, и от смены частоты ничего не должно было меняться...
|
Где в моей логике, от смены частоты, ничего не должно было меняться?
|
|
|
|
27.06.2014, 00:30
|
|
Частый гость
Регистрация: 17.06.2014
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: USART mega162 + эмуляция в ISIS = пляски с частотой
Сообщение от ForcePoint
|
Фуз CKDIV8 ?
|
Спасибо, разобрался с этими фузами, глаза по вылазили, но , могли бы получше ткнуть носом=).
|
|
|
|
27.06.2014, 02:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,794
Сказал спасибо: 2,913
Сказали Спасибо 3,120 раз(а) в 2,111 сообщении(ях)
|
Re: USART mega162 + эмуляция в ISIS = пляски с частотой
Сообщение от qweentet
|
могли бы получше ткнуть носом
|
Ну, как есть... "Я не кормлю рыбой, я учу делать удочки" (С) чьё-то
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:30.
|
|