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

 
 
> Как вывести 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
4 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 48)
Smoky
сообщение Dec 13 2016, 14:36
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 7-05-10
Из: Оренбург
Пользователь №: 57 135



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

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


Интерфейс 1Wire.


--------------------
Лень, оттвори дверь, сгоришь - а хоть и сгорю, но не оттворю.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Dec 13 2016, 15:09
Сообщение #3


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Для начала хорошо б определиться, ГДЕ надо увидеть это значение.

Вместо 1-wire лучше использовать uart. При работе только на передачу (или только на приём) достаточно одного сигнального провода. И с компьютером легче сопрячь (методом покупки любого переходника uart<>usb).


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
YAM
сообщение Dec 13 2016, 16:34
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 7-07-04
Из: Ukraine
Пользователь №: 291



Полностью поддерживаю предыдущего оратора!
И выводить сразу в нужном виде, например в десятичном, и смотреть в любой терминальной программе.


--------------------
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Dec 13 2016, 17:23
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Тем не менее, идея "1-wire" (точнее, что-то аналогичное по сути, PWM-модуляция) может пригодится, если нет свободного UART, или не хватает его быстродействия.
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 14 2016, 06:38
Сообщение #6


Знающий
****

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



Цитата(Smoky @ Dec 13 2016, 17:36) *
Интерфейс 1Wire.


1Wire можно сконфигурировать только под один из портов (в,с,d), а не под все сразу. Мне нужно сразу четыре таких ноги.

Для пояснения, мне нужен не интерфейс, а только одна ножка.
Я думал что то типа побитового выставления 1 или 0 на ножке выхода.
Т.е. считываем 10 бит, выставляем его на PORTB.0, за тем 9-ый бит и т.д.
Или может я слишком мудрю. И можно определить переменную как word и загнать её сразу в нужную ножку?


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


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

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



Именно, мудрите непонятно что. По одному проводу выводят последовательно, бит за битом, пока все ваше слово не вылезет. Потом пауза. Или старт, стоп вокруг байта. Потом опять.
УАРТ так и делает.
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Dec 14 2016, 13:42
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(ikm @ Dec 13 2016, 17:43) *
мне нужно текущее число со всеми шумами и т.д.
Шумы можно наблюдать и в интегральном коде (число непрерывных единиц к нем равно значению самого числа).
Для этого подойдет широтно-импульсную модуляция, что есть в каждом микроконтроллере.
В этом случае осциллограф надо синхронизировать началом импульса ШИМ, а шумы, в виде дребезга, просматривать на конце импульса.
Двоичный или десятичный код не позволят сделать оценку шумов без передачи их в компьютер.

По моему эту идею уже высказал rx3apf...
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Dec 14 2016, 19:14
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Не, я-то подразумевал побитовый выход с PWM-модуляцией для каждого бита (например, "0" - 1 такт, "1" - 2 такта). А вывести результат преобразования через аппаратный PWM - тоже интересный вариант.
Go to the top of the page
 
+Quote Post
Onkel
сообщение Dec 14 2016, 21:20
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 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
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 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
Сообщение #12


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

Группа: Модераторы
Сообщений: 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
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 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
Сообщение #14


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

Группа: Модераторы
Сообщений: 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
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 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
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 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
ViKo
сообщение Dec 15 2016, 14:26
Сообщение #17


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

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



Прочитайте ADCW в отдельную переменную и выдвигайте ее. Замаскировал все биты, кроме младшего, сравнил результат с нулем, послал в порт в зависимости от результата. Сдвинул переменную. И т.д.
Go to the top of the page
 
+Quote Post
Onkel
сообщение Dec 15 2016, 19:03
Сообщение #18


Знающий
****

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



действительно, непонятно, что вам нужно на выходе - что-то аналоговое (если речь про шим зашла) или как-то сформировать цифровой последовательный сигнал?
Кстати если мало уартов - сформировать уарт на выход нетрудно, можно хоть десять их сформировать, нужен только один таймер.
Может будет яснее, если вы скажете, что вы будете подключать к мк, для чего выход?
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 16 2016, 07:41
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 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
ViKo
сообщение Dec 16 2016, 09:08
Сообщение #20


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

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



А почему не циклом?
for (int i = 10; i > 0; i--) {
ADC_temp >>= 1;
...
}
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 16 2016, 09:53
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 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
Serhiy_UA
сообщение Dec 16 2016, 10:29
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Есть еще способ, когда выдаются не полные значения измеренных кодов, а их приращения от одного измерения к следующему (в народе это называют - АДИКМ).
В некоторых случаях, и возможно Вашем, с микроконтроллером, это может быть полезным.
В свое время была задача оценить точность АЦП в 2МГц на 16 разрядов на стабильном синусе. Остановились на том, что без передачи кодов в компьютер с последующей обработкой не обойтись, да и генератор синуса тоже должен был быть не из дешевых.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 16 2016, 10:58
Сообщение #23


