Fórum témák
» Több friss téma |
Itt a táblázat nem fölösleges?
Mármint ha bináris az óra, a számok nincsenek kódolva, egy az egyben kiírhatók. A multiplexnél az jó, ha RB-t invertálom? Így ott kapcsolja össze a ledeket a földdel, ahol 0 az értéke. A multiplex értékét tartalmazó változót pedig kiírás előtt invertálom, majd utána visszalakítom, hogy lehessen vele számolni. Az invertálásra PICeknél van külön művelet, pl. NOT? A ledek bekötését valahogy így gondoltam:
Hali
Tablazattal konnyebben meg lehet csinalni szerintem. A BIN koddal meghivod a ket tablazatot, ahova beirod (binarisan) az altalad kivant variaciot (PORTA, PORTB) majd kiteszed a portra, es kesz. Nem kell konvertalni, szamolgatni, csak ket call.
Ez peldaul egy 7 szegmenses kijelzo meghajtasa ASM-ben. A hasznalata :
A hét szegmenses kijelzőnél értem is, de bináris változó esetén mért van rá szükség? Ott a változót mindenféle alakítás nélkül ki lehet írni, ahogy van nem? Persze akkor a ledeket szépen sorban kell bekötni, nem összevissza.
Referenciaként ajánlom ezt a _cikket_. ( Ill. A cikkben az forrásfájlt. )
Jéé, ezt még nem is láttam. Köszi!
És szerintetek mi legyen a 3 funkció?
Mi a legjobb megoldás amit ki lehet hozni 3 bitből? [stop/play] [óra +] [perc +] vagy... [óra > perc > másodperc] [+] [-] Most hogy így belegondolok a másodperc állítgatása eléggé fölösleges. Az óra, és perc beállíthatósága fontos. Az óra megállítása legyen a harmadik? _JANI_! Ezt nem értem: "Ill. A cikkben az forrásfájlt." Milyen harmadik cikk? Én csak egy egyoldalas cikket láttam, folytatás nélkül.
És a PORTB-t, vagyis az MPEX (multiplex) változót hogyan tudnám invertálni, úgy hogy kiírás után újra invertálva az eredeti számot kapjam, és ne kelljen a biteket egyesével vizsgálni és megváltoztatni? Vagy ezt csak bitenként lehet?
Az invertálásos kérdés már nem aktuális, megtaláltam:
movlw B'11111' ; Bitmaszk xorwf MPEX,1 ; Invertálás MOVF MPEX,W MOVWF PORTB movlw B'11111' ; Bitmaszk xorwf MPEX,1 ; Invertálás
( Illetve... Bocs nem akartalak megtéveszteni. )
_ASM_-fájl.
Jaaa... ahha! :heureka:
Íme a kijelző
Lehet hogy egy műanyag tolltartóba lesz beleépítve.
Ha PORTA-t beállítom, úgy hogy R0 bemenet, a többi kimenet legyen, és kiküldök egy 4 bites bináris számot a portra, mért R0-on kezdi a kiírást?
... ; PORTA MOVLW B'00000111' MOVWF CMCON BSF STATUS,RP0 MOVLW B'00001' MOVWF TRISA ... CLRF MPERC1 MOVLW B'1111' MOVWF MPERC1 ... MOVF MPERC10,W MOVWF PORTA ... A szimuláció ezt írja ki: PORTA/Binary: 00001110 De szerintem ennek kéne lennie: 00011110 A hardver majdnem kész, márcsak a megrendelt 7805-re várok, meg a nyomógombos nyák és a programozás van hátra.
Hali
Mivel bit helyesen teszi ki a portra az erteket, ez teljesen termeszetes. Viszont ha azt akarod, hogy a 4 bit egyyel feljebb keruljon el kell shiftelni balra 1x, es utana kiirni a portra.
Hali!
Az "el kell shiftelni" mit jelent? Most kicsit változtattam, és egyszerűsítettem a progin. Az előbb kicsit összekavartam, mert az invertált portnak az RB-nek kell lennie, nem RA-nak. Javítottam. Az egyszerűség kedvéért minden portot beállítottam kimenetnek. RA4 mintha nem működne... Rámértem a lábra, és amikor kéne, nincs rajta fesz.
Ha egy ilyet csinálok:
MOVLW B'00011111' MOVWF PORTA Csak az alsó 3 led világít. És nem elkötés, mert a lábon sincs meg a feszültség. A ledek így vannak bekötve: legalsó - RA1 RA2 RA3 legfelső - RA4 Mit csinálok rosszul?
A shifteles magyarul eltolast jelent 1 bit helyertekkel.. lehet jobbra, lehet balra. Mondtam mar, hogy olvassad a T es T oldalt. Ott minden utasitasnak le van irva a mukodese. Az RA4 problemara ugyanott, vagy az adatlapban megtalalod a valaszt. Ez azzal a kulonlegesseggel rendelkezik, hogy a CMOS kimeneti bufferbol csak az also "N" csatornas FET letezik, a felso "P" csatornas nem. Ugy hivjak hogy "Open Drain". magyarul nem tud csak "0"-t kiadni, "1"-ben szakadas.
Ezt hogy érted? Akkor RA4 egyáltalán nem tud 1-et kiadni?
Most köthetem át a ledet RA0-ra?
Jólvan, átkötöttem, így most működik is. RA4 bemenetnek azért használható?
Az RA4 termeszetesen hasznalhato kimenetkent es bemenetkent is. Erosen javaslom, hogy vedd elo az adatlapot es olvasd vegig az elsotol az utolso betuig (na jo az impresszumot nem fontos). Ott minden kerdesre valaszt kapsz.
Jó, de az adatlap bazi hosszú... maximum átnézem, és a fontosabb részeket végigolvasom, vagy ilyesmi.
Mosthogy kicsit 'megkeveredtek' a számjegyek, nem tudom simán kiírni a bináris számokat a változókból. Pl. a 9 nem 1001 lesz, hanem 0011, mert a port bitjeinek sorrendje ilyen: led4 -> RA0 (legfelső) led3 -> R3 led2 -> R2 led1 -> R1 Itt szükség lenne egy olyan táblázatra, amit korábban mondtál, de a bit eltolással egyszerűbben megoldható nem? Ide RRF ugye? Pl.: RRF MPERC10,W ; eltolás MOVWF PORTA ; kiírás RLF MPERC10,W ; visszaalakítás
Idézet: De ezt el kell olvasni, sot meg kell tanulni, mert kulonben nem fogod erteni a PIC belso felepiteset, es igy nem tudod programozni sem! „Jó, de az adatlap bazi hosszú” Idézet: Ezt meg lehetne ugy is oldani, hogy bekotod bit helyesen: RA0-> bit0 RA1 -> bit1...„bitjeinek sorrendje ilyen: led4 -> RA0 (legfelső) led3 -> R3 led2 -> R2 led1 -> R1” Vagy a tablazat, mert mivel nem sorban vannak a bitek, igy a shifteles sem segit rajta.
Mért, a shiftelés nem ilyet csinál?
3214 -> 4321, vagy az utolsó bit nem kerül az első helyre? Vagy ez így nagyon béna? Nemsok kedvem van újra bekötni, mert az összeset át kellene rakni.
Mondtam mar, hogy olvasd el a t-es-t oldalon az utasitasok mukodeset, es szintaktikajat! Ott vilagosan leirja es peldakkal illusztralja hogyan mukodik az utasitas. Van 8+1 bit (8 a regiszter+1 a "Carry"). A RLF pl elsifteli balra a valtozo 8 bitjet, a "0" bitbe betolja a "Carry" bitet. Probalgasd a szimulatorban , es figyeld mi tortenik a valtozoban kulonbozo tartalmaknal.
Ok, átkötöttem. Tökéletesen működik! (Bár egyenlőre még csak fényeffektként funkcionál.)
Hali!
Most ott tartok, hogy ki tudom írni a másodperc első számjegyét, a második oszlopban meg megjelenítek egy ötöst. (Utóbbit csak az időzítés miatt csinálom.) A másodperc növelődik is, de nem pont 1 másodperc alatt. Itt nem lehet szünetet használni, mert a multiplexet folyamatosan pörgetni kell. Csak a kiírást tudom ciklusba tenni, és meghatározni, hogy növelés előtt hányszor írja ki az adatokat. Itt a kódom, az lenne a kérdésem, hogy eddig jó -e, és hogy hogyan tovább? Az időzítés pontos beállítását most kellene megcsinálni, vagy majd a végén, ha a többi kód is megvan?
Már eljutottam odáig, hogy az órát is mutatta, de akkor egyszercsak valami elromlott.
A ledek többször egymás után gyorsan felvillannak, majd elalszanak és vége. Kipróbáltam, hogy kitörlöm az órás részt, és csak addig hagyom meg a kódot, ameddig tutira működött. Így is ugyanaz. Utána csináltam bele egy sima villogtatást, hogy kipróbáljam, hogy egyáltalán rendesen működik -e még a PIC, de az is ugyanezt csinálja. Most akkor mivan? :help: Szerk.: Most megint jó, nem tudom mivolt az előbb... Átfutnád a kódot, hogy jó -e?
Valószínűleg csak az elem merült le 5V alá. Kicseréltem, mostmár nem vacakol.
Már megijedtem, hogy sikerült kinyírni a PIC-et.
Érdemes lett volna az 5V-os tápegység megépítéséve elkezdeni a tesztelést!
De ezt a kis órát mindenképpen hordozhatóra szeretném, nem hálózatról akarom működtetni.
Mondjuk a teszteléshez tényleg használhatnék tápot is... |
Bejelentkezés
Hirdetés |