Страница 1 из 1

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

Добавлено: Вс ноя 08, 2015 13:58:56
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);
}

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

Добавлено: Вс ноя 08, 2015 14:32:05
bob1
1. FUse CKSEL3...0 правильно выставили!!???
2. Кварц работает на частоте в 3 раза меньше...

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

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

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

У меня CV AVR. Чтобы выставить в 0000 я ставлю птички на всех битах CKSEL. Это верно?

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

Добавлено: Вс ноя 08, 2015 15:20:01
bob1
Похоже камень перешел на внешнее тактирование 0000 (CKSEL3:0). Теперь чтоб что то изменить, нужно подавать на ногу XTAL1 частоту от внешнего генератора.
По умолчанию 0010 (CKSEL3:0). Нужно было выставить 1111.

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

Добавлено: Вс ноя 08, 2015 15:29:03
Gek0n
Точно! Надо было выставить все 1111.
А в datasheet написано external clokc = 0000.

Я кажется чего-то не понимаю. Можете объяснить? :-) Я в теории кажется запутался

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

Добавлено: Вс ноя 08, 2015 15:47:22
bob1
На ваш камень (при external clokc= 0000) не подаются тактируемые импульсы. Он не работает. Чтобы запустить ( или прошить) нужно подать импульсы на ногу XTAL1 .
В самом низу.

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

Добавлено: Вс ноя 08, 2015 18:15:30
Z_h_e
Gek0n писал(а):Я кажется чего-то не понимаю. Можете объяснить? Я в теории кажется запутался
Если фьюз =1 - это не запрограммированный фьюз (unprogrammed), 0 - запрограммированный. Например, в программе программатора Вы ставите "птичку" напротив некого фьюза. Птичка означает запрограммированый, т.е. зашьется 0. Хотя "птички" визуально воспринимаются наоборот как лог.1. Но это все конечно от программного обеспечения программатора зависит.

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

Добавлено: Вс ноя 08, 2015 19:15:39
Gek0n
Не. Это-то я знаю. Вопрос в том, почему в даташите написаны 0000 а надо юзать 1111 ?

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

Добавлено: Вс ноя 08, 2015 19:37:06
Z_h_e
Изображение

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

Добавлено: Вс ноя 08, 2015 20:23:21
Gek0n
В чем отличие External Clock от External Resonator? Я думал, что делаю правильно, когда выбирал биты для External clock, оказалось, что нужен External resonator.

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

Добавлено: Вс ноя 08, 2015 20:27:04
Z_h_e
В этом же разделе даташит, немногим ниже таблицы, расписан каждый режим, но не только расписан, еще схемы пририсованы.