Как на С "приплюсовать" два символа?

Обсуждаем контроллеры компании Atmel.
Ответить
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

Дык ё-моё... Это неправильная обработка входных сигналов...
Реклама
Встал на лапы
Сообщения: 85
Зарегистрирован: Вт июл 17, 2012 17:45:46
Откуда: Тольятти

Сообщение DerMeister »

Это точно.
А как же их правильно тогда обработать? Чтоб за раз только один раз проскакивал. Намекните пожалуйста, если не секрет. Делать задержку delay^ем - не вариант по моему, while - тоже не помогает. А как же еще тогда?
Боишься? Сиди дома!
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Сообщение zero648 »

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

Сообщение DerMeister »

В цикле по "ИЛИ" складывайте
Я так не умею. Или не понимаю о чем Вы. Можно подробнее немного? Или где прочитать можно.
Боишься? Сиди дома!
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

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

Вообще можно попробовать одинарным считыванием читать, посылать что получится и посмотреть какие варианты бывают.
Если датчики не подключаются в состояние выкл то это или в общем то бесполезно.
В поисках истины человек развивается.
Контактная информация:
Реклама
Встал на лапы
Сообщения: 85
Зарегистрирован: Вт июл 17, 2012 17:45:46
Откуда: Тольятти

Сообщение DerMeister »

Нет-нет. Я сделал пока как 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 не получается, проскакивает, сволочь.
Боишься? Сиди дома!
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Стоп, если у вас состояние меняется раз в 10мс не думали сколько раз за секунду может меняться?
и тем более получается что цикл может пройти несколько раз пока разрядится конденсатор.Пробуйте уменьшить емкость конденсатора.

еще как вариант сохранять состояние регистров и только если есть изменения, то отправлять.
так как пьезодатчик не просто подает 1 в порт, а колеблется(т.е. 1-0-1-0-1-0) какое-то время,
то что вы описали похоже на дребезг.Как раз таки конденсатор нужного номинала помогает справиться с дребезжащими контактами.
есть вариант так же что ваш транзистор, который вы поставили для усиления поднимает уровень напряжения недостаточно и поэтому малейшее колебание наводок меняет состояние порта.Так же возможно что для увеличения помехоустойчивости потребуется подтягивающие резисторы на каждую ногу. Хотя бы внутренние.
В поисках истины человек развивается.
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

Опросили ПИН, если поймали сработку датчика, то определённое время больше его не опрашиваете. Короче, как защита от дребезга на кнопке.
Встал на лапы
Сообщения: 85
Зарегистрирован: Вт июл 17, 2012 17:45:46
Откуда: Тольятти

Сообщение DerMeister »

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

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

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 раза.
Причина: код
Боишься? Сиди дома!
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

Да, я об этом как раз и подумал
Главное во время подумать и уловить мысль :))

Зачёт ! :wink:
Встал на лапы
Сообщения: 85
Зарегистрирован: Вт июл 17, 2012 17:45:46
Откуда: Тольятти

Сообщение DerMeister »

Главное во время подумать и уловить мысль
Согласен с вами на все сто!
Только еще очень важно чтоб кто-то указал направление.
Посему еще раз спасибо!
Боишься? Сиди дома!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

А я значит в лес направил?
DerMeister писал(а):Нет, дребезг тут не причем.
Я же написал похоже

Как насчет аппаратно сделать так:
Датчик пьезо.GIF
(10.41 КБ) 402 скачивания
Верхняя схема должна работать как формирователь импульсов только нужно подобрать подходящие сопротивление и конденсатор.

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

Не понимаю смысла. :dont_know:
В поисках истины человек развивается.
Контактная информация:
Опытный кот
Сообщения: 772
Зарегистрирован: Вс апр 10, 2011 02:24:06
Откуда: г.Северодонецк

Сообщение eufs »

Когда приходят очень короткие импульсы - лучше всего их запоминать на внешнем регистре, а через определенные промежутки времени этот регистр опрашивать и сбрасывать. Если хочется, можно кодировать состояние регистра не одной буквой на вход, а комбинацией и отправлять вместе с текущим временем, которое внутри контроллера надо считать. Можно отправлять просто номер интервала оцифровки. Тогда на приемном конце USART можно восстановить ситуацию с датчиками с точностью до интервала оцифровки состояния входного регистра.
C0FFEE=‭12648430‬
Встал на лапы
Сообщения: 85
Зарегистрирован: Вт июл 17, 2012 17:45:46
Откуда: Тольятти

Сообщение DerMeister »

Я же написал похоже
Я понимаю. Я прсто Вам уточнил, что это не дребезг.
И вообще мне непонятен смысл данного устройства
Дык я и поймаю свою пачку в чем проблема-то? Просто одно срабатывание датчика МК у меня успевал поймать по 12-15 раз. Вот поэтому и пришлось ввести задержку: раз сработал - хорошо. Я же знаю, что за время моей задержки он сработать не может больше. Так что получил, что хотел.
Как насчет аппаратно сделать так
Спасибо Вам за схемки. Я знаю как сделать аппаратно. Мне хотелось именно програмно. Потому что: во-первых: мне это наиболее интересно, как начинающему контроллерщику, во-вторых: в корпусе совсем нет места для кондера и резистора, а их пришлось бы ставить по 20 штук; в-третьих: мне все-таки кажется зачем городить огород из рассыпухи есло можно решить вопрос програмно?
А я значит в лес направил?
Нет конечно! Просто, как я уже писал, хотелось именно програмно это все сделать. И спасибо я сказал ВСЕМ. И Вам в том числе. Ваши советы не в коей мере не хуже или лучше чем советы других. С Вашей помощью я тоже кое-чего нового узнал - в жизни пригодится! :) Спасибо большое!
Когда приходят очень короткие импульсы - лучше всего их запоминать на внешнем регистре
Чесно говоря, я плохо понял о чем это Вы... Я ведь еще только учусь. И это в жизни моей всего лишь третья программа... :oops:
Боишься? Сиди дома!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

внешний регистр это микросхема такая, на ногах у нее ваши датчики, при прошествии определенного времени считываете показания ног последовательно, то есть есть режим параллельного ввода в нее и последовательного вывода из нее.
Таким образом переключив из режима ввода смена состояния ног уже никак не влияет на выходные данные.Этакие стоп кадры.Потом эти стоп кадры можно анализировать.
Если частота стоп кадров будет выше, чем частота изменения сигналов с датчиков, то вы ничего не потеряете.
Хотя в вашем случае это нереально.Такие короткие промежутки.
В поисках истины человек развивается.
Контактная информация:
Встал на лапы
Сообщения: 85
Зарегистрирован: Вт июл 17, 2012 17:45:46
Откуда: Тольятти

Сообщение DerMeister »

внешний регистр это микросхема такая
Ааааа...! Ну конечно! Чего это я так дурканул. Я то думал, что речь об МК. Уже было полез опять с его архитектурой разбираться - чего это там за внешние регистры... :))
Да это был бы выход конечно. Но, как Вы уже сказали частота немалая (хотя мне кажется можно и под такую частоту микруху подобрать если порыться в тырнете) и места нет. Потому и хотел именно програмно...
Боишься? Сиди дома!
Опытный кот
Сообщения: 772
Зарегистрирован: Вс апр 10, 2011 02:24:06
Откуда: г.Северодонецк

Сообщение eufs »

Имелось в виду другое. Регистр - это набор триггеров. А в зависимости каких и как включенных - будет разный смысл. Я имел в виду набор RS триггеров (или чего нибудь подобного). Входы S на датчики, входы R объединить и на вывод МК для сброса. Выходы хоть через последовательный сдвиговый регистр, хоть напрямую в МК.
По такой структуре ничего не потеряется даже при низкой частоте опроса. Здесь критерий будет частота выборок, а не длина входных импульсов.
C0FFEE=‭12648430‬
Встал на лапы
Сообщения: 85
Зарегистрирован: Вт июл 17, 2012 17:45:46
Откуда: Тольятти

Сообщение DerMeister »

Регистр - это набор триггеров
Согласен с Вами. Тригер как защелку использовать. Просто я сразу не понял о чем речь. У меня все мысли в контроллере. Вот и загнался так сказать :)
Боишься? Сиди дома!
Ответить

Вернуться в «AVR»