|
|
  |
UART в 9-ти битном режиме, ATmega64 |
|
|
|
Jan 13 2014, 08:29
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185

|
Здравствуйте! Я AVR работаю давно и успешно. Про 9-ти битный режим знал давно, но на AVR ранее никогда не использовал. В программе в инициализации одни раз делаю следующее: UCSZ2_1 = 1; UCSZ1_1 = 1; UCSZ0_1 = 1; MPCM_1 = 1; TXB8_1 = 0;
Процессор является ведомым устройством. При ответе он выдаёт только 8 бит, а не 9, как хотелось бы. К такому заключению я прищёл после того, как установил 2 стоп-бита, и ведущее устройство стало воспринемать запросы от ведомого устройства. Ведущее устройство не анализирует состояние 9-го бита при ответах от ведомого устройства. Лишь бы был. Для него не важно - только бы было всего 11 бит. Получается, что 9-ти битный режим не включился. Что делаю не так? Объясните, пожалуйста, почему по умолчанию, если не инициализировать UCSZ получается 8-ми битный формат, а не 5-ти? Спасибо!
|
|
|
|
|
Jan 13 2014, 12:07
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185

|
Цитата(alag57 @ Jan 13 2014, 12:53)  TXB8n is the ninth data bit in the character to be transmitted when operating with serial frames with nine data bits. Must be written before writing the low bits to UDRn. Если в этот бит ничего не записать, то передаваться он будет всёравно, но с нулевым значением. У меня же не передаётся 9-й бит совсем. Правильно ли я понимаю, что для того чтобы передавалось 9 бит достаточно включить UCSZ2 в единицу? UCSZ1 и UCSZ0 уже установлены после сброса процессора.
|
|
|
|
|
Jul 28 2014, 10:15
|
Местный
  
Группа: Участник
Сообщений: 242
Регистрация: 10-06-08
Из: Хочу в пампасы...
Пользователь №: 38 192

|
Цитата(Д_М @ Jul 28 2014, 12:31)  Так и не получается у меня 9-ти битный режим. UCSZ2_1 = 1; UCSZ1_1 = 1; UCSZ0_1 = 1;
Не работает и всё!
Кто-то использовал 9-ти битный режим на практике? Да, использовал. И даже работало. С конфигурационными битами там есть нюанс - они хоть и названы единообразно и последовательно, но находятся в РАЗНЫХ физических управляющий регистрах. Подробностей не помню - давно не брал в руки шашек. Но наш горе-программист чуть не поседел с этим девятым битом, пока я не указал ему на неверную инициализацию. Ключ к успеху - внимательное прочтение даташита.
|
|
|
|
|
Jul 28 2014, 11:19
|
Частый гость
 
Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185

|
Цитата(Палыч @ Jul 28 2014, 13:25)  Вероятно, Вы не туда смотрели... Ещё в январе я вам давал цитату из DS, где "английским по белому" написано: девятый бит данных передаётся вместо первого стоп-бита! Спасибо! Попробовал. Не помогло. И на осциллографе картина не поменялась. Не увидел я ожидаемой "иголки" между данными и стоп-битом. Цитата(Kompot @ Jul 28 2014, 14:15)  Да, использовал. И даже работало. С конфигурационными битами там есть нюанс - они хоть и названы единообразно и последовательно, но находятся в РАЗНЫХ физических управляющий регистрах. Подробностей не помню - давно не брал в руки шашек. Но наш горе-программист чуть не поседел с этим девятым битом, пока я не указал ему на неверную инициализацию. Ключ к успеху - внимательное прочтение даташита. Тут то всей инициализации одна команда UCSZ2_1 = 1; Ещё посоветовали сделать два стоп бита - USBS_1 = 1;, но эффекта нет
|
|
|
|
|
Jul 28 2014, 11:52
|
Местный
  
Группа: Участник
Сообщений: 242
Регистрация: 10-06-08
Из: Хочу в пампасы...
Пользователь №: 38 192

|
Цитата(Д_М @ Jul 28 2014, 15:19)  Тут то всей инициализации одна команда UCSZ2_1 = 1; Битового процессора в АВР нет. Такое выражение НЕ сработает. Вам дали достаточно информации. Для справки: /* Set frame format: 9data, 1stop bit */ UCSR1B = (1<<UCSZ12); // for UART1 Atmega644 Кстати UCSZ2_1 быть не может. Ибо UCSZn2, n=0,1. Опять же, внимательно читайте даташит.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|