Перейти к содержанию
    

Как вывести 10 бит АЦП через один вывод

Потому что то, что вы написали невозможно применить в каких либо практических целях. Вот я и пытаюсь понять, что вы патались сделать. 'Вывести 10 бит через ножку' - это не ответ, это ваши хотелки.

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

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

За код правда спасибо. Вот только не понятно, зачем объявлять без регистровую переменную с, и как определена i ?

 

А почему не циклом?

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;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Настройте вывод ШИМ на ножку.

10-ти битный ШИМ.

Скважностью этого ШИМа будет значение АЦП.

И смотрите стрелочным вольтметром значения вашего ацп.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну циклы мне писать еще рано, больше вероятность что запутаюсь.

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

Правильно будет сначала выдать бит в порт, а потом сдвинуть. Т.е. ADC_temp >>=1 должна быть в конце тела цикла. Всего и делов то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Настройте вывод ШИМ на ножку.

10-ти битный ШИМ.

Скважностью этого ШИМа будет значение АЦП.

И смотрите стрелочным вольтметром значения вашего ацп.

В атмега 8 всего один 16 битный таймер и два 8-ми битных. Что из них вы предлагаете использовать в качестве 10-ти битного, с учётом того, что мне надо будет четыре канала выхода?

Ну раз вы предложили этот вариант, может прокоментируете мои представления о таймерах:

1.Получаем значения АЦП заносим OCR0A по которому таймер сбрасывается и изменяется состояние на ноге например PORTB.1

2. Так же мы можем независимо дать значение OCR0A по которому таймер сбросится и изменит состояние на ноге например PORTB.2

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

Или если таймер не сбрасывается, а просто выдает прерывание на значении OCR0A и продолжает считать дальше пока не дойдет до 255, то количество отсчётов между первым значением OCR0A и новым которое я задам при следующем считанным значением АЦП будет не одно и тоже , что если бы он начал отсчитывать опять с нуля- значит скважность будет разная?

Правильно будет сначала выдать бит в порт, а потом сдвинуть. Т.е. ADC_temp >>=1 должна быть в конце тела цикла. Всего и делов то.

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

Еще раз спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну раз вы предложили этот вариант, может прокоментируете мои представления о таймерах:

Во-первых, в datasheet все хорошо изложено.

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А почему я не могу реализовать "мои хотелки", почему для вас вывод значений АЦП наружу не задача.
Я немного неправильно выразился. Ваша задача - не вывести наружу значения от АЦП через ножку, а увидеть их на осцилографе, я прав?

Просто вывести АЦП на ножку недостаточно - 'это' еще надо будет зафиксировать и понять, что именно было выведено.

 

На осциле, я буду смотреть только на первом этапе кода соберу весь код, и то на предмет, того, что на "ножке" есть импульсы,
Ну если только на предмет 'наличия импульсов', то сойдет.

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

 

За код правда спасибо. Вот только не понятно, зачем объявлять без регистровую переменную с, и как определена i ?
с - что бы оптимизатор не выкинул цикл задержки, а i - это dly (описка в тексте)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я немного неправильно выразился. Ваша задача - не вывести наружу значения от АЦП через ножку, а увидеть их на осцилографе, я прав?

Просто вывести АЦП на ножку недостаточно - 'это' еще надо будет зафиксировать и понять, что именно было выведено.

Нет, не правы, именно вывести наружу задача.

Ну если только на предмет 'наличия импульсов', то сойдет.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, не правы, именно вывести наружу задача.

 

А почему бы вам просто не воспользоваться UART.

Его можно также программный ногодрыгом реализовать.

На передачу там все очень просто.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А почему бы вам просто не воспользоваться UART.

Его можно также программный ногодрыгом реализовать.

На передачу там все очень просто.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не вчитывался глубоко в топик, но вроде здесь речь идёт о способах передачи данных через один пин?

Интересно - только я один заметил, что уже сам ник топикстартера содержит одно из решений задачи? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не вчитывался глубоко в топик, но вроде здесь речь идёт о способах передачи данных через один пин?

Интересно - только я один заметил, что уже сам ник топикстартера содержит одно из решений задачи? :)

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Пояснения в гугле. Спросите его о "ИКМ" (импульсно-кодовая манипуляция (модуляция)).

PS: Грешным делом думал, что Вы ник свой выбрали имея в виду один из вариантов решения :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пояснения в гугле. Спросите его о "ИКМ" (импульсно-кодовая манипуляция (модуляция)).

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Тут Вам не детский сад - садить на горшок никто не будет, сами учитесь.

Если сами не умеете что-то делать - Вам в раздел "Предлагаю работу".

А о моих знаниях Вам судить и подавно рано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...