» »

Par problemčkov (sinhronizacija, if stavek)

Par problemčkov (sinhronizacija, if stavek)

Zzzzzzz ::



Tako kot zmeraj ko se kaj lotim, sem tudi zdej prišel do par problemov, ki sem jih kar oštevilču.

1. Na svojmu mikrokontrolerju (M68HC11) pošiljam podatke preko vrat, dajmo jih imenovat A, B in C. Na vratih A lahko podatke pošiljam in prejemam, B in C vrata pa lahko podatke samo pošiljajo. Tako sem na A vrata priklopil na en pin SFH-5110 (sprejem podatkov); preko teh vrat se pretakajo tudi 3 kontrolni biti, ki povejo CPLD-ju (xilinx), kaj naredit s podatki, poslanimi po vratih B in C (2 x 8 bitov). Stvar, ki mi ne gre v glavo je sledeča: Kako, na kakšen način oz. v kakšnem zaporedju naj pošljem podatke (kontrolne bite, vrata B in C), da se bodo operacije nad poslanimi biti izvršile kot bodo ukazali kontrolni biti? Vseh bitov od enkrat se namreč ne da zaradi omejitev mikrokontrolerja.

2. s katerim vezjem (tipom vezja) se da naredit shemo, ki bi v bistvu delovala kot IF stavek? Primer: glede na pogoj (npr. kontrolni bit iz prejšnjega problema), se mora npr. vseh 8 bitov, ki so prišli z vrat B shranit v pomnilno celico, če je kontrolni bit 1 oz. poslat na ustrezne izhode, če je bit 0.

3. Rabu bi še eno simpl razlago, kaj je to "latch" in kaj se z njim dela.

4. Kako (po kaki logiki) lahko iz 8-bitnega binarnega števila (00110110) to število v desetiški obliki izpišem na LED displej (5 displejčkov - 1 za enice, 1 za desetice, 1 za stotice...)?

Phoebus ::

1./

2. if KAJ? napisi pogoj pa bomo lahko kaj povedali. Vedet moras tocen oz. vse tocne pogoje, ce bos delal hardver logiko.

3. Latch je flip flop brez ure (ima samo R-S/J-K/karkolipac vhode)

4. kupi dekoder za lcd.

Zgodovina sprememb…

  • spremenil: Phoebus ()

Zzzzzzz ::

2. mislm, da sem pogoje kokr tolko dobro napisal. Imam 8-bitno vodilo, preko katerega gredo podatki in glede na prvi kontrolni bit, se morajo al shranit v pomnilne celice (bit je 1) al pa poslat naprej (bit je 0). Aja, vsa ta logika bo v CPLD-ju.

3. THX

4. Dekoderji, ki podpirajo prikaz do 8 izhodov na LED displej, so kr dragi (okoli 2k sit). A se da dobit kje kaj cenejšega oz. je kakšna druga alternativa?

Brane2 ::

Ne razumem bistva vprašanja.

Imaš 2x8 bitov iz CPUja in še nekaj kontrolnih bitov. Glede na stanje teh bitov se naj CPLD odloča kaj naj z 2x 8 biti. Gredo lahko ali v ram ali pa "naprej" (karkoli to že je).

Ja, enostavno napiši enačbe za CPLD. Najprej pogruntaj, kako priklopit poleg vsega nanj še RAM, nato pogruntaj enačbe. Rabiš avtomat- state machino. Tu lahko kombiniraš. Lahko uporabiš osembitni SRAM in tako podatek vpišeš v dveh šusih, ali pa vzameš dva RAMa vzporedno. SIcer pa ne vidim, zakaj vse operacije odločanja ne opraviš v HC11....


4. Dekoderji, ki podpirajo prikaz do 8 izhodov na LED displej, so kr dragi (okoli 2k sit). A se da dobit kje kaj cenejšega oz. je kakšna druga alternativa?


