dim3740

Members
  • Публикации

    339
  • Зарегистрирован

  • Посещение

Репутация

-4 Плохой

О dim3740

  • Звание
    Постоялец

Информация

  • Город
    Уфа

Электроника

  • Стаж в электронике
    Не связан с электроникой
  • Сфера радиоэлектроники
    Башкортостан

Посетители профиля

2 546 просмотров профиля
  1. Кнопки и АЦП

    В общем, вроде, я сам давал ответ выше http://forum.cxem.net/index.php?/topic/200029-кнопки-и-ацп/&do=findComment&comment=2949464 на косяк, и забыл о нем.... Куча переделок за день((((( Нулевой уровень тем плох, что нужно иметь запас выборок как в плюс, так и в минус. Нулевой не дает минусов по определению:))) Сейчас сделаю смещение и думаю все будет ок.
  2. Кнопки и АЦП

    Вариантов решения можно предложить много. Многое что вы рекомендуете, типа не оставлять в воздухе я понимаю. Хотя и "воздух" я отфильтровал программно .Вопрос: Чем может "повредить"/"быть неудобным/ненадежным и т.п. вариант, когда нижняя кнопка закорачивает вход АЦП на землю, и мы программно отслеживаем нулевую выборку, или близкую к ней? 2) По плечам: я писал что сделал плечи по "уму"... т.е. номиналы резисторов в прогрессии, т.е, 150 ом, 1,2 ком, 2,4 ком, и т.п. что дает максимальный шаг выборок/диапазонов и повышает надежность. У меня 0-200-400-900... любые гуляния укладываются в эти 900-400 или 400-200... Кроме... нулевого. Речь о нем, хотя там тоже 200. Я могу еще резак повесить и на эту ногу, т.е. сместить уровень, но хотел бы понять почему косячит))) П.С, Схема пока все же моя, но "воздух" убрал резистором на 5 в + программно. "В отжатом все состоянии" на вход идут все 5 в. Переделывать схему нереально.
  3. Кнопки и АЦП

    Всем спасибо. В т.ч. за "матчасть":)) Задача была же (и мною не очерчена изначательно) КАК переподключить кнопки и энкодер в готовом проекте/плате, переконфигурировав функции ацп/цифр портов. Малой кровью, с минимумом доп.деталей. Можно "с извратом", и программными изощрениями. Решено(? тестю) через SMD резисторы (нет ни кондеров, ни дросселей), циклах на совпадение значений. Никаких аппарат. средств подавления дребезга нет (но это заслуга имеющейся RTOS... шутка). И все же одна кнопка, которая при нажатии садит АЦП на землю упорно (1 случай из 10) "ловит" соседнюю кнопку. Хотя шаг - целых 200 выборок. Опорными напряжениями - (не особенно понимаю что это такое), не заморачивался в применении к задаче кнопок. Хотя поэтому и есть гуляния при разных БП(((((
  4. Кнопки и АЦП

    http://arduino.net.ua/Arduino_articles/Arduino_proekty/Podkljuchenie knopok k odnomu analogovomu vhodu/ Тут опровергается это.... см. текст после example 25.2 , нр у меня не работало(( Резисторы поставлены теперь везде. Схема такая, только разные номиналы, 3,3 вольта, и нет R1 . Поэтому код сравнения на нижнюю кнопку такой: "if (voltage>0) && (voltage < скажем... 40) ... может есть шумы при закорачивании кнопки на землю? Если сравнивать не с нулем, то отсекаются "верные" нажатия, что также плохо.
  5. Кнопки и АЦП

    Код мой верный, энкодер запустился с внешними резисторами. Никаких средств подавления дребезга энкодера не применил. А в кнопками, парадокс, геморой продолжается. Хотя время нажатия кнопки куда больше времени шариков энкодера. Дело в питании, имхо. При отладке питание идет одновременно от 3-х источников: БП платы, от ЮСБ для COM порта платы, от программатора ISP.... (Как они на плате там объединяются - мне не ведомо((( да и не интересно это. ..) . А в реальной работе - надо отдельно - или от БП, или от ЮСБ. Вот АЦП и прыгает(((( Плату наращивать не хотелось бы, буду учиться использовать имеющиеся ресурсы чипа. Да, верно, задача изначально была, что не хватает портов...
  6. Кнопки и АЦП

    Подключить энкодер к АЦП не получается. Даже с внешним резисторами. В сети не нашел ни одного такого проекта. Но, может, АЦП как-то запустить в режиме компаратора? Или все это бесперспективно? В цикле: ADCSRA|=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); ADMUX =0x46; // опорный на 5 вольт, и 6 порт _delay_us(500); ADCSRA|=(1<<ADSC); //Начать преобразование while ((ADCSRA & 0x10)==0); if ((ADCL|ADCH<<8)>50) // хватит 8 разрядов. 50 - любое значение больше нуля и шумов { adc6=0b01000000; . } else { adc6=0; } ADMUX =0x47; // опорный на 5 вольт, и 7 порт _delay_us(500); ADCSRA|=(1<<ADSC); while ((ADCSRA & 0x10)==0); if ((ADCL|ADCH<<8)>50) { adc7=0b10000000; } else { adc7=0; } NewState=adc6|adc7; // сворачиваем в один байт if(NewState!=OldState) { switch(OldState)
  7. Кнопки и АЦП

    Продолжил работу... Теперь надо подключить энкодер, но его надо тоже подвести на аналоговые входы. Тут нет даже делителя, и для идентификации сравниваем с нулем. Это не сложно, и я очень не хочу ставить внешний резистор. Примеров внутренней подтяжки в инете не много. Я верно делаю, что 1) иниц порт как "входной"? 2) делаю подтяжку как "цифровой" порт 3) назначаю порт в АЦП, тем самым он переключается в аналоговый вход? Сложность еще в том, что у Меги328 порты 6,7 (именно они мне нужны для энкодера) обозначены как "ADC6", в то время как другие так: "PC5(ADC5)". Даташит ничего не говорит об работе внутренней подтяжки на 6,7 портах. ПС: с внешним сопротивлением энкодер на 6,7 портах работает нормально.
  8. Вопросы От Начинающих По Мк

    @technik-1017 спасибо, правда, программку по ссылке не запустилась... Нашел выход путем добавления буквенного префикса в старший (5) разряд посылаемых данных, который потом можно отфильтровать.
  9. Вопросы От Начинающих По Мк

    По ЮСБ/com порту (плата Ардуино) отправляю значения АЦП на комп. В качестве терминала использую среду Ардуино. Значения читаются в формате типа "0123", что хорошо, но как только втыкаю шнур ЮСБ, Винда "обнаруживает" новое устройство "Микрософт BollPoint трекбол для посл. порта" и мышка (как PC/2 так и ЮСБ) перестает работать(( . Устройство реально появляется в диспетчере устройств в разделе "Мыши". Код выполняется в цикле.... прерывание сделаю потом. Код загружается по ISP. Загрузчик стерт. char B1; ADCSRA|=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); ADMUX =0xC2; _delay_us(500); ADCSRA|=(1<<ADSC); //Начать преобразование до 1024 while ((ADCSRA & 0x10)==0); voltage=ADCW; if (voltage<1000) { v=voltage; // буфер i=voltage/1000;//1 voltage=voltage-i*1000; while ( !( UCSR0A & (1 << UDRE0)) ); UDR0= 0x30+i; i=voltage/100;//2 voltage=voltage-i*100; while ( !( UCSR0A & (1 << UDRE0)) ); UDR0= 0x30+i; i=voltage/10;//3 voltage=voltage-i*10; while ( !( UCSR0A & (1 << UDRE0)) ); UDR0= 0x30+i; i=voltage/1;//4 voltage=voltage-i*1; while ( !( UCSR0A & (1 << UDRE0)) ); UDR0= 0x30+i; while ( !( UCSR0A & (1 << UDRE0)) ); UDR0='\n'; //новая строка }
  10. Кнопки и АЦП

    Спасибо:)) Я недопонимал, что есть опорное напряжение, как эталон, и измеряемое. Оба нужны, если меряется напряжение от внешнего источника. Для режима "кнопок", когда меряем по сути "сопротивления", напряжение на входе от внутреннего резистора, думал, и есть "опорное". На другом форуме подсказали... Ну, нет опыта с АЦП пока(((
  11. Кнопки и АЦП

    да нет... я почитал, но в основном применяют внешние опорные источники. Если кто применяет внутренние подтяжки, как у меня, то не поясняют как это может сочетаться с режимом "опорных 2,54 вольта". Просто пишут, что этот режим "не дает точность". Ну так, его бы вообще и не делал разработчик тогда:))) А мне как раз нужно найти компромисс между точностью и усложнением схемы.
  12. Кнопки и АЦП

    Для сабжа точность не столь важна, т.к. есть программный диапазон значений АЦП. Но, есть разброс резисторов, температура, напруга, кол-во кнопок (нужно 5-7) и т.п. Короче, все таки надо немного повысить точность, не усложняя схему дроселями и т.п. У меня верхнее плечо УЖЕ сформировано поддтягивающим внутренним резистором. Тогда что такое режим от "внутреннего 2,54 вольта"? Эли подтяжку не делать? Потом у меня железо Ардуино Нано - и я не вижу там входа AVCC вообще. Есть AREF. Он поможет? 16 мгц. Делитель на 128, дает 125 Кгц.
  13. Вопросы От Начинающих По Мк

    Решил (подсказали)! Да опять известный был косяк - частоту опроса контроллера в АВР Студио нужно ставить 1/4 от.... Т.е. раз проц был чистый , то в нем 1 Мгц. А я по привычке от частоты внешнего кварца 8 мгц делил на 4((((
  14. Вопросы От Начинающих По Мк

    Если используется внешний программатор, то питание для некоторых плат (скажем так, которые я сам делаю) может браться от него. Пытаю весь день платы((( Эталонная - все работает, но прошита ранее. Новая - чистый чип - не "видится". Трассировка одинаковая. Беру осцил, пытаюсь сравнить диаграммы. Не получается, потому что в эталонной плате порты ISP прошитым кодом инициализированы в 1. Поэтому сложно сравнить....(((( SCK при операции "чтение сигнатуры" в эталонной плате не наблюдаю вообще! Но проц читается.
  15. Вопросы От Начинающих По Мк

    Прошу помощи - как выявить почему МК не видится программатором... Опять бьюсь сутки напролет(((( Что делаю: а) Чипы на панельке, проверяю "доктором", там все ОК, если говорить о фьюзах. б) Программатор видит аналогичный чип на другой плате. в) Чипы Атмага16А, 3 шт. г) Протравил новую плату: только панелька и 4 проводка, питание нет, кварца внешнего пока не ставлю. Все порты в воздухе. Не видит.