Съдържание:

Селектор за DIP настройка с помощта на 1 щифт: 4 стъпки
Селектор за DIP настройка с помощта на 1 щифт: 4 стъпки

Видео: Селектор за DIP настройка с помощта на 1 щифт: 4 стъпки

Видео: Селектор за DIP настройка с помощта на 1 щифт: 4 стъпки
Видео: Автоматический календарь-планировщик смен в Excel 2024, Ноември
Anonim
Селектор за DIP настройка с 1 пин
Селектор за DIP настройка с 1 пин

Преди време работих по проект за „музикална кутия“, който трябваше да избира между цели 10 различни фрагмента от мелодия. Естествен избор за избор на конкретна мелодия беше 4 -пинов потапящ превключвател, тъй като 4 превключвателя осигуряват 24= 16 различни настройки. Въпреки това, прилагането на груба сила за този подход изисква 4 пина на устройството, по един за всеки превключвател. Тъй като планирах да използвам ATtiny85 за разработка, загубата на 4 пина беше малко прекалено. За щастие попаднах на статия, която описва гениален метод за използване на 1 аналогов щифт за обработка на множество входове за превключване.

Техниката с множество превключватели; 1 вход използва схема на делител на напрежение, за да осигури уникална цяло числова стойност за всяка от 16-те възможни комбинации за настройка на превключвателя. Този набор от 16 целочислени идентификатора след това се използва в приложната програма за свързване на действие с настройка.

Тази инструкция използва метода с няколко превключвателя, за да приложи избор на мелодия за приложението за музикална кутия. След това избраната мелодия се възпроизвежда чрез пиезо зумер, използвайки функцията за тон на Arduino.

Стъпка 1: Необходим хардуер

Необходим хардуер
Необходим хардуер

Използването на UNO като платформа за внедряване минимизира броя на необходимите хардуерни компоненти. Прилагането на метода за вход с множество превключватели изисква само 4-пинов потапящ ключ, 5-те резистора, използвани за делителя на напрежението, и свързващ проводник за връзки. Към конфигурацията се добавя пиезо зумер за внедряване на селектора за настройка на музикалната кутия. По избор, в зависимост от вида на използвания dip превключвател, е полезно да използвате 2x4 8 -пинов контакт за свързване на dip превключвателя към макетната платка, тъй като стандартните щифтове за dip превключватели изглежда са предназначени за запояване към перфорирана дъска, която не се включва директно в дъската. Гнездото стабилизира връзките на потапящия превключвател и предпазва превключвателя от лесно повдигане при настройка на превключвателите.

Име Възможен източник Как се използва
4-пинов потапящ превключвател Избор на мелодия
2x4 пинов контакт (по избор) Amazon Стълбовете на повечето превключватели за потапяне не държат превключвателя много добре в макет. Гнездото помага да се направи връзката по -стабилна. Алтернатива е да се намери потапящ превключвател, който наистина е направен за използване на макет с обикновени IC пинове.

резистори:

  • 10K x2
  • 20K
  • 40 хиляди
  • 80 хиляди
Инсталирайте разделител на напрежение
пасивен пиезо зумер Amazon Възпроизвеждане на мелодия, управлявана от приложението чрез функцията за тон на Arduino

Стъпка 2: Метод с няколко превключвателя Обяснение

Метод на няколко превключвателя Обяснение
Метод на няколко превключвателя Обяснение

В този раздел се обсъждат основните концепции за метода с множество превключватели и се разработват уравненията, необходими за самостоятелно изчисляване на уникални идентификатори за всяка от 16-те възможни конфигурации за настройка на dip switch. След това тези идентификатори могат да се използват в приложна програма за свързване на конфигурация на превключвател с действие. Например, може да искате настройката - включване 1, изключване 2, изключване 3, изключване 4 (1, 0, 0, 0) - за възпроизвеждане на Amazing Grace и (0, 1, 0, 0) за възпроизвеждане Лъвът спи тази нощ. За краткост и сбитост идентификаторите на конфигурацията се наричат сравнители в останалата част от документа.

Образ
Образ

Основната концепция за метода с множество превключватели е веригата на делителя на напрежение, която се състои от 2 последователни резистора, свързани към входно напрежение. Изходният проводник на напрежение е свързан между резисторите, R1 и Р2, както е показано по -горе. Изходното напрежение на делителя се изчислява като входното напрежение, умножено по съотношението на резистора R2 към сумата на R1 и Р2 (уравнение 1). Това съотношение винаги е по -малко от 1, така че изходното напрежение винаги е по -малко от входното напрежение.

Както е посочено в схемата за проектиране по-горе, мулти-превключвателят е конфигуриран като делител на напрежение с R2 фиксиран и R1 равно на композитното/еквивалентно съпротивление за 4 -те резистора на дип превключвател. Стойността на R1 зависи от това кои дип превключватели са включени и следователно допринасят за композитното съпротивление. Тъй като резисторите на дип превключвателя са успоредни, уравнението за изчисляване на еквивалентното съпротивление е посочено по отношение на реципрочните стойности на съставните резистори. За нашата конфигурация и в случай, че всички ключове са включени, уравнението става

1/R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000

давайки R1 = 5333,33 волта. За да се отчете фактът, че повечето настройки имат изключен поне един от превключвателите, състоянието на превключвателя се използва като множител:

1/R1 = s1*1/80000 + s2*1/40000 + s3*1/20000 + s4*1/10000 (2)

където множителят на състоянието, si, е равно на 1, ако превключвателят е включен и равно на 0, ако превключвателят е изключен. R1 сега може да се използва за изчисляване на съотношението на съпротивлението, необходимо в уравнение 1. Като отново се използва случаят, когато всички превключватели са включени

ОТНОШЕНИЕ = R2/(R1+R2) = 10000/(5333.33+10000) =.6522

Последната стъпка в изчисляването на прогнозираната сравнителна стойност е умножаването на RATIO по 1023 с цел емулиране на ефекта от функцията analogRead. Идентификаторът за случая, когато всички превключватели са включени, е тогава

компаратор15 = 1023*.6522 = 667

Всички уравнения вече са налице за изчисляване на идентификатори за 16 -те възможни настройки за превключване. Да обобщим:

  1. R1 се изчислява с помощта на уравнение 2
  2. R1 и Р2 се използват за изчисляване на свързаното съпротивление RATIO
  3. коефициентът се умножава по 1023, за да се получи сравнителната стойност
  4. по избор прогнозираното изходно напрежение може да се изчисли и като RATIO*Vin

Наборът от сравнителни устройства зависи само от стойностите на резистора, използвани за делителя на напрежението и са уникален подпис за конфигурацията. Тъй като изходното напрежение на разделителя ще се колебае от цикъл до цикъл (и четене за четене), уникално в този контекст означава, че макар два набора от идентификатори да не са абсолютно еднакви, те са достатъчно близки, че разликите в сравнителния компонент попадат в рамките на малка предварителна стойност. определен интервал. Параметърът за размер на интервала трябва да бъде избран достатъчно голям, за да отчете очакваните колебания, но достатъчно малък, че различните настройки на превключвателя да не се припокриват. Обикновено 7 работи добре за интервала полуширина.

Набор от сравнители за определена конфигурация може да бъде получен по няколко метода - стартирайте демонстрационната програма и запишете стойностите за всяка настройка; използвайте електронната таблица в следващия раздел, за да изчислите; копирайте съществуващ набор. Както бе отбелязано по -горе, всички комплекти най -вероятно ще бъдат малко по -различни, но трябва да работят. Предлагам да се използва авторският набор от идентификатори на метода за настройката на няколко превключвателя и електронната таблица от следващия раздел, ако някой от резисторите е променен значително или са добавени повече резистори.

Следващата демонстрационна програма илюстрира използването на компараторите за идентифициране на текущата настройка на дип превключвател. Във всеки програмен цикъл се извършва analogRead за получаване на идентификатор за текущата конфигурация. След това този идентификатор се сравнява в сравнителния списък, докато се намери съвпадение или списъкът се изчерпи. Ако се намери съвпадение, се издава изходящо съобщение за проверка; ако не се намери, се издава предупреждение. Закъснение от 3 секунди се вмъква в цикъла, така че прозорецът на серийния изход да не бъде затрупан с съобщения и да даде известно време за нулиране на конфигурацията на dip switch.

//-------------------------------------------------------------------------------------

// Демонстрационна програма за четене на изхода на делителя на напрежение и го използва за идентифициране на // текущата конфигурация на дип превключвател, като търси изходната стойност нагоре в масив от // сравнителни стойности за всяка възможна настройка. Стойностите в масива за търсене могат // да бъдат получени или от предишно изпълнение за конфигурацията, или чрез изчисление // въз основа на основните уравнения. // ------------------------------------------------ -------------------------------------- int comparator [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Дефиниране на променливи за обработка int dipPin = A0; // аналогов щифт за вход на делител на напрежение int dipIn = 0; // задържа изходното напрежение на разделителя, преведено от analogRead int count = 0; // брояч на цикли int epsilon = 7; // интервал за сравнение полуширина bool dipFound = false; // вярно, ако изходният делител на текущото напрежение е намерен в таблицата за търсене void setup () {pinMode (dipPin, INPUT); // конфигурираме щифт на разделителя на напрежение като INPUT Serial.begin (9600); // разрешаване на серийна комуникация} void loop () {delay (3000); // не позволявам на превъртането твърде бързо // Инициализиране на параметрите за търсене count = 0; dipFound = невярно; // Прочетете и документирайте текущото изходно напрежение dipIn = analogRead (dipPin); Serial.print ("изход за разделител"); Serial.print (dipIn); // Търсене в сравнителния списък за текуща стойност while ((count <16) && (! DipFound)) {if (abs (dipIn - comparator [count]) <= epsilon) {// го намери dipFound = true; Serial.print ("намерено при влизане"); Serial.print (брой); Serial.println ("стойност" + низ (сравнител [брой])); прекъсване; } брой ++; } if (! dipFound) {// стойността не е в таблицата; не трябва да се случва Serial.println ("OOPS! Не е намерено; по -добре се обадете на Ghost Busters"); }}

Стъпка 3: Сравнителна електронна таблица

Образ
Образ

Изчисленията за 16 -те сравнителни стойности са дадени в електронната таблица, показана по -горе. Придружаващият Excel файл е достъпен за изтегляне в долната част на този раздел.

Колоните A-D в електронна таблица записват стойностите на резистора на dip switch и 16-те възможни настройки на превключвателя. Моля, обърнете внимание, че хардуерният DIP превключвател, показан на диаграмата за проектиране на фритзинг, всъщност е номериран отляво надясно, вместо номерирането отдясно наляво, показано в електронната таблица. Намерих това донякъде объркващо, но алтернативата не поставя конфигурацията "1" (0, 0, 0, 1) на първо място в списъка. Колона Е използва формула 2 от предишния раздел за изчисляване на еквивалентното съпротивление на делителя на напрежението R1 за настройката. Колона F използва този резултат за изчисляване на свързаното съпротивление RATIO и накрая колона G умножава RATIO по максималната стойност на analogRead (1023), за да получи прогнозираната сравнителна стойност. Последните 2 колони съдържат действителните стойности от изпълнението на демонстрационната програма заедно с разликите между прогнозираните и действителните стойности.

Предишният раздел спомена три метода за получаване на набор от сравнителни стойности, включително разширяване на тази електронна таблица, ако стойностите на резистора са значително променени или са добавени повече превключватели. Изглежда, че малките разлики в стойностите на резистора не влияят значително върху крайните резултати (което е добре, тъй като спецификациите на резистора дават толеранс, да речем 5%, а резисторът рядко е равен на действителната заявена стойност).

Стъпка 4: Пуснете мелодия

Пуснете мелодия
Пуснете мелодия

За да се илюстрира как техниката за многократно превключване може да се използва в приложение, демонстрационната програма за сравнение от раздела „Обяснение на метода“е модифицирана, за да приложи обработката за избор на мелодия за програмата за музикална кутия. Актуализираната конфигурация на приложението е показана по -горе. Единственото допълнение към хардуера е пасивен пиезо зумер за възпроизвеждане на избраната мелодия. Основната промяна в софтуера е добавяне на рутина за възпроизвеждане на мелодия, веднъж идентифицирана, с помощта на зумера и рутинния тон на Arduino.

Наличните фрагменти от мелодии се съдържат в заглавен файл, Tunes.h, заедно с дефиницията на необходимите поддържащи структури. Всяка мелодия е дефинирана като масив от нотни структури, съдържащи нотната честота и продължителност. Бележките честоти се съдържат в отделен заглавен файл, Pitches.h. Програмата и заглавните файлове са достъпни за изтегляне в края на този раздел. И трите файла трябва да бъдат поставени в една и съща директория.

Изборът и идентификацията протичат, както следва:

  1. „Потребителят“задава превключвателите за потапяне в конфигурацията, свързана с желаната мелодия
  2. всеки цикъл на програмния цикъл идентификаторът за текущата настройка на дип превключвател се получава чрез analogRead
  3. Идентификаторът на конфигурацията от стъпка 2 се сравнява с всеки от сравнителите в наличния списък с мелодии
  4. Ако се намери съвпадение, се извиква програмата playTune с информацията, необходима за достъп до списъка с мелодии

    Използвайки функцията за тон на Arduino, всяка нота се изпълнява чрез зумера

  5. Ако не се намери съвпадение, не се предприемат действия
  6. повторете 1-5

Настройките на DIP превключвателя за наличните мелодии са показани в таблицата по -долу, където 1 означава, че превключвателят е включен, 0 изключен. Припомнете си, че начинът, по който е ориентиран превключвателят, поставя превключвател 1 в най-лявата позиция (тази, свързана с 80K резистора).

ИМЕ Превключвател 1 Превключвател 2 Превключвател 3 Превключвател 4
Дани Бой 1 0 0 0
Малка мечка 0 1 0 0
Лъвът спи тази нощ 1 1 0 0
Никой не знае бедата 0 0 1 0
Невероятна благодат 0 0 0 1
Празно място 1 0 0 1
MockingBird Hill 1 0 1 1

Качеството на звука от пиезо зумер със сигурност не е страхотно, но поне е разпознаваемо. Всъщност, ако тоновете се измерват, те са много близки до точната честота на нотите. Една интересна техника, използвана в програмата, е да се съхраняват данните за настройката в раздела за флаш памет/програма, вместо в секцията за памет по подразбиране на данни, като се използва директивата PROGMEM. Разделът с данни съдържа променливите за обработка на програмата и е много по -малък, около 512 байта за някои от микроконтролерите ATtiny.

Препоръчано: