Быстрый заказ, позвонить +7-978-708-85-73
Дроссель Amadeus Productions. Быстрый заказ по телефону.
(Viber, WhatsApp, Telegram)
Amadeus Productions Дроссельный узел на Lancer IX 1.6 (4G18), 2.0 (4G63) и другие моторы
Ремкомплект РХХ на Mitsubishi Lancer IX, 1.6 (4G18), MD619857, 1450A116
Облегченный маховик на 1.6 (4G18) и другие моторы
Облегченные шкивы на 1.6 (4G18) и другие моторы
One-touch или "Ленивые поворотники"

10 страниц V  « < 8 9 10  
Reply to this topicStart new topic
> Микроконтроллеры
SSh
сообщение 5.12.2013, 6:55
Сообщение #181


Технический Маньяк-Гуру
*******

Группа:
Администраторы
Сообщений: 7044
Регистрация: 3.6.2009
Из: Армения
Вне форума
Авто: Lancer IX, AT

Репутация:   263  


Кстати, если собираешься продолжать изучение или использование МК, то советую в первую очередь сменить программатор, хотя-бы на уже упоминавшийся здесь PicKit, или на один из многочисленных клонов, вон их сколько на ebay
Также, как вариант, можно и самому собрать light версию
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
aLife
сообщение 16.12.2013, 10:43
Сообщение #182


Начинающий Технический Маньяк
**

Группа:
Технический Маньяк
Сообщений: 32
Регистрация: 6.4.2012
Вне форума
Авто: subaru

Репутация:   0  


Цитата(SSh @ 5.12.2013, 10:55) *
Кстати, если собираешься продолжать изучение или использование МК, то советую в первую очередь сменить программатор, хотя-бы на уже упоминавшийся здесь PicKit, или на один из многочисленных клонов, вон их сколько на ebay
Также, как вариант, можно и самому собрать light версию


Ну автопрог не так уж плох, единственный существенный минус - он не мой:) Скорее куплю готовый пиккит, т.к. собирать лайт версию по деньгам выйдет так же как купить готовый smile.gif

Еще несколько вопросов.

Все у меня заработало когда пользуюсь кнопками все ок, но когда вместо кнопок замыкаю проводки, то появляются неверные срабатывания.
в связи с этим появилась мысль увеличить время опроса аналогового входа.
можно ли как нибудь это сделать малой кровью? пока у меня родилась только такая идея.
считываем значение АЦП
определяем какой кнопке оно соответствует, запоминаем как временное значение кнопки
задержка (на какое время лучше сделать??)
считываем значение АЦП,
определяем какой кнопке оно соответствует, сравниваем со временным, если совпадают, то присваиваем переменной значение нажатой кнопки если нет, то все сначала.


и еще один вопрос про энкодер механический.
появилась задача подключить микроконтроллер параллельно энкодеру, чтобы можно было регулировать громкость и крутилкой и через МК.
Я думал что энкодер посылает код грея, за 1 щелчек полный цикл (4 смены состояния). и что в состоянии покоя контакты разомкнуты. Но первый попавшийся мне энкодер за щелчек отрабатывает пол цикла, т.е. в одном положении контакты разомкнуты, на следующий щелчек замкнуты. Это стандартная ситуция? большинство энкодеров такие ? или мне просто повезло купить на пол цикла?

и еще вопрос.
есть ли какие-нибудь нюансы для внутрисхемного программирования? а то у меня пик в корпусе SO8, не хочу его выпаивать.
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
SSh
сообщение 16.12.2013, 11:47
Сообщение #183


Технический Маньяк-Гуру
*******

Группа:
Администраторы
Сообщений: 7044
Регистрация: 3.6.2009
Из: Армения
Вне форума
Авто: Lancer IX, AT

Репутация:   263  


