|
Как вывести 10 бит АЦП через один вывод, Atmega+ CVAVR |
|
|
|
 |
Ответов
|
Dec 14 2016, 21:20
|
Знающий
   
Группа: Свой
Сообщений: 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?
|
|
|
|
|
Dec 15 2016, 11:31
|
Знающий
   
Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894

|
Картинка к чему? Да, визардом умею пользоваться, периферии никакой не будет, дальше идет в аналоговую часть. Вот все равно не понял Вас, как там настроить четыре независимых "ноги"? Цитата(ViKo @ Dec 14 2016, 10:33)  Именно, мудрите непонятно что. По одному проводу выводят последовательно, бит за битом, пока все ваше слово не вылезет. Потом пауза. Или старт, стоп вокруг байта. Потом опять. УАРТ так и делает. Не могли бы Вы привести пример, как правильно выводить последовательно, если не принимать в расчёт УАРТ (ведь мне нужно 4 таких канала, а УАРТ один).
Сообщение отредактировал Herz - Dec 16 2016, 09:33
Причина редактирования: Избыточное цитирование
--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
|
|
|
|
|
Dec 15 2016, 11:57
|

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

|
Цитата(ikm @ Dec 15 2016, 14:31)  Не могли бы Вы привести пример, как правильно выводить последовательно, если не принимать в расчёт УАРТ (ведь мне нужно 4 таких канала, а УАРТ один). Сначала опишите подробнее, что вы хотите сделать. И зачем? А то был 1 канал, стало 4. Это что, курсовой проект, что ли? Выводите все каналы по одному проводу. 4 слова. В каком формате? В каком нравится. Здесь уже посоветовали несколько. P.S. В один УАРТ можно 444 канала вывести, и еще останется...
|
|
|
|
|
Dec 15 2016, 12:33
|
Знающий
   
Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894

|
Цитата(ViKo @ Dec 15 2016, 14:57)  Сначала опишите подробнее, что вы хотите сделать. И зачем? А то был 1 канал, стало 4. Это что, курсовой проект, что ли? Выводите все каналы по одному проводу. 4 слова. В каком формате? В каком нравится. Здесь уже посоветовали несколько. P.S. В один УАРТ можно 444 канала вывести, и еще останется...  Нет, это не курсовой проект, с курсовыми я лет как 10 назад закончил. Расширяю кругозор в области работы на МК. Я не писал в начале, что у меня один канал, я спрашивал как вывести на одну ножку последовательно значения полученные в АЦП. Возможно это мое упущение, но не подумал, что мне могут рассказывать про УАРТ и 1 Wire. Скорее всего ответ на мой вопрос лежит в области применения таймеров и PWM, но думал, что по проще можно. Вот только таймер 16-ти битный только один. Задача именно такая, как и в начале я писал, вывести через одну ножку битовую последовательность с АЦП и еще с трёх ножек обработанные с помощью наложением маски.
--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
|
|
|
|
|
Dec 15 2016, 12:55
|

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

|
Цитата(ikm @ Dec 15 2016, 15:33)  Скорее всего ответ на мой вопрос лежит в области применения таймеров и PWM, но думал, что по проще можно. Задача именно такая, как и в начале я писал, вывести через одну ножку битовую последовательность с АЦП и еще с трёх ножек обработанные с помощью наложением маски. А ЦАП там есть? Выведите на него. Пусть таймер выдает прерывание с интервалом, которым будете бит за битом выводить. По этому прерыванию и выдвигайте битики слова, пока не кончатся. А как кончатся, другое слово выдавайте... А чтобы синхронизацию сделать, на другую ножку выдайте один импульс, когда начинаете все свои слова выдавать. Сначала напишите, что вы уже сделали, что не нравится, тогда и советы будут определенные.
|
|
|
|
|
Dec 15 2016, 14:06
|
Знающий
   
Группа: Свой
Сообщений: 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
Причина редактирования: Избыточное цитирование
--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
|
|
|
|
|
Dec 15 2016, 14:23
|

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

|
Цитата(ikm @ Dec 15 2016, 16:06)  Спросить на форуме, что мне с этим делать. Ваши проблемы начались с того, что Вы даже спросить на форуме не смогли. По крайней мере я не заметил в этой теме ни одного понявшего Ваше желание  . Так что вместо упреков в том, что Вам начали рассказывать про UART и прочее, соберитесь со своим мыслями и попрбуйте их изложить. Судя по беспомощности Вами ранее написанного, Вам для начала следует вообще забыть про слова АЦП, вывод и 10 бит и постараться просто сформулировать задачу взаимодействия контролера с каким-то внешним устройством.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 16 2016, 07:41
|
Знающий
   
Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894

|
Цитата(zltigo @ Dec 15 2016, 17:23)  Ваши проблемы начались с того, что Вы даже спросить на форуме не смогли. По крайней мере я не заметил в этой теме ни одного понявшего Ваше желание  . Так что вместо упреков в том, что Вам начали рассказывать про 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;
--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
|
|
|
|
|
Dec 16 2016, 11:04
|
Знающий
   
Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894

|
Цитата(XVR @ Dec 16 2016, 12:53)  Во первых это работать не будет. Во вторых, даже если поправить косяки в коде (и даже если переделать его на один цикл, как ViCo предлагал), вы на PORTB.1 получите кашу из импульсов. Что вы с ними потом делать будете? Почему Вы тратите свое время на написание поста с вопросом- зачем мне это надо? Ведь намного полезнее указать мне на мои косяки да бы они не повторялись. И что вы подразумеваете под "кашей"? Если Вам и правда так интересно зачем мне это всё, то лишь для того чтобы посмотреть осцилом и затем предать на антенну. Причем сразу скажу никакой второй антенны и приёмника не будет. Цитата(zltigo @ Dec 16 2016, 13:58)  Вопросов больше нет. Это плинтус  на уровне которого обсуждать просто нечего  Мне очень важен Ваш уровень, можете измерить его линейкой и добавить измерения в подпись.
--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
|
|
|
|
|
Dec 16 2016, 16:50
|
Гуру
     
Группа: Свой
Сообщений: 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); }
|
|
|
|
Сообщений в этой теме
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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|