UART неверно передает данные. ATMega168 16MHz

Обсуждаем контроллеры компании Atmel.
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 149
Зарегистрирован: Чт мар 04, 2010 19:53:19
Откуда: Россия, Краснодарский край, Армавир

Сообщение Gek0n »

Собрал маленькую схемку, которая отправляла на комп по UART символы (строку/текст).
Схемка работала на внутреннем тактовом генераторе на 8 МГц. Всё было отлично.

Понадобилось повысить частоту схемки. Подключил внешний кварц на 16 МГц. Указал новые значения в регистре UBRR0L, соответствующие для 16 МГц и скорости 9600 бод.
Теперь вместо символов какая-то каша (такое ощущение, что символы передаются как-то криво)
То есть даже по длине строка не совпадает с отправленной. Есть ощущение, что кроме значения в указанном регистре я должен был поменять ещё где-то настройки, но я не могу найти где.
Подскажите пожалуйста.

Код: Выделить всё

/*-----------------------------------------------------------------------
/  USART for ATmega168a		-----	    Gek0n
/-----------------------------------------------------------------------*/
#include "usart.h"
#include <mega168a.h>

void usart_init(){
	UBRR0H = 0x00;
    UBRR0L = 0x67; //Раньше тут было 0x33 для 8 МГц и 9600 бод
    UCSR0B = (1 << TXEN0);
    UCSR0C = (3 << UCSZ00);
}

void usart_send(char byte){  
	while(!(UCSR0A &(1 << UDRE0)));
	UDR0 = byte;    
}

void usart_send_str(char *s){
	while(*s) usart_send(*s++);
}

void usart_send_buf(char *buf, int size){
	do{ usart_send(*buf++); }
    while(--size);
}
Контактная информация:
Реклама
Мучитель микросхем
Сообщения: 453
Зарегистрирован: Ср июн 08, 2011 20:25:20

Сообщение bob1 »

1. FUse CKSEL3...0 правильно выставили!!???
2. Кварц работает на частоте в 3 раза меньше...
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 149
Зарегистрирован: Чт мар 04, 2010 19:53:19
Откуда: Россия, Краснодарский край, Армавир

Сообщение Gek0n »

Вот кажется с фьюзами косяк. Проверил - точно они не выставились.
Выставил снова в 0000 (CKSEL3:0) Подключаю кварц - вообще нет реакции от схемы. То есть не заводится МК. Причем я 100% уверен что кварц рабочий и кондеры нормальные.

С чем может быть косяк?! Почему МК может не заводиться с внешним кварцем? Может фьюзы не так шью?

У меня CV AVR. Чтобы выставить в 0000 я ставлю птички на всех битах CKSEL. Это верно?
Контактная информация:
Мучитель микросхем
Сообщения: 453
Зарегистрирован: Ср июн 08, 2011 20:25:20

Сообщение bob1 »

Похоже камень перешел на внешнее тактирование 0000 (CKSEL3:0). Теперь чтоб что то изменить, нужно подавать на ногу XTAL1 частоту от внешнего генератора.
По умолчанию 0010 (CKSEL3:0). Нужно было выставить 1111.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 149
Зарегистрирован: Чт мар 04, 2010 19:53:19
Откуда: Россия, Краснодарский край, Армавир

Сообщение Gek0n »

Точно! Надо было выставить все 1111.
А в datasheet написано external clokc = 0000.

Я кажется чего-то не понимаю. Можете объяснить? :-) Я в теории кажется запутался
Контактная информация:
Реклама
Мучитель микросхем
Сообщения: 453
Зарегистрирован: Ср июн 08, 2011 20:25:20

Сообщение bob1 »

На ваш камень (при external clokc= 0000) не подаются тактируемые импульсы. Он не работает. Чтобы запустить ( или прошить) нужно подать импульсы на ногу XTAL1 .
В самом низу.
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Gek0n писал(а):Я кажется чего-то не понимаю. Можете объяснить? Я в теории кажется запутался
Если фьюз =1 - это не запрограммированный фьюз (unprogrammed), 0 - запрограммированный. Например, в программе программатора Вы ставите "птичку" напротив некого фьюза. Птичка означает запрограммированый, т.е. зашьется 0. Хотя "птички" визуально воспринимаются наоборот как лог.1. Но это все конечно от программного обеспечения программатора зависит.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Встал на лапы
Аватара пользователя
Сообщения: 149
Зарегистрирован: Чт мар 04, 2010 19:53:19
Откуда: Россия, Краснодарский край, Армавир

Сообщение Gek0n »

Не. Это-то я знаю. Вопрос в том, почему в даташите написаны 0000 а надо юзать 1111 ?
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Изображение
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Встал на лапы
Аватара пользователя
Сообщения: 149
Зарегистрирован: Чт мар 04, 2010 19:53:19
Откуда: Россия, Краснодарский край, Армавир

Сообщение Gek0n »

В чем отличие External Clock от External Resonator? Я думал, что делаю правильно, когда выбирал биты для External clock, оказалось, что нужен External resonator.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

В этом же разделе даташит, немногим ниже таблицы, расписан каждый режим, но не только расписан, еще схемы пририсованы.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Ответить

Вернуться в «AVR»