Конечно, замыкание проводков приводит к гораздо большему дребезгу, чем в случае с кнопкой. Помимо этого контакты кнопки подпружинены и поэтому обеспечивают более-менее одинаковое усилие контакта, и, тем самым, одинаковое переходное сопротивление.
Хороший алгоритм усреднения значения сигнала, поступающего на вход АЦП применен в моем автомате управления зеркалом. Вот подпрограмма на PicBasic
Код
ReadSensor:                ' Read position
for Counter = 0 to 12      ' 13 times
    ADCIN 0, Aver[Counter] ' Store all reading data in array
next Counter

    Counter=0
SortHall:                  ' Sort array by increasing order
    if Aver(Counter+1) < Aver(Counter) then
       Aver(Counter)     = Aver(Counter) ^ Aver(Counter+1)
       Aver(Counter+1+0) = Aver(Counter) ^ Aver(Counter+1)
       Aver(Counter)     = Aver(Counter) ^ Aver(Counter+1)
          if Counter > 0 then Counter=Counter-2
    endif
Counter=Counter+1
    if Counter < 12 then goto SortHall
Hall1 = Aver[6]            ' Take a middle result as position


По энкодерам, все, которые мне попадались - и из мышек и отдельные работали на таком принципе

Внутрисхемное программирование в принципе ничем не отличается от обычного за исключением тех случаев, когда на выводах программирования висит какая-нибуть шунтирующая нагрузка. Например, опять-же в моем индикаторе расхода дисплей подключен к МК через резисторы 1 кОм, хотя обычно соединяем непосредственно, без всяких резисторов. Дело в том, что для управления дисплеем используются выводы PGD и PGC контроллера и он отказался программироваться внутрисхемно;) Причем другой дисплей, даже аналогичный, вполне возможно, никак может и не влиять на это дело...
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
Rcus
сообщение 16.12.2013, 12:22
Сообщение #184


Turbo Stackwalker
*****

Группа:
Технический Маньяк
Сообщений: 626
Регистрация: 1.8.2011
Из: Челябинск
Вне форума
Авто: MMC Colt CZT

Репутация:   28  


А не проще использовать проверку установившегося состояния для устранения ошибочного определения нажатий?
Например так (да простят использование C, мне на нём проще изъясняться)
Код
key_mask_t keys_prev, keys, pressed_keys, released_keys;
unsigned key_debounce_decay;

key_mask_t key_mask_from_adc_result(adc_result_t code);
adc_result_t adc_run(adc_channel_t channel);

void keys_process() {
key_mask_t l_keys = key_mask_from_adc_result(adc_run(ADC_CHANNEL_KEYS));

keys_prev = keys;

if (l_keys != keys) key_debounce_decay = DEBOUNCE_KEYS_TIMER_INIT;
else if (key_debounce_decay) --key_debounce_decay;
else keys = l_keys;

pressed_keys = (keys_prev ^ keys) & keys;
released_keys = (keys_prev ^ keys) & keys_prev;
}


--------------------
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
SSh
сообщение 16.12.2013, 12:30
Сообщение #185


Технический Маньяк-Гуру
*******

Группа:
Администраторы
Сообщений: 7044
Регистрация: 3.6.2009
Из: Армения
Вне форума
Авто: Lancer IX, AT

Репутация:   263  


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

С другой стороны, ухудшив незначительно быстодействие можно и аппаратно поспособствовать уменьшению дребезга.
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
aLife
сообщение 16.12.2013, 13:51
Сообщение #186


Начинающий Технический Маньяк
**

Группа:
Технический Маньяк
Сообщений: 32
Регистрация: 6.4.2012
Вне форума
Авто: subaru

Репутация:   0  


