90 likes | 197 Views
Program de formare : Mecatronica I Platforme mecatronice pentru educatie si formare flexibila. Titlul lucrarii: Microcontrolere – aplicatii. Grupuri de LED-uri care pulsează.
E N D
Program de formare: Mecatronica I Platforme mecatronice pentru educatie si formare flexibila Titlul lucrarii:Microcontrolere –aplicatii
Grupuri de LED-uri care pulsează Scopulaplicaţieieste de a scrieprogramulpentruaprindereaintermitentă la un interval de timp de 100000ms a ledurilor 0 şi 7. Structuraprogramuluiesteurmatoarea: #include “16F917.h” # use delay (clock=8000000) void main () { while(1){ output _B(0x81) delay_ms(1000000) output _B(0x81) delay_ms(1000000) } }
Explicareaprogramului: #include “16F917.h”aceastainstructiune include in procesul de compilarefunctiilecuprinse in fisierul “16F917.h”# use delay (clock=8000000)seteazafrecventa de utilizare a platformei ( de fapt a microcontrolerului) void main (){incepefunctiaprincipala a programului care nu are parametric si nu returneazanimic while(1){buclărepetitivă – câttimpcondiţiadintreparantezelerotundeesteadevărată se executăinstrucţiuniledintreacolade. Încazulnostrubucla se repetă la infinit, deoarece 1 esteasimilatvaloriilogice TRUE
In sistemulbinarledurilor le corespundvalori. Ledurile 0 si 7 : B0(8) si B7(1), in hexazecimalavem 81 output _B(0x81) se trimite 1 logic petoripiniiledurilor B, adica se aprindledurile 0 si 7 output _B(0x00) se trimite 0 logic petotipiniiledurilor B, adica se sting ledurile 0 si 7 delay_ms(V) se introduce o intarziere } se terminabuclarepetitivawhile } Se terminafunctiaprincipala main , adica se terminaprogramul
Astabil cu grupuri de LED-uri Scopul aplicatiei este de aprinderea alternativa la un anumit interval de timp a doua grupuri de LED-uri. Aprinderea alternativă a LED-urilor 1 şi 5 şi apoi 3 şi 7, la un interval de 800 ms are următorul program: #include “16F917.h” #use delay(clock=8000000) void main() { while(1) { output_B(0x44); delay_ms(800); output_low(0x11); delay_ms(800); } }
Pentrurealizareaunui prim exemplu de program in cadrulcaruiavafiscrispeafisajcuvantul PIC, vorfiutilizate ca instructiuninoiurmatoareleuinstructiunibyte const DigMap[x]={...}; → creareaunui vector de date, de tip bit;#define DIG1 … → instructiunecedefinestenumeleuneivariabile (dupa o astfel de instructiune - directivaă nu se pune „ ; ” )setup_lcd(LCD_MUX14,0); → comandă de inițializare a LCD-ului. L lcd_symbol(val1,destinație); → comandăprin care se transfera (scrie) „val1” la adresa „destinație”. Ambele (val1 șidestinație), se vorscrieînhexazecimal!
Afisarea unei cifre Scopulapicatieieste de a afisacifrelor de la 0 la 4 simultanpeceitreidigiti , la interval de o secunda. Programulpropusesteurmatorul: #include “16F917.h” # use delay (clock=8000000) byte const Dig Map[10]={ 0xFD,0x60,0xF3,0x66,0xB7,0xBF,0xE0,0xFF,0xE7,0x00}; #define DIG1 COM0+22,COM0+23,COM2+23,COM3+22,COM2+22,COM1+22,COM1+23 #define DIG2 COM0+06,COM0+21,COM2+21,COM3+6,COM2+6,COM1+6,COM1+21 #define DIG3 COM0+03,COM0+11,COM2+11,COM3+03,COM2+03,COM1+03,COM1+11 void main() { int8 n; setup_lcd(LCD_MUX14,0); for(n=0;n<5;n++) { lcd_symbol(DigMap[n],DIG1); lcd_symbol(DigMap[n],DIG2); lcd_symbol(DigMap[n],DIG3); delay_ms(1000); } }
Explicareaprogramului: #include “16F917.h”aceastainstructiune include in procesul de compilarefunctiilecuprinse in fisierul “16F917.h”# use delay (clock=8000000)seteazafrecventa de utilizare a platformei ( de fapt a microcontrolerului)byte const declarvariabila de tip byte, numita constDig Map[10]={ 0xFD,0x60,0xF3,0x66,0xB7,0xBF,0xE0,0xFF,0xE7,0x00};codulpentrucifre#define DIG1 COM0+22,COM0+23,COM2+23,COM3+22,COM2+22,COM1+22,COM1+23adreseleundevorfitrimisevalorilevoid main() {incepeprogramulint8 ndeclarvariabila
setup_lcd(LCD_MUX14,0)comandă de inițializare a LCD-ului.lcd_symbol(DigMap[n],DIGi); → comandăprin care se transfera (scrie) DigMap[n] la adresaDIGi. for(n=0;n<5;n++) se repeatapana se terminaprogramul, afiseaza 0,1,2,3,4n++=n+1