Гуру
******

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



Цитата(ikm @ Dec 16 2016, 09: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;

Вопросов больше нет. Это плинтус sad.gif на уровне которого обсуждать просто нечего sad.gif



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


Знающий
****

Группа: Свой
Сообщений: 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
Onkel
сообщение Dec 16 2016, 14:04
Сообщение #25


Знающий
****

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



не будет работать потому что у вас = вместо ==, и не будет работать потому что вы не сможете отличить 1111000000 от 0000001111 - на экране осциллографа они будут выглядеть одинаково
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 16 2016, 14:11
Сообщение #26


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

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



И потому, что сравнивать придется не с 0 и 1, а каждый раз с разными.
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 16 2016, 15:14
Сообщение #27


Знающий
****

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



Цитата(Onkel @ Dec 16 2016, 17:04) *
не будет работать потому что у вас = вместо ==, и не будет работать потому что вы не сможете отличить 1111000000 от 0000001111 - на экране осциллографа они будут выглядеть одинаково

А мне и не надо их отличать. А за синтаксис спасибо. При отладке кода в симуляторе (когда конечно до этого дойдет), заведу для синхронизации на доп ножку начало преобразования и от неё синхронизирусь.
Цитата(ViKo @ Dec 16 2016, 17:11) *
И потому, что сравнивать придется не с 0 и 1, а каждый раз с разными.

Да, это я поспешил с выводами и забыл,что при "И" остается единица, но в том бите который я маскирую. Т.е. верно будет только для сравнения младшего бита, а потом надо сравнивать результат с 0х02, 0х04 ... 0х200. Ну и конечно тоже завести эту переменную на цикл увеличения, как Вы ранее посоветовали.


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


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

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



И книжку Кернигана и Ричи "Язык программирования C" скачайте. Если вдумчиво прочитать, да еще попробовать задания выполнить, то можно сильно продвинуться.
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 16 2016, 16:50
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 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
skripach
сообщение Dec 18 2016, 04:00
Сообщение #30


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Может ТСу нужен R-2R ЦАП чтобы осциллографом наблюдать. Чет вспомнилось. santa2.gif


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 19 2016, 08:45
Сообщение #31


Знающий
****

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



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

А почему я не могу реализовать "мои хотелки", почему для вас вывод значений АЦП наружу не задача. Причем мне нужно будет сразу 4 канала вывода этих значений с наложением на каждый определённый алгоритм маскирования.
Как я понимаю исходя из своих "накопленных" знаний, это можно либо побитовым сдвигом через ножки и возможно через PWM с использованием таймеров. Я выбрал то, что пока мне понятнее на пальцах. Не знаю назовите этот девайс генератором кода, если Вам так будет проще. На осциле, я буду смотреть только на первом этапе кода соберу весь код, и то на предмет, того, что на "ножке" есть импульсы, и тут наверное лучше дописать ещё одну ногу для выхода синхронизации посылки 10 бит. потом эта система будет сама в себе.
За код правда спасибо. Вот только не понятно, зачем объявлять без регистровую переменную с, и как определена i ?

Цитата(ViKo @ Dec 16 2016, 12:08) *
А почему не циклом?
for (int i = 10; i > 0; i--) {
ADC_temp >>= 1;
...
}

Ну циклы мне писать еще рано, больше вероятность что запутаюсь.
Если я правильно понял, то ADC_temp >>= 1 сдвигает на один бит в каждом цикле, т.е. 9-ый бит встанет на место 10 бита, но ведь он это сделает в первом же цикле и я потеряю 10-ый бит?
Если предположить, что я не так понял, тогда код цикла будет выглядеть так:

for (int i = 10; i > 0; i--) {
ADC_temp >>= 1;
ADC_temp&=0x01 // битовая маска на младший 10-ый бит АЦП
if (ADC_temp== 0) PORTB.1=0;
if (ADC_temp!= 0) PORTB.1=1;
}


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


developer
****

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



Настройте вывод ШИМ на ножку.
10-ти битный ШИМ.
Скважностью этого ШИМа будет значение АЦП.
И смотрите стрелочным вольтметром значения вашего ацп.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 19 2016, 10:38
Сообщение #33


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

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



Цитата(ikm @ Dec 19 2016, 11:45) *
Ну циклы мне писать еще рано, больше вероятность что запутаюсь.
Если я правильно понял, то ADC_temp >>= 1 сдвигает на один бит в каждом цикле, т.е. 9-ый бит встанет на место 10 бита, но ведь он это сделает в первом же цикле и я потеряю 10-ый бит?

Правильно будет сначала выдать бит в порт, а потом сдвинуть. Т.е. ADC_temp >>=1 должна быть в конце тела цикла. Всего и делов то.
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 19 2016, 10:57
Сообщение #34


Знающий
****

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



Цитата(dimka76 @ Dec 19 2016, 12:57) *
Настройте вывод ШИМ на ножку.
10-ти битный ШИМ.
Скважностью этого ШИМа будет значение АЦП.
И смотрите стрелочным вольтметром значения вашего ацп.

В атмега 8 всего один 16 битный таймер и два 8-ми битных. Что из них вы предлагаете использовать в качестве 10-ти битного, с учётом того, что мне надо будет четыре канала выхода?
Ну раз вы предложили этот вариант, может прокоментируете мои представления о таймерах:
1.Получаем значения АЦП заносим OCR0A по которому таймер сбрасывается и изменяется состояние на ноге например PORTB.1
2. Так же мы можем независимо дать значение OCR0A по которому таймер сбросится и изменит состояние на ноге например PORTB.2
вот только у меня тут вопрос ведь если значение для OCR0A будет меньше чем, для OCR0В, то до события когда он досчитает до OCR0В мы можем и не дойти?
Или если таймер не сбрасывается, а просто выдает прерывание на значении OCR0A и продолжает считать дальше пока не дойдет до 255, то количество отсчётов между первым значением OCR0A и новым которое я задам при следующем считанным значением АЦП будет не одно и тоже , что если бы он начал отсчитывать опять с нуля- значит скважность будет разная?
Цитата(ViKo @ Dec 19 2016, 13:38) *
Правильно будет сначала выдать бит в порт, а потом сдвинуть. Т.е. ADC_temp >>=1 должна быть в конце тела цикла. Всего и делов то.

Значит, я Вас правильно понял, просто смутило многоточие стоящее после.
Еще раз спасибо.


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


developer
****

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



Цитата(ikm @ Dec 19 2016, 13:57) *
Ну раз вы предложили этот вариант, может прокоментируете мои представления о таймерах:

Во-первых, в datasheet все хорошо изложено.
Во-вторых, если вы не знакомы с английским, то по AVR написано несколько русскоязычных книг.

А ваше представление не верно.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 19 2016, 14:09
Сообщение #36


Гуру
******

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



Цитата(ikm @ Dec 19 2016, 11:45) *
А почему я не могу реализовать "мои хотелки", почему для вас вывод значений АЦП наружу не задача.
Я немного неправильно выразился. Ваша задача - не вывести наружу значения от АЦП через ножку, а увидеть их на осцилографе, я прав?
Просто вывести АЦП на ножку недостаточно - 'это' еще надо будет зафиксировать и понять, что именно было выведено.

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

Цитата
За код правда спасибо. Вот только не понятно, зачем объявлять без регистровую переменную с, и как определена i ?
с - что бы оптимизатор не выкинул цикл задержки, а i - это dly (описка в тексте)
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 20 2016, 07:23
Сообщение #37


Знающий
****

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



Цитата(XVR @ Dec 19 2016, 17:09) *
Я немного неправильно выразился. Ваша задача - не вывести наружу значения от АЦП через ножку, а увидеть их на осцилографе, я прав?
Просто вывести АЦП на ножку недостаточно - 'это' еще надо будет зафиксировать и понять, что именно было выведено.

Нет, не правы, именно вывести наружу задача.
Цитата(XVR @ Dec 19 2016, 17:09) *
Ну если только на предмет 'наличия импульсов', то сойдет.

Это как раз второстепенная задача, чисто посмотреть один раз что код написан правильно.


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


developer
****

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



Цитата(ikm @ Dec 20 2016, 10:23) *
Нет, не правы, именно вывести наружу задача.


А почему бы вам просто не воспользоваться UART.
Его можно также программный ногодрыгом реализовать.
На передачу там все очень просто.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Dec 21 2016, 12:55
Сообщение #39


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(dimka76 @ Dec 21 2016, 14:59) *
А почему бы вам просто не воспользоваться UART.
Его можно также программный ногодрыгом реализовать.
На передачу там все очень просто.

Да скоро будет уже. Ещё чуть-чуть, и человек разберётся, что длительность его битиков надо делать какой-то одинаково-стандартной, ввести признак "начало битиков" и "конец битиков" - и вот он, программно-ногодрыгный уарт :-)


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 21 2016, 13:20
Сообщение #40