Цитата(SSh @ 16.12.2013, 15:47) *
Конечно, замыкание проводков приводит к гораздо большему дребезгу, чем в случае с кнопкой. Помимо этого контакты кнопки подпружинены и поэтому обеспечивают более-менее одинаковое усилие контакта, и, тем самым, одинаковое переходное сопротивление.
Хороший алгоритм усреднения значения сигнала, поступающего на вход АЦП применен в моем автомате управления зеркалом. Вот подпрограмма на PicBasic
Код
ReadSensor:                ' Read position
for Counter = 0 to 12      ' 13 times
    ADCIN 0, Aver[Counter] ' Store all reading data in array
next Counter

    Counter=0
SortHall:                  ' Sort array by increasing order
    if Aver(Counter+1) < Aver(Counter) then
       Aver(Counter)     = Aver(Counter) ^ Aver(Counter+1)
       Aver(Counter+1+0) = Aver(Counter) ^ Aver(Counter+1)
       Aver(Counter)     = Aver(Counter) ^ Aver(Counter+1)
          if Counter > 0 then Counter=Counter-2
    endif
Counter=Counter+1
    if Counter < 12 then goto SortHall
Hall1 = Aver[6]            ' Take a middle result as position


По энкодерам, все, которые мне попадались - и из мышек и отдельные работали на таком принципе

Внутрисхемное программирование в принципе ничем не отличается от обычного за исключением тех случаев, когда на выводах программирования висит какая-нибуть шунтирующая нагрузка. Например, опять-же в моем индикаторе расхода дисплей подключен к МК через резисторы 1 кОм, хотя обычно соединяем непосредственно, без всяких резисторов. Дело в том, что для управления дисплеем используются выводы PGD и PGC контроллера и он отказался программироваться внутрисхемно;) Причем другой дисплей, даже аналогичный, вполне возможно, никак может и не влиять на это дело...


Смысл кода не совсем понятен, я пока только микробейсик осваиваю smile.gif
вечером, дома возьму "учебники", попытаюсь понять. но предполагаю, что происходит усреднение значения АЦП по нескольким замерам, а потом уже с полученным значением что-то происходит.
У меня достаточно большой разброс значений ацп между разными кнопками, поэтому на каждую кнопку отведен большой диапазон. Но я опасаюсь, что при медленном нажатии на кнопку (кнопки - резиновые мембраны с токопроводящим пяточком) ацп из-за своего быстродействия сможет распознать неправильную команду раньше чем кнопка будет нажата полностью. Вот хотел бы просто удлинить время замера. В принципе вариант усреднения значений должен подойти.

по внутрисхемному. просто подключаюсь к МК и все? обвязка не мешает? конденсаторы по линии питания?



Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
SSh
сообщение 16.12.2013, 15:38
Сообщение #187


Технический Маньяк-Гуру
*******

Группа:
Администраторы
Сообщений: 7044
Регистрация: 3.6.2009
Из: Армения
Вне форума
Авто: Lancer IX, AT

Репутация:   263  


Считываются 13 значений (насколько я помню, именно столько места для переменных и оставалось в памяти) - переменная, естественно, заранее объявлялась в виде массива:
Код
Aver    VAR WORD[13]       ' Voltage (position) array)


Далее, считанные значения сортируются в порядке возрастания и берется среднее (не усредненное!!!), 6-е значение. Как уже отмечал, за несколько лет использования еще не было случая, чтобы зеркало не возвращалось в исходную позицию, считанную указанным способом )). Ну и алгоритм Rcus-a можно применить - на выбор...

ICP - мешает только шунтирование по линиям программирования. По линии питании, по крайней мере при использовании PicKit, ничего не мешает, в том числе и, скажем, выход кренки от которой запитана схема. Конденсаторы, естественно, никак не могут помешать smile.gif
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
aLife
сообщение 16.12.2013, 16:43
Сообщение #188


Начинающий Технический Маньяк
**

Группа:
Технический Маньяк
Сообщений: 32
Регистрация: 6.4.2012
Вне форума
Авто: subaru

Репутация:   0  


