реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Soft UART, 115200 реально ли на С и кваце 7.3728Mhz
west329_
сообщение Apr 30 2008, 06:01
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Пока у меня ничего не выходит, дабы не опозориться не буду всё подробно расписывать, написал только часть TX. Проект работает стабильно только на 9600.
Хочу услышать мнения тех кто уже сталкивался с подобным.
Возможно ли написать такой софт на С.

Знаю точно, что есть, правда на ПИК контроллере рабочий проект. Там кварц на 8 Mhz. и скорость не 115200 а 57ххх но сам факт что реализация получилась, настораживает, что иду по тому пути.

Работаю на меге16.
Требуется кроме встроенного ещё 2 дополнительных UART, вот и выдумываю.
Go to the top of the page
 
+Quote Post
vet
сообщение Apr 30 2008, 06:18
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



64 такта на приём 1 бита... для одиночного канала реально, в принципе, но вот остальной программе всё это будет сильно мешать, по этой же причине два канала уже не получится, скорее всего. Я бы поставил внешний сдвоенный UART или перешел на мегу640 (4 аппаратных UART).


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
west329_
сообщение Apr 30 2008, 06:34
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Я вот про это тоже начал подумывать, с одним ещё совладаю а вот 2 как ни прощитывал ничего не выходит.
И хочу добавить ещё это как я понимаю всё на АСМЕ, а у меня тут весь проект на С, и еще 2 прерывания по таймеру висят, при отладке такие кони полезли sad.gif

Насчет перехода согласен, благодарен за подсказку недумал что такие меги есть, но пока такой возможность не придвидется в ближайшее время.

Может испльзовать кварц на 20Mhz ???
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 30 2008, 07:02
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



вполне реально, понадобится 1 прерывание от ноги и 1 - от таймера
соотношение частот =64 - вообще идеальный вариант
(в том смысле что не дробный и достаточно большой)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
chds
сообщение Apr 30 2008, 07:12
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 173
Регистрация: 5-11-07
Из: Чернигов, Украина
Пользователь №: 32 078



Не настораживает, что по даташиту максимум 16 МГц и то при питании 5 В.
В свое время мы AVR разгоняли конечно, но при этом стандартная периферия вела себя скажем мягко - не адекватно, а Вам нужно использовать UART блоки, так что врядли.
Go to the top of the page
 
+Quote Post
viakon
сообщение Apr 30 2008, 07:21
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002



Бестолку выдумывать. 32 команды на один уарт возможно только если больше программа ничего делать не будет. Это то тебя я так понимаю не устраивает. имею реальный проект на С мега128, два програмных уарта на 9600 и 19200, помимо аппаратных. Нормально работает.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Apr 30 2008, 08:05
Сообщение #7


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Требуется кроме встроенного ещё 2 дополнительных UART, вот и выдумываю.


Ну я бы делал так - во первых, перешел на Mega162, там 2 усарта. Теперь надо решить проблему с третьим. Для приема я бы делал так - заводил RXD на какой-нибудь INT по спаду, в прерывании через полбита проверял, старт это или нет и дальше запускал бы SPI, у которого MISO тоже подключен на RXD и предделитель настроен на 1/64 - по прерыванию от SPI имеем байт данных, можно задержаться на бит и проверить стоповый, если уж очень надо. Затем процесс повторяется. Надо только посмотреть, когда точно запускать SPI и какой режим выбрать, чтобы семплы попадали в середину битов.

Про передачу можете додумать сами wink.gif

Кстати, хорошим способом будет использование не INT, а ICP - тогда можно будет по содержимому таймера точно определить место запуска SPI, независимо от времени реакции на прерывание - это актуально для быстрого обмена и наличия других прерываний. Кстати, похоже, что без вложенных прерываний Вам не обойтись.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 30 2008, 08:22
Сообщение #8


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



В ATmega640/1280/2560 4 USART


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
west329_
сообщение Apr 30 2008, 08:49
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



С данной ситуации готов пожертвовать работой основной программы и всеми сторонними прерывания, прийдется выключить.

