Например TDA7294

Форум РадиоКот • Просмотр темы - Как на С "приплюсовать" два символа?
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс мар 01, 2026 21:40:39

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 58 ]    , , 3
Автор Сообщение
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Сб авг 11, 2012 12:22:37 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4612
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Дык ё-моё... Это неправильная обработка входных сигналов...


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Сб авг 11, 2012 14:42:25 
Встал на лапы

Зарегистрирован: Вт июл 17, 2012 17:45:46
Сообщений: 85
Откуда: Тольятти
Рейтинг сообщения: 0
Это точно.
А как же их правильно тогда обработать? Чтоб за раз только один раз проскакивал. Намекните пожалуйста, если не секрет. Делать задержку delay^ем - не вариант по моему, while - тоже не помогает. А как же еще тогда?

_________________
Боишься? Сиди дома!


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Сб авг 11, 2012 15:14:05 
Вымогатель припоя
Аватар пользователя

Карма: 5
Рейтинг сообщений: 74
Зарегистрирован: Пн июн 18, 2012 12:01:04
Сообщений: 650
Откуда: Челябинская область, Копейск
Рейтинг сообщения: 0
В цикле по "ИЛИ" складывайте


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Сб авг 11, 2012 15:27:09 
Встал на лапы

Зарегистрирован: Вт июл 17, 2012 17:45:46
Сообщений: 85
Откуда: Тольятти
Рейтинг сообщения: 0
Цитата:
В цикле по "ИЛИ" складывайте

Я так не умею. Или не понимаю о чем Вы. Можно подробнее немного? Или где прочитать можно.

_________________
Боишься? Сиди дома!


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Сб авг 11, 2012 16:19:51 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
вам уже пример прислали как складывать там где программа была.
возможно у вас теперь ловит, потому что портов три, если использовать пц инт, то возникнет три прерывания.При выходе из прерывания нужно очищать флаг запроса всех трех.
Я так думаю.
Вообще было бы неплохо на ваш вариант программы посмотреть.

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

_________________
В поисках истины человек развивается.


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Сб авг 11, 2012 16:47:51 
Встал на лапы

Зарегистрирован: Вт июл 17, 2012 17:45:46
Сообщений: 85
Откуда: Тольятти
Рейтинг сообщения: 0
Нет-нет. Я сделал пока как Alex посоветовал - просто увеличил длительность импульса на входе аппаратно.
А в программе все до неприличия просто:
Код:
if(PIND.7==1)
{while(!(UCSRA & (1<<UDRE)));  //ждем опустошение регистра передачи
UDR = 'G';}    //отправляем символ

И так опрашивается пин за пином и сразу отсылается символ если там 1.
Дык вот теперь из-за того что длительность импульса с датчика большая, МК успевает его засечь по 10-15 раз.
Обычно пустым циклом while(типа while(PIND.7==1){}) решал такое, а здесь, так как пьезодатчик не просто подает 1 в порт, а колеблется(т.е. 1-0-1-0-1-0) какое-то время, этим while не получается, проскакивает, сволочь.

_________________
Боишься? Сиди дома!


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Сб авг 11, 2012 17:56:28 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Стоп, если у вас состояние меняется раз в 10мс не думали сколько раз за секунду может меняться?
и тем более получается что цикл может пройти несколько раз пока разрядится конденсатор.Пробуйте уменьшить емкость конденсатора.

еще как вариант сохранять состояние регистров и только если есть изменения, то отправлять.

Цитата:
так как пьезодатчик не просто подает 1 в порт, а колеблется(т.е. 1-0-1-0-1-0) какое-то время,

то что вы описали похоже на дребезг.Как раз таки конденсатор нужного номинала помогает справиться с дребезжащими контактами.
есть вариант так же что ваш транзистор, который вы поставили для усиления поднимает уровень напряжения недостаточно и поэтому малейшее колебание наводок меняет состояние порта.Так же возможно что для увеличения помехоустойчивости потребуется подтягивающие резисторы на каждую ногу. Хотя бы внутренние.

_________________
В поисках истины человек развивается.


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Сб авг 11, 2012 21:41:41 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4612
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Опросили ПИН, если поймали сработку датчика, то определённое время больше его не опрашиваете. Короче, как защита от дребезга на кнопке.


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Пн авг 13, 2012 18:47:27 
Встал на лапы

