|
|
  |
Как вывести 10 бит АЦП через один вывод, Atmega+ CVAVR |
|
|
|
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, 15:14
|
Знающий
   
Группа: Свой
Сообщений: 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. Ну и конечно тоже завести эту переменную на цикл увеличения, как Вы ранее посоветовали.
--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
|
|
|
|
|
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); }
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|