Satura rādītājs:

AVR mikrokontrolleris. Pārslēdziet gaismas diodes, izmantojot spiedpogu slēdzi. Spiedpogas atcelšana: 4 soļi
AVR mikrokontrolleris. Pārslēdziet gaismas diodes, izmantojot spiedpogu slēdzi. Spiedpogas atcelšana: 4 soļi

Video: AVR mikrokontrolleris. Pārslēdziet gaismas diodes, izmantojot spiedpogu slēdzi. Spiedpogas atcelšana: 4 soļi

Video: AVR mikrokontrolleris. Pārslēdziet gaismas diodes, izmantojot spiedpogu slēdzi. Spiedpogas atcelšana: 4 soļi
Video: LDmicro 10: Регулятор температуры инкубатора (лестничное программирование ПЛК микроконтроллера с помощью LDmicro) 2024, Jūlijs
Anonim
Image
Image

Šajā sadaļā mēs uzzināsim, kā izveidot programmas C kodu ATMega328PU, lai mainītu trīs gaismas diodes statusu atbilstoši pogas slēdža ievadam. Mēs esam arī izpētījuši risinājumus problēmai “Switch Bounce”. Kā parasti, mēs saliksim elektrisko ķēdi uz AVR ATmega328 bāzes, lai pārbaudītu programmas koda darbību.

1. solis: AVR mikrokontrollera lietojumprogrammas rakstīšana un veidošana C kodā, izmantojot integrēto attīstības platformu Atmel Studio 7

AVR mikrokontrollera lietojumprogrammas rakstīšana un veidošana C kodā, izmantojot integrēto attīstības platformu Atmel Studio 7
AVR mikrokontrollera lietojumprogrammas rakstīšana un veidošana C kodā, izmantojot integrēto attīstības platformu Atmel Studio 7
AVR mikrokontrollera lietojumprogrammas rakstīšana un veidošana C kodā, izmantojot integrēto attīstības platformu Atmel Studio 7
AVR mikrokontrollera lietojumprogrammas rakstīšana un veidošana C kodā, izmantojot integrēto attīstības platformu Atmel Studio 7
AVR mikrokontrollera lietojumprogrammas rakstīšana un veidošana C kodā, izmantojot integrēto attīstības platformu Atmel Studio 7
AVR mikrokontrollera lietojumprogrammas rakstīšana un veidošana C kodā, izmantojot integrēto attīstības platformu Atmel Studio 7

Ja jums nav Atmel Studio, lejupielādējiet un instalējiet to.

www.microchip.com/mplab/avr-support/atmel-studio-7

Dažas pirmās rindas mums ir dažas kompilatora definīcijas.

F_CPU definē pulksteņa frekvenci hercos un ir izplatīta programmās, kurās tiek izmantota avr-libc bibliotēka. Šajā gadījumā to izmanto kavēšanās kārtība, lai noteiktu, kā aprēķināt laika aizkavēšanos.

#ifndef F_CPU

#define F_CPU 16000000UL // stāsta kontroliera kristāla frekvence (16 MHz AVR ATMega328P) #endif

#include // galvene, lai iespējotu datu plūsmas kontroli pār tapām. Nosaka tapas, ostas utt.

Pirmais iekļaušanas fails ir daļa no avr-libc un tiks izmantots gandrīz visos AVR projektos, pie kuriem strādājat. io.h noteiks jūsu izmantoto centrālo procesoru (tāpēc jūs sastādīšanas laikā norādāt daļu) un, savukārt, iekļaus mūsu izmantotajai mikroshēmai atbilstošo IO definīcijas galveni. Tas vienkārši nosaka konstantes visām jūsu tapām, ostām, īpašiem reģistriem utt.

#include // galvene, lai iespējotu kavēšanās funkciju programmā

Bibliotēka util/delay.h satur dažas kārtības īsiem kavējumiem. Funkcija, kuru mēs izmantosim, ir _delay_ms ().

Mēs izmantojam definīciju, lai deklarētu savas pogas un gaismas diodes portus un tapas. Šādu definīciju paziņojumu izmantošana ļauj mums mainīt tikai trīs viegli atrodamas līnijas, ja mēs pārvietojam gaismas diodi uz citu I/O tapu vai izmantojam citu AVR.

#define BUTTON1 1 // pogas slēdzis, kas savienots ar B porta 1. tapu

#define LED1 0 // Led1 pievienots portam B pin 0 #define LED2 1 // Led2 pievienots portam C pin 1 #define LED3 2 // Led3 pievienots portam D pin 2

Pēdējie divi nosaka paziņojumu iestatīšanas laikus milisekundēs, lai atslēgtu slēdzi, un laiku, kas jāgaida, pirms atļaut vēlreiz nospiest pogu. Atlēciena laiks ir jāpielāgo laikam, kas nepieciešams, lai pārslēgtos, lai pēc visas atlēkšanas pārietu no digitālā augstuma uz digitālo zemāko. Atlēciena uzvedība katrā slēdzī atšķirsies, taču parasti pietiek ar 20–30 milisekundēm.

