Fórum témák
» Több friss téma |
Mi van akkor, ha valami megszakításban olvasol?
Akkor az olvasás addig tart ameddig tart és minden csak ezután jöhet. Vagy ilyen lehetőség nem játszik? Bár nem egészen értem a problémád, de hátha valami segít vagy rávezet a megoldásra: SPI sebességének növelése. MCU sebességének növelése. LED driver más egyéb kommunikációs csatorna, ha lehetséges. (írásnál szokott ilyen lenni, olvasásnál kevésbé)
A LED driverben sok regiszter van, ezekből csak vagy 2-3 van ami változhat menet közben, mert azokban állapotjelző flag-ek vannak, így azokon keresztül tud problémákat jelezni a mikrovezérlőnek (persze ha a mikrovezérlő ki is olvassa belőle). Ezért is alkalmaztam jelenleg ezt a módszert, de a legkorrektebb az lenne ha minen módosításnál kiolvasnám, változtatnám az egyes biteket majd visszaírnám.
Ha csak olyan egyszerű lenne a probléma, hogy egy sima megszakításban lekezelném akkor nem tettem volna fel a kérdést...
![]() Az a gond, hogy operációs rendszer fut a mikrovezérlőn, amikben különböző task-ok vannak, amelyeket bizonyos időközönként meghív az op rendszer, egyiket pl 1ms-onként, másikat 10ms harmadikat 25ms. A teljes program rengeteg modulból áll amik flag-eken keresztül kommunikálnak egymással. Az a rész ahol adatokat kellene küldjek és fogadjak (a LED drivernek) a 25ms-os container-ben van és abban tudom meghívni az SPI függvényeket, amik egy másik modulban vannak, nem tudom milyen módon vannak megírva, de azok amúgyse módosíthatóak, annyit tudok, hogy kb 2ms után állít be egy flag-et és azzal jelzi, hogy kiküldte vagy beolvasta az adatot. Így én ha kiküldök a 25ms-os függvényemből egy bájtot akkor annak a továbbításáról csak 2ms múlva szerzek tudomást, ezért küldésnél csak 25ms-onként tudok küldeni egy-egy adatot. Olvasásnál is ugyanez lenne a helyzet, azaz kiküldeném az olvasni kívánt regiszter címét, majd 25ms múlva meghívhatom az olvasó függvényt, hogy olvassa ki nekem az adatokat, amit megint csak 2ms múlva kapok meg, de addig nem várakozhatok ott annyit, mert a 25ms-os függvényem teljes lefutási ideje le van korlátozva az op rendszer miatt és csak úgy egy while-t nem tehetek be, hogy várja meg a flag-et... Így ha az olvasást követő parancs az lenne hogy az olvasás eredményét módosítsa és küldje vissza akkor nem tehetek semmit, mert még nincs adat amit módosítani kellene. Emiatt kérdeztem, hogy ha még valakinek volt hasonló problémája akkor mi a teendő, jelenleg csak a küldést használom, egy segédváltozóval (egyfajta Latch-ként használom) és működik is jól, remélem a későbbiekben nem kérik az olvasást is ![]() Amúgy a mikrovezérlő 24MHz-en fut az SPI meg 600kHz-en. A LED driver csak SPI-on tud kommunikálni, de ezen változtatni már nem lehet, mert a hardver már készen le van gyártva, már csak a szoft kell rá.
Sziasztok!
Tudna valaki egy kis segítséget adni MM74C32N bekötéséhez? Konkrétan Ehhez szeretném szintillesztésként használni.
Ez nem tűnik szintillesztőnek.
Bővebben: Link
Megnéztem én is , igen , nekem is volt egy gyanúm rá hogy ez nem lesz jó. Köszi.
Én nemrég 74LVC07A -t használtam ilyesmihez.
Köszi. Lenne egy kérdésem. Egy ledet kapcsolok ki - be és szeretném lekérdezni az állapotát , hogy éppen be van e kapcsolva vagy nincs.
Ezt hogy lehet? Mert
A hozzászólás módosítva: Márc 28, 2015
Használj egy változót a PORTB árnyékaként. Annak a bitjeit állítsad, majd küldd ki a portra az egész bájtot.
Beolvasáskor a PORTB a PIC lábának állapotát adja vissza. A LED ottléte eltolja a szinteket, ezért nem kapsz jó eredményt.
Milyen PIC-et használsz nem muszáj árnyék változót létrehozni, ha van LAT regiszter is (ha jól tudom az is egy árnyék regiszternek számít) a PIC18-nál(az újabb 16F nél is) a LAT vissza van kötve a kimeneti LATCH-ról és ha azt figyeled és abba írod a kimeneti állapotot akkor működnie kell.
Ennél a PIC-nél nincs LAT marad az árnyék változó vagy esetleg ha analóg port kapcsold ki az analóg bemenetet(ANSEL:ANSELH) és úgy próbáld meg(de ebben nem vagyok biztos én mindig LAT-al figyeltem).
Hogy lehet árnyék változót készíteni ? Az az define lenne ? Nem találok semmit a googleban
![]()
Egy változót csak tudsz deklarálni? Az árnyék jelzőt csak a könnyebb érthetőség kedvéért használtuk.
Ha figyelemmel kísérnéd a fórumot, akkor tudnád:
Bővebben: Link
Igen ,pl. unsigned int test = 0 ;
Köszi.
Most így elvileg megkapnám a led változóban , nem ?
Vagy így:
A LATB a LED valtózónak megfelelő. A hozzászólás módosítva: Márc 28, 2015
Erre is hibát dob :
Idézet: „29 401 ; expected, but '=' found example.c” Idézet: „29 392 'PORTB' Identifier redefined example.c” MikroC a fordítóm egyébként. A hozzászólás módosítva: Márc 29, 2015
Egy utasítást nem a ';' karakternek kéne lezárni?
De igazad van telefonról írtam és elfelejtettem.
Megis hogyan kepes egy LED eltolni annyira a szintet, hogy nem jo erteket olvas be? Ha nem totem-pole a kimenet (mondjuk nyitott kollektoros), akkor vilagos. Vagy, ha nincs elotet ellenallas a LED-del sorban, de akkor elobb azt a problemat kell megszuntetni.
Igazad van, úgy kellett volna írni, hogy eltolhatja a szinteket.
A hozzászólás módosítva: Márc 29, 2015
Sziasztok.
Szerintetek ezt a pickit2 clont érdemes megvenni? Bővebben: Link A hozzászólás módosítva: Márc 29, 2015
Ez a programozó az előbb rosszul linkeltem be.
Ennyiért otthon is kapsz talán még eredetit is.
Szia!
2K előtét ellenállás van a leden és így sem mutatja azt , hogy bekapcsolva lenne ( Mindig az else ág teljesül tehát Kikapcsolva). Bemásolom a teljes forrást (59. sorban van az első vizsgálat, 143.ban pedig a második)
Valakinek ötlet esetleg? A hozzászólás módosítva: Márc 29, 2015
Az elso if az 59. sorban az ugye nem 'C' kod, nem szolok hozza, nem tudom, hogy a bongeszodben futo Script mit tud a PIC port allapotarol. Azt latom, hogy a dinamikusan generalt szovegben elofordul a PORTB=nn; resz, ahol nn a PORTB erteke decimalisan, de hogy a PORTB.F0 mit jelent a javascriptnek, azt nem tudom.
A masodik (143. sor) már 'C' kod, de egy 1 bites bitfield erteke sosem lesz 48. Felteve, hogy a PORTB.F0 az egy egybites bitfield. Namost a 48 meg onnan jon, hogy a '0' az a nulla karakter ASCII kodja, ami 48.
Az "if(PORTB.F0 == 0)\"{\ az nem javascript, hanem a főprogram része. (kellene, hogy legyen, hogy működjön is)
Oda kellene valami még mert ezt így nem fogja értelmezni sem a fordító sem pedig a HTML. Ott be kellene zárni a HTML tagot majd a főprogram vagy is az if() feltétel után ismét folytatni a HTML tagot. Annak az if() feltételnek az lenne az eredménye, hogy színezze és a feltétel teljesülése eredményének fényébe a "Bekapcsolva" avagy a "Kikapcsolva" feliratot jelenítené meg a HTML oldal. A 143. sor pedig nem szám értéknek kellene lennie? (decimális, bináris vagy hexa) Az biztos jó lehet, hogy ASCII ellenőrzi port tartamát? Szerintem az ott ilyennek kellene lennie: (Nem biztos csak tipp)
A hozzászólás módosítva: Márc 29, 2015
|
Bejelentkezés
Hirdetés |