Fórum témák

» Több friss téma
Fórum » Bináris óra
Lapozás: OK   15 / 26
(#) vilmosd válasza hackerfish hozzászólására (») Dec 30, 2010 /
 
Hali
Itt egy mintaprogram a Timer1 IT-s kezelesere. Nagyjabol fel van kommentezve. 4 MHz kvarcra.

tmr1.asm
    
(#) vilmosd válasza hackerfish hozzászólására (») Dec 30, 2010 /
 
Ott a kesz mintaprogram. Termeszetesen a TMR1 also es felso byte-jat is fel kell tolteni. Az OPTION regiszternek semmi koze a TMR1-hez. Adatlap!!
(#) hackerfish válasza vilmosd hozzászólására (») Dec 30, 2010 /
 
Oké, köszi átnézem, és megpróbálom beépíteni az órába. Vagy inkább az órát építsem bele ebbe?
(#) vilmosd válasza hackerfish hozzászólására (») Dec 30, 2010 /
 
Inkabb
(#) vilmosd válasza hackerfish hozzászólására (») Dec 30, 2010 /
 
Hali
Itt egy kicsit bovitett valtozat, itt mar inkrementalja a percet, es az orat is.

tmr1.asm
    
(#) hackerfish válasza vilmosd hozzászólására (») Dec 31, 2010 /
 
Gondolom a STATUS_TEMP és a W_TEMP változók itt is mentésre valók. De hol van maga a mentés, és a visszaállítás? Nem az Inter-en belül kellene lenniük?
(#) brato válasza hackerfish hozzászólására (») Dec 31, 2010 /
 
Ott kellene legyen, az adatlapban benne van pontosan hogyan kell menteni, mert nem mindegy milyen utasítást használsz.
(#) hackerfish hozzászólása Dec 31, 2010 /
 
Ezt sikerült összehoznom valamit.
Még nem teljesen jó, mert túl gyors, de keresem a hibát...
Legalább elindult -> működik a timer, fél siker!

binclock.ASM
    
(#) brato válasza hackerfish hozzászólására (») Dec 31, 2010 /
 
A mentésed nem jó az adatlap szerint.

MOVWF SAVEW ;Mentések
SWAPF STATUS, W
CLRF STATUS
MOVWF SAVES
MOVF PCLATH, W
MOVWF SAVEP
CLRF PCLATH

MOVF SAVEP, W ;Visszaállítás
MOVWF PCLATH
SWAPF SAVES, W
MOVWF STATUS
SWAPF SAVEW, F
SWAPF SAVEW, W
(#) hackerfish válasza brato hozzászólására (») Dec 31, 2010 /
 
Javítottam, de még mindíg bazi gyorsan villog. Valamit elszúrtam. De mit?

binclock.ASM
    
(#) brato válasza hackerfish hozzászólására (») Dec 31, 2010 /
 
Nem tudom milyen értéket akartál beállítani, de a megszakításod az 10 msecundomonként van. Ha 4 MHz az órajeled.
(#) hackerfish válasza brato hozzászólására (») Dec 31, 2010 /
 
Hát mondjuk 1 másodperc jó lenne
Mit kell átállítani, az 15542-et, vagy az it_cnt vagy valami mást?
Már vagy 2 napja vacakolok ezzel az órával, kezdek belekavarodni

Végülis a lényeg az lenne, hogy TIMER1-el csináljak egy olyan megszakítást, ami másodpercenként végrehajtja a NOVEL szubrutint.
(#) brato válasza hackerfish hozzászólására (») Dec 31, 2010 /
 
A timer1 előosztójával tudsz még állítani rajta.
(#) hackerfish válasza brato hozzászólására (») Dec 31, 2010 /
 
Ok, megnéztem: T1CON-ban lehet állítani, TICKPS0-val és TICKPS1-el. Most 1:1-en van. Lehet 1:1, 1:2, 1:4, 1:8. Ezek közül melyik legyen?
És ebből most hogy lesz 1 másodperc?
(#) brato válasza hackerfish hozzászólására (») Dec 31, 2010 /
 
Beállítasz egy olyan értéket aminek a többszöröse pontosan 1 sec. Egy változó értékét növeled minden megszakításkor. Ha a megszakítások közötti idő x változó értéke=1 sec akkor léptetsz a másodpercen.
(#) hackerfish válasza brato hozzászólására (») Dec 31, 2010 /
 
De akkor most az előosztót melyik értékre állítsam be?
És a változót meddig növelem? Hánynál kell nullzni?
(#) hackerfish válasza brato hozzászólására (») Dec 31, 2010 /
 
Így jó lesz a megszakítás rész?
  1. ORG     4
  2. MOVWF SAVEW ;Mentések
  3. SWAPF STATUS, W
  4. CLRF STATUS
  5. MOVWF SAVES
  6. MOVF PCLATH, W
  7. MOVWF SAVEP
  8. CLRF PCLATH
  9.         movlw   low .15542
  10.         movwf   TMR1L                   ;Load  TMR1L Low part
  11.         movlw   high .15542
  12.         movwf   TMR1H                   ;Load  TMR1L High part
  13.         bcf             PIR1,TMR1IF             ;Clear TMR1 IT Flag
  14.         ;
  15.         MOVFW   COUNT
  16.         XORLW   D'10'                 ; határérték <-- mennyi legyen?
  17.         BTFSC   STATUS,Z
  18.         CALL    NOVEL
  19.         INCF    COUNT
  20. MOVF SAVEP, W ;Visszaállítás
  21. MOVWF PCLATH
  22. SWAPF SAVES, W
  23. MOVWF STATUS
  24. SWAPF SAVEW, F
  25. SWAPF SAVEW, W
  26. retfie
  27.  
  28. NOVEL
  29. ...
  30. return
(#) brato válasza hackerfish hozzászólására (») Dec 31, 2010 /
 
Azt ki kell számolni. A változó amit növelsz ha egy bájtos akkor ugye nem lehet több mint 255. az 1 secundumot elosztod 255-el. Ami értéket kapsz annál csak nagyobb lehet a megszakítások közötti idő, hogy állítani is lehessen a pontosságon.
Ha a pic 4 MHz-en jár az órajeled 1MHz.
Ebből kiszámolod az adott osztási aránnyal milyen idő jön ki a megszakításokra.
Amelyik a legjobban megfelel az előző számításhoz azt használod.
A timer1 kezdőértékével tudsz pontosítani.
(#) hackerfish válasza brato hozzászólására (») Dec 31, 2010 /
 
1sec=1000millisec
1000/255=3,921568627
És ezzel most mit csináljak?
"Ebből kiszámolod az adott osztási aránnyal milyen idő jön ki a megszakításokra." Hogyan?
(#) vilmosd válasza hackerfish hozzászólására (») Dec 31, 2010 /
 
Hali
Ahogy en megcsinaltam, miert nem volt jo? Tulbonyolitod az egesz dolgot. A megszakitas ugy ahogy volt jo volt. Nem szabad a megszakitas torzsebe millio dolgot csinalni. Nem kell a tartalom mentes sem, mert nem valtoztatunk az IT alatt semmit. Nalam csak bebillentettem a "tick" jelzobitet, es utana a foprogramban ellenoriztem. Amennyiben volt jelzobit elvegeztem a megfelelo muveletet. Amit masodszor kuldtem probald ki szimulatorban. Az pontosan 1 sec alatt noveli a second valtozot, es bele van epitve a min, es az ora. Onnan mar csak a kijelzes megvalositasa, es az allitast kell megoldani. Probald meg inkabb az en programombol kialakitani a mukodo programot.
(#) hackerfish válasza vilmosd hozzászólására (») Dec 31, 2010 /
 
Eredetileg azzal próbálkoztam, az elsővel, mert nekem csak a másodperc növelése kell, de túl gyors volt, persze lehet, hogy én rontottam el valamit.
Na fussunk neki mégegyszer...

tmr1.asm, amit másodszor küldtél:
Ha ehelyett beírom, hogy "call NOVEL", úgy jó lesz?
incf second,f ;increment second cntr
(#) hackerfish válasza vilmosd hozzászólására (») Dec 31, 2010 /
 
Itt az egész fájl.
Ez így már egész normálisan működik.
Csak egy kicsit mintha sietne.

binclock.ASM
    
(#) vilmosd válasza hackerfish hozzászólására (») Dec 31, 2010 /
 
Hali
Nem tudom mit csinal a novel, de csak a foprogramban hivd meg, az IT-bol ne. Az IT rutin igy jo ahogy van. Amit masodszor kuldtem az noveli a percet, es az orat is. azt forditsd le valtozatlanul, es futtasd a szimulatorban. Nekem 4 MHz orajelnel pontosan 1 masodperc alatt noveli a second valtozot, de ha beteszem a "Break"-ot a 82. sorba a stopper pontosan 60 secondot mutat a ket "incf min" kozott. Azt nem ertem, ha Te orat akarsz csinalni, akkor miert nem jo igy ahogy en irtam? Ez az egyszeru program megy 23:59:59-ig, majd 00:00:00 oratol fojtatja. Mar csak a kijelzest kellene hozza varialni, es kesz.
(#) hackerfish válasza vilmosd hozzászólására (») Dec 31, 2010 /
 
A KIIR1 a kiírás, a NOVEL meg növeli az időt 1 másodperccel, és vizsgálja, hogy hol kell nullázni, és növelni a következőt. Elvileg ugyanaz, mint amit küldtél. Nálam a Loop résznek a KIIR felel meg.

És ha a saját NOVEl-emet használom, az óra/perc/másodperc számjegyei megmaradnak külön, pl.: MPERC1 = másodperc egyes helyiérték, MPERC10 = másodperc tízes helyiérték. Így a kiírásnál nem kell még ezzel is vacakolni.

De van más is: az óán vannak apró, alig észrevehető felvillanások, amiknek nem kellene ottlenniük. Ez mitől lehet? Átnéznéd azt a kódot, amit utoljára küldtem, hogy jó -e?
(#) vilmosd válasza hackerfish hozzászólására (») Dec 31, 2010 /
 
Hali
Forditva gondolkodsz. Egy oranal a legfontosabb, hogy az digit szamlalasokat minel gyorsabban elvegezd. A kiirasra es a tobbi csicsa-micsara kesobb van ido. Te feldaraboltad a szamokat helyertekre. Ez is megoldas, de ha megnezed az en megoldasomat, sokkal kevesebb utasitasbol van a teljes ora. Viszont a kiiras meg hatra van. De az nem annyira nehez feladat. Azt is lehet szinkronizalni a "second" noveleshez. Ja es van egy egyszeru megoldas a kiirasra: a "bin2bcd2" a varazsszo. A meglevo binaris szamodat atalakitod pakolt BCD-re, ahol 8 biten az also 4 bit az "egyes" helyertek, a felso 4 a "tizes". A piclistes linken talasz sok ilyen konverzios rutint. Ja meg valami : lehetoleg minel kevesebb valtozot hasznalj. A 0x70-0x7F tartomanyba csak 16 valtozot tudsz berakni.
(#) hackerfish válasza vilmosd hozzászólására (») Dec 31, 2010 /
 
Jó, akkor megpróbálok a te kódodhoz írni egy kiírást.
Az errorlevel rész mire jó?
(#) vilmosd válasza hackerfish hozzászólására (») Dec 31, 2010 /
 
Idézet:
„Az errorlevel rész mire jó?”
MPLAB help mit mond?
(#) hackerfish válasza vilmosd hozzászólására (») Dec 31, 2010 /
 
Idézet:
„Ez is megoldas, de ha megnezed az en megoldasomat, sokkal kevesebb utasitasbol van a teljes ora”

Emiatt volt pontatlan, amikor belraktam az én növelőmet, és kiírómat a te kódodba?
De ennek elvileg nem kellene hatnia a megszakításra nem? Mármint pont az lenne a lényeg, hogy ne nekem kelljen időzítgetnem a kódot, hanem a megszakítás tudja, hogy mikor hívódjon meg... vagy nem?
(#) hackerfish válasza hackerfish hozzászólására (») Dec 31, 2010 /
 
És mi van, ha a jelzőbit visszabillen, mire a progi eljut a vizsgálathoz, és a növeléshez? Ez akkor nem történhet meg, ha a növelés is a megszakításban van, és a progiban csak a kiírás marad nem?

És valami tényleg nem stimmel a te kódoddal, mert olyan ledek is felvillannak néha egy nagyon rövid időre, amiknek nem kellene. Még mindig nem tudom miért.
(#) vilmosd válasza hackerfish hozzászólására (») Dec 31, 2010 / 1
 
Hali
Az IT az tudja adolgat, es biztosan( na nem egeszen) azonos idonkent fog lefutni. Utana rogton egy rovid kodban inkrementaljuk a szukseges valtozokat. Igy nem viszunk bele plusz hibat. Amikor keszen vannak a valtoztatasok, gondolhatunk a kijelzesre. Mindig nezni kell a muveletek prioritasat! Itt mi a legfontosabb? Az idozites. Tehat eloszor ezzel foglalkozzunk. A kijelzes, gombkezeles, egyeb dolgok raernek kesobb, ha marad idonk (marad elegendo). Ajanlom meg egy jelzobit hasznalatat: ha van valahol valtozas, csak akkor iratjuk ki a kijelzest. Igy nem kell allandoan ezzel foglalkozni, csak ha szukseges.
Következő: »»   15 / 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