Če sem prav razumel, rabiš dekoder za 7-segmentni LED displej ? To je pa ja enostavno. Najprej si izriši vse cifre (0-9,a-f) in si stabeliraj, kdaj gori kateri segment. Nato napiši enačbe segmentov. Se pravi za vsaki segment določi, pri katerih vhodnih kombinacijah mora biti prižgan. Nato to izvedi s CPLDjem...

slawc ::

latch je zapah, torej: in, out in latch_enable, ko je recimo na latch enable 0 se podatki iz in prenasajo na out, ko je pa na 1 pa se na izhodu pac neko stanje obdrzi neglede kaj je na vhodu.

LP, Slawc

Zzzzzzz ::

No, morda sem res malce neumno napisal.

V glavnem, v mikrokontrolerju lahko izvršim le en ukaz od enkrat in za pošiljanje podatkov moram uporabit 4 ukaze:
1. pošlji bit 1 (iz acc. A)
2. pošlji bit 2 (iz acc. B)
3. naloži kontrolne bite v A oz. B
4. pošlji kontrolne bite

Vsak izmed teh ukazov porabi 2 do 5 urinih ciklov, odvisno od načina naslavljanja. Glede na to, da teče uC na 1 MHz, to pomeni da vsak ukaz porabi 2 do 5 mikrosekund; tako štirje ukazi porabijo od 8 do 20 mikrosekund. Predivdevajmo, da porabi ukaz vedno 5 mikrosekund. Prvi bit pride po peti, drugi po deseti, kontrolni pa šele po 20 mikrosekundi.

A je ta zamik v "prihodu" podatkov slaba stvar oz. stvar, ki mi lahko povzroča probleme ali to sploh ni pomembno?


Tu trenutno ne bi kompliciral z ramom, za tistih par bitkov, ki bi rabu. Enostavno bi en lih par latch-ov uporabu.


PS: Ma sm tudi jst enmalo neumen... Pri tolikih zmožnostih CPLD-ja bi šel kupovat še dekoder za led displej... :\

Brane2 ::


A je ta zamik v "prihodu" podatkov slaba stvar oz. stvar, ki mi lahko povzroča probleme ali to sploh ni pomembno?


Odvisno od same naprave, ki podatke pričakuje. Vsekakor moraš s tem časom računati in ne samo upati, da bo stvar kar nekako delala...

Zzzzzzz ::

Vsi podatki gredo v CPLD.

Ko pride interrupt, da je bil preko SFH-5110 poslan podatek, uC prebere vse podatke, preračuna in pošlje v CPLD obdelane podatke in kontrolne bite.

Če je tu pomemben čas prihoda podatkov, kako npr. naredim zakasnitev 5 milisekund na enem vhodu v CPLD?

Še tole: Kaj je boljše uporabit dva tranzistorčka v push-pull vezavi za vklop/izklop ledic (oz. ekvivalenten čip - a obstaja?) al jih direktno povezat na izhode CPLD-ja?


Še tku, BTW: Prvi vikend v maju (2., 3. in 4.) je v Pordenonu v ITA sejem HI-FI in radioamaterske opreme. Jst sm se odloču, da grem mal firbca v meni na pašo spustit... A gre še kdo tja?

Zzzzzzz ::

Just thinking...

Nemam kej delat pa sem se dal malo razmišljat.

Alora, ko jst pošljem bit (recimo, da je to enka) v CPLD, potem se ta enka sprehodi skozenj in iz nje nastane kar pač nastane.
To enko jst pošljem iz uC preko SPI vmesnika. Predvidevam, da ta enka ostane na vhodu CPLD-ja dokler tega bita (enke) ne spremenim. Ali predvidevam pravilno?


PS: Sej vem, sm tečen, neumen in oh in sploh, ampak včasih me taka malenkostna vprašanja spravljajo s tira. Poleg tega nism izrazit elektronik (bolj softveraš) in imam zato še več neumnih vprašanj, ki verjetno nimajo ne repa ne glave. Se oproščam vnaprej.

Brane2 ::


Vsi podatki gredo v CPLD.

Ko pride interrupt, da je bil preko SFH-5110 poslan podatek, uC prebere vse podatke, preračuna in pošlje v CPLD obdelane podatke in kontrolne bite.

Če je tu pomemben čas prihoda podatkov, kako npr. naredim zakasnitev 5 milisekund na enem vhodu v CPLD?

Odvisno od zahtev zunanjega RAMa, kamor pišeš. Ponavadi SRAM zahteva, da najprej postaviš naslovne linije (in če gre za vpis tudi podatkovne) in kontrolne linije in šele nato požegnaš vpis ali branje s CE in WE...

To je nekako tako kot v tistih risankah s kojotom in modrim dirkačem: Na voljo imaš full matereiala, ali bo končna naprava delala, je odvisno od tvoje natančnosti. Tam lahko vidiš, na koliko načinov lahko stvari NE delajo, če nekaj sanjaš na pamet... >:D


Še tole: Kaj je boljše uporabit dva tranzistorčka v push-pull vezavi za vklop/izklop ledic (oz. ekvivalenten čip - a obstaja?) al jih direktno povezat na izhode CPLD-ja?


Tako kot za vse ostalo: poglej v datasheet CPLDja. :)
Če se ne motim, lahko tam vsak pin da od sebe 24 mA brez problema, kar je več kot dovolj za krmiljenje LEDice. Daj v serijo z njo ustrezen upor in to je to...


Še tku, BTW: Prvi vikend v maju (2., 3. in 4.) je v Pordenonu v ITA sejem HI-FI in radioamaterske opreme. Jst sm se odloču, da grem mal firbca v meni na pašo spustit... A gre še kdo tja?


Jaz bi, a čas me baše. Boš moral najt kakega aktivnega radioamaterja za delitev stroškov...

Zgodovina sprememb…

  • spremenil: Brane2 ()

Brane2 ::


Alora, ko jst pošljem bit (recimo, da je to enka) v CPLD, potem se ta enka sprehodi skozenj in iz nje nastane kar pač nastane.
To enko jst pošljem iz uC preko SPI vmesnika. Predvidevam, da ta enka ostane na vhodu CPLD-ja dokler tega bita (enke) ne spremenim. Ali predvidevam pravilno?


Tako ot v risankah (kojot<--->modri dirkač), omejitev je bolj v tebi in ne v CPLDju. ČE implementiraš v CPLDju enostavno logično funkcijo, potem je tako kot si napisal. CPLD ne more povratno vplivati na vhodni signal, saj ima tam vhod in ne izhoda. Ni pa to nujno res. Čisto enostavno lahko pin konfiguriraš kot I/O. V nekem trenutku jealhko vhod, pozneje pa CPLD recimo aktivno krmili pin. Recimo tako kot kak podatkovni pin na RAMu. Če vpisuješ vanj, je ta pin za RAM vhod, če bereš, je izhod. Vmes je neaktiven. To lahko dosežeš tudi s CPLDjem...

Lahko imaš tudi open-collector aranžman.Ime je še iz časov tranzistorske logike, ko so krmilili bremena s tranzistorji. Če krmiliš breme (recimo LEDico) s tranzistorjem, ki ima emiter na masi in je breme med kolektorjem in napajanjem, lahko to počneš tud z večimi vzporedno vezanimi tranzistorji, ki jih lahko krmiliš z različnimi signali. Takrat bo skozi breme tekel tok, če vsaj eden od tranziostorjev prevaja. Tako dobiš torej OR funkcijo. Temu pravijo tudi wired-or.

Zanimiva lastnost tega pristopa je ta, da lahko nek signal krmiliš z več izhodi hkrati, ne da bi bilo karkoli narobe. Signal vlečeš "gor" pasivno z uporom, dol pa z enim ali večimi izhodi, ki so tipa "open collector"- torej lahko tok samo potegnejo vase- ge ne dajejo. Signal bo visok samo takrat, ko bodo vsi izhodi neaktivni.