Цитата(SSh @ 16.12.2013, 19:38) *
Считываются 13 значений (насколько я помню, именно столько места для переменных и оставалось в памяти) - переменная, естественно, заранее объявлялась в виде массива:
Код
Aver    VAR WORD[13]       ' Voltage (position) array)


Далее, считанные значения сортируются в порядке возрастания и берется среднее (не усредненное!!!), 6-е значение. Как уже отмечал, за несколько лет использования еще не было случая, чтобы зеркало не возвращалось в исходную позицию, считанную указанным способом )). Ну и алгоритм Rcus-a можно применить - на выбор...

ICP - мешает только шунтирование по линиям программирования. По линии питании, по крайней мере при использовании PicKit, ничего не мешает, в том числе и, скажем, выход кренки от которой запитана схема. Конденсаторы, естественно, никак не могут помешать smile.gif

Понял, интересно сколько времени занимает 13 измерений.
а если использовать мой вариант по двум измерениям, и если оба они попадают в диапазон значений одной той же кнопкиX , то считать что нажата кнопкаХ. какую задержку использовать между измерениями? 10ms нормально?
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
SSh
сообщение 16.12.2013, 17:09
Сообщение #189


Технический Маньяк-Гуру
*******

Группа:
Администраторы
Сообщений: 7044
Регистрация: 3.6.2009
Из: Армения
Вне форума
Авто: Lancer IX, AT

Репутация:   263  


Будет зависеть от дребезга, плюс у тебя ведь кнопки из токопроводящей резины, значит их переходное сопротивление также будет зависеть от силы нажатия...
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
Rcus
сообщение 16.12.2013, 18:46
Сообщение #190


Turbo Stackwalker
*****

Группа:
Технический Маньяк
Сообщений: 626
Регистрация: 1.8.2011
Из: Челябинск
Вне форума
Авто: MMC Colt CZT

Репутация:   28  


Цитата(SSh @ 16.12.2013, 18:38) *
Далее, считанные значения сортируются в порядке возрастания и берется среднее (не усредненное!!!), 6-е значение. Как уже отмечал, за несколько лет использования еще не было случая, чтобы зеркало не возвращалось в исходную позицию, считанную указанным способом )). Ну и алгоритм Rcus-a можно применить - на выбор...

По-моему это вообще перпендикулярные вещи, приведённый мною алгоритм никак не затрагивается ни запуск ацп (adc_run) и постобработку его результатов, ни определение состояния кнопок из кода ацп (key_mask_from_adc_result). С небольшими изменениями его можно применять и для GPIO кнопок.


--------------------
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
aLife
сообщение 17.12.2013, 10:19
Сообщение #191


Начинающий Технический Маньяк
**

Группа:
Технический Маньяк
Сообщений: 32
Регистрация: 6.4.2012
Вне форума
Авто: subaru

Репутация:   0  


Цитата(SSh @ 16.12.2013, 21:09) *
Будет зависеть от дребезга, плюс у тебя ведь кнопки из токопроводящей резины, значит их переходное сопротивление также будет зависеть от силы нажатия...

С кнопками все работает как часы, но лучше перебдеть.
Сделал паузу между замерами 10мс, теперь и с проводками вместо кнопок работает без ложных срабатываний smile.gif
шился внутрисхемно, тоже без проблем, только питание надо было на схему подавать, при использовании питания программатора вылазила ошибка превышения тока.
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
aLife
сообщение 19.1.2014, 15:47
Сообщение #192


Начинающий Технический Маньяк
**

Группа:
Технический Маньяк
Сообщений: 32
Регистрация: 6.4.2012
Вне форума
Авто: subaru

Репутация:   0  


to SSh
Привет, если не сложно - подскажи, пожалуйста, как правильнее сделать на микробайсике, чтобы размер кода получился меньше.

есть задача отправлять 12битные команды.
посылка команды выглядит следующим образом.

Заголовок
GPIO.1 = 1
Delay_ms(3)
GPIO.1 = 0
Delay_ms(1)

потом 12 бит команды

где ноль выглядит след образом
GPIO.1 = 1
Delay_ms(1)
GPIO.1 = 0
Delay_ms(1)

а единица вот так
GPIO.1 = 1
Delay_ms(1)
GPIO.1 = 0
Delay_ms(2)

и посылка завершения
GPIO.1 = 1
Delay_ms(1)
GPIO.1 = 0
Delay_ms(30)

для нагладности вот картинка
Прикрепленное изображение


сейчас в тестовом режиме использую построчное описание включения и выключения GPIO.1.
получается громоздко и не удобно .
Хотелось бы описать как отправляется ноль, а как единица, а потом уже просто давать команду "отправить 00011101001" или "отправить 0x0E9 "
но как это сделать?
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
SSh
сообщение 19.1.2014, 16:09
Сообщение #193


Технический Маньяк-Гуру
*******

Группа:
Администраторы
Сообщений: 7044
Регистрация: 3.6.2009
Из: Армения
Вне форума
Авто: Lancer IX, AT

Репутация:   263  


Можно по UART-линии, используя соотв. библиотеку:
value = 0xE9
UART1_Write(value)

Или то-же самое для строки:
UART1_Write_Text(text)
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
aLife
сообщение 19.1.2014, 17:42
Сообщение #194


Начинающий Технический Маньяк
**

Группа:
Технический Маньяк
Сообщений: 32
Регистрация: 6.4.2012
Вне форума
Авто: subaru

Репутация:   0  


Цитата(SSh @ 19.1.2014, 20:09) *
Можно по UART-линии, используя соотв. библиотеку:
value = 0xE9
UART1_Write(value)

Или то-же самое для строки:
UART1_Write_Text(text)


У этого МК (12F675) нет UART.
и я не совсем понимаю как через UART организовать нужные мне задержки. unknw.gif
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
SSh
сообщение 19.1.2014, 18:11
Сообщение #195


Технический Маньяк-Гуру
*******

Группа:
Администраторы
Сообщений: 7044
Регистрация: 3.6.2009
Из: Армения
Вне форума
Авто: Lancer IX, AT

Репутация:   263  


Еще как вариант - организовать массив из 12 элементов и в цикле по очереди передавать содержимое. Ну а с задержками здесь, думаю, все ясно, вписываются в тело цикла.
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
aLife
сообщение 7.3.2014, 15:36
Сообщение #196


Начинающий Технический Маньяк
**

Группа:
Технический Маньяк
Сообщений: 32
Регистрация: 6.4.2012
Вне форума
Авто: subaru

Репутация:   0  


доброго дня!
а как на микробэйсике отправить контроллер в сон с пробуждением по событию на одном из портов (нажатие кнопки)?
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
SSh
сообщение 7.3.2014, 15:53
Сообщение #197


Технический Маньяк-Гуру
*******

Группа:
Администраторы
Сообщений: 7044
Регистрация: 3.6.2009
Из: Армения
Вне форума
Авто: Lancer IX, AT

Репутация:   263  


Такая команда есть в PicBasic, но пробуждение не по внешнему событию а спустя заданное время. В микробейсике придется использовать ассемблерный фрагмент, см. здесь
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post

10 страниц V  « < 8 9 10
Fast ReplyReply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Быстрый заказ, позвонить +7-978-708-85-73
Дроссель Amadeus Productions. Быстрый заказ по телефону.
(Viber, WhatsApp, Telegram)
Amadeus Productions Дроссельный узел на Lancer IX 1.6 (4G18), 2.0 (4G63) и другие моторы
Ремкомплект РХХ на Mitsubishi Lancer IX, 1.6 (4G18), MD619857, 1450A116
Облегченный маховик на 1.6 (4G18) и другие моторы
Облегченные шкивы на 1.6 (4G18) и другие моторы
One-touch или "Ленивые поворотники"