#define DEBOUNCE_TIME 25 // laiks gaidīt, kamēr poga “atlekšana”

#define LOCK_INPUT_TIME 300 // laiks gaidīt pēc pogas nospiešanas

void init_ports_mcu ()

{

Šī funkcija tiek izsaukta tikai vienu reizi mūsu programmas sākumā, lai inicializētu ievades izejas tapas, kuras mēs izmantosim.

Pogai rakstīšanai un lasīšanai izmantosim PORT un PIN reģistrus. Izmantojot AVR, mēs lasām tapu, izmantojot tā PINx reģistru, un rakstām uz tapu, izmantojot tā PORTx reģistru. Mums ir jāraksta pogu reģistrā, lai iespējotu izvilkumus.

Gaismas diodei mums ir jāizmanto tikai PORT reģistrs, lai rakstītu, tomēr mums ir nepieciešams arī datu virziena reģistrs (DDR), jo I/O tapas pēc noklusējuma ir iestatītas kā ievades.

Pirmkārt, mēs iestatām LED I/O tapas kā izeju, izmantojot tā datu virziena reģistru.

DDRB = 0xFFu; // Iestatiet visas PORTB tapas kā izeju.

Pēc tam skaidri iestatiet pogas tapu kā ievadi.

DDRB & = ~ (1 <

Pēc tam PORTB tapas ir iestatītas augstu (+5 volti), lai to ieslēgtu. Izejas tapas sākotnēji ir augstas, un, tā kā mūsu gaismas diodes ir savienotas ar vadu, tas tiks ieslēgts, ja vien mēs to skaidri neizslēgsim.

Visbeidzot, mēs iespējojam iekšējo pievilkšanas rezistoru ievades tapā, kuru izmantojam savai pogai. Tas tiek darīts, vienkārši izvadot vienu ostā. Ja tas ir konfigurēts kā ieeja, tas ļauj iespraust un, ja tas ir konfigurēts kā izeja, tas vienkārši izvadītu augstu spriegumu.

PORTB = 0xFF; // Iestatiet visas PORTB tapas kā HIGH. LED ir ieslēgts, // ir iespējots arī pirmā kontakta PORTB iekšējais Pull Up rezistors. DDRC = 0xFFu; // Iestatiet visas PORTC tapas kā izeju. PORTC = 0x00u; // Iestatiet zemas visas PORTC tapas, kas to izslēdz. DDRD = 0xFFu; // Iestatiet visas PORTD tapas kā izeju. PORTD = 0x00u; // Iestatiet zemas visas PORTD tapas, kas to izslēdz. }

unsigned char button_state ()

{

Šī funkcija atgriež Būla vērtību, norādot, vai poga tika nospiesta. Šis ir koda bloks, kas nepārtraukti tiek izpildīts bezgalīgajā cilpā, un tādējādi tiek aptaujāts pogas stāvoklis. Šeit mēs arī izslēdzam slēdzi.

Tagad atcerieties, ka, nospiežot slēdzi, ievades izejas tapa tiek pievilkta pie zemes. Tādējādi mēs gaidām, kamēr tapa samazināsies.

/ * poga tiek nospiesta, ja BUTTON1 bits ir dzidrs */

ja (! (PINB & (1 <

Mēs to darām, pārbaudot, vai bits ir skaidrs. Ja bits ir skaidrs, norādot, ka poga ir nospiesta, mēs vispirms aizkavējam DEBOUNCE_TIME noteikto laiku, kas ir 25 ms, un pēc tam vēlreiz pārbaudām pogas stāvokli. Ja poga tiek nospiesta pēc 25 ms, tad slēdzis tiek uzskatīts par atslēgtu un gatavu notikuma aktivizēšanai, un tāpēc mēs atgriezīsimies pie sava zvanīšanas režīma. Ja poga nav nospiesta, mēs atgriežam 0 pie mūsu zvanīšanas režīma.

_delay_ms (DEBOUNCE_TIME);

ja (! (PINB & (1 <

int main (anulēts)

{

Mūsu galvenā rutīna. Galvenā funkcija ir unikāla un atdalīta no visām citām funkcijām. Katrai C programmai ir jābūt tieši vienai galvenajai () funkcijai. Galvenais ir tas, kur AVR sāk izpildīt jūsu kodu, kad tiek ieslēgta barošana, tāpēc tas ir programmas ieejas punkts.

neparakstīts simbols n_led = 1; // sākotnēji LED numurs tagad ir ieslēgts

Funkcijas izsaukums, lai inicializētu izmantotās I/O tapas:

init_ports_mcu ();

bezgalīga cilpa, kurā darbojas mūsu programma:

kamēr (1)

{

Kad button_state atgriež vienu, norādot, ka poga ir nospiesta un atvienota, pēc tam pārslēdziet LED pašreizējo statusu atbilstoši parametram n_led.

if (button_state ()) // Ja poga ir nospiesta, pārslēdziet gaismas diodes stāvokli un aizkavējiet 300 ms (#define LOCK_INPUT_TIME)

{switch (n_led) {case 1: PORTB ^= (1 << LED1); PORTC ^= (1 << LED2); pārtraukums;

Šajos paziņojumos tiek izmantoti C bitveida operatori. Šoreiz tas izmanto ekskluzīvo VAI operatoru. Kad XOR PORT ar bitu vērtību, kuru vēlaties pārslēgt, šis viens bits tiek mainīts, neietekmējot citus bitus.

2. gadījums:

PORTC ^= (1 << LED2); PORTD ^= (1 << LED3); pārtraukums; 3. gadījums: PORTD ^= (1 << LED3); PORTB ^= (1 << LED1); n_led = 0; // atiestatīt LED numura pārtraukumu; } n_led ++; // nākamā gaismas diode ieslēdzas _delay_ms (LOCK_INPUT_TIME); }} atgriešanās (0); }

Tagad, palaižot šo programmu, jums vajadzētu būt iespējai nospiest spiedpogu, lai gaismas diodes pārslēgtos. LOCK_INPUT_TIME noteiktās kavēšanās dēļ jūs varat nospiest un turēt pogu, kuras dēļ gaismas diodes izslēgsies un ieslēgsies nemainīgā ātrumā (nedaudz vairāk kā ik pēc 275 ms).

Programmēšana ir pabeigta.

Nākamais solis ir projekta un hex faila programmēšana mikrokontrollerī, izmantojot avrdude programmu.

Jūs varat lejupielādēt failu main.c ar programmu c kodā:

2. darbība. Programmas HEX faila pārsūtīšana uz mikroshēmas zibatmiņu

Programmas HEX faila pārsūtīšana mikroshēmas zibatmiņā
Programmas HEX faila pārsūtīšana mikroshēmas zibatmiņā
Programmas HEX faila pārsūtīšana mikroshēmas zibatmiņā
Programmas HEX faila pārsūtīšana mikroshēmas zibatmiņā

Lejupielādējiet un instalējiet AVRDUDE. Jaunākā pieejamā versija ir 6.3: lejupielādējiet zip failu

Vispirms nokopējiet programmas heksadecimālo failu direktorijā AVRDUDE. Manā gadījumā tas ir ButtonAVR.hex

Pēc tam DOS uzvednes logā ierakstiet komandu: avrdude –c [programmētāja nosaukums] –p m328p –u –U flash: w: [jūsu hex faila nosaukums].

Manā gadījumā tas ir: avrdude –c ISPProgv1 –p m328p –u –U zibspuldze: w: ButtonAVR.hex

Šī komanda ieraksta hex failu mikrokontrollera atmiņā.

Noskatieties video ar detalizētu mikrokontrollera zibatmiņas ierakstīšanas aprakstu:

Mikrokontrollera zibatmiņas ierakstīšana…

Labi! Tagad mikrokontrolleris darbojas saskaņā ar mūsu programmas norādījumiem. Pārbaudīsim!

3. darbība. Aparatūras slēdža atcelšana

Aparatūras slēdža atcelšana
Aparatūras slēdža atcelšana

Papildus programmatūras slēdžu atcelšanai mēs varam izmantot aparatūras slēdžu atcelšanas tehniku. Šādas tehnikas pamatideja ir kondensatora izmantošana, lai filtrētu ātras slēdža signāla izmaiņas.

Kādas vērtības kondensators jāizvēlas? Tas galu galā būs atkarīgs no tā, cik slikti poga darbojas saistībā ar šo konkrēto problēmu. Dažas pogas var parādīt milzīgu atlecošu uzvedību, bet citām būs ļoti maz. Zema kondensatora vērtība, piemēram, 1,0 nanofarads, reaģēs ļoti ātri, maz vai neietekmēs atlēcienu. Un otrādi, lielāka kondensatora vērtība, piemēram, 220 nanofaradi (kas kondensatoru ziņā joprojām ir diezgan maza), nodrošinās lēnu pāreju no sākuma līdz beigu spriegumam (no 5 voltiem līdz 0 voltiem). Pāreja, kas redzama ar 220 nanofaradu jaudu, joprojām ir diezgan ātra reālās pasaules izpratnē, un tāpēc to var izmantot pogām ar sliktu veiktspēju.

4. solis: elektriskā ķēde

Elektriskā ķēde
Elektriskā ķēde
Elektriskā ķēde
Elektriskā ķēde
Elektriskā ķēde
Elektriskā ķēde

Savienojiet komponentus saskaņā ar shēmu.

Ieteicams: