AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
01.08.2017, 10:19
|
|
Прописка
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
|
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.
|
|
|
|
01.08.2017, 14:10
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 945
Сказал спасибо: 25
Сказали Спасибо 175 раз(а) в 124 сообщении(ях)
|
Re: Низкий уровень TXD0 ATMega128
Сообщение от pifa
|
Может кто-то объяснит суть происходящего.
|
А что с ISP - программированием? Оно ведь как раз через ножки RX0, TX0 проводится. А у тебя на схеме только на преобразователи RS232 заведено.
Сообщение от pifa
|
А более детально.
|
А не будет. Сей кадр в 99% только по-3.14здеть горазд. Ставь его в игнор, да и всё.
|
|
|
Сказали "Спасибо" Someone
|
|
|
01.08.2017, 14:19
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 945
Сказал спасибо: 25
Сказали Спасибо 175 раз(а) в 124 сообщении(ях)
|
Re: Низкий уровень TXD0 ATMega128
ЗЫ: Ещё момент - УСАРТ0 у тебя ещё на 485й заведён по схеме. А УСАРТ1 только на преобразователь, и более никуда. Во первых, что с частью 485го? И во вторых, а нет ли сопли, которая подсаживает ТX0 на землю? А может где-то в схеме не сопля, а есть подтяжка к земле?
Последний раз редактировалось Someone; 01.08.2017 в 14:21.
|
|
|
|
01.08.2017, 14:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,070
Сказал спасибо: 3,052
Сказали Спасибо 3,224 раз(а) в 2,188 сообщении(ях)
|
Re: Низкий уровень TXD0 ATMega128
Сообщение от mimuh64
|
не нужно все время выключать и включать передатчик
|
А на это я и не посмотрел даже... Коли так - проверьте ещё настройку PE1 и поставьте туда "1" или "pull-up" если там что-то другое.
__________________
Экзорцист 40-го уровня.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
02.08.2017, 12:21
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: Низкий уровень TXD0 ATMega128
А что здесь не так? Биты UCSZ0 и UCSZ1 стоят подряд. Следовательно, можно сдвинуть число 3 на количество разрядов равное UCSZ00 (=1).
А вот и пример из DATASHEET
|
|
|
|
02.08.2017, 12:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,070
Сказал спасибо: 3,052
Сказали Спасибо 3,224 раз(а) в 2,188 сообщении(ях)
|
Re: Низкий уровень TXD0 ATMega128
Сообщение от pifa
|
А что здесь не так?
|
Если имеется в виду это, то я выделил цветом, что не так. Недописана строка.
UCSR0C = (3‹
__________________
Экзорцист 40-го уровня.
|
|
|
|
02.08.2017, 12:35
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: Низкий уровень TXD0 ATMega128
Сообщение от Someone
|
ЗЫ: Ещё момент - УСАРТ0 у тебя ещё на 485й заведён по схеме. А УСАРТ1 только на преобразователь, и более никуда. Во первых, что с частью 485го? И во вторых, а нет ли сопли, которая подсаживает ТX0 на землю? А может где-то в схеме не сопля, а есть подтяжка к земле?
|
Сообщение от Someone
|
а нет ли сопли, которая подсаживает ТX0 на землю? А может где-то в схеме не сопля, а есть подтяжка к земле?
|
Сопли нет, все проверил и подтяжки на GND тоже нет.
Сообщение от Someone
|
Во первых, что с частью 485го?
|
Вот как раз мне и нужен 485-й. Но я сначала отлаживаю междублочный обмен по UART, а уж потом цепляю RS485, дабы избежать лишних хлопот. А RS232 и комп тут для проверки и диагностики.
|
|
|
|
02.08.2017, 12:40
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: Низкий уровень TXD0 ATMega128
Сообщение от ForcePoint
|
Если имеется в виду это, то я выделил цветом, что не так. Недописана строка.
UCSR0C = (3‹
|
Прошу извинить. Это "ОЧЕПЯТКА". Видимо, когда копировал на сайт нечаяно удалил часть. Вы ж сами понимаете, что такое компилятор не пропустит. Вот как в программе:
/* Asynchronous mode, Set frame format: 8 data 1 stop */
Код:
|
UCSR0C = (3 ‹‹ UCSZ00); |
Последний раз редактировалось pifa; 02.08.2017 в 12:42.
|
|
|
|
02.08.2017, 12:45
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: Низкий уровень TXD0 ATMega128
Да нет, кажись я правильно копировал. А вот HTML его "съел", пока не отделил знак "‹‹" двумя пробелами,
|
|
|
|
02.08.2017, 12:50
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: Низкий уровень TXD0 ATMega128
Сообщение от Someone
|
А что с ISP - программированием? Оно ведь как раз через ножки RX0, TX0 проводится. А у тебя на схеме только на преобразователи RS232 заведено.
|
Все правильно и программирование нормально работает. А из примера я его удалил, дабы не захламлять схему. Вот так оно выглядит:
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:02.
|
|