Знающий
****

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



Цитата(esaulenka @ Dec 21 2016, 15:55) *
Да скоро будет уже. Ещё чуть-чуть, и человек разберётся, что длительность его битиков надо делать какой-то одинаково-стандартной, ввести признак "начало битиков" и "конец битиков" - и вот он, программно-ногодрыгный уарт :-)


Вы заблуждаетесь, для меня синхронизация моих битиков как раз лишняя, даже губительная для проекта. К тому же зачем городить код в десятки строк для формирования УАРТ, если и так все работает и меня полностью устраивает.

Спасибо еще раз Viko за помощь.


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


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Не вчитывался глубоко в топик, но вроде здесь речь идёт о способах передачи данных через один пин?
Интересно - только я один заметил, что уже сам ник топикстартера содержит одно из решений задачи? sm.gif
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 22 2016, 08:27
Сообщение #42


Знающий
****

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



Цитата(jcxz @ Dec 22 2016, 10:58) *
Не вчитывался глубоко в топик, но вроде здесь речь идёт о способах передачи данных через один пин?
Интересно - только я один заметил, что уже сам ник топикстартера содержит одно из решений задачи? sm.gif


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

И где пояснения к вашему решению?

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


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


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ikm @ Dec 22 2016, 11:27) *
И где пояснения к вашему решению?

