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

 
 
> Как вывести 10 бит АЦП через один вывод, Atmega+ CVAVR
ikm
сообщение Dec 13 2016, 13:43
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Подскажите как выполнить операцию вывода 10-ти бит, не на весь порт, а на одну ножку.
К тому же в CV AVR, он эти 10 бит сразу записывает в как 16 битное число.
Ответ, на вопрос для чего мне это нужно: Хочу видеть значение которое выдает АЦП при измерении. т.е. усредняться и отфильтровывается не будет, мне нужно текущее число со всеми шумами и т.д.

А еще лучше порекомендуйте книгу по AVR в которой применяется компилятор CV AVR (кроме Лебедева М.В.)


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Onkel
сообщение Dec 14 2016, 21:20
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 708
Регистрация: 8-05-11
Из: Чг
Пользователь №: 64 861



Цитата(ikm @ Dec 13 2016, 16:43) *
Подскажите как выполнить операцию вывода 10-ти бит, не на весь порт, а на одну ножку.
К тому же в CV AVR, он эти 10 бит сразу записывает в как 16 битное число.
Ответ, на вопрос для чего мне это нужно: Хочу видеть значение которое выдает АЦП при измерении. т.е. усредняться и отфильтровывается не будет, мне нужно текущее число со всеми шумами и т.д.

А еще лучше порекомендуйте книгу по AVR в которой применяется компилятор CV AVR (кроме Лебедева М.В.)

"на одну ножку" - посмотрите протокол NRZ, его нынче в адресных светодиодах ws2812 используют, так что он весьма широко распостранен, правда наиболее широко распостранен 800 кГц версия, но вроде есть и на 200 кГц приемники со светодиодами. Если хотите смотреть в реальном времени - подключите ленту, и по яркости будете видеть, как ползет сигнал, что-то вроде старинного прибора записи на светочувствительную ленту будет.

В СV есть код-генератор (Code Wizard), почти как Cube для stm32, можете задать ему все нужные параметры всей периферии, а потом посмотреть на код, и help в CV имхо достаточный. У вас полная, не учебная версия CV?
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 15 2016, 11:31
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Картинка к чему?
Да, визардом умею пользоваться, периферии никакой не будет, дальше идет в аналоговую часть. Вот все равно не понял Вас, как там настроить четыре независимых "ноги"?
Цитата(ViKo @ Dec 14 2016, 10:33) *
Именно, мудрите непонятно что. По одному проводу выводят последовательно, бит за битом, пока все ваше слово не вылезет. Потом пауза. Или старт, стоп вокруг байта. Потом опять.
УАРТ так и делает.

Не могли бы Вы привести пример, как правильно выводить последовательно, если не принимать в расчёт УАРТ (ведь мне нужно 4 таких канала, а УАРТ один).

Сообщение отредактировал Herz - Dec 16 2016, 09:33
Причина редактирования: Избыточное цитирование


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 15 2016, 11:57
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(ikm @ Dec 15 2016, 14:31) *
Не могли бы Вы привести пример, как правильно выводить последовательно, если не принимать в расчёт УАРТ (ведь мне нужно 4 таких канала, а УАРТ один).

Сначала опишите подробнее, что вы хотите сделать. И зачем? А то был 1 канал, стало 4. Это что, курсовой проект, что ли?
Выводите все каналы по одному проводу. 4 слова. В каком формате? В каком нравится. Здесь уже посоветовали несколько.
P.S. В один УАРТ можно 444 канала вывести, и еще останется... rolleyes.gif
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 15 2016, 12:33
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Цитата(ViKo @ Dec 15 2016, 14:57) *
Сначала опишите подробнее, что вы хотите сделать. И зачем? А то был 1 канал, стало 4. Это что, курсовой проект, что ли?
Выводите все каналы по одному проводу. 4 слова. В каком формате? В каком нравится. Здесь уже посоветовали несколько.
P.S. В один УАРТ можно 444 канала вывести, и еще останется... rolleyes.gif

