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

 
 
> atmega16, четырехканальный usart осциллограф
Lost_Viking
сообщение Feb 2 2013, 23:06
Сообщение #1


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

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Для анализа работы четырех датчиков потребовался многоканальный осциллограф. Не более 5кГц на канал. Этого будет вполне достаточно. Даже можно до 1кГц. Кварц на 7.3728МГц. Информацию требуется передавать по usart (скорость usart до 115200). Думаю передавать так: заголовок начала пакета, 4 байта по 1 байту на канал. Но для этого придется часто переключать каналы АЦП, следовательно придется пропускать от 1 до 3 выборок АЦП. Так я буду терять информацию.

Можно и другой вариант попробовать: 10 байт на 1 канал, 10 на 2 канал... Но за полный период передачи я очень много потеряю информации с первого датчика.

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

Пока что можно даже с двумя датчиками работать. То есть с двумя каналами ацп. Но все же - как лучше организовать передачу?

Сообщение отредактировал Lost_Viking - Feb 2 2013, 23:07
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Lost_Viking
сообщение Feb 3 2013, 09:21
Сообщение #2


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

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Кстати, стоит ли использовать прерывания от ацп в данном случае?
Для отправки и приема данных использую такую конструкцию:
while ( !(UCSRA & (1<<RXC))
while ( !(UCSRA & (1<<UDRE))

Соответственно, пока условия истинны программа стоит и ничего не делает. Если использовать прерывание от АЦП, то в это время можно считывать результаты от АЦП. Но часто, чаще чем передаются данные, считывать нет смысла. Если не использовать прерывания, то что-то не пойму... Что же получится... Как правильней?
Go to the top of the page
 
+Quote Post
telix
сообщение Feb 3 2013, 10:35
Сообщение #3


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

Группа: Свой
Сообщений: 118
Регистрация: 9-12-12
Из: Курск
Пользователь №: 74 767



Цитата(Lost_Viking @ Feb 3 2013, 13:21) *
Кстати, стоит ли использовать прерывания от ацп в данном случае?
Для отправки и приема данных использую такую конструкцию:
while ( !(UCSRA & (1<<RXC))
while ( !(UCSRA & (1<<UDRE))

Соответственно, пока условия истинны программа стоит и ничего не делает. Если использовать прерывание от АЦП, то в это время можно считывать результаты от АЦП. Но часто, чаще чем передаются данные, считывать нет смысла. Если не использовать прерывания, то что-то не пойму... Что же получится... Как правильней?


Правильно работать по прерываниям, и использовать аппаратный USART. Программа крутится в пустом цикле, пришло прерывание от АЦП, процессор принял данные сложил в память.
А вот дальше начинается самое интересное. Откуда USART узнает где брать пакет или следующий байт? Вот и пускай не сидит в пустом цикле, а отслеживает указатели на массивы.
Если данных нет, тогда пустой цикл, если данные есть, тогда процессор запихивает байт в регистр передатчика.
Короче основная программа должна выполнять две функции, принимать данные от АЦП, заполнять этими данными массив данных, в простонародье FIFO, и отправлять данные по USART из этого же массива. Заполнение массива идет по прерываниям от АЦП, отгрузка данных тоже по прерываниям от USART по мере готовности передатчика.
Ну вот и получаем целую программу. Отработка двух типов прерываний и работа с указателями FIFO.
На слух это все воспринять безусловно трудно. Поэтому начните, Вам предстоит долгий гемор, но оно того стоит sm.gif


--------------------
улыбаемся ...
Go to the top of the page
 
+Quote Post
Lost_Viking
сообщение Feb 3 2013, 11:44
Сообщение #4


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

Группа: Участник
Сообщений: 168
Регистрация: 25-04-08
Пользователь №: 37 091



Цитата(telix @ Feb 3 2013, 14:35) *
На слух это все воспринять безусловно трудно. Поэтому начните, Вам предстоит долгий гемор, но оно того стоит sm.gif

Едрён-батон! Вы так любезны! biggrin.gif
Ам.. а есть какие-нибудь примеры, исходники? Ткните меня мордой в... интернет, плиз =)) Хотя я сам сейчас поищу, но может быть есть что-то более перевариваемое.

http://mainloop.ru/avr-atmega/avr-uart-fifo-irq.html вроде бы подходит


Сообщение отредактировал Lost_Viking - Feb 3 2013, 12:03
Go to the top of the page
 
+Quote Post
telix
сообщение Feb 3 2013, 11:49
Сообщение #5


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

Группа: Свой
Сообщений: 118
Регистрация: 9-12-12
Из: Курск
Пользователь №: 74 767



Цитата(Lost_Viking @ Feb 3 2013, 15:44) *
Ам.. а есть какие-нибудь примеры, исходники? Ткните меня мордой в... интернет, плиз =))

Начните впервую очередь с референс дизайнов на самом сайте Atmel, там куча исходников и примеров. Еще я б поискал на Microchip, там тоже на C полно неплохих исходников.


--------------------
улыбаемся ...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 21:00
Рейтинг@Mail.ru


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