Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Родился
Сообщения: 12
Зарегистрирован: Чт фев 28, 2013 09:24:54

Сообщение alexey_and »

подскажите пожалуйста как подключить датчик с выходом "открытый коллектор" ко входу контроллера
датчик такой (WSU) http://gidrolock.ru/production/datchiki ... gidrolock/
у контроллера один общий минус и несколько входов
у датчика +, -, и выход
Реклама
Родился
Сообщения: 12
Зарегистрирован: Чт фев 28, 2013 09:24:54

Сообщение alexey_and »

не очень понятно... если не затруднит, можно схему? :beer:
Реклама
Родился
Сообщения: 12
Зарегистрирован: Чт фев 28, 2013 09:24:54

Сообщение alexey_and »

правильно понял - на вход контроллера подаю + с БП через резистор (1К нормально? мощность значение имеет?), и выход с датчика? тогда при срабатывании датчика ток пойдет на контроллер в обход резистора?
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

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

ЗЫ: Вопросы "школьника". Не понятно, что они делают тут ( в разделе по МК ) :)
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 12
Зарегистрирован: Чт фев 28, 2013 09:24:54

Сообщение alexey_and »

спасибо! буду пробовать :beer:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Товарищи, кто-нибудь сталкивался с пиздежом враньём в Даташитах?
Стёртая ATmega8L со штатными фьюзами жрёт 5...6 мА при 4.7 В, хотя обещают около 2-х :shock: [12 мА вместо 10-ти на 8 МГц]
Корпус TQFP, МК просто распаян на макетке, к нему ничего не подключено!
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

а что прошито в меге? помнится, где-то встречал упоминание о неконтролируемых утечках, если все пины находятся в режиме входов - обычное состояние после сброса. переведите их на выходы и замерьте - изменится ток или нет?
кстати, в даташите что сказано про компаратор и BOD - по умолчанию они включены и жрут прилично.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Ничего не прошито. Я ж написал, она стёртая.
ARV писал(а):неконтролируемых утечках, если все пины находятся в режиме входов
Фууух, спасибо, полегчало. 1,9 мА. Странно, обычно я с потреблением не заморачивался и оставлял ноги висеть в воздухе в 3-м состоянии. И ДШ про то же подтверждает что так лучше не делать:
Unconnected pins
If some pins are unused, it is recommended to ensure that these pins have a defined level. Even though most of the digital inputs are disabled in the deep sleep modes as described above, floating inputs should be avoided to reduce current consumption in all other modes where the digital inputs are enabled (Reset, Active mode and Idle mode).

The simplest method to ensure a defined level of an unused pin, is to enable the internal pull-up. In this case, the pull-up will be disabled during reset. If low power consumption during reset is important, it is recommended to use an external pull-up or pull-down. Connecting unused pins directly to VCC or GND is not recommended, since this may cause excessive currents if the pin is accidentally configured as an output.
:)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Аватара пользователя
Сообщения: 20132
Зарегистрирован: Чт сен 01, 2011 12:53:27
Откуда: ТьмуТаракания. Почетный житель подмостовья

Сообщение oleg63m »

ЭТО ДАЖЕ ПРОСТАЯ CMOS ЛОГИКА НЕ ЛЮБИТ, ЧТОБЫ НОГИ БОЛТАЛИСЬ В ВОЗДУХЕ :))
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Контактная информация:
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Сообщение amd9800 »

тут важно очень осторожно выражаться, а то любой начинающий вашу фразу может применить на практике так что неиспользованные ноги подключит физически к нулю или VCC. А ведь в даташите написано что этого не надо делать.
Друг Кота
Аватара пользователя
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Сообщение hybroid »

Коты! Надо выбрать какой-то МК на ядре 51. Требуется минимум 17 портов i/o и UART. Тактирование не важно какое, всё не важно.. Ну и желательно чтобы какой-то дохлый таймер был.
Я это ядро вообще палочкой не тыкал, понятия не имкю куда смотреть.. Есть NXP, есть Silabs.. Пока выбор пал на P89LPC930. Может что скромнее есть?
Всунуть МК надо в курсач..
Друг Кота
Сообщения: 5431
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий

Сообщение petrenko »

"Скромнее" в смысле "дешевле" ? Или как ?

Atmel-овские варианты 51-ых устроят ? :roll:
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

hybroid писал(а):Надо выбрать какой-то МК на ядре 51.
http://mymcu.ru/
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Подскажите, как правильно усреднить данные АЦП.
Понадобилось мне вывести на индикатор данные из АЦП, что бы на индикаторе они сильно не прыгали сделал суммирование 64 значений, а после делением сдвигом. Так вот теперь значение на индикаторе более менее установилось, но если значение АЦП будет на границе перехода 0.9-1.0, то небольшое колебания АЦП опять приводит к прыганию данных на индикаторе.
Как от такого можно избавится ? Думал сделать округление, а не отбрасывание дробной части, но тогда та же ситуация будет повторятся но уже на границе 0.5.
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

Можно добавить гистерезис. В случае сложения 64 измерений, перед делением сравнивать с предыдущим значением и менять, только если разница больше определенного значения.
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

pokk писал(а): Понадобилось мне вывести на индикатор данные из АЦП, что бы на индикаторе они сильно не прыгали сделал суммирование 64 значений, а после делением сдвигом. Так вот теперь значение на индикаторе более менее установилось, но если значение АЦП будет на границе перехода 0.9-1.0, то небольшое колебания АЦП опять приводит к прыганию данных на индикаторе.
Не вполне понятно КАК Вы реализовали буфер этих 64 значений.
Буфер нужно заполнять ПО КРУГУ и вычислять среднее после КАЖДОЙ НОВОЙ ЗАПИСИ в буфер. Длина буфера должна быть примерно 0,25...0,5 секунд. Это даст полосу фильтрации такого КИХ ФНЧ с прямоугольным окном 2...4 Гц.
Не нужно слишком часто проводить измерения. Скажем, для буфера на 64 значения получится частота семплирования АЦП 128...256 Гц (период дискретизации сигнала 4...8 мс).
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

КРАМ писал(а):Буфер нужно заполнять ПО КРУГУ и вычислять среднее после КАЖДОЙ НОВОЙ ЗАПИСИ в буфер.
Почему нельзя сначала заполнить буфер, а потом вычислить среднее?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Потому что выходной сигнал будет иметь ступеньки. По сути это прореживание. Промежуточных значений не будет.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

давным-давно додумался до обсуждаемого метода фильтрации (почему додумался? потому что ЦОС не изучал, а ТАУ хоть и изучал, но ничего не помню, поэтому все время изобретаю велосипед). в общем, код получается такой:

Код: Выделить всё

#define FILTR_DEPTH  64
static uint16_t adc_one_shot(void){
   ADCSRA |= 1<<ADSC;
   while(ADCSRA & (1<<ADSC));
   return ADC;
}

uint16_t get_filtered_sample(void){
   static uint16_t filtr[FILTR_DEPTH];
   static current_sample = 0;
   uint32_t sum = 0;
   
   fltr[current_sample] = adc_one_shot();
   if(++current_sample >= FILTR_DEPTH) current_sample = 0;
   for(uint8_t i=0; i<FILTR_DEPTH;i++) sum += filtr[i];
   return sum / FILTR_DEPTH;
}
в подавляющем большинстве случаев мне этого было вполне достаточно. не самый оптимальный по быстродействию фильтр, но зато понятный даже такому неучу, как я :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Мудрый кот
Аватара пользователя
Сообщения: 1812
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

ARV писал(а):не самый оптимальный по быстродействию
Не рассмотривая оптимизацию под конкретную архитектуру...
Если от цикла избавиться в get_filtered_sample, то будет нормально. :tea:
Спойлер

Код: Выделить всё

uint16_t get_filtered_sample(void){
   static uint16_t filtr[FILTR_DEPTH];
   static current_sample = 0;
   static uint32_t sum = 0;
   
   sum =- fltr[current_sample];
   fltr[current_sample] = adc_one_shot();
   sum =+ fltr[current_sample];
   if(++current_sample >= FILTR_DEPTH) current_sample = 0;
   return sum / FILTR_DEPTH;
}
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Ответить

Вернуться в «Разные вопросы по МК»