Нет, это не курсовой проект, с курсовыми я лет как 10 назад закончил.
Расширяю кругозор в области работы на МК.
Я не писал в начале, что у меня один канал, я спрашивал как вывести на одну ножку последовательно значения полученные в АЦП. Возможно это мое упущение, но не подумал, что мне могут рассказывать про УАРТ и 1 Wire.
Скорее всего ответ на мой вопрос лежит в области применения таймеров и PWM, но думал, что по проще можно. Вот только таймер 16-ти битный только один.
Задача именно такая, как и в начале я писал, вывести через одну ножку битовую последовательность с АЦП и еще с трёх ножек обработанные с помощью наложением маски.


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 15 2016, 12:55
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(ikm @ Dec 15 2016, 15:33) *
Скорее всего ответ на мой вопрос лежит в области применения таймеров и PWM, но думал, что по проще можно.
Задача именно такая, как и в начале я писал, вывести через одну ножку битовую последовательность с АЦП и еще с трёх ножек обработанные с помощью наложением маски.

А ЦАП там есть? Выведите на него. rolleyes.gif

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

Сначала напишите, что вы уже сделали, что не нравится, тогда и советы будут определенные.
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 15 2016, 14:06
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



ЦАП нет, атмега8.
Мне не нужна синхронизация.
А зачем прерывание таймера, почему нельзя по прерыванию окончания АЦП преобразования сделать следующее:
считать младший бит (10) значения ADCW сдвинув на 9 позиций в право (ADCW>>9) и вытавлять это значение PORTB.1 напрямую или через переменную
затем считываем девятый бит (ADCW>>8) и выставляем это значение на PORTB.1 и т.д. перебрав все 10 бит полученого значения.
Вот только вопрос, если я буду "отбрасывать" лишние значения, они будут удаляться или просто игнорироваться при считывании?
Затем запускать повторно считывания АЦП.

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

Сообщение отредактировал Herz - Dec 16 2016, 09:35
Причина редактирования: Избыточное цитирование


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 15 2016, 14:23
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(ikm @ Dec 15 2016, 16:06) *
Спросить на форуме, что мне с этим делать.

Ваши проблемы начались с того, что Вы даже спросить на форуме не смогли. По крайней мере я не заметил в этой теме ни одного понявшего Ваше желание sad.gif.
Так что вместо упреков в том, что Вам начали рассказывать про UART и прочее, соберитесь со своим мыслями и попрбуйте их изложить. Судя по беспомощности Вами ранее написанного, Вам для начала следует вообще забыть про слова АЦП, вывод и 10 бит и постараться просто сформулировать задачу взаимодействия контролера с каким-то внешним устройством.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 16 2016, 07:41
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Цитата(zltigo @ Dec 15 2016, 17:23) *
Ваши проблемы начались с того, что Вы даже спросить на форуме не смогли. По крайней мере я не заметил в этой теме ни одного понявшего Ваше желание sad.gif.
Так что вместо упреков в том, что Вам начали рассказывать про UART и прочее, соберитесь со своим мыслями и попрбуйте их изложить. Судя по беспомощности Вами ранее написанного, Вам для начала следует вообще забыть про слова АЦП, вывод и 10 бит и постараться просто сформулировать задачу взаимодействия контролера с каким-то внешним устройством.

С чего вы взяли, что у меня начались проблемы?
Спасибо большое, за анализ написанных мною ранее "трудов".
Я никого не упрекал, а наоборот извинился, что не предположил, что мне могут посоветовать УАРТ и не описал полностью задачу сначала.
Я бы тоже посоветовал Вам, перестать смотреть на всех с высока и не лезть с ролью доблестного рыцаря в защиту обиженных и угнетенных, для это го есть модераторы.
Цитата(ViKo @ Dec 15 2016, 17:26) *
Прочитайте ADCW в отдельную переменную и выдвигайте ее. Замаскировал все биты, кроме младшего, сравнил результат с нулем, послал в порт в зависимости от результата. Сдвинул переменную. И т.д.

Спасибо.
Вот так:

ADC_ch0=ADCW;

ADC_ch0_temp=ADC_ch0 & 0x01 // битовая маска на младший 10-ый бит АЦП
if (ADC_ch0_temp= 0) PORTB.1=0;
if (ADC_ch0_temp= 1) PORTB.1=1;

ADC_ch1_temp=ADC_ch0 & 0x02 // битовая маска на 9-ый бит АЦП
if (ADC_ch0_temp= 0) PORTB.1=0;
if (ADC_ch0_temp= 1) PORTB.1=1;
....