Нащёт увеличения частоты неподумал, наверно 20мг перебор будет.
Я тут прикинул может коммутатор на выходе УАРТ порта поставить, какой-то CD4052. еслы не разберусь с софтом
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 30 2008, 09:05
Сообщение #10


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(west329_ @ Apr 30 2008, 11:49) *
С данной ситуации готов пожертвовать работой основной программы и всеми сторонними прерывания, прийдется выключить.

Нащёт увеличения частоты неподумал, наверно 20мг перебор будет.
Я тут прикинул может коммутатор на выходе УАРТ порта поставить, какой-то CD4052. еслы не разберусь с софтом

Если только передавать надо, тем более не во все сразу, то я вообще никаких проблем не вижу.
Кстати, у АВР есть возможность привязывать выходы регистров-защёлок таймера к ногам?
(как к примеру у МСП430)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Rst7
сообщение Apr 30 2008, 09:38
Сообщение #11


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Кстати, у АВР есть возможность привязывать выходы регистров-защёлок таймера к ногам?(как к примеру у МСП430)


Это Вы про Output Compare? Ну выходы есть, а к произвольным ногам - к сожалению нельзя...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
west329_
сообщение Apr 30 2008, 09:39
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423



Цитата(MrYuran @ Apr 30 2008, 13:05) *
Если только передавать надо, тем более не во все сразу, то я вообще никаких проблем не вижу.
Кстати, у АВР есть возможность привязывать выходы регистров-защёлок таймера к ногам?
(как к примеру у МСП430)


не моглиб вы обьяснить поподробнее
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 30 2008, 10:01
Сообщение #13


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(west329_ @ Apr 30 2008, 12:39) *
не моглиб вы обьяснить поподробнее

очень просто.
берёте выход защёлки.
выставляете там стартовый бит (0)
засекаете на таймере битовый интервал.(именно на этой защёлке)
определяете режим выхода (1/0), соответствующий следующему биту.
когда таймер досчитает до конца бита, он сразу выставит на ногу нужный уровень (1/0), а у вас будет время (64 такта) чтобы в прерывании от таймера выставить следующий интервал и режим вывода, соответствующий следующему биту.
И так 10 раз. (для одного байта)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Apr 30 2008, 10:29
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(west329_ @ Apr 30 2008, 10:01) *
Пока у меня ничего не выходит, дабы не опозориться не буду всё подробно расписывать, написал только часть TX. Проект работает стабильно только на 9600.
Хочу услышать мнения тех кто уже сталкивался с подобным.
Возможно ли написать такой софт на С.
Работаю на меге16.

Ну TX можно и 8 аппаратных сделать ( на один порт).
Для 8xRX я бы делал синхронное считывание порта с частотой 250кГц и разбирал бы уже полученные данные. Лучше конечно на асме - тогда зная сколько тактов занимают команды можно обрабатывать два считывания на 125кГц или 3 на 85кГц и т.д. Таймер лучше заводить один раз иначе нахватаете джитера.
На С наверно можно написать, просто придётся каждый билд тестить с нуля.
На асме есть ещё одно преимущество - можно разделить регистры так, что используемые в прерывании не будут использоваться в основной программе.
Работаю на меге48.
Go to the top of the page
 
+Quote Post
Artem_Petrik
сообщение Apr 30 2008, 19:47
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006



Недавно читал статью Иосифа Каршенбойма "Квадрига Аполлона и микропроцессоры". Там как раз про такой случай написано. Идея в том, что нужно меньше извращаться, а брать либо проц с достаточным количеством УАРТов, либо просто подобрать самый дешовый проц с УАРТом и наставить их столько, сколько надо УАРТов. Соединить их в кучу скажем по SPI, и наслаждаться многоядерностью smile.gif. А с программными UART масштабиремость будет совсем плохой, особенно учитывая, что уже сейчас есть обоснованные опасения, что ресурсов может не хватить. А если потом захочется что-то добавить?
Конечно если устройство предполагается производить десятками тысяч, то имеет смысл побороться за удешевление, если же нет, то нужно просто сравнить цену mega640 и, скажем, mega162+mega48, выбрать что дешевле, и забыть о прграммных интерфейсах.

Это мое ИМХО.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 02:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01469 секунд с 7
ELECTRONIX ©2004-2016