Tak način komunikacije uporablja denimo PS/2 tipkovnica za PC, I2C standard, pa še marsikaj. Tudi CPLD zna tako krmiliti breme.SIcer z manjšim trikom, ker ponavadi nimajo OC driverjev, pa vseeno.


PS: Sej vem, sm tečen, neumen in oh in sploh, ampak včasih me taka malenkostna vprašanja spravljajo s tira. Poleg tega nism izrazit elektronik (bolj softveraš) in imam zato še več neumnih vprašanj, ki verjetno nimajo ne repa ne glave. Se oproščam vnaprej.


No problemo. Ti kar vprašaj. Sem sicer že malo zarjavel na tem področju, a če lahko skupaj spravim kak primerček, ga bom...

Zzzzzzz ::

Odvisno od zahtev zunanjega RAMa, kamor pišeš. Ponavadi SRAM zahteva, da najprej postaviš naslovne linije (in če gre za vpis tudi podatkovne) in kontrolne linije in šele nato požegnaš vpis ali branje s CE in WE...

Zunanjega rama ne uporabljam - preveč komplikacij.
Sem pa ugotovu eno stvar, ki malce poenostavi vso zadevco: Če ne uporabljam čakanja na podatke sploh ni tak problem. Dokler vsi podatki ne pridejo, se pač narobe računa. Mislm, da tistih par milisekund ne predstavlja kakega velikega problema. Se pa moram pametno odločit, v kakem zaporedju pošiljat podatke, da se ne bo preveč bliskalo (ledice namreč). Se pravi, najprej kontrolne bite, potem podatke. Lušno bi blo, če bi ugotovil še kako par milisekund počakat z izvajanjem, vendar ni panike, se bodo pa lučke mal prižigale in ugašale. :D
A pravilno sklepam?


Tako kot za vse ostalo: poglej v datasheet CPLDja.

Oh, ja, datasheet... Res piše: "High-drive 24 mA outputs". To bo to, kajne?
Se mi prow dopade, ker ne bo treba nič komplicirat... Še tako imam shemo veliko čez cel A4 list...


Jaz bi, a čas me baše. Boš moral najt kakega aktivnega radioamaterja za delitev stroškov...

Nisem vprašal z namenom iskat nekoga da bi si delila stroške - itak nas gre z naših krajev kar enih par, ker gremo tudi malo v nabavo. >:D
Na našem koncu (Il. Bistrica) smo si pač začeli graditi packet radio omrežje (1.2 Mbps) in rabmo dele. No, v bistvu rabmo enih par računalnikov za router (vsak od nas ki si bo to delal, rabi po enga za svojo mini mrežo, razen če noče bit direkt povezan), pa enga za en švoh simpl webserver in "access point".
Seveda bomo ob prilki spustili tudi naše firbce mal na pašo.
A se na takih sejmih (to bo moj prvi) da kupt mal bl poceni tudi kakga NOVEGA xilinxa oz. kej podobnega al se vse take stvari dobi le rabljene? Ampak če rabljenga dobim za euro, dva, jih kupim enih par, pa tudi če mi dva crkneta, sem še zmerej na dobičku... :D


ČE implementiraš v CPLDju enostavno logično funkcijo, potem je tako kot si napisal. CPLD ne more povratno vplivati na vhodni signal, saj ima tam vhod in ne izhoda.

V bistvu moje implementirane funkcije ne bodo glih najbolj enostavne, bodo pa sestavljene seveda iz najbolj enostavnih logičnih komponent (in, ali, or, xor, not). Vendar sem se pa že na začetku odločil, da ne bom kompliciral z I/O - Vsi moji pini so al input ali pa output. Ker če ne bi imel še dela s postavljanjem diod za blokado signala, vendar sem si rekel, da bom naredil bolj simpl varianto, čeprow bom vzel malo večji CPLD (9572 v ohišju PLCC84). Mogoče mi še kdaj prav pride. Poleg tega ne vem, kako bi naredil tako zapleteno ploščico sam doma, če bi imela toliko povezav. Še tako jih ima sedaj ogromno in bo verjetno kar zapleteno. Upam, da jih ne bom preveč uniču, preden bo stvar delovala. :\

