Съдържание:
- Стъпка 1: Необходим хардуер
- Стъпка 2: Преглед на тестовите случаи
- Стъпка 3: ATtiny84 Случай 1 - Изолирайте изхода на приложението
- Стъпка 4: ATtiny84 Случай 2 - Изолирайте входа на приложението
- Стъпка 5: ATtiny85 Случай 1 - Изолирайте изхода на приложението
- Стъпка 6: ATtiny85 Случай 2 - Изолирайте входа на приложението
Видео: ATtiny84/85 SPI интерфейс ПИН повторно използване: 6 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
Тази инструкция е продължение на инструкцията "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 е перфектният избор за мултиплексния сигнал за избор, тъй като той е нисък по време на изтегляне, но се връща високо, когато изтеглянето завърши. Имайте предвид, че всеки от мултиплексните превключватели може да се използва и в двата случая, тъй като всички превключватели се държат еднакво. Също така, нито един от примерите не е „реалистичен“; вместо това те бяха избрани като най -ясния начин за илюстриране на изолационните техники
-
Изходен случай: LED изходът от ATtiny84 пин 4 (SCK) е изолиран с помощта на превключвател 2 на мултиплекс
- свържете мултиплексния щифт 2A към земята
- свържете мултиплексорен пин 2B към ATtiny85 пин 4
-
свържете изход 2Y към LED анода
-
Очаквани резултати:
- Светодиодът е изключен по време на изтегляне, тъй като е свързан към 2A, заземен
- LED прикрепен към изходния извод 4 на приложението след изтегляне чрез 2B и започва да мига
-
-
Входен случай: Входът на 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):
- SoftwareSerial сега разпределя прекъсване за промяна на пина на порт 0 за серийна комуникация (Спомнете си, че успяхме да използваме порт 1 за ATtiny84.)
- Прекъсването на превключвателя SPST трябва да се реализира с външно прекъсване 0 (INT0), тъй като единственото прекъсване при смяна на щифт се разпределя от SoftwareSerial. Това илюстрира точката, че прекъсванията при смяна на щифтове и външните прекъсвания са логически независими и могат да се използват в същия регистър на порта.
- Нищо не се печели с използването на модифицирана версия на SoftwareSerial - има само един порт и класът SoftwareSerial ЩЕ го вземе. Модифицираният клас обаче все още се използва само за да се избегне промяна, която не е пряко свързана с целта на тази стъпка.
Препоръчано:
Повторно използване на светлината за събуждане Philips HF3550 + Ipod Touch 4 -ти: 5 стъпки
Повторно използване на Philips Wake Up Light HF3550 + Ipod Touch 4th: РЕДАКТИРАНЕ 2019/10/28 Качих нов напукан IPA файл (благодаря irastignac) и актуализирах връзката към анонимния файл. Това трябва да предотврати момента, в който бъдете помолени да въведете моя идентификатор за ябълка. EDIT 2019/10/22 изглежда, че IPA файлът на Philips е подписан с моята ябълка
Повторно използване на радиатор на компютър за създаване на транзисторен радиатор: 7 стъпки
Повторно използване на компютърен радиатор за създаване на транзисторен радиатор: Преди време купих няколко Raspberry Pi 3, с които да си поиграя. Тъй като идват без радиатор, аз бях на пазара за някои. Направих бързо търсене в Google и попаднах на този Instructable (радиатор Raspberry Pi) - това беше след като отхвърлих идеята за
WAC (Разходка и зареждане) - Повторно използване на старо CD устройство: 6 стъпки
WAC (WALK AND CHARGE GADGET) - Повторно използване на старо CD устройство: Здравейте на всички, аз съм Крис ученик от XI клас и това е първият ми инструктаж. Този проект беше направен от мен, когато бях на 11 години (бях твърде срамежлив да публикувам проектите си, само за да ги покажа на всички)*Извинете за грешките. Английският не е моят роден език
Повторно използване на тъчпада на стария лаптоп за управление на стъпков двигател: 11 стъпки (със снимки)
Повторно използване на тъчпада на стария лаптоп за управление на стъпков двигател: Направих този проект преди няколко месеца. Преди няколко дни публикувах видеоклип от проекта на r/Arduino в Reddit. Виждайки хората да се интересуват от проекта, реших да направя този Instructable, където направих някои промени в кода на Arduino и
Повторно използване на LED крушки за слепи светлини!: 7 стъпки
Повторно използване на LED крушки за заслепяващи светлини!: Това е добър начин за повторно използване на LED чиповете, намиращи се в крушките, които ги използват