Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 01.08.2017, 10:19  
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: Низкий уровень TXD0 ATMega128

pifa, не нужно все время выключать и включать передатчик, достаточно управлять только прерыванием...

Первый вариант, прерывание по заполнению буфера передачи…
Настройка:
Включается режим передачи
UCSR0B |= (1 ‹‹ TXEN0);

Разрешается прерывание глобальное и от периферии
sei();
UCSR0B |= (1 ‹‹ TXCIE0); // здесь не обязательно…

В процессе работы программы не нужно включать и выключать передатчик (бит TXEN0), нужно управлять только битом TXCIE0, например…
Блок прерывания:
void FCM_TX()
{
FCV_IND = FCV_IND + 1;
if (FCV_IND == 3)
{
UCSR0B &= ~(1 ‹‹ TXCIE0);
FCV_IND = 0;

} else {
UDR0=FCV_TX[FCV_IND];
}
}

Тело программы:

UCSR0B |= (1 ‹‹ TXCIE0);// включили прерывание
UDR0=FCV_TX[0];// загрузили буфер передачи, после загрузки произойдет прерывание…



Второй вариант, использовать прерывание по завершению передачи, то есть когда регистр UDR0 пуст…

Настройка:
Включается режим передачи
UCSR0B |= (1 ‹‹ TXEN0);

Разрешается прерывание глобальное и от периферии
sei();
UCSR0B |= (1 ‹‹ UDRIE0);// здесь не обязательно, это сразу вызовет прерывание (UDR0 пуст)

В процессе работы программы не нужно включать и выключать передатчик (бит TXEN0), нужно управлять только битом UDRIE0, например…

void FCM_TX_UDRE()
{
UDR0=FCV_TX[FCV_IND];
FCV_IND = FCV_IND + 1;
if (FCV_IND == 3)
{
UCSR0B &= ~(1 ‹‹ UDRIE0);
FCV_IND = 0;
}

}

Тело программы:

UCSR0B |= (1 ‹‹ UDRIE0);// включили прерывание, поскольку буфер передачи пуст, сразу произойдет прерывание…



Первый от второго отличается тем, что после включения прерывания в первом нужно заполнить буфер передатчика…, а во втором прерывание происходит сразу, потому что буфер пуст…

В принципе у тебя все правильно, не понятно только зачем ты все время дергаешь передатчик?
Реклама:

Последний раз редактировалось mimuh64; 01.08.2017 в 15:53.
mimuh64 вне форума  
Непрочитано 01.08.2017, 14:10  
Someone
Гражданин KAZUS.RU
 
Регистрация: 16.06.2005
Сообщений: 945
Сказал спасибо: 25
Сказали Спасибо 175 раз(а) в 124 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: Низкий уровень TXD0 ATMega128

Сообщение от pifa Посмотреть сообщение
Может кто-то объяснит суть происходящего.
А что с ISP - программированием? Оно ведь как раз через ножки RX0, TX0 проводится. А у тебя на схеме только на преобразователи RS232 заведено.

Сообщение от pifa Посмотреть сообщение
А более детально.
А не будет. Сей кадр в 99% только по-3.14здеть горазд. Ставь его в игнор, да и всё.
Someone вне форума  
Сказали "Спасибо" Someone
Haha (01.08.2017)
Непрочитано 01.08.2017, 14:19  
Someone
Гражданин KAZUS.RU
 
Регистрация: 16.06.2005
Сообщений: 945
Сказал спасибо: 25
Сказали Спасибо 175 раз(а) в 124 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: Низкий уровень TXD0 ATMega128

ЗЫ: Ещё момент - УСАРТ0 у тебя ещё на 485й заведён по схеме. А УСАРТ1 только на преобразователь, и более никуда. Во первых, что с частью 485го? И во вторых, а нет ли сопли, которая подсаживает ТX0 на землю? А может где-то в схеме не сопля, а есть подтяжка к земле?

Последний раз редактировалось Someone; 01.08.2017 в 14:21.
Someone вне форума  
Непрочитано 01.08.2017, 14:45  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,070
Сказал спасибо: 3,052
Сказали Спасибо 3,224 раз(а) в 2,188 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Низкий уровень TXD0 ATMega128

Сообщение от mimuh64 Посмотреть сообщение
не нужно все время выключать и включать передатчик
А на это я и не посмотрел даже... Коли так - проверьте ещё настройку PE1 и поставьте туда "1" или "pull-up" если там что-то другое.
__________________
Экзорцист 40-го уровня.
ForcePoint вне форума  
Сказали "Спасибо" ForcePoint
pifa (02.08.2017)
Непрочитано 02.08.2017, 12:21  
pifa
Гражданин KAZUS.RU
 
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
pifa на пути к лучшему
По умолчанию Re: Низкий уровень TXD0 ATMega128

