Съдържание:

ATtiny84/85 SPI интерфейс ПИН повторно използване: 6 стъпки
ATtiny84/85 SPI интерфейс ПИН повторно използване: 6 стъпки

Видео: ATtiny84/85 SPI интерфейс ПИН повторно използване: 6 стъпки

Видео: ATtiny84/85 SPI интерфейс ПИН повторно използване: 6 стъпки
Видео: Самый удобный RGB контроллер на ATtiny! 2024, Юли
Anonim
ATtiny84/85 SPI интерфейс ПИН повторно използване
ATtiny84/85 SPI интерфейс ПИН повторно използване

Тази инструкция е продължение на инструкцията "ATtiny84/85 In-circuit Debugging with Serial Output" и разширява тази хардуерна и софтуерна конфигурация за решаване на проблема с повторното използване на пиновете за изтегляне на програмиране от приложната програма. Като цяло, между тази и част 1, която може да се инструктира, се обсъждат/демонстрират следните теми:

Тема ATtiny84 ATtiny85
Серийна комуникация с помощта на клас SoftwareSerial х х
Споделяне на щифтове на устройство между приложението и изтеглянето х х
Pin Change прекъсване х
Външно прекъсване х
Сън в режим POWER_DOWN; събуждане при прекъсване х
Заобиколяне за "многократно дефинирана" грешка във векторната връзка на прекъсване, свързана със SoftwareSerial х
Вътрешно модифициране, изтегляне, отстраняване на грешки, … цикъл на разработка за устройства ATtiny х х

Добавянето на хардуерен I/O компонент към един от щифтовете, посветени на интерфейса за програмиране на SPI, понякога е ОК, понякога не. Например, добавянето на светодиод към MISO просто кара светодиода да трепти по време на изтегляне и тогава той е достъпен за приложението. Въпреки това, добавянето на пиезо зумер към MISO ще доведе до ужасен скърцащ звук, последван от неуспешно изтегляне.

Тази инструкция обяснява как да използвате 4x2: 1 мултиплексор за "възстановяване" на използването на пиновете, присвоени на SPI интерфейса MISO, MOSI и SCK сигнали, като ги защитава по време на изтегляне. Повторното използване на щифта RESET изисква смяна на предпазителя и не се обхваща от този подход. Двойното присвояване на пиновете се осъществява чрез използване на мултиплексора за превключване между входните данни за приложение и програмиране в зависимост от това дали изтеглянето е в ход. Кодът и схемите са включени както за ATtiny84, така и за ATtiny85. Конфигурацията ATiny84 се разглежда първо, тъй като има два I/O порта и може да се използва за илюстриране на някои допълнителни проблеми/решения. След миниатюрната дискусия, същите сценарии се обсъждат и за ATtiny85.

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

Образ
Образ

Повечето от необходимия хардуер бяха изброени в част 1, така че само новият хардуер е изброен по -долу.

Име Възможен източник Как се използва
4x2: 1 Мултиплексор Mouser Съдържа четири превключвателя с 2 входа; 1 изход, които са механизмът, чрез който се споделят сигналите на SPI интерфейса и входовете/изходите на приложението.
SPST превключвател Всеки тип превключвател (моментен или блокиран) ще работи. Превключвателят се използва за илюстриране на споделянето на щифтове за вход на приложение.
10K резистор Издърпващ се резистор за превключвателя SPST, за да се избегне плаващ вход
Образ
Образ
Образ
Образ

Мултиплексорът е ключът към изолиране на използването на изтегляне на щифтове от използването на приложения. Цялостната функционалност на мултиплексора 4x2: 1 е сравнително ясна и се състои от 2 управляващи сигнала и 4 идентично функциониращи превключвателя. Поведението на всеки пин на мултиплексора е обсъдено по -долу:

ПИН Име Функция
15 G Както е посочено в таблицата на истината, мултиплексорът работи само когато щифтът за активиране на G е нисък. Тъй като никога не искаме да деактивираме напълно мултиплексора, щифт 15 ще бъде свързан директно към земята.
2-4; 5-7; 9-11;12-14 A (вход), B (вход), Y (изход) Има четири 2-входни; 1-изходни превключватели с всяка група от 3 пина, номерирани последователно в реда A (вход), B (вход), Y (изход) напр. за превключвател 1; щифт 2 = 1A; щифт 3 = 1B; щифт 4 = 1Y.
1 Изберете Когато Select е ниско, входът на превключвател A е свързан към свързания изходен щифт на превключвателя, Y. Когато изборът е висок, вместо това входът на превключвателя B е свързан към изхода. Превключвателите се управляват едновременно от сигнала за избор и функционират идентично.
8 GND мултиплексорна земя IC
16 VCC захранване на IC мултиплексор

Стъпка 2: Преглед на тестовите случаи

Образ
Образ
Образ
Образ

Двата сценария за повторно използване на щифтове се основават на това дали пинът е вход или изход на приложение. Процедурата за обработка на всеки вход винаги е една и съща; също процедурата за изходи на приложения е идентична независимо от хардуерния компонент. Въпреки това обяснението е по -лесно и се надяваме по -ясно, ако бъдат дадени конкретни примери. Минималистичните оформления за двата случая са показани по -горе. За подробни настройки по -късно връзките стават малко като гнездо на катерици, така че може да е полезно да се върнете към тези по -чисти диаграми.

RESET е перфектният избор за мултиплексния сигнал за избор, тъй като той е нисък по време на изтегляне, но се връща високо, когато изтеглянето завърши. Имайте предвид, че всеки от мултиплексните превключватели може да се използва и в двата случая, тъй като всички превключватели се държат еднакво. Също така, нито един от примерите не е „реалистичен“; вместо това те бяха избрани като най -ясния начин за илюстриране на изолационните техники

  1. Изходен случай: LED изходът от ATtiny84 пин 4 (SCK) е изолиран с помощта на превключвател 2 на мултиплекс

    • свържете мултиплексния щифт 2A към земята
    • свържете мултиплексорен пин 2B към ATtiny85 пин 4
    • свържете изход 2Y към LED анода

      • Очаквани резултати:

        • Светодиодът е изключен по време на изтегляне, тъй като е свързан към 2A, заземен
        • LED прикрепен към изходния извод 4 на приложението след изтегляне чрез 2B и започва да мига
  2. Входен случай: Входът на SPST превключвателя към ATtiny84 пин 6 (MOSI) е изолиран с помощта на превключвател на мултиплекс 3

    • MOSI проводник от заглавката на AVR Programmer се премества на 3A
    • превключвател вход 3В е свързан към изхода SPST
    • изход 3Y е свързан към ATtiny84 пин 6

      • 3A, MOSI, е свързан към пин 6 по време на изтегляне
      • 3B, SPST изход, е свързан към пин 6 след изтегляне

Случай 1 е успешен, ако светодиодът не мига по време на изтегляне на програма и след това мига на всеки две секунди след изтеглянето, както се очаква под контрола на програмата. Без изолация светодиодът ще мига по време на изтегляне, тъй като е свързан директно към сигнала SCK, който променя състоянието си на часовник за приемане/предаване на данни.

Случай 2 е успешен, ако MOSI сигналът се препрати към ATtiny84 по време на изтегляне, т.е. изтеглянето не се провали и светодиодът реагира на включване/изключване на SPST след изтегляне. Случай 2 предотвратява една малко вероятна грешка при изтегляне. Без изолация, превключвателят SPST ще доведе до повреда, ако 1) се използва заключен превключвател и 2) превключвателят е оставен във включено положение по време на изтегляне. Когато е изолиран от мултиплексора, превключвателят при никакви обстоятелства не може да причини неуспешно изтегляне. Малко разтягане, но успокояващо за нас, старите хора.

Едно от последствията от използването на мултиплексора е, че хардуерният компонент вече не може да бъде свързан директно към I/O пина на микроконтролера. Това е донякъде неудобно, но позволява на компонента да остане на основната платка по време на теста заедно с другия хардуер на приложението и може да бъде преместен обратно на законното му място, когато тестът приключи.

Стъпка 3: ATtiny84 Случай 1 - Изолирайте изхода на приложението

Образ
Образ

Тази стъпка описва настройката за споделяне на изходен извод на приложение със сигнал за изтегляне. Използваният пример е светодиодът, прикрепен към щифт 4 (SCK). Използването на съществуващия светодиод като пример позволява акцент върху добавянето на мултиплексора към хардуерната и софтуерната среда на част 1.

  • Хардуер

    • Добавете мултиплексора към основната платка на относителното място, показано на диаграмата за фризиране по -горе. Мултиплексорът е позициониран към центъра, за да осигури място за превключвателя SPST, необходим в случай 2.
    • Разширете сигнала RESET към мултиплексора, като добавите оловен проводник (предполагам жълт) от ATtiny84 пин 11 към пин 1 на мултиплексор.
    • Останалата хардуерна настройка е дадена в Стъпка 2

      • свържете щифт 2А на мултиплексор директно към земята
      • свържете щифт 2B към ATtiny84 пин 4
      • свържете изход 2Y към LED анода

        • Очаквани резултати:

          • по време на изтегляне 2Y е свързан към земята (2A), така че светодиодът остава изключен
          • След изтеглянето 2Y е свързан към ATtiny84 пин 4 - LED управление на приложението
  • Софтуер

    • Кодът от част 1 се използва повторно; достъпни от част 1 с инструкции, а не дублирани тук
    • Заредете и компилирайте програмата част 1 в Arduino IDE
    • Включете миниатюрния AVR програмист към USB USB порт на компютър
    • Включете адаптера USB към сериен кабел към втори USB порт

      • Създава се COM порт и автоматично се предоставя в списъка с IDE портове
      • Стартирайте COM прозореца
    • Изтеглете компилирания код в ATtiny84

Резултатите от приложната програма са същите като при част 1, тъй като единствената промяна беше преместването на светодиода на "защитено" място: LED мига на интервали от 2 секунди; серийният изход е същият. Единствената разлика, която трябва да възникне, е, че светодиодът вече не мига по време на изтегляне, тъй като през това време той е свързан към земята чрез щифт 2А на мултиплексор.

Образ
Образ

Стъпка 4: ATtiny84 Случай 2 - Изолирайте входа на приложението

Образ
Образ

Тази стъпка се основава на настройката за предишния случай на изолация на изхода. Хардуерните промени се състоят в прикачване на SPST превключвател към ATtiny84 пин 6 (MOSI) чрез мултиплексора. Така че хардуерните промени са минимални, но има няколко софтуерни промени, които позволяват на превключвателя SPST да контролира светодиода, като използва прекъсване при смяна на щифт. Актуализираният код е включен в долната част на този раздел. Кодът трябва да бъде копиран в Arduino IDE; предлагайте да го запишете под името Multiplexer_Input. (Извинявам се за дължината на този раздел, но това е сърцето на целта на инструктора и мисля, че се чете по -добре като монолит, а не като вмъкване на изкуствени паузи.)

Актуализиране Местоположение Предназначение
включват "хакнат" клас SoftwareSerial включва раздел Сега светодиодът се управлява от превключвателя SPST чрез прекъсване при смяна на щифт. Класът SoftwareSerial трябва да бъде променен, тъй като в противен случай той разпределя ВСИЧКИ вектори на прекъсване при смяна на пина. Това причинява грешка в връзката "множествена дефиниция" за вектора (порт 0), присвоен на превключвателя SPST. Хакнатата версия на SoftwareSerial трябва да бъде поставена в същата директория като програмата, така че да засяга само това приложение.
Определение на входния извод SPST включва/раздел за дефиниция присвояване на SPST вход към щифт на устройство. Пинът е специфичен за устройството, така че се добавя към секцията (ите) #ifdef ATtiny8x.
SPST входен пинов режим функция за настройка SPST щифтът е конфигуриран като INPUT
Конфигурирайте SPST прекъсване на щифта функция за настройка Векторът на прекъсването се присвоява на входния щифт на SPST, така че промяната на състоянието на превключвателя причинява прекъсване. Регистрите за конфигуриране и прекъсването са специфични за устройството. За да бъде кодът възможно най -ясен, разликите се обработват в рамките на #if дефиниран раздел
Настройка на пълно серийно съобщение функция за настройка Съобщението за завършване на серийния изход за настройка се променя, за да отразява приложението за вход за мултиплексор
Добавете функцията ISR на превключвателя SPST кодов раздел Добавя се ISR за прекъсване при смяна на щифт SPST. Кодът е общ, но използваният вектор е специфичен за устройството и е дефиниран в зависимите от устройството секции в горната част на програмата. За да се провери дали ISR е активиран, състоянието на светодиода се променя. Въпреки че не-не в реално приложение, се генерира съобщение за сериен изход, отразяващо новото състояние на LED.
Промяна на обработката на цикъла цикъл функция ISR вече контролира включването и изключването на светодиода, така че функционалността да бъде премахната от цикъла на цикъла. За ATtiny84 се добавя извикване към рутинния режим на сън като нещо като „допълнително“. За това приложение сънят ATtiny85 не работи; може би поради намесата на класа Software Software, тъй като той работи с премахната SoftwareSerial.
Добавете режим на сън кодов раздел Функцията за заспиване не е необходима, за да се демонстрира използването на мултиплексора. Току -що добавен, защото обикновено би искал да изчака вход в режим POWER_DOWN, за да спести енергия, вместо да продължи да работи през програмния цикъл, без да прави нищо, докато не се появи вход.

Променете кода на класа SoftwareSerial

Класът SoftwareSerial трябва да бъде променен, така че да не свива всички портове за прекъсване при смяна на щифтове. Кодът на клас SoftwareSerial се намира на адрес

C: / Program Files (x86) Arduino / hardware / arduino / avr / libraries / SoftwareSerial / src

Намерете на PCINT0_vect в SoftwareSerial.cpp, за да намерите началното място за промените на кода. Добавете следния код непосредствено преди съществуващия #if дефиниран (PCINT0_vect) израз.

#if определено (_ AVR_ATtiny84_)

#define MYPORT PCINT1_vect #elif defined (_ AVR_ATtiny85_) #define MYPORT PCINT0_vect #endif ISR (MYPORT) {SoftwareSerial:: handle_interrupt (); }

Сега коментирайте съществуващия блок код, който разпределя векторите за прекъсване на порта, както е посочено по -долу (просто добавете символите за коментар за начален и краен блок / * и * /):

/*

#ако е дефиниран (PCINT0_vect) ISR (PCINT0_vect) {SoftwareSerial:: handle_interrupt (); } #endif #if дефиниран (PCINT1_vect) ISR (PCINT1_vect) {// SoftwareSerial:: handle_interrupt (); ISR (PCINT1_vect, ISR_ALIASOF (PCINT0_vect)); } #endif #if дефиниран (PCINT2_vect) ISR (PCINT2_vect, ISR_ALIASOF (PCINT0_vect)); #endif #if дефиниран (PCINT3_vect) ISR (PCINT3_vect, ISR_ALIASOF (PCINT0_vect)); #endif */

Конфигурирайте хардуера

SPST превключвателят е прикрепен към ATtiny84 пин 6 (MOSI), както е посочено в Стъпка 2. Процедурата е дублирана тук за удобство.

  • свържете превключвателния вход 3A към кабела на MOSI заглавието на Tiny AVR Programmer
  • свържете 3B към изходния щифт на превключвателя SPST
  • свържете 3Y към ATtiny84 пин 6

    • РЕЗУЛТАТИ:

      • 3A, MOSI, ще бъде свързан към ATtiny84 пин 6 по време на изтегляне
      • 3B, SPST изход, ще бъде затворен на пин 6 след изтегляне

Стартирайте програмата

Преди да пуснете, поставете превключвателя SPST в изключено положение. В противен случай светодиодът ще се включи, когато превключвателят е изключен и обратно. Следвайте процедурата за стъпка 3, за да заредите, компилирате и изтеглите програмата за въвеждане на приложения с помощта на Arduino IDE. Както преди, светодиодът не трябва да мига по време на изтегляне, така че единствената индикация, че програмата е готова и работи, ще бъде серийното съобщение в края на рутинната настройка: SETUP Complete - Input Example

В този момент програмата чака вход от SPST превключвателя. Поставянето на превключвателя в положение ON ще доведе до включване на светодиода; връщането в изключено положение изключва светодиода. Изходните съобщения потвърждават, че ISR е бил извикан (ISR: Led HIGH, ISR: Led LOW). Забележете, че редът на серийните съобщения е GO TO SLEEP, първо се чака промяна на състоянието на превключвателя; когато получите вход за превключвател, ISR се извиква, превключва светодиода и документира промяната; след това обработката се вдига след повикването за заспиване, тъй като прекъсването събужда процесора.

Образ
Образ

ПРОГРАМА ЗА ТОВА ИНСТРУКЦИЯ:

//************************************************************************

// ЧАСТ 2: Споделяне на пинове на приложение/изтегляне на устройство //. Променя кода от част 1, за да поддържа повторно използване на пиновете на приложения //, присвоени на интерфейса за програмиране на SPI //. "Общ" код за ATtiny85 и ATtiny84 // **************************************** ******************************** #include "SoftwareSerial.h" // Модифициран Arduino SoftwareSerial клас #include // Докато кодът за обработка е общ, използваните пинове са специфични за устройството #if дефиниран (_ AVR_ATtiny84_) || дефиниран (_ AVR_ATtiny84A_) #define ledPin 4 // Превключва се за включване/изключване на свързан светодиод #define rxPin 9 // Пин, използван за серийно приемане #define txPin 10 // Пин, използван за серийно предаване #define SpstPin 6 // Вход от SPST превключвател (MOSI) #define ISR_VECT PCINT0_vect // SPST превключвател Пин промяна вектор на прекъсване #elif дефиниран (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // Въвеждане от SPST превключвател (INT0_VECT) #define // SPST превключвател вектор за прекъсване на промяната на щифтовете #else #error Само ATiny84 и ATtiny85 се поддържат от този проект #endif // Създайте екземпляр от класа на софтуерния сериал, указващ кои // пинове трябва да се използват за приемане и предаване на SoftwareSerial mySerial (rxPin, txPin); // ------------------------------------------------ ------------------------ // Инициализиране на ресурсите за обработка // ------------------- -------------------------------------------------- --- void setup () {mySerial.begin (9600); // Стартиране на забавяне на серийната обработка (2000); // Дайте време на серийния Com порт за пълно стартиране. // в противен случай първият изход вероятно липсва или е с изкривен pinMode (ledPin, OUTPUT); // Конфигуриране на LED щифт за OUTPUT pinMode (SpstPin, INPUT); // Конфигурирайте щифта за превключване на SPST като INPUT #if дефиниран (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // настройте прекъсване при смяна на пина, за да управлявате входа на превключвателя на пин 6 (MOSI) GIMSK | = (1 <

Стъпка 5: ATtiny85 Случай 1 - Изолирайте изхода на приложението

Образ
Образ

Вместо да създавате дублирана хардуерна настройка за ATtiny85, вероятно е по -лесно да започнете с готовата конфигурация за ATtiny84 от Стъпка 4 и да замените малкия чип84 с малкия85. Тогава целият необходим хардуер вече е наличен. Ако използвате този подход, намерете tiny85 така, че щифтове 3 и 4 да се подравнят със серийния кабел tx и да получат проводници. След това е само въпрос на преместване на проводниците на интерфейса на SPI, за да съответстват на техните необходими местоположения за ATtiny85.

Ако започнете от нулата, просто следвайте общите стъпки от Стъпка 3 и диаграмата за пържене по -горе. Кодът е същият, който се използва за ATtiny84 в Стъпка 3 със същите очаквани резултати - няма трептене по време на изтегляне; при работа светодиодът мига на интервали от 2 секунди и съобщенията за сериен изход следват състоянието на светодиода.

Образ
Образ

Стъпка 6: ATtiny85 Случай 2 - Изолирайте входа на приложението

Образ
Образ

За хардуерна настройка започнете с конфигурацията от Стъпка 5 и добавете превключвателя SPST, както е посочено на диаграмата за фризиране по -горе. Всъщност използвах моментен превключвател за версията tiny85 и това прави проверката малко по -лесна. Забележете, че изходът на превключвателя се завърта на 180 градуса от конфигурацията ATtiny84. Тази промяна улеснява прокарването на свързващите проводници, тъй като всичките 3 SPI сигнала са от една и съща страна за ATtiny85.

Използвайте същата програма като за ATtiny84 Стъпка 4. Очакват се същите общи резултати - светодиодът променя състоянието си, когато превключвателят SPST е включен/изключен и съобщенията за сериен изход документират промените. Съобщенията GO TO SLEEP липсват, тъй като функцията за заспиване не се извиква за ATtiny85. Въпреки че се използва една и съща програма, има значителни разлики в изпълнението, което се дължи на факта, че ATtiny85 има само един регистър на портове (порт 0):

  1. SoftwareSerial сега разпределя прекъсване за промяна на пина на порт 0 за серийна комуникация (Спомнете си, че успяхме да използваме порт 1 за ATtiny84.)
  2. Прекъсването на превключвателя SPST трябва да се реализира с външно прекъсване 0 (INT0), тъй като единственото прекъсване при смяна на щифт се разпределя от SoftwareSerial. Това илюстрира точката, че прекъсванията при смяна на щифтове и външните прекъсвания са логически независими и могат да се използват в същия регистър на порта.
  3. Нищо не се печели с използването на модифицирана версия на SoftwareSerial - има само един порт и класът SoftwareSerial ЩЕ го вземе. Модифицираният клас обаче все още се използва само за да се избегне промяна, която не е пряко свързана с целта на тази стъпка.

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