Зарегистрирован: Вт июл 17, 2012 17:45:46
Сообщений: 85
Откуда: Тольятти
Рейтинг сообщения: 0
Цитата:
то что вы описали похоже на дребезг

Нет, дребезг тут не причем. Это физика работы пьезодатчика: чем сильнее его "ударить" единожды, тем дольше он будет вибрировать после воздействия. Вырабатывая переменное напряжение на выводах своих с убывающей амплитудой.
Цитата:
Короче, как защита от дребезга на кнопке.

Да, я об этом как раз и подумал, только сразу не всосал как это реализовать. Но стоило немного подумать...
Вышел из ситуации вот так:
Код:
if(a==0)                           //если флаг проверки срабатывания не стоит
          {if(PIND.2==1)       //проверяем, если сработал датчик     
            {while(!(UCSRA & (1<<UDRE))); UDR = 'Q';          //шлем символ
            a=1;}                           //выставляем флаг срабатывания
                  }
         else{b++;}          //если флаг стоит - увеличиваем счетчик задержки
         if(b==zad)             //если счетчик равен ..... (у меня 2000 получилось)
          {a=b=0;}            //сбрасываем флаг, обнуляем сетчик


Вот, вроде работает. Правда не красиво как-то это получилось, через ж... Кучу переменных пришлось лепить. Ну да главное, что пашет.
Вроде больше пока подводных камней не предвидится (тьфу, тьфу, тьфу...).
Спасибо всем огромное, что подсказывали и направляли неуча МКшника :)
Очень мне помогли! Спасибо!!!

_________________
Боишься? Сиди дома!


Последний раз редактировалось Аlex Пн авг 13, 2012 22:29:04, всего редактировалось 2 раз(а).
код


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Пн авг 13, 2012 19:10:29 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4612
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
Да, я об этом как раз и подумал
Главное во время подумать и уловить мысль :))

Зачёт ! :wink:


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Пн авг 13, 2012 19:25:12 
Встал на лапы

Зарегистрирован: Вт июл 17, 2012 17:45:46
Сообщений: 85
Откуда: Тольятти
Рейтинг сообщения: 0
Цитата:
Главное во время подумать и уловить мысль

Согласен с вами на все сто!
Только еще очень важно чтоб кто-то указал направление.
Посему еще раз спасибо!

_________________
Боишься? Сиди дома!


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Пн авг 13, 2012 22:14:18 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
А я значит в лес направил?
DerMeister писал(а):
Нет, дребезг тут не причем.

Я же написал похоже

Как насчет аппаратно сделать так:
Вложение:
Датчик пьезо.GIF [10.41 KiB]
Скачиваний: 398

Верхняя схема должна работать как формирователь импульсов только нужно подобрать подходящие сопротивление и конденсатор.

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

Не понимаю смысла. :dont_know:

_________________
В поисках истины человек развивается.


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Вт авг 14, 2012 02:12:10 
Опытный кот

Карма: 12
Рейтинг сообщений: 26
Зарегистрирован: Вс апр 10, 2011 02:24:06
Сообщений: 772
Откуда: г.Северодонецк
Рейтинг сообщения: 0
Когда приходят очень короткие импульсы - лучше всего их запоминать на внешнем регистре, а через определенные промежутки времени этот регистр опрашивать и сбрасывать. Если хочется, можно кодировать состояние регистра не одной буквой на вход, а комбинацией и отправлять вместе с текущим временем, которое внутри контроллера надо считать. Можно отправлять просто номер интервала оцифровки. Тогда на приемном конце USART можно восстановить ситуацию с датчиками с точностью до интервала оцифровки состояния входного регистра.

_________________
C0FFEE=‭12648430‬


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Ср авг 15, 2012 16:53:11 
Встал на лапы

Зарегистрирован: Вт июл 17, 2012 17:45:46
Сообщений: 85
Откуда: Тольятти
Рейтинг сообщения: 0
Цитата:
Я же написал похоже

Я понимаю. Я прсто Вам уточнил, что это не дребезг.
Цитата:
И вообще мне непонятен смысл данного устройства

Дык я и поймаю свою пачку в чем проблема-то? Просто одно срабатывание датчика МК у меня успевал поймать по 12-15 раз. Вот поэтому и пришлось ввести задержку: раз сработал - хорошо. Я же знаю, что за время моей задержки он сработать не может больше. Так что получил, что хотел.
Цитата:
Как насчет аппаратно сделать так

Спасибо Вам за схемки. Я знаю как сделать аппаратно. Мне хотелось именно програмно. Потому что: во-первых: мне это наиболее интересно, как начинающему контроллерщику, во-вторых: в корпусе совсем нет места для кондера и резистора, а их пришлось бы ставить по 20 штук; в-третьих: мне все-таки кажется зачем городить огород из рассыпухи есло можно решить вопрос програмно?
Цитата:
А я значит в лес направил?

Нет конечно! Просто, как я уже писал, хотелось именно програмно это все сделать. И спасибо я сказал ВСЕМ. И Вам в том числе. Ваши советы не в коей мере не хуже или лучше чем советы других. С Вашей помощью я тоже кое-чего нового узнал - в жизни пригодится! :) Спасибо большое!
Цитата:
Когда приходят очень короткие импульсы - лучше всего их запоминать на внешнем регистре

Чесно говоря, я плохо понял о чем это Вы... Я ведь еще только учусь. И это в жизни моей всего лишь третья программа... :oops:

_________________
Боишься? Сиди дома!


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Ср авг 15, 2012 17:40:18 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
внешний регистр это микросхема такая, на ногах у нее ваши датчики, при прошествии определенного времени считываете показания ног последовательно, то есть есть режим параллельного ввода в нее и последовательного вывода из нее.
Таким образом переключив из режима ввода смена состояния ног уже никак не влияет на выходные данные.Этакие стоп кадры.Потом эти стоп кадры можно анализировать.
Если частота стоп кадров будет выше, чем частота изменения сигналов с датчиков, то вы ничего не потеряете.
Хотя в вашем случае это нереально.Такие короткие промежутки.

_________________
В поисках истины человек развивается.


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Ср авг 15, 2012 17:49:38 
Встал на лапы

Зарегистрирован: Вт июл 17, 2012 17:45:46
Сообщений: 85
Откуда: Тольятти
Рейтинг сообщения: 0
Цитата:
внешний регистр это микросхема такая

Ааааа...! Ну конечно! Чего это я так дурканул. Я то думал, что речь об МК. Уже было полез опять с его архитектурой разбираться - чего это там за внешние регистры... :))
Да это был бы выход конечно. Но, как Вы уже сказали частота немалая (хотя мне кажется можно и под такую частоту микруху подобрать если порыться в тырнете) и места нет. Потому и хотел именно програмно...

_________________
Боишься? Сиди дома!


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Ср авг 15, 2012 18:21:30 
Опытный кот

Карма: 12
Рейтинг сообщений: 26
Зарегистрирован: Вс апр 10, 2011 02:24:06
Сообщений: 772
Откуда: г.Северодонецк
Рейтинг сообщения: 0
Имелось в виду другое. Регистр - это набор триггеров. А в зависимости каких и как включенных - будет разный смысл. Я имел в виду набор RS триггеров (или чего нибудь подобного). Входы S на датчики, входы R объединить и на вывод МК для сброса. Выходы хоть через последовательный сдвиговый регистр, хоть напрямую в МК.
По такой структуре ничего не потеряется даже при низкой частоте опроса. Здесь критерий будет частота выборок, а не длина входных импульсов.

_________________
C0FFEE=‭12648430‬


Вернуться наверх
 
 Заголовок сообщения: Re: Как на С "приплюсовать" два символа?
СообщениеДобавлено: Ср авг 15, 2012 18:28:10 
Встал на лапы

Зарегистрирован: Вт июл 17, 2012 17:45:46
Сообщений: 85
Откуда: Тольятти
Рейтинг сообщения: 0
Цитата:
Регистр - это набор триггеров

Согласен с Вами. Тригер как защелку использовать. Просто я сразу не понял о чем речь. У меня все мысли в контроллере. Вот и загнался так сказать :)

_________________
Боишься? Сиди дома!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 58 ]    , , 3

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y