Пояснения в гугле. Спросите его о "ИКМ" (импульсно-кодовая манипуляция (модуляция)).
PS: Грешным делом думал, что Вы ник свой выбрали имея в виду один из вариантов решения :-)
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 22 2016, 14:44
Сообщение #44


Знающий
****

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



Цитата(jcxz @ Dec 22 2016, 15:59) *
Пояснения в гугле. Спросите его о "ИКМ" (импульсно-кодовая манипуляция (модуляция)).


Типичный ответ человека с поверхностными знаниями : что то где то слышал, а как применять не знаю.
Т.к. для знающего материал хорошо, проще написать пару строк по делу с примером реализацией.


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


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ikm @ Dec 22 2016, 17:44) *
Типичный ответ человека с поверхностными знаниями : что то где то слышал, а как применять не знаю.
Т.к. для знающего материал хорошо, проще написать пару строк по делу с примером реализацией.

Тут Вам не детский сад - садить на горшок никто не будет, сами учитесь.
Если сами не умеете что-то делать - Вам в раздел "Предлагаю работу".
А о моих знаниях Вам судить и подавно рано.
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 22 2016, 17:08
Сообщение #46


Знающий
****

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



Цитата(jcxz @ Dec 22 2016, 19:30) *
Тут Вам не детский сад - садить на горшок никто не будет, сами учитесь.
Если сами не умеете что-то делать - Вам в раздел "Предлагаю работу".
А о моих знаниях Вам судить и подавно рано.


А Вы за всех не решайте. Что "тут". Не хотите "сажать на горшок" проходите просто мимо.
Типа тут форум для тех кто всё умеет делать и просто меряется уровнями?
Ответьте себе зачем Вы вообще заходите в этот раздел, чтобы удостоверится что вы знаете больше чем другие?


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


Гуру
******

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



Цитата(jcxz @ Dec 22 2016, 14:59) *
PS: Грешным делом думал, что Вы ник свой выбрали имея в виду один из вариантов решения :-)

Нет, тогда был-бы PCM sm.gif или ИКМ sm.gif, но не IKM





--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 22 2016, 22:33
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ikm @ Dec 22 2016, 20:08) *
Ответьте себе зачем Вы вообще заходите в этот раздел, чтобы удостоверится что вы знаете больше чем другие?

Уважаемый.... я вообще к Вам не обращался. И я Вам ничего не должен. И никто Вам тут ничего не должен.
Не нравится - идите мимо. И чем дальше - тем лучше.
Идите в игнор.

Цитата(zltigo @ Dec 22 2016, 20:17) *
Нет, тогда был-бы PCM sm.gif или ИКМ sm.gif, но не IKM

тот товарищ не PCM и не ИКМ, а $%@$#. Таких слов тут произносить не стоит
Go to the top of the page
 
+Quote Post
ikm
сообщение Dec 23 2016, 06:52
Сообщение #49


Знающий
****

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



Цитата(jcxz @ Dec 23 2016, 01:33) *
Уважаемый.... я вообще к Вам не обращался.

Батенька, да Вам наверное совсем плохо wacko.gif , а к кому вы обращались тогда?
Или про импульсную-кодовую модуляцию было, так, преамбула, и вы ожидали реакцию, всего интернет сообщества на свою искрометную шутку про ikm?

Цитата(jcxz @ Dec 23 2016, 01:33) *
тот товарищ не PCM и не ИКМ, а $%@$#. Таких слов тут произносить не стоит


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


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post

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

 


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


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