ABC tehnike broj 656 za lipanj 2022. godine

Page 25

Shield-A, učilo za programiranje mikroupravljača (26)

ONIKAELTR

Nakon ,to smo predstavili slave I2C modul s TIFR |=(1<OCF0A)|(1<OCF0B); mikroupravljačemATtiny85 i RGB-diodom iza njega TIMSK|=(1<OCIE0A)|(1<OCIE0B); napisali odgovarajući program Bascom-AVR-a, u OCR0A=0; ovomemo ć nastavkuopisatikakozaistimodul napi OCR0B=25; satiprogramArduinoIDE-a,azatimemo ć predstavitiTCNT0=0; i odgovarajuć master e programe za razvojni sustav sei(); Shield-Anaobjeplatforme. Biblioteci Wire moramo proslijediti odabranu I2C ArduinoI2Cslave adresutedefiniratidamoraizvr,receiveEitifunkciju #elimo li koristiti mikroupravljače ATtiny, uvent()kadaodmasterapriminekepodatke: Arduino IDE moramo instalirati dodatnu podr,ku. Wire.begin(I2C_addr); / join i2c bus with To moAe biti, npr. , projekt ATTinyCore autora Space address Konde, čije su naredbe kompatibilne s originalnim Wire.onReceive(receiveEvent);/registerevent Arduino IDE, a nama interesantna biblioteka Wire Jo, emo ć pinove kojima uključujemo pojedine radipouzdano.Uputezainstalacijunalaze sena stra boje RGB-diode konfigurirati kao izlazne i izvr nici https: / github.com/ SpenceKonde/ ATTinyCore. početnidemoprogram: Za programiranje mikroupravljača ATtiny upotrijebit pinMode(RED,OUTPUT); emo ć ArduinoUnokaoISPprogramator. pinMode(GREEN,OUTPUT); Arduinovorjeenjeprogramskog pinMode(BLUE,OUTPUT); zadatka:Program Shield-A_22.ino rgb_demo(); Programskalogikarje,enjaArduinoIDEidentična } /endsetup() je kao u Bascom-AVR-u, a naredbe koje ne postoje Demoprogram postupno pali i gasi svaku od boja u Arduino IDE napisat emo ć kao makronaredbe. Na RGB-diode i ovdje ga nećemo analizirati. U funkcij početku programa definiramo kori,tenje biblioteke loop() ne moramo imati niti jednu naredbu,jere ć se Wire i makronaredbama RED, GREEN i BLUE pri sveaktivnostiodvijatiuprekidnimrutinam druAujemo pinove kojima upravljamo intenzitetom voidloop(){ pojedineboje : }/endloop() #include<Wire.h> U funkciji receiveEvent() preuzimamo podatke sa #defineREDPB1 sabirnice I2Ci spremamo ih u polje i2c_rcv_byte[],te #defineGREENPB3 pokrećemofunkciju execute_i2c_command(): #defineBLUEPB4 voidreceiveEvent(inthowMany){ Za pregledniji kod programa definiramo - i makro i2c_rcv_byte[0]=Wire.read(); naredbezauključivanjeiisključivanjeTimera 0: i2c_rcv_byte[1 ]=Wire.read(); # define STOP_TIMER0 ( TCCR0 B &= i2c_rcv_byte[2]=Wire.read(); ~((1<CS00)|(1<CS01) execute_i2c_command(); # define START_TIMER0 ( TCCR0 B |= }/endreceiveEvent(inthowMany) (1<CS00)|(1<CS01) Ona je pisana za RGB LED sa zajedničkom kato I2Cadresa je<0b110=a polje u koje sprema dom,kod koje za intenzitete pojedine boje moAe mo podatke primljene preko komunikacijske linije koristiti vrijednosti pohranjene direktno i2c_ bit će i2c_rcv_byte[3]: rcv_byte[] (kod RGB LED sa zajedničkom anodom te byteI2C_addr=0b110; bismovrijednostiprethodnotrebali?invert volatilebytei2c_rcv_byte[3]={00};, dazaprimljenuvrijednostoduzmemoodbroja25): U funkciji setup() konfiguriramo Timer0, brojačevoidexecute_i2c_command(){ povezanesprekidimaiuključimoprekide: analogWrite(RED,i2c_rcv_byte[0]); voidsetup(){ if(i2c_rcv_byte[1]==0){ cli(); STOP_TIMER0; TCCR0A=0; digitalWrite(GREEN,LOW); TCCR0B=0; }else{ START_TIMER0; OCR0A=i2c_rcv_byte[1]; TCCR0B|=(1<CS00)|(1<CS01); START_TIMER0; CLKPR|=(1<CLKPCE); } CLKPR=0; analogWrite(BLUE,i2c_rcv_byte[2]);

25


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.