Fórum témák
» Több friss téma |
Sziasztok!
Valakinek nincs valami ötlete arra hogy hogyan írjak számláló progit (0-99), nem jövök rá, hogy hogyan lehetne megoldani, azt hogy multiplex vezérelten váltogassam a számokat (13-14 stb) Magát a mulit vezérlést tudom kezelni...pl ki írtam hogy 13. de nem jutok tovább neten sok megoldást láttam, de túl bonyolultnak tűntek Ha valakinek van tanácsa, annak köszönet!
Azt írod a 13-at kiírtad már, akkor 13-at kell növelned és azt kiírnod. Valami hatására növekednie kell, pl. gomb, vagy időzítés. Kicsit részletesebben leírhatnád melyik résznél akadtál el! A nyelvet is írd meg, amiben próbálkozol!
Üdv!
Mellékeltem, az általam írt progit, mint látható asm. Ez egy nagyon kezdetleges megoldás, és szerintem így ahogy van zsákutca A cél az lenne hogy pl másodparcenként léptesse a számokat)
Idézet: Ez multiplexelt kijelzés? „Magát a mulit vezérlést tudom kezelni...” A rajzot is tedd fel, nélküle nem értelmezhető a program, nem tudunk kiindulni.
Valoban zsakutca, de mivel ez a pic kezdoknek, megis van megoldas.
Ahogy latom, a portb-n vannak a kijelzo szegmensei. Ahogy te is latod, te egy fix erteket irsz bele. Ehelyett hasznalj egy valtozot, amit a legelejen, a cikluson kivul feltoltesz, majd menet kozben, valamekkora sebesseggel noveled. Ez a multiplex ciklus vegen lehetne, ahol mondjuk egy 16 bites szamlalot hajtasz, minden ciklusban csokkented az erteket es ha lenullazodott, akkor ujbol feltoltod eredeti ertekre es lepteted a valtozod erteket. Mivel a valtozod maga a szam lesz hexakodban, azt majd at kell alakitanod, erre jo lenne egy tablazat. Mivel itt 16F-rol van szo, csak a retlw johet szoba, de mivel osszesen 16 elemu a listad, ezert nem lesz nehez. Csak a rutint az elejere tedd. Mivel a multiplex idoerzekeny, ezert csak valtaskor erdemes az egesz tablazatos cecot megcsinalni. Vagyis igy nez ki majd a progi: - valtozo inicializalas - szamlalo mondjuk 43000-re - valtozok tablazatbol a kijelzendo szam1 es szam2 ertekre FOCIKLUS: - szam1 kiirasa - valtas - szam2 kiirasa - valtas - 16 bites szamlalo csokkentese, ha nem 0, akkor goto FOCIKLUS - szamlalo ujra 43000-re - a valtozo novelese, - valtozok tablazatbol a kijelzendo szam1 es szam2 ertekre - goto FOCIKLUS Egyebkent interruptban kellene csinalni. Kezdokent is jo lenne, ha hamar megismerkednel az interrupt fogalmaval.
Szia!
Köszi, a részletes leírást! Kipróbálom így...És megtanulom az interruptot... Egyébként a megszakítás rutinba (org 4-hez) kell írni a digit váltásokat?
Tulajdonkeppen kicsit eloreszaladtal, de majd igen.
Ugy fog tortenni, hogy egy belso szamlalot (timer) felprogramozol a foprogramban, hogy megszakitast okozzon minden x. milliszekundumban (pontosaban y db orajel utan). Ilyenkor a foprogram felbehagyja a mukodest es elugrik a megszakitasvektor altal jelzett helyre. Maga a megszakitas ugy fog kinezni, hogy eloszor is azonositod, hogy a timer okozta-e a megszakitast, ha nem, siman visszatersz. Ha o okozta, akkor ujra felprogramozod es inditod megint. Utana megnezed, hogy eleg ideig volt-e kint az egyik digit, ha igen, valtasz a kovetkezore, ha az utolso volt, akkor ujra az elejere. Tehat ezt a fajta interruptot ugy kell felfogni, hogy ez veletlenszeruen megszakitja a foprogram mukodeset, elvegzi a dolgat, aztan visszater a foprogramhoz. Mindezt a te foprogramod latszolag eszre sem veszi, ha nem toltesz el tul sok idot interruptban. pl. az interruptban a sima keslelteto ciklus szigoruan tilos, helyette erdemes egy masodlagos szamlalo valtozot hasznalni, szamolod, hogy eddig hanyszor ugrott ide es ha ez meghalad egy erteket, akkor valtasz mondjuk egy ledet. Meg persze nullazod a szamlalot. En mindig beteszek egy ilyen kis ledvillogtatast valamelyik timerre, hogy lassam, fut-e meg a megszakitas. Megnyugtato
Sziasztok
Kristály oszci (4Mhz) hibával találkozott már valaki? Alapból megy szépen a PIC, de nagy melegbe behülyül, leáll. Cseréjével megoldódott a probléma. Mi tud ezen tönkremenni? Üdv
Szia!
A 4MHz egyes típusoknál a HS és az XT oszcillátor módok határára esik. Ki kellene próbálni mind a két móddal.
Szia
A program nem átírható sajnos. Az oszci cseréjével megoldódott a probléma. Üdv
Kondik valtoztatasaval probalkoztal mar? Soros ellenallassal esetleg? Mindegyik kristaly mas es gyartotol is fugg, hogy milyen kondikkal es ellenallassal jo az illesztes az oszci fele.
Szia
Ez egy gyári áramkör, nagy melegbe voltak vele gondok, ha hőlégfúvóval közelítek a kristályhoz leáll a PIC, majd kihűlés után újraindul, egy ugyanolyan tipusú kristály cseréjével megoldódott. A kérdésem csak annyi, mitől tud tönkremenni ilyen értelembe egy kristály? Találkozott-e valaki ilyen jellegű hibával? Üdv
Valoszinuleg nem a kristaly ment tonkre, hanem a hozzavezetes. Ha meleg van, bimetallkent eltartja magat onnan. HIdegben ujbol erintkezik.
Sziasztok! Eléggé kezdő vagyok még a PIC-ek terén, éppen egy körszámlálón dolgozom a modellautómhoz, odáig minden stimmel, hogy figyeli a pic az egyik bemenetet, és egy változóhoz mindig hozzáad egyet, de ez ugye binárisan megy, az is ok, hogy kirakom a bináris számot a portra, de én ezt a számot szeretném hétszegmenses kijelzőkre kiíratni, de itt megakadtam, hogyan tudom ezt elérni? Segítsetel PLS
Tegyél a portra egy BCD/7 szegmenses dekoder IC-t és kész.
Igen, ez kézenfekvő lenne, de mivel az áramkör másik célja a tanulás, szeretném ezt a dekódolást szoftweresen megoldani.
Na akkor nagy vonalakban a mátrix:
Kiteszed a szám 7 szegmensre átalakított kódját a portra. Ezután rögtön bekapcsolod az adott digit meghajtó tranyóját. Ekkor világít a kijelződ. Ezt 2...10ms-ig hagyod majd lekapcsolod a digit meghajtást. Kiteszed a következő számjegy kódját a portra és bekapcsolod a következő digitet, és így tovább... Nálam a 7 szegmens kódja egy tömbben van letárolva és onnan hívogatom.
A mátrixolás részse is tiszta a dolognak, ha nagyvonalakban felvázolnád ezeknek a tömböknek a lényegét, és mikéntjét azt nagyon megköszönném, mert a pic programozásnak ezen a terén még láma vagyok.
Keresgéltem neten, és a tömbök már tiszták, abban viszont, még kellene egy kis segítség, hogy miként tudom azt eldönteni, hogy mikor melyiket kell meghívnom, magyarul: hogyan tudom "megnézni", hogy mennyi a változó értéke, hogy éppen melyik tömböt kell meghívnom? Ha nagyon hülye vagyok akkor sorry, de nekem ez a része most tényleg nem tiszta.
Annyi jó cikk van a HE-n, amit idejüket nem kímélve írtak lelkes fórum tagok. Te se sajnáld az időt és először ezek között keresgélj! Érdemes. Bővebben: Link
Az AD átalakítóval be kell olvasnod a poti értékét és ennek az értéknek a függvényében kell állítanod a késleltetést!
De ne kapkodj: először LED villogtatás, késleltetés megértése, AD átalakítás próbálása és utána a kettő "összegyúrása" --> így fogod megérteni, hogy mi mit csinál és hogyan tudod befolyásolni a működést! Steve
A késleltetést értem, csak a parancsokat nem igazán vágom még..
Ezért írtam, hogy ne kapkodj! Hidd el mindenkinek nagyon sok órájába telik, mire (meg)tanul programozni, Te még csak most kezdted és szépen haladsz, van benned elszántság, csak az alaposság és a türelem is nagyon fontos programozói tulajdonság, így erre is "gyúrjál" !
De lassan már "offolunk", így csak ha van kérdésed, akkor beszélgessünk! Steve
Okés, jön a kérdés! Na, tehát, honnan tudom megszerezni a parancsot amit kell használnom, meg stb. ami kell most?
Sziasztok ! Vanegy kérdésem: Hogyan oldható meg, hogy a stroboszkópomba beépítsek egy potit, amivel a villogás sebességét le tudom szabályozni?! A forrás:
Idézet: „ „ #include "C:\PIC programozasaim\stroboszkop\strobika.h" void main() { setup_adc_ports(NO_ANALOGS|VSS_VDD); setup_adc(ADC_OFF); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC); setup_vref(FALSE); setup_oscillator(OSC_4MHZ); while(1) { Output_high (PIN_A5); //A portA 5-ös kimenete legyen H szintű Delay_ms(40); //Várakozz most 40ms-ot és nincs feladat Output_low (PIN_A5); //A portA 5-ös kimenete legyen L szintű Delay_ms(40); //Várakozz most 40ms-ot és nincs feladat } } ” Na, tehát, honnan tudom megszerezni a parancsot amit kell használnom, meg stb. ami kell most?
A delay -nél az értéket egy változóban tárold. Ha az már megy, jöhet az A/D feldolgozás. Szólj ha jutottál valamire.
(használd a kód gombot vagy tedd be csatolt fáljba a C forráskódot)
A változók előtt mindig a % jel áll, akkor hogyan írjam ki?!
Idézet: „ int a=40 %a Valami ilyet olvastam.. ” [OFF] Ui: levelem megkaptad?
Megkaptam.
Azt a magyar nyelvű C könyvet nem akarod elolvasni, amit linkeltek? Abban feketén fehéren le van írva a változók használata. (% jel az osztás tört részét adja vissza)
Akkor majd segítesz priviben ha lesz időd?
De, elakarom, de olyan hosszú , mint a kutya farka. |
Bejelentkezés
Hirdetés |