Fórum témák

» Több friss téma
Fórum » Bináris óra
Lapozás: OK   14 / 26
(#) zenetom válasza hackerfish hozzászólására (») Dec 29, 2010 /
 
Hali!
Látom jól haladsz, de nagyjábból a programban kommentezd föl, hogy a fontosabb sorok mit csinálnak, mert ha más projectet is csinálsz, aztán erre vissza akarsz téni, akkor nehéz lesz eligazodni a programban!
(#) hackerfish hozzászólása Dec 29, 2010 /
 
Sikerült!
Kicsit felgyorsítottam, hogy letesztelhessem, és látszólag jól működik! A kommentezés még bepótolható.
Márcsak be kell lőni az időzítést 1 másodpercre.
(Meg a gombok, dobozolás, stb...)
(#) hackerfish hozzászólása Dec 29, 2010 /
 
Jólva, azthiszem nagyjából kész.
Ma már jól fogok aludni, mert ha valami nem akar rendesen működni, az úgy idegesít, és állandóan azon jár az eszem...

binclock.ASM
    
(#) hackerfish hozzászólása Dec 29, 2010 /
 
Íme pár kép:
(Nem túl jók, mert webkamerával készültek.)
(#) hackerfish hozzászólása Dec 29, 2010 /
 
Az jutott még eszembe, hogy nem lehetne -e beállítani, hogy a kimeneteken ne 5V legyen, mert ez a ledeknél fölösleges, és ha mondjuk csak 2V lenne, tovább tartana az elem is nem?

Egyébként PIC-hez milyen elemet szokás használni?
Az óra most 9V-os elemről megy, 7805-tel, de lehet, hogy egy kis 12V-os elem lesz, vagy 2db 3V-os gombelem, mert ezek kisebbek.
(#) vilmosd válasza hackerfish hozzászólására (») Dec 29, 2010 /
 
Hali
Egy tanacs. Szep dolog egy kezdotol, amit csinalatal. De ha akarsz egy pontosabb orat( nem pontosat), akkor az idozitest felejtsd el. Meg kell csinalni kulso kvarccal es a Timer1 interrupttal, ami sokkal pontosabb idozitest fog adni. Be kell allitani a TMR1-et 1/1 eloosztasra, es fel kell tolteni 15572 ertekre. Igy kapsz egy 50 msec tick-et 4 MHz-es kvarc eseten. Az IT rutinban novelsz egy it_cnt valtozot 20-ig (vagy beleirsz 20-at es "decfsz it_cnt" utasitassal csokkented), es ez ad neked 1 sec jelet. Innen mar a tobbi lehet ugyanaz. A MPLAB szimulatorban le tudod merni a sec hosszusagat, es ha nem egeszen pontos, a TMR1 erteken valtoztatsz egy kicsit az elteres korrigalasara.
Csa Vili
(#) hackerfish válasza vilmosd hozzászólására (») Dec 29, 2010 /
 
Köszi, ennek utánaolvasok!
(#) vilmosd válasza hackerfish hozzászólására (») Dec 29, 2010 /
 
Hali
Meg lehet az egeszet csinalni 2 AA meretu elemrol is. Akkor a 7805 fogyasztasa is elmarad (kb 5 mA). Vegyel nagy fenyereju LED-eket, es jarasd 2-3 mA arammal oket, akkor tovabb birja az elem (470 ohm soros ellenallat).
Csa Vili
Ps: a 'F627A 2 volttol megy, es meg esetleg lehet hasznalni 32,763 kHz-es kvarcot is a fogyasztas csokkentesere. De a ledek ugyis sokkal tobbet zabalnak.
(#) hackerfish válasza vilmosd hozzászólására (») Dec 29, 2010 /
 
2AA -> 3V
Pedig én mindenhol azt olvastam, hogy a PIC-nek stabil 4,5-5V táp kell. Akkor ez most hogy van? Lehet kevesebb is?

Az óra már kicsivel 2 óra után óta üzemel, és még mindíg jó. (A teletexthez nézem.)
Egyenlőre ez a pontosság bőven elég. A végleges COUNT1, COUNT2 értékek 99 és 50.
(#) vilmosd válasza hackerfish hozzászólására (») Dec 29, 2010 /
 
Hali
Az adatlap mindenre valaszt ad. En hasznaltam 12F683-at 2 ceruzaelemrol (a nyuszis), hasznalatun kivul "Sleep"-ben, 2-3 honapot kibirt. "Sleep"-ben 5-6 uA volt az aramfelvetel.
(#) hackerfish válasza vilmosd hozzászólására (») Dec 29, 2010 /
 
A ceruzaelemmel az az egy gond, hogy nagy. Mármint két ceruzaelem kb akkora helyet foglal, mint egy 9V-os, de az tovább bírja. Sleep módot óránál nemnagyon lehet használni, de egy olyan funkción gondolkodom, hogy energiatakarékosságból, vagy ha a villogás zavar ki lehessen kapcsolni a másodpercet, vagy akár az egész órát, persze úgy, hogy közben tovább számoljon. Az ellenállásokat viszont ki fogom cserélni 470 Ohm-ra.
(#) hackerfish hozzászólása Dec 29, 2010 /
 
Találtam egy hibát: elfelejtettem kirakni eleje2 címkét, és átírni a hozzá tartozó ugrást az időzítőben. Erre úgy jöttem rá, hogy ha felcseréltem a két számot az időzítésnél, és megváltozott a sebesség. Pedig nem kellett volna, mivel az a két szám szorzata. Javítottam, de most újra be kell állítani az időzítést :guluszem1:
(#) hackerfish válasza vilmosd hozzászólására (») Dec 30, 2010 /
 
Az órát egész este bekapcsolva hagytam, reggelre kicsit elállítódott. (Csak a másodperc, de hosszútávon ez sem jó.)
Szóval szeretném megcsinálni a TIMER-es megoldást, amit írtál. Első körben utánaolvasok...
Meg lehet ezt valósítani a program minimális átírásával? És tulajdonképpen mit kell időzíteni? A növelés meghívását egy végtelen ciklus közben, ami a kiírást hívja meg? Ez már egy megszakítás lesz nem?

Közben elkezdem a nyomógombos részt is, mert teszteléskor mindíg be kell állítani az aktuális időhöz, és ha lecsúszok róla, kezdhetem elölről.
A gombnoymáskor célszerű a felengedést figyelni nem? (Gondolom így egy hosszú nyomás nem fog több nyomásnak számítani.)
(#) hackerfish hozzászólása Dec 30, 2010 /
 
Üdv!
Elkezdtem átolvasni egy megszakításos leírást.
Most itt tartok:
  1. ORG     0
  2.         GOTO    START
  3.  
  4. ORG     4
  5.         CALL    NOVEL
  6.         RETFIE
  7.  
  8. START
  9.         ; PORTA
  10.         MOVLW   B'00000111'
  11.         MOVWF   CMCON
  12.         BSF             STATUS,RP0
  13.         MOVLW   B'10000'
  14.         MOVWF   TRISA
  15. ; TIMER bekapscolása
  16. MOVLW   B'10000111'
  17. MOVWF   OPTION_REG
  18.         ; PORTB
  19.         MOVLW   B'11000000'
  20.         MOVWF   TRISB
  21.         BCF     STATUS,RP0
  22. ; TIMER bekapcsolása
  23. BSF     INTCON,GIE
  24. BSF     INTCON,T0IE
  25. ...

Eddig jó?
A megszakításba elég annyi, hogy "CALL NOVEL"?
Már csak be kell állítanom, hogy 1 másodpercenként hívódjon meg, vagy van más is?
(#) vilmosd válasza hackerfish hozzászólására (») Dec 30, 2010 /
 
Hali
Azt a "call"-t hagyd ki, es oda ird be kozvetlenul a kodot. Lehetoleg takarekoskodj a "Stack" eroforrasaval, mert a 16F-osokban csak 8 szintu, es gyorsan elfogy. A Timer0 nem fog neked 1 masodpercig szamlalni. 8 bites csak. Azert irtam a multkor, hogy hasznald a Timer1- et, mert az 16 bites, es tudsz vele 50 msec IT-t generalni. Es pontosabban be lehet allitani az IT idejet.
(#) hackerfish válasza vilmosd hozzászólására (») Dec 30, 2010 /
 
Közben kicsit változott a kódom, sikerült csinálni egy olyat, hogy működjön az óra, de ez még nincs beállítva.
Igen, olvastam, hogy 4MHz-vel nem lehet pontos időzítést csinálni, de ha csak egy kicsit lenne pontosabb, mint az előző (timer nélküli) megoldás, már örülnék.

A callt javítom.

binclock.ASM
    
(#) hackerfish válasza vilmosd hozzászólására (») Dec 30, 2010 /
 
A call-t javítottam, a NOVEL-ben a returnokat kicseréltem GOTO TOVABB1-re, és a TOVABB1 cimkét odaraktam a NOVEL legvégéhez. Így jó lesz?

Az átállás TIMER1-re csak annyi, hogy mindenhol átírom a nevét?

binclock.ASM
    
(#) vilmosd válasza hackerfish hozzászólására (») Dec 30, 2010 /
 
Hali
Most igy kora reggel ehgyomorra nem nezem at a kodod teljesen. Viszont ami fontos: lehetoleg csak a szukseges dolgokat tedd a megszakitas rutinba. A masik: Az legyen az elso, hogy a "W" es a "Status" el legyen mentve az IT indulasakor, es a vegen vissza legyen allitva. A szamitogepeden talalsz mintapeldat a MPLAB konyvtaraban. Ja a Timer1 nem egyezik a Timer0-val. Kicsit mas a kezelese, de az adatlapban megtalasz mindent.
(#) hackerfish válasza vilmosd hozzászólására (») Dec 30, 2010 /
 
kora reggel?! 13 óra múlt.
A rutinban csak az idő növelése lesz.
Ok, rákeresgélek TIMER1-re...
Megcsinálom STARTUS mentését is.

Ja! És még egy kérdés: TIMER1 is működik belső oszcillátorral?
(#) vilmosd válasza hackerfish hozzászólására (») Dec 30, 2010 /
 
Nalam 1/2 7. Azert irtam hogy nezd at az adatlapot, mert a timer1 kezelese es mukodese elter a timer0-tol.
(#) hackerfish hozzászólása Dec 30, 2010 /
 
Megcsináltam a gombos cuccost.
Írtam egy olyan kódot, ami a gomb felengedésekor 1-el növeli a percet. De néha 2-vel növeli. A progiban nem látok hibát, és korábban olvastam, hogy a gombok nem tökéletesek, megnyomáskor többször is összeérhet az érintkezőjük. Én 3 mikrokapcsolót használok, olyat, amit az egerekből lehet kiszedni.
Van -e erre valami szoftveres megoldás?
  1. ; Gombok vizsgálata
  2. VIZSGAL1
  3.         BTFSS   PORTA,4
  4.         GOTO    LENYOMVA1
  5.         GOTO    FELENGEDVE1
  6.         LENYOMVA1
  7.                 CALL    KIIR1           ; Kiírás növelés nélkül
  8.                 BTFSS   PORTA,4
  9.                 GOTO    LENYOMVA1       ; Várakozás felengedésig
  10.                 GOTO    FELENGEDVE2     ; Felengedve
  11.                 FELENGEDVE2
  12.                         CALL    PERCNOVELESE
  13.                         return
  14.         FELENGEDVE1
  15.                 return
  16.  
  17. ; Funkciók
  18. PERCNOVELESE
  19.         MOVFW   PERC1
  20.         XORLW   B'1001'
  21.         BTFSS   STATUS,Z
  22.         GOTO    KISEBBPERC1GOMB
  23.         GOTO    NAGYOBBPERC1GOMB
  24.         KISEBBPERC1GOMB
  25.                 INCF    PERC1,F
  26.                 return
  27.         NAGYOBBPERC1GOMB
  28.                 CLRF    PERC1
  29.                 return
(#) hackerfish válasza vilmosd hozzászólására (») Dec 30, 2010 /
 
Mi 1/2 7?
"Timer1: 16-bit timer/counter with external crystal/
clock capability" Szóval csak külső oszcillátorral működik, vagy a clock a belsőt jelenti?
(#) brato válasza hackerfish hozzászólására (») Dec 30, 2010 /
 
Nem sok a return egy kicsit?
(#) hackerfish válasza brato hozzászólására (») Dec 30, 2010 /
 
Mért? Az egészet egy "CALL VIZSGAL1" hívja meg. És vagy növelés után megy vissza, vagy növelés nélkül, attól függően, hogy a gomb meg van -e nyomva. Ez eddig 2 return. Aztán a percnövelés is egy szubrutinhívással működik. De az elvileg csak a FELENGEDVE2-höz megy vissza. Vagy valamit rosszul csinálok?

A percnövelés meghívását átírtam goto-ra, és kivettem az utána következő return-t. Így is ugyanaz.

(Azért várok felengedésig, mert ha folyamatosan nyomom, folyamatosan növelné, nem csak 1-el.)
Én a hardverre gyanakszom, de ha látsz benne hibát, írd meg!
(#) brato válasza hackerfish hozzászólására (») Dec 30, 2010 /
 
Így nem sok a return.
De csak sima felengedés figyeléssel még a prellt nem tudod kiszűrni.
Keress rá a prellmentesítésre itt az oldalon is irtak pár módszert rá.
(#) hackerfish válasza brato hozzászólására (») Dec 30, 2010 /
 
Igen, egy NOP-os ciklus megoldotta a problémát! Köszi!

  1. ; Gombok vizsgálata
  2. VIZSGAL1
  3.         BTFSS   PORTA,4
  4.         GOTO    LENYOMVA1
  5.         GOTO    FELENGEDVE1
  6.         LENYOMVA1
  7. CLRF    COUNT1
  8. eleje1
  9.                 NOP
  10. INCF    COUNT1,F
  11. MOVFW   COUNT1
  12. XORLW   D'100'
  13. BTFSS   STATUS,Z
  14. GOTO    eleje1
  15.                 CALL    KIIR1           ; Kiírás növelés nélkül
  16.                 BTFSS   PORTA,4
  17.                 GOTO    LENYOMVA1       ; Várakozás felengedésig
  18.                 GOTO    FELENGEDVE2     ; Felengedve
  19.                 FELENGEDVE2
  20.                         GOTO    PERCNOVELESE
  21.         FELENGEDVE1
  22.                 GOTO    KIIR
  23.  
  24. ; Funkciók
  25. PERCNOVELESE
  26.         MOVFW   PERC1
  27.         XORLW   B'1001'
  28.         BTFSS   STATUS,Z
  29.         GOTO    KISEBBPERC1GOMB
  30.         GOTO    NAGYOBBPERC1GOMB
  31.         KISEBBPERC1GOMB
  32.                 INCF    PERC1,F
  33.                 GOTO    KIIR
  34.         NAGYOBBPERC1GOMB
  35.                 CLRF    PERC1
  36.                 GOTO    KIIR
(#) vilmosd válasza hackerfish hozzászólására (») Dec 30, 2010 /
 
Hali
Lesd meg ezt az oldalt. gombok kezelese, prellmentesitese. Amugy is erdemes vegignezni az oldalt. sokat lehet tanulni a mintapeldakbol.
(#) hackerfish hozzászólása Dec 30, 2010 /
 
Valami már megint nem jó, de akárhogy nézem, nem találom a hibát
Azt szeretném, hogy gomb1-et megnyomva megállítsa az időt (eddig jó), és utána gomb2-t vagy gomb3-at megnyomva növelje a másodpercet.
(Nem ez lesz a végleges "menü".)
De a másodpercet nem növeli rendesen. Pedig a PRELL szubrutint mindenhol meghívom.
(#) hackerfish válasza vilmosd hozzászólására (») Dec 30, 2010 /
 
Az időzítéssel akkor most mi van?
Jól értem a referenciából, hogy a TIMER1 csak külső oszcillátorral működik?
Ha igen, akkor TIMER0-val lehet kezdeni valamit, hogy kb 1 másodpercenként fusson le?
(#) vilmosd válasza hackerfish hozzászólására (») Dec 30, 2010 /
 
A Timer1 futhat kulso, vagy belso oszcillatorrol is. A T1CON regiszter TMR1CS bitjevel allithatod az orajel forrasat. Amit irtam peldat, annal 50 ms lesz a lefutas, tehat 50 ms lesz az IT ideje. Ezt lehet szamolni, es 20x50 ms az egy secundum lesz. Azert szajkoznam a Timer1-et, mert az indulo ertekkel lehetne finoman allitani az ora pontossagat. Fel kell tolteni minden IT-nel a Timer1-et 15572 ertekkel, es ez kb 50 ms kesleltetest ad. Ennek az erteknek a modositasaval tudsz pontositani.
Csa Vili
Ps: a 1/2 7 az az ido volt nalam azaz 06:30AM
Következő: »»   14 / 26
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem