Например TDA7294

Форум РадиоКот • Просмотр темы - ATmega128 : USART1
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб июл 19, 2025 11:55:40

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 32 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: ATmega128 : USART1
СообщениеДобавлено: Чт июн 14, 2007 08:20:34 
Опытный кот

Зарегистрирован: Пт фев 02, 2007 10:19:58
Сообщений: 764
Откуда: Железногорск
Рейтинг сообщения: 0
Генерю начальный код в CodeVisionAVR.
Включаю передачу по прерываниям и приём по прерываниям.
скорость без разницы, ну допустим 9600. остальное по умолчанию (т.е. 8 бит с битом чётности и т.п.)

тестирую в Proteus

начинается всё с того, что проц вообще "не дышит" в сгенерированной по умолчанию проге. Не дышит он из-за того, что постоянно вызывается прерывание окончания передачи и это я ещё ничего не передавал! (он только из него вываливается, а оно тутже его обратно затягивает)
помогает только доработка прерывания, путём дописывания кода, сбрасывающего флаг TXC
вот что получается:

Код:
// USART1 Transmitter interrupt service routine
interrupt [USART1_TXC] void usart1_tx_isr(void)
{
//return;
if (tx_counter1)
   {
   --tx_counter1;
   UDR1=tx_buffer1[tx_rd_index1];
   if (++tx_rd_index1 == TX_BUFFER_SIZE1) tx_rd_index1=0;
   }           
else {
  UCSR1B = UCSR1B & 191;
};   
}


после этого процессор начинает работать.
пытаюсь передавать байты. Например вот так:

putchar1(111);
putchar1(222);
putchar1(222);

в результате первый символ передаётся, а остальные (которые должны прерыванием из буфера доставаться - не передаются)

если писать вот так:
putchar1(111);
delay_ms(1);
putchar1(222);
delay_ms(1);
putchar1(222);

всё передаётся.

всё вышеописанное относится только к USART1.
USART0 работает без проблем, в сгенерированый код ненужно дописывать сброс флагов и пр. всё работает как и должно быть в теории. Прерывания вызываются и из буфера передаётся.

инициализация, сгенерированная генератором кода - одинаковая для обоих передатчиков (ну за исключением названий портов)

где грабли? В компиляторе? в Протеусе? или в генах? :shock:


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 14, 2007 10:13:41 
Э...
Аватар пользователя

Карма: 1
Рейтинг сообщений: 9
Зарегистрирован: Ср апр 04, 2007 08:39:14
Сообщений: 2792
Откуда: Москва
Рейтинг сообщения: 0
Посмотрите пример CVAVR по работе с двумя USART. Как там ?

_________________
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 14, 2007 10:40:10 
Опытный кот

Зарегистрирован: Пт фев 02, 2007 10:19:58
Сообщений: 764
Откуда: Железногорск
Рейтинг сообщения: 0
tych писал(а):
Посмотрите пример CVAVR по работе с двумя USART. Как там ?

Да мне не с двумя нужно. Мне с одним, но с USART1, так как ноги USART0 заняты другими делами.

а где смотреть, если что??


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 14, 2007 10:45:11 
Э...
Аватар пользователя

Карма: 1
Рейтинг сообщений: 9
Зарегистрирован: Ср апр 04, 2007 08:39:14
Сообщений: 2792
Откуда: Москва
Рейтинг сообщения: 0
Примеры обычно смотрят в примерах.

C:\CVAVR\examples\2USART_LCD

_________________
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru


Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 14, 2007 11:09:16 
Опытный кот

Зарегистрирован: Пт фев 02, 2007 10:19:58
Сообщений: 764
Откуда: Железногорск
Рейтинг сообщения: 0
tych писал(а):
Примеры обычно смотрят в примерах.

C:\CVAVR\examples\2USART_LCD

а-а-а. эти примеры? я думал мож где по этому сайту по-шукать или куда по-дальше слазить в инет :))

в указанном вами примере (путь полностью совпадает с моим ;-))
не используются преривания ни на передачу, ни на приём. Без прерываний и у меня прекрасно USART1 работает.
Трабла именно в передаче по прерываниям и именно в USART1 (и возможно именно в конкретном компиляторе)

Я надеялся что мож кто сталкивался с такой проблемой именно с первым USART. или имеет рабочий код (желательно на Си)


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 14, 2007 16:40:05 
Мявтор!
Аватар пользователя

Карма: 5
Рейтинг сообщений: 38
Зарегистрирован: Вс дек 18, 2005 20:04:42
Сообщений: 825
Откуда: Свердловская обл.
Рейтинг сообщения: 0
На следущей неделе надеюсь доберусь до USART1 на М128, мне там кстати оба нужны, могу держать в курсе если к тому времени ничего не решится. Пишу на Си, но в ICC for AVR. Если проблема решится то прозьба отписать с указанием причины чтоб на одни и теже грабли всем котам не наступать ))))) :))

_________________
Настоящий кот всегда либо голоден,
либо невыспался ...


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 18, 2007 03:46:42 
Опытный кот

Зарегистрирован: Пт фев 02, 2007 10:19:58
Сообщений: 764
Откуда: Железногорск
Рейтинг сообщения: 0
В общем тема такая. Проблему я обошёл. У USART есть два прерывания:
- прерывание при пустоте буфера передачи и установке флага TXC.
- прерывание при установке флага UDRE (опустошение регистра данных)

кодогенератор по умолчанию генерит код с привязкой к первому прерыванию. В случае с USART1 такое почему-то не работает.
Но вот если повеситься на второе прерывание, то получается вполне ничего. Нужно только при начале передачи учтанавливать флаг разрешения этого прерывания, а по опустошении всего буфера - скидывать.

Напомню. Всё это тестировалось в симуляторе Proteus7, код компилился в CodeVisionAVR.
Возможно это был просто глюк симулятора, в реале возможно таких глюком бы небыло - это мне неизвестно. Кто попробует - отпишитесь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 18, 2007 05:33:59 
Опытный кот
Аватар пользователя

Зарегистрирован: Чт дек 29, 2005 07:29:25
Сообщений: 732
Откуда: Омск
Рейтинг сообщения: 0
Всё это только в протеусе. второй юарт меги (любой у которой есть второй) в протеусе Глючит по умолчанию. Это уже не раз обсуждалось на казусе.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 31, 2007 21:48:13 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт июл 31, 2007 20:32:30
Сообщений: 174
Откуда: Киев, Украина
Рейтинг сообщения: 0
у меня тоже проблема с прерываниями.
два МК - ATmega8 соеденил 1 проводом(TXD-RXD), програмирую в WinAVR, симулирую в PROTEUS.
код содрал с даташита, изменил только строки
UCSRB = (1<<TXEN)|(1<<TXCIE); (разрешил передачу и прерывание на одном МК)
UCSRB = (1<<RXEN)|(1<<RXCIE); (разрешил приём и прерывание на втором МК)
в программе передаю первый байт, а по возникновению прерывания второй и третий(по очереди)...
в PROTEUS наблюдаю что передаётся только первый байт.
додумался разрешить прерывания функцией sei();
после этого в PROTEUS перестал работать ЖКИ подключенный к порту D микроконтролера который передаёт байты.
на щёт второго МК PROTEUS начал ругаться сообщениями что не смоделирован какой-то регистр(сообщения появляются с очень большой частотой что всё виснет)
подскажите пожалуйста что делаю не так? :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 01, 2007 19:47:09 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт июл 31, 2007 20:32:30
Сообщений: 174
Откуда: Киев, Украина
Рейтинг сообщения: 0
я наверно не с того начал
мне нужно чтоб один МК передавал состояние 8 кнопок и значение с двух АЦП(режим 8 бит) по одному проводу другому МК по УСАРТу.
помогите разобраться с УСАРТом и его прерываниями
Вот то что у меня уже есть:


Вложения:
Комментарий к файлу: Исходники(WinAVR) и HEX коды для обоих МК и проэкт в PROTEUS
USART.rar [21.31 KiB]
Скачиваний: 396
Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Пт авг 03, 2007 04:41:54 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт июл 31, 2007 20:32:30
Сообщений: 174
Откуда: Киев, Украина
Рейтинг сообщения: 0
Котики вы где?
Тут так тихо, что аж страшно :)))
Это случайно не помидор на моей аватарке котов отпугивает? :shock:

Вот опять прикрепляю свои программы, чучуть подкоректировал их,
вродибы уже должно всё работать, но не работает :cry:
У меня такие подозреня, что Протэус глючит а не я! :roll:


Вложения:
Комментарий к файлу: Исходники(WinAVR) и HEX коды для обоих МК и проэкт в PROTEUS
USART.rar [21.23 KiB]
Скачиваний: 362
Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 04, 2007 00:42:29 
Э...
Аватар пользователя

Карма: 1
Рейтинг сообщений: 9
Зарегистрирован: Ср апр 04, 2007 08:39:14
Сообщений: 2792
Откуда: Москва
Рейтинг сообщения: 0
Томатный писал(а):
У меня такие подозреня, что Протэус глючит а не я! :roll:


Он любит глючить.

Скачайте поновей по линку в моем профиле или попробуйте в VMLAB.

_________________
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 04, 2007 12:08:24 
Мучитель микросхем
Аватар пользователя

Карма: 2
Рейтинг сообщений: 1
Зарегистрирован: Пт мар 10, 2006 12:23:05
Сообщений: 413
Откуда: Moscow
Рейтинг сообщения: 0
томатик, вы меня извените конечно... вы используете прерывания УСАРТА... а прерывания по окончанию АЦ - преобразования использовать мама не позволяет???

и вообще программу начинайте писать с АЛГОРИТМА её работы!!!

Код:
   pause(25000);
   if (UCSRA & (1<<UDRE))   UDR = i[k]; //передать первый байт


поменяйте местами паузу и условие, может что-нить то и получится....

_________________
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 04, 2007 15:43:01 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт июл 31, 2007 20:32:30
Сообщений: 174
Откуда: Киев, Украина
Рейтинг сообщения: 0
tych, у меня PROTEUS 7.1 SP2 как и у вас на сайте :)

Mozart,
на даном этапе развития ещё не дошол до примененя прерывания АЦП.
Алгоритм понимаю, по идее должно всё работать.
Поменял, ничего не изменилось.

Всётаки это PROTEUS мне кажется...
Надо пробовать в реальной конструкции, но пока нету такой возможности.


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 04, 2007 16:15:41 
Э...
Аватар пользователя

Карма: 1
Рейтинг сообщений: 9
Зарегистрирован: Ср апр 04, 2007 08:39:14
Сообщений: 2792
Откуда: Москва
Рейтинг сообщения: 0
Флаг должен сбрасываться при переходе на обработчик прерывания.

Еcли не сбрасывает - значит протеус виноват. Проект прицепите.

вот вам протеус 7.2 - http://www.4shared.com/file/21322196/da9613b2/PR4.html

_________________
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 04, 2007 16:24:24 
Э...
Аватар пользователя

Карма: 1
Рейтинг сообщений: 9
Зарегистрирован: Ср апр 04, 2007 08:39:14
Сообщений: 2792
Откуда: Москва
Рейтинг сообщения: 0
Томатный писал(а):
Всётаки это PROTEUS мне кажется...

Надо пробовать в реальной конструкции,

но пока нету такой возможности.


VMLAB не глючит практически.

_________________
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 04, 2007 16:46:20 
Мучитель микросхем
Аватар пользователя

Карма: 2
Рейтинг сообщений: 1
Зарегистрирован: Пт мар 10, 2006 12:23:05
Сообщений: 413
Откуда: Moscow
Рейтинг сообщения: 0
Цитата:
Всётаки это PROTEUS мне кажется...

начнём с того что вы не правильно усарт настроили... и протеус не глючит... кто вам сказал что надо в функцию передавать скорость УСАРТа???????

_________________
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 04, 2007 16:59:26 
Мучитель микросхем
Аватар пользователя

Карма: 2
Рейтинг сообщений: 1
Зарегистрирован: Пт мар 10, 2006 12:23:05
Сообщений: 413
Откуда: Moscow
Рейтинг сообщения: 0
у меня в протеусе всё заработало...

_________________
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 04, 2007 17:05:00 
Мучитель микросхем
Аватар пользователя

Карма: 2
Рейтинг сообщений: 1
Зарегистрирован: Пт мар 10, 2006 12:23:05
Сообщений: 413
Откуда: Moscow
Рейтинг сообщения: 0
усарт у меня заработал... ацп ваши не работают хотя на лсд показывают 255 в двух строчках... надо смотреть настройки, а мне сейчас некогда... значит где ваши косяки...
УСАРТ у меги8 один!!! это я так к слову...
в файлике транс.с и значит ошибки здеся...
Код:
void USART_Init(unsigned int baud) //Инициализация УСАРТ
{
  UCSRC = 0;
  UBRRH = (unsigned char)(baud >> 8); //скорость УСАРТ
  UBRRL = (unsigned char)(baud);
  UCSRB = (1 << TXEN)|(1 << TXCIE); //Разрешить передачу и прерывание
  UCSRC = (1 << URSEL)|(1 << USBS)|(3 << UCSZ0); //8 бит данных, 2 стоп бита
}

и ошибка здеся... скажу что она в названии...
Код:
SIGNAL(SIG_UART0_TRANS)
{
  if(k < 2) UDR = i[++k]; //если случиться прерывание передать i[1] затем i[2]
}


я прошу вас... не обозначайте массив как "i".... длина названия переменных не занимает больше памяти...

_________________
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 04, 2007 20:09:46 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Вт июл 31, 2007 20:32:30
Сообщений: 174
Откуда: Киев, Украина
Рейтинг сообщения: 0
Цитата:

Спасибо! Чёт он у меня сам закрывается через время после того как сворачиваю.
Цитата:
начнём с того что вы не правильно усарт настроили...

Цитата:
в файлике транс.с и значит ошибки здеся...

Гдето тут на форуме как-то увидел что в CodeVisionAVR есть генератор кода(не пользуюсь этой программой по этому не знал).
Решил попробовать. Сгенерировал код. Пришлось добавить самому разрешение прерывания по окончанию приёма/передачи потому, что у меня дэмо версия.
Код:
void USART_Init()
{
  UCSRA=0x00;
  UCSRB=0x48; //У приёмника UCSRB=0x90;
  UCSRC=0x8E;
  UBRRH = 0x00;
  UBRRL = 0x19;
}

С помощью даташыта перепроверил эти значения, но всеравно не работает :(
Цитата:
усарт у меня заработал... ацп ваши не работают хотя на лсд показывают 255 в двух строчках...

У меня всё наоборот: усарт не работает, а АЦП работают и на ЖКИ отображаются правельные значения.
Цитата:
и ошибка здеся... скажу что она в названии...

Цитата:
УСАРТ у меги8 один!!! это я так к слову...

Исправил на INTERRUPT(SIG_UART_TRANS) и INTERRUPT(SIG_UART_RECV)
Цитата:
я прошу вас... не обозначайте массив как "i"....

Ок :)
Цитата:
длина названия переменных не занимает больше памяти...

Издеваетесь? :)))
Почему оно не работает? :cry: :cry: :cry:

Спасибо что помогаете!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 32 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y