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

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

|
Цитата(ikm @ Dec 19 2016, 13:57)  Ну раз вы предложили этот вариант, может прокоментируете мои представления о таймерах: Во-первых, в datasheet все хорошо изложено. Во-вторых, если вы не знакомы с английским, то по AVR написано несколько русскоязычных книг. А ваше представление не верно.
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Dec 19 2016, 14:09
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(ikm @ Dec 19 2016, 11:45)  А почему я не могу реализовать "мои хотелки", почему для вас вывод значений АЦП наружу не задача. Я немного неправильно выразился. Ваша задача - не вывести наружу значения от АЦП через ножку, а увидеть их на осцилографе, я прав? Просто вывести АЦП на ножку недостаточно - 'это' еще надо будет зафиксировать и понять, что именно было выведено. Цитата На осциле, я буду смотреть только на первом этапе кода соберу весь код, и то на предмет, того, что на "ножке" есть импульсы, Ну если только на предмет 'наличия импульсов', то сойдет. Цитата и тут наверное лучше дописать ещё одну ногу для выхода синхронизации посылки 10 бит. Вот это лучше. Но считывать значение АЦП будет довольно трудоемко, даже с синхронизацией. Цитата За код правда спасибо. Вот только не понятно, зачем объявлять без регистровую переменную с, и как определена i ? с - что бы оптимизатор не выкинул цикл задержки, а i - это dly (описка в тексте)
|
|
|
|
|
Dec 20 2016, 07:23
|
Знающий
   
Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894

|
Цитата(XVR @ Dec 19 2016, 17:09)  Я немного неправильно выразился. Ваша задача - не вывести наружу значения от АЦП через ножку, а увидеть их на осцилографе, я прав? Просто вывести АЦП на ножку недостаточно - 'это' еще надо будет зафиксировать и понять, что именно было выведено. Нет, не правы, именно вывести наружу задача. Цитата(XVR @ Dec 19 2016, 17:09)  Ну если только на предмет 'наличия импульсов', то сойдет. Это как раз второстепенная задача, чисто посмотреть один раз что код написан правильно.
--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
|
|
|
|
|
Dec 21 2016, 11:59
|

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

|
Цитата(ikm @ Dec 20 2016, 10:23)  Нет, не правы, именно вывести наружу задача. А почему бы вам просто не воспользоваться UART. Его можно также программный ногодрыгом реализовать. На передачу там все очень просто.
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Dec 21 2016, 13:20
|
Знающий
   
Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894

|
Цитата(esaulenka @ Dec 21 2016, 15:55)  Да скоро будет уже. Ещё чуть-чуть, и человек разберётся, что длительность его битиков надо делать какой-то одинаково-стандартной, ввести признак "начало битиков" и "конец битиков" - и вот он, программно-ногодрыгный уарт :-) Вы заблуждаетесь, для меня синхронизация моих битиков как раз лишняя, даже губительная для проекта. К тому же зачем городить код в десятки строк для формирования УАРТ, если и так все работает и меня полностью устраивает. Спасибо еще раз Viko за помощь.
--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
|
|
|
|
|
Dec 22 2016, 08:27
|
Знающий
   
Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894

|
Цитата(jcxz @ Dec 22 2016, 10:58)  Не вчитывался глубоко в топик, но вроде здесь речь идёт о способах передачи данных через один пин? Интересно - только я один заметил, что уже сам ник топикстартера содержит одно из решений задачи?  Ну я бы сказал, что задача последовательный вывод данных, без преобразования в какой либо интерфейс. И где пояснения к вашему решению? Да, кстати тема пока закрыта. Просьба отвечать в тему, только с конкретным предложением по коду реализации. А то и так простая задача переросла в помойку с флудом.
--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
|
|
|
|
|
Dec 22 2016, 14:44
|
Знающий
   
Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894

|
Цитата(jcxz @ Dec 22 2016, 15:59)  Пояснения в гугле. Спросите его о "ИКМ" (импульсно-кодовая манипуляция (модуляция)). Типичный ответ человека с поверхностными знаниями : что то где то слышал, а как применять не знаю. Т.к. для знающего материал хорошо, проще написать пару строк по делу с примером реализацией.
--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|