А что здесь не так? Биты UCSZ0 и UCSZ1 стоят подряд. Следовательно, можно сдвинуть число 3 на количество разрядов равное UCSZ00 (=1).

А вот и пример из DATASHEET
Миниатюры:
Нажмите на изображение для увеличения
Название: UCSZ0.GIF
Просмотров: 0
Размер:	95.9 Кб
ID:	117078  
pifa вне форума  
Непрочитано 02.08.2017, 12:28  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,070
Сказал спасибо: 3,052
Сказали Спасибо 3,224 раз(а) в 2,188 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Низкий уровень TXD0 ATMega128

Сообщение от pifa Посмотреть сообщение
А что здесь не так?
Если имеется в виду это, то я выделил цветом, что не так. Недописана строка.
UCSR0C = (3‹
__________________
Экзорцист 40-го уровня.
ForcePoint вне форума  
Непрочитано 02.08.2017, 12:35  
pifa
Гражданин KAZUS.RU
 
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
pifa на пути к лучшему
По умолчанию Re: Низкий уровень TXD0 ATMega128

Сообщение от Someone Посмотреть сообщение
ЗЫ: Ещё момент - УСАРТ0 у тебя ещё на 485й заведён по схеме. А УСАРТ1 только на преобразователь, и более никуда. Во первых, что с частью 485го? И во вторых, а нет ли сопли, которая подсаживает ТX0 на землю? А может где-то в схеме не сопля, а есть подтяжка к земле?
Сообщение от Someone Посмотреть сообщение
а нет ли сопли, которая подсаживает ТX0 на землю? А может где-то в схеме не сопля, а есть подтяжка к земле?
Сопли нет, все проверил и подтяжки на GND тоже нет.

Сообщение от Someone Посмотреть сообщение
Во первых, что с частью 485го?
Вот как раз мне и нужен 485-й. Но я сначала отлаживаю междублочный обмен по UART, а уж потом цепляю RS485, дабы избежать лишних хлопот. А RS232 и комп тут для проверки и диагностики.
pifa вне форума  
Непрочитано 02.08.2017, 12:40  
pifa
Гражданин KAZUS.RU
 
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
pifa на пути к лучшему
По умолчанию Re: Низкий уровень TXD0 ATMega128

Сообщение от ForcePoint Посмотреть сообщение
Если имеется в виду это, то я выделил цветом, что не так. Недописана строка.
UCSR0C = (3‹
Прошу извинить. Это "ОЧЕПЯТКА". Видимо, когда копировал на сайт нечаяно удалил часть. Вы ж сами понимаете, что такое компилятор не пропустит. Вот как в программе:

/* Asynchronous mode, Set frame format: 8 data 1 stop */
Код:
  UCSR0C = (3 ‹‹ UCSZ00);

Последний раз редактировалось pifa; 02.08.2017 в 12:42.
pifa вне форума  
Непрочитано 02.08.2017, 12:45  
pifa
Гражданин KAZUS.RU
 
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
pifa на пути к лучшему
По умолчанию Re: Низкий уровень TXD0 ATMega128

Да нет, кажись я правильно копировал. А вот HTML его "съел", пока не отделил знак "‹‹" двумя пробелами,
pifa вне форума  
Непрочитано 02.08.2017, 12:50  
pifa
Гражданин KAZUS.RU
 
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
pifa на пути к лучшему
По умолчанию Re: Низкий уровень TXD0 ATMega128

Сообщение от Someone Посмотреть сообщение
А что с ISP - программированием? Оно ведь как раз через ножки RX0, TX0 проводится. А у тебя на схеме только на преобразователи RS232 заведено.
Все правильно и программирование нормально работает. А из примера я его удалил, дабы не захламлять схему. Вот так оно выглядит:
Миниатюры:
Нажмите на изображение для увеличения
Название: схема.GIF
Просмотров: 0
Размер:	60.4 Кб
ID:	117081  
pifa вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Atmega128 не запускается после программирования serj_sl Микроконтроллеры, АЦП, память и т.д 5 20.10.2011 23:48
Генератор г4-18а-падает уровень VASILIJ60 Измерительное оборудование 1 17.11.2009 02:02
USART (PIC): как сделать низкий уровень на TX после посылки? mxsimus Микроконтроллеры, АЦП, память и т.д 2 27.03.2008 13:07
Atmega128 и внешняя FRAM-память FM25256 satnettv Микроконтроллеры, АЦП, память и т.д 1 03.09.2007 09:00


Часовой пояс GMT +4, время: 06:02.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot