50 нюанса на PNP Хардуерно приемане на ШИМ-кодирани сигнали от микроконтролери Microchip

Предишни статии [1], [2] и [3] се фокусираха върху основни независими периферни устройства (NPP) на микроконтролери Microchip: конфигурируеми логически клетки, I/O портове с текущо ограничаване и ADC с калкулатор, някои от възможностите на такива периферни устройства бяха показани. Нека ви напомня, че независимостта не се има предвид от типа на ядрото на PIC микроконтролери (BaseLine, Mid-Range, Enhanced Mid-Range, PIC18, 16-, 32-bit), а от работата на ядрото, т.е. независимо изпълнение на задачи, възложени на периферията от състоянието на процесора. Такива периферни устройства и особено възможността да ги конфигурират за съвместна работа и синтез на хардуерни функции, са предназначени да облекчат софтуерната част, да намалят консумацията на енергия.

В тази кратка статия искам да покажа примери за това как да осъществим приемането на „нестандартни“, нестандартни комуникационни интерфейси, използващи ядрото независима периферия.

PWM кодирането на информация е много често, когато дискретни сигнали, логика 1 и логика 0, са кодирани с импулсна ширина. Помислете за възможността за получаване и декодиране на такива сигнали с помощта на независима периферия от контролерите Core PIC.

Декодиране на сигнала на PWM сензор AM2302

В проектите „направи си сам“ често се използва сензор за температура и влажност DHT22 (AM2302). Сензорът има 3 изхода, информацията се предава по един проводник. В отговор на заявка (ниско ниво с продължителност около 1ms), сензорът отговаря със стартов бит и след това с последователност от 40 бита, където информацията се кодира в продължителността на импулса: log. "0" - импулс 30mk сек, дневник. "1" - 70μs (типични стойности). Отговорът от сензора съдържа 5 байта: 2 байта данни за влажност, 2 байта температура и 1 контролен байт.

Фиг. 1. Обяснение на принципа на кондициониране на сигнала на сензора DHT22.

Има много примери за работа с такива сензори на Arduino в мрежата. Някои реализации на библиотеки използват конструкции като:


В такива реализации виждам следните проблеми:

- програмата за цялото време на измерване (> 5ms) "увисва" в кода за измерване;
- появата на достатъчно дълго прекъсване ще наруши четенето на данни от сензора;
- потенциални проблеми при работа при ниска тактова честота на микроконтролера;

Алгоритъмът за програмата на такива решения изглежда така (вж. Фиг. 2)

хардуерно
Фигура: 2. Алгоритъм за софтуерно приемане и декодиране на сензорни сигнали.

По-долу разглеждаме опцията за хардуерно приемане/декодиране на протокола с минимални софтуерни разходи.

Идеята е да се извлекат синхронизиращите импулси от битовия поток и след това да се насочат оригиналният сигнал и синхронизиращите импулси към хардуерния SPI модул. В този случай програмата за микроконтролер трябва само да вземе последователно 5 байта данни от SPI.

Част от CIP е таймер с възможност за задействане на събития (промяна на състоянието на вход или друго периферно устройство). Тези. промяната на състоянието на входа може да стартира таймер, вижте сигнал TMR6 на фиг. 3. Когато таймерът достигне зададената стойност, броенето му спира и таймерът е в състояние TMR6 = PR6 (PR е регистърът на периода). Състоянието на таймера може да бъде вход за конфигурируема логическа клетка (CLC, вижте част 1).

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