Nemas straha. Ostane ti dovoljno vremena da uz sve to processor rjesava jos i algoritam za igranje saha i da na zvucniku generira muziku na vise kanala :-))
Nemas straha. Ostane ti dovoljno vremena da uz sve to processor rjesava jos i algoritam za igranje saha i da na zvucniku generira muziku na vise kanala :-))
-- Let There Be Light Custom LED driveri prema specifikacijama
U ostalih 95+ posto vremena moze raditi jos 150 stvari i jos ce mu ostati vremena. Jer ovo se odvija u interrupt-u i jos k tome koristenjem hardware-skog capture-a tako da to za processor nije nikakvo opterecenje.
-- Let There Be Light Custom LED driveri prema specifikacijama
I to cak i u slucaju kad bi se komunikacija sa stanicom odvijala
*neprekidno*!!-- Let There Be Light Custom LED driveri prema specifikacijama
Da, ovde treba tek svakih 128 sekundi. E sad sam se sjetio. Da li preporu
I u vezi ovog djela
if(TCCR3B & BIT(6))
if(TCCR3B.6==1) ?
TCCR3B &= ~BIT(6);
i ovako jedinicu
TCCR3B |= BIT(6);
TCCR3B=(1
Nikako! Nema sanse da bi uspio pogoditi pauzu pa da se poklopi s trenutkom slanja. Uvijek se ceka dogadjaj.
I uvijek izbjegavaj bilo kakve pauze u kojima bi processor stajao, osim u iznimnim slucajevima.
-- Let There Be Light Custom LED driveri prema specifikacijama
BIT(x) je neki macro ili #define. Ako imas neki vrijednost A iz koje zelis izdvojiti neki bit onda za izdvajanje bita moras imati 'masku' koja bi za izdvajanje 6. bita bila:
01000000Bitovi se broje od nule i zdesna nalijevo. Znaci ako bi htio provjeriti da li je upaljen 6. bit u variabli A onda bi napisao:
if(A & 0b01000000)
ili
if(A & 0x40)
ili
if(A & 64)
itd. s tim da 0bxxxxxxxx nije standardizirani C i to ne mora podrzavati svaki compiler.
BIT(6) je samo drugi zapis broja 64.
U C-u to ne bi radilo osim ako je definiran macro koji onda takav izraz pretvori u nesta drugo ili ako compiler nema extenizje koje to dozvoljavaju.
-- Let There Be Light Custom LED driveri prema specifikacijama
Ne upisuju nulu u *registar* nego u jedan *bit* tog registra!! A bez da se 'dira' ostale bitove.
Recmo da hoces upaliti bitove u variabli A koji su definirai maskom
01111111 = 0x7fU tom slucaju ce izraz
A = A | 0x7f upaliti taj bit a bez da poremeti i druge bitove.
A |= 0x7f je drugi zapis istog izraza
Tu se znaci koristi OR s maskom.
Ako pak zelis ugasiti bit u variabli A koji je definiran tom istom maskom ali bez da promijenis ijedan drugi bit, onda moras sve jedinice u maski zamijeniti nulama a sve nule jedinicama i onda napraviti AND s tom vrijednocsu pa je to:
A = A & (~0x7f) ili ljepse zapisano
A &= ~0x7f
Nacrtaj si to u binarnom obliku pa ce sve biti jasno. Znaci ako zelis u nekoj variabli ugasiti 6. bit koji je definiran s maskom:
01000000Onda to napravis tako da prvo taj byte invertiras i dobijes:
10111111A nakon toga napravis AND izmedju variable i tog byte-a. Lako se vidi da se niti jedan drugi bit osim ovog gdje je nakon invertiranja jedinica nece promijeniti a da ce taj sigurno biti nula.
Takvim bi nacinom unistio sve ostale bitove u tom registru a svaki od tih bitova ima vaznu funkciju!!
Plus toga, ovaj drugi izraz nema smisla.
Te *bitove* gdje su u masci jedinice. Sve treba pisati u mnozini a u programu je slucaj u kojem je u masci upaljen samo jedan bit jer moramo setirati ili resetirati samo taj jedan bit u registru.
-- Let There Be Light Custom LED driveri prema specifikacijama
Ha! mogao bi, to sad radim na kompjuteru. Pauza je varijabla. i ovisno kad
e.
at.
nula u registar? Taj post je zadnji od moja tri za redom.
Za if petlje - meni bi odgovarao ojan oblik u heksadekadskom zapisu.
U mikrokontrolerima koje koristis ne mozes signal snimiti pa kasnije obradjivati jer za to nema dosta memorije i pauza ne dolazi u obzir.
Pa odgovorio sam ti vec u 4:17.
Nisam shvatio na sta mislis.
-- Let There Be Light Custom LED driveri prema specifikacijama
Tek sam kasnije dobio taj post.
&= ~0x7f.mmers/and-tech/#
To nije najbolja praksa jer ce tako napisan program biti nepregledan i cak i vec nakon samo par tjedana ces se tesko snaci ako ce trebati nesta mijenjati.
To se radi tako da negdje na vrhu tog file-a stavis nesta tipa:
#define maska_za_nesta 0x7f
i onda koristis opisno ime. Na taj ces nacin moci ne samo lakse pratiti program nego ces ga i moci lako preratidi za drugi mikrokontroler koj neki bit ima na drugom mjestu ili ces lako preraditi program za slucaj da ces zbog necega morati mijenjati fizicke spojeve (npr. ako ti je gumb bio spojen na pin koji sluzi za SPI komunikaciju pa kasnije hoces dodati SPI a premjestiti gumb).
Isto tako, avr-gcc za svaki mikrokontroler ima na stotine unaprijed definiranih #define-a a koji su uskladjeni s oznakama koje se koriste u datasheet-u - tako da ponekad za prebaciti program na drugi uC neces morati napraviti nista osim include-ati drugi file s tim definicijama.
Ovo neka ti bude polaziste:
Prouci primjere, procitaj FAQ, prelistaj manual itd.
Za ovo ti ne treba kristal, dovoljno je da koristis interni oscilator na 4 MHz a bez problema mozes to sve sloziti i ako fuse-ove ostavis na tvornickim postavkama (1 MHz). Interni oscilator na vecini AVR-ova moze raditi na 1, 2, 4 i 8 MHz a vec ti je i milion instrukcija u sekundi sasvim dovoljno (u tom ces slucaju unutar trajanja kratkog impulsa kojega salje stanica imati processorskog vremena za 500 instrukcija).
-- Let There Be Light Custom LED driveri prema specifikacijama
Ja kao programator koristim par otpornika zalemljenih u utikacu od paralelnog porta i program PonyProg2000. Sliku tog programatora mozes vidjeti na mojoj stranici (link u sig-u) u rubrici FAQ. Tamo za spanjanje programatora na uC koristim SOIC clip, a ovdje:
mozes vidjeti gdje sam si za programiranje slozio konektor s 5 pinova na zelenoj plocici (pored njega pise PROG).
Ne! :-) Na sci.elektronika.mikrokontroleri trazi moj post:
'Subject: Jeftini AVR JTAG ICE - hardware-sko debuggiranje?'
koji sam poslao 22.02.2015.
-- Let There Be Light Custom LED driveri prema specifikacijama
muahaha ipak radi :) :) :) LEDica blica :)
Krivo sam bio instalirao avrdude. Sad radi.
BTW, nemam paralelni port nego moram preko meni bezveznog usb porta.
na kraju ide HEX fajl koji svi ti programi generiraju.
--
sa muxanjem ili shift registrima radi premalo portova...
--
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.