ADC_ch0_temp=ADC_ch0 & 0x200 // битовая маска на 1-ый бит АЦП
if (ADC_ch0_temp= 0) PORTB.1=0;
if (ADC_ch0_temp= 1) PORTB.1=1;


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 16 2016, 09:53
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(ikm @ Dec 16 2016, 10:41) *
ADC_ch0=ADCW;

ADC_ch0_temp=ADC_ch0 & 0x01 // битовая маска на младший 10-ый бит АЦП
if (ADC_ch0_temp= 0) PORTB.1=0;
if (ADC_ch0_temp= 1) PORTB.1=1;

ADC_ch1_temp=ADC_ch0 & 0x02 // битовая маска на 9-ый бит АЦП
if (ADC_ch0_temp= 0) PORTB.1=0;
if (ADC_ch0_temp= 1) PORTB.1=1;
....

ADC_ch0_temp=ADC_ch0 & 0x200 // битовая маска на 1-ый бит АЦП
if (ADC_ch0_temp= 0) PORTB.1=0;
if (ADC_ch0_temp= 1) PORTB.1=1;

Во первых это работать не будет. Во вторых, даже если поправить косяки в коде (и даже если переделать его на один цикл, как ViCo предлагал), вы на PORTB.1 получите кашу из импульсов. Что вы с ними потом делать будете?
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 16 2016, 11:04
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Цитата(XVR @ Dec 16 2016, 12:53) *
Во первых это работать не будет. Во вторых, даже если поправить косяки в коде (и даже если переделать его на один цикл, как ViCo предлагал), вы на PORTB.1 получите кашу из импульсов. Что вы с ними потом делать будете?

Почему Вы тратите свое время на написание поста с вопросом- зачем мне это надо?
Ведь намного полезнее указать мне на мои косяки да бы они не повторялись.

И что вы подразумеваете под "кашей"?

Если Вам и правда так интересно зачем мне это всё, то лишь для того чтобы посмотреть осцилом и затем предать на антенну. Причем сразу скажу никакой второй антенны и приёмника не будет.

Цитата(zltigo @ Dec 16 2016, 13:58) *
Вопросов больше нет. Это плинтус sad.gif на уровне которого обсуждать просто нечего sad.gif


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


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 16 2016, 16:50
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(ikm @ Dec 16 2016, 14:04) *
Почему Вы тратите свое время на написание поста с вопросом- зачем мне это надо?
Потому что то, что вы написали невозможно применить в каких либо практических целях. Вот я и пытаюсь понять, что вы патались сделать. 'Вывести 10 бит через ножку' - это не ответ, это ваши хотелки.

Цитата
Если Вам и правда так интересно зачем мне это всё, то лишь для того чтобы посмотреть осцилом и затем предать на антенну.

Вот с этого и надо было начинать. Что бы на осцилографе можно было разобрать что имено выводится, нужно выводить так, что бы визуально можно было отделить каждый бит друг от друга и все 10 бит вместе от следующих 10 бит.
Цитата
И что вы подразумеваете под "кашей"
То, что вы получите если выведите все 10 бит 'как есть' друг за другом.

Можно выводить например так:
  • 0 выводится коротким импульсом лог 1
  • 1 выводится длинным импульсом лог 1
  • Разделяются 0 и 1 коротким импульсом лог 0
  • Биты выводятся начиная с младшего
  • После 10 битов делается пауза (в 2 раза длиннее чем импульс 1)

Код
void delay(int dly)
{
volatile char c=i;
while(c--);
}

void send_adc(int value)
{
int cnt;
for(cnt=0;cnt<10;++cnt, value>>=1)
{
   PORTB.1 = 1;
   delay(1+(value&1));
   PORTB.1 = 0;
   delay(1);
}
delay(4);  
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ikm   Как вывести 10 бит АЦП через один вывод   Dec 13 2016, 13:43
- - Smoky   Цитата(ikm @ Dec 13 2016, 19:43) Подскажи...   Dec 13 2016, 14:36
|- - ikm   Цитата(Smoky @ Dec 13 2016, 17:36) Интерф...   Dec 14 2016, 06:38
- - esaulenka   Для начала хорошо б определиться, ГДЕ надо увидеть...   Dec 13 2016, 15:09
- - YAM   Полностью поддерживаю предыдущего оратора! И в...   Dec 13 2016, 16:34
- - rx3apf   Тем не менее, идея "1-wire" (точнее, что...   Dec 13 2016, 17:23
- - ViKo   Именно, мудрите непонятно что. По одному проводу в...   Dec 14 2016, 07:33
- - Serhiy_UA   Цитата(ikm @ Dec 13 2016, 17:43) мне нужн...   Dec 14 2016, 13:42
- - rx3apf   Не, я-то подразумевал побитовый выход с PWM-модуля...   Dec 14 2016, 19:14
||- - ikm   Цитата(XVR @ Dec 16 2016, 19:50) Потому ч...   Dec 19 2016, 08:45
||- - ViKo   Цитата(ikm @ Dec 19 2016, 11:45) Ну циклы...   Dec 19 2016, 10:38
||- - XVR   Цитата(ikm @ Dec 19 2016, 11:45) А почему...   Dec 19 2016, 14:09
||- - ikm   Цитата(XVR @ Dec 19 2016, 17:09) Я немног...   Dec 20 2016, 07:23
||- - dimka76   Цитата(ikm @ Dec 20 2016, 10:23) Нет, не ...   Dec 21 2016, 11:59
||- - esaulenka   Цитата(dimka76 @ Dec 21 2016, 14:59) А по...   Dec 21 2016, 12:55
||- - ikm   Цитата(esaulenka @ Dec 21 2016, 15:55) Да...   Dec 21 2016, 13:20
||- - jcxz   Не вчитывался глубоко в топик, но вроде здесь речь...   Dec 22 2016, 07:58
||- - ikm   Цитата(jcxz @ Dec 22 2016, 10:58) Не вчит...   Dec 22 2016, 08:27
||- - jcxz   Цитата(ikm @ Dec 22 2016, 11:27) И где по...   Dec 22 2016, 12:59
||- - ikm   Цитата(jcxz @ Dec 22 2016, 15:59) Пояснен...   Dec 22 2016, 14:44
|||- - jcxz   Цитата(ikm @ Dec 22 2016, 17:44) Типичный...   Dec 22 2016, 16:30
|||- - ikm   Цитата(jcxz @ Dec 22 2016, 19:30) Тут Вам...   Dec 22 2016, 17:08
|||- - jcxz   Цитата(ikm @ Dec 22 2016, 20:08) Ответьте...   Dec 22 2016, 22:33
|||- - ikm   Цитата(jcxz @ Dec 23 2016, 01:33) Уважаем...   Dec 23 2016, 06:52
||- - zltigo   Цитата(jcxz @ Dec 22 2016, 14:59) PS: Гре...   Dec 22 2016, 17:17
|- - Serhiy_UA   Есть еще способ, когда выдаются не полные значения...   Dec 16 2016, 10:29
|- - zltigo   Цитата(ikm @ Dec 16 2016, 09:41) Вот так:...   Dec 16 2016, 10:58
- - ViKo   Прочитайте ADCW в отдельную переменную и выдвигайт...   Dec 15 2016, 14:26
- - Onkel   действительно, непонятно, что вам нужно на выходе ...   Dec 15 2016, 19:03
- - ViKo   А почему не циклом? for (int i = 10; i > 0; i--...   Dec 16 2016, 09:08
- - Onkel   не будет работать потому что у вас = вместо ==, и ...   Dec 16 2016, 14:04
|- - ikm   Цитата(Onkel @ Dec 16 2016, 17:04) не буд...   Dec 16 2016, 15:14
- - ViKo   И потому, что сравнивать придется не с 0 и 1, а ка...   Dec 16 2016, 14:11
- - ViKo   И книжку Кернигана и Ричи "Язык программирова...   Dec 16 2016, 16:13
- - skripach   Может ТСу нужен R-2R ЦАП чтобы осциллографом наблю...   Dec 18 2016, 04:00
- - dimka76   Настройте вывод ШИМ на ножку. 10-ти битный ШИМ. Ск...   Dec 19 2016, 09:57
- - ikm   Цитата(dimka76 @ Dec 19 2016, 12:57) Наст...   Dec 19 2016, 10:57
- - dimka76   Цитата(ikm @ Dec 19 2016, 13:57) Ну раз в...   Dec 19 2016, 13:51


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

 


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


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