Open-collector je v bistvu zelo zanimiva stvar, kako so si v še ne tako davnih časih pomagali z analogno tehnologijo in veliko iznajdljivosti. Vendar, v današnjih časih, pri toliki izbiri mikrokontrolerjev, FPGA-jev in (C)PLD-jev nima smisla tega uporabljat, a ne?


No problemo. Ti kar vprašaj. Sem sicer že malo zarjavel na tem področju, a če lahko skupaj spravim kak primerček, ga bom...

Najlepša hvala za ponudbo, vendar ti ne želim dajat dela. Bom že pogruntal tako da bo delovalo, le nekaj časa rabim. Pravijo, da je veliko boljše, če človek sam pride do spoznanja in se za to malce pomartra, kot pa da mu je vse na pladnju servirano. Tega se tudi sam držim, čeprav se izogibam izumljanja tople vode. Vendar, če bom imel kakšno (delikatno) vprašanje, bom vprašal, OK?
Glih danes sem na internetu dobil en super extra dober tutorial na temo VHDL-ja. Čeprow je pisan za FPGA-je se ga da brez problema dat tudi v CPLD, saj ni prevelikih razlik med CPLD-jem in FPGA-jem (v FPGA lahko spraviš več "neumnosti" noter, nima pa pomnilnih celic, kar CPLD ima, pa verjetno je še kaj - za to vem :\). Tutorial ima pa ravno to, kar potrebujem: 8-številčni 7-segmentni led driver. No, jst potrebujem samo 6 številčnega, kjer je 5 led displayev za številko, šesti pa le za predznak (če je število negativno). Pač 6., 7. in 8. ne povežem... ;o)
Če si želiš pogledat: http://www.mcmanis.com/chuck/robotics/f...
Če te zanima, kaj in kako bo ta moja stvar delala, ti lahko pošljem (skoraj dokončano) shemo... :\

Brane2 ::

Dober link, čeprav mislim da so na tem področju Xilinxovi tutoriali ZAKON. Poglej si malo Application Notese, pa kak tutorial itd...

Kar se načrta tiče, pošlji. (Moj email maš v mojem profilu) Mam hud feeling, da si stvari preveč zakompliciral, ker se še ne znajdeš.

Zzzzzzz ::

Hellov again!

Spet imam eno vprašanje. In spet je verjetno neumno, ma kaj si morem pomagat. :\ Bi bil rad sigurn, da bo tisto kar naredim tudi delalo.

Gre se za led displejčke. In sicer, VHDL program iz zgoraj omenjenega tutoriala deluje tako, da 10x v sekundi prižge (in ugasne) zahtevane ledice v led displejčkih. Ledice se tako ponovno prižgejo še preden se do konca ugasnejo in (ljudje) imamo občutek, da se ledice sploh ne ugasnejo.
Zdej me pa zanima naslednja stvar: Kaj se zgodi, če ne priklopim kristala na xilinxa? A bo to vseeno delalo, tudi če ni ure?


Tku, BTW: A si morda pogledou načrt? Sej ga nesm preveč zakompliciral? Ali pač? :D


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Čip kot multi switch

Oddelek: Elektrotehnika in elektronika
91094 (1010) Brane2
»

a/d pretvornik -> usb

Oddelek: Elektrotehnika in elektronika
222119 (1693) BluPhenix
»

PIC kot webserver (strani: 1 2 )

Oddelek: Elektrotehnika in elektronika
738347 (6460) ql000
»

LM7805

Oddelek: Elektrotehnika in elektronika
302807 (2251) Wannabi
»

74HC**** logična vezja

Oddelek: Elektrotehnika in elektronika
261533 (1364) Boky

Več podobnih tem