Fórum témák

» Több friss téma
Fórum » Órakészítés PIC-kel
Lapozás: OK   5 / 12
(#) janikukac válasza Hp41C hozzászólására (») Aug 15, 2012 /
 
Oké, én benne vagyok, örülnék is neki, de nem tudom átríni a programot, esetleg ha valaki...
(#) GPeti1977 válasza janikukac hozzászólására (») Aug 15, 2012 /
 
Most a jó!

ora.JPG
    
(#) _vl_ válasza janikukac hozzászólására (») Aug 15, 2012 /
 
Idézet:
„Azt a csoda kvarcot hol tudom beszerezni?? Nekem olyan nincs.”


El ne hidd, hogy ezen múlik a dolog!
Bármilyen frekijű kvarccal lehet értelmes pontosságú órát építeni. Az 1-2 másodperc / nap pontosság célozható meg így kb., annak meg otthonra elégnek kéne lennie (ha nem elég, akkor marad a DCF vevő, vagy nagyon ügyeseknek Internet + NTP kliens).

Viszont rendes kondikat kell rakni a kvarcra, mert ha nem stabilak (csak NP0/C0G típusúak jók), akkor megette a fene az egészet. Továbbá rendes panelt kell neki tervezni, mindenféle légszereléssel meg dugdosós panellal nem várható pontosság. A kondikból vagy különféle értékűeket kell venni (ez a korrektebb megoldás), vagy egy trimmer kondit. Ugyanis a megépítés után meg kell mérni, hogy mennyire pontos az óra, és a kondik értékének változtatásával lehet/kell behangolni.
Persze lehetne olyat is csinálni, hogy nem az órajelet állítja az ember, hanem a szoftver kompenzál, de az azért bonyolultabb úgy.
(#) GPeti1977 válasza Hp41C hozzászólására (») Aug 15, 2012 /
 
Megérne egy kísérletet, csak nagyon hosszú idő mire megvan hogy tényleg mennyire pontos.
Mire beállítod a timert abban nem tudom hogy beleszámít-e a timer megszakítása. Ha jól fogalmazok.
(#) janikukac válasza _vl_ hozzászólására (») Aug 15, 2012 /
 
Én elhiszem. De a szoftveres megoldást nem csinálná meg nekem valaki, amit Hp4IC ajánl??? Nekem elég az 1-2 másodperces pontatlanság..

Köszi mindent előre is !
(#) Hp41C válasza GPeti1977 hozzászólására (») Aug 15, 2012 /
 
A timer2 (4, 6) -nak pontosan az az előnye, hogy a PR2, (PR4, PR6) elérését hardver figyeli. Csak egyszer kell beállítani, onnan mindent a hardver kezel. Ld. adatlap. timer2 fejezete. Az alap órajel pedig ugyan az a Fosc / 4, amit a Timer1, Timer0 is megkap. Mitől lenne pontatlanabb, mint a Timer1?
Egyetlen problémája van csak, Sleep módban nem járnak a Timer2 típusú timerek...
(#) GPeti1977 válasza zenetom hozzászólására (») Aug 15, 2012 /
 
Körülbelül az antenna jelnek 30dBuV felett kell lennie hogy a dekóder hibamentesen működjön.
Van pár egyszerű rds dekóder ami sorosan kiadja az rds jelet de csak megállás nélkül jönnek a data clock jelek így nehéz feldolgozni, viszont a SAA6588T rds pre processor ic-vel az i2c buszon könnyen kiolvasható bármi; nagyon érdekes a dátum elküldése: MJD formátumban van azaz 1857 november 17 óta eltelt napok számát küldik el.

Most néztem a dcf77 órához képest 3 másodperccel késett az rds óra a Petőfi rádióról.

rdsóra.jpg
    
(#) vicsys hozzászólása Aug 15, 2012 /
 
Én nem értem minek sz*rakodni a kaviccsal, mikor párszáz forintért már van belső kristályos RTC, ami backupot, óra-perc-dátumot tud. (Ha nem lenne kritérium a drága DCF-es vevő, akkor azt IS ajánlanám hozzá.) Az RTC használatával meg a PIC a belső oszcijáról is mehet.
(#) janikukac válasza vicsys hozzászólására (») Aug 15, 2012 /
 
Nincs kritérium semmihez, csupán próbáltunk összedobni valamit . Remélem a szoftver módosításos cuccot megkapom . Tudod, abból főzök, ami van. Ezért nem akarok beruházni egyéb dolgokra.

Üdv!
(#) GPeti1977 válasza janikukac hozzászólására (») Aug 15, 2012 /
 
A megszakításban a timer1 értékét 35 vagy 36 ra veszem akkor is pont 2Hz lesz a megszakítás így jó 4MHz kristállyal.


  1. Device 16F873
  2. XTAL = 4
  3. Config xt_osc, pwrte_on, wdt_off, lvp_off
  4. ALL_DIGITAL = true
  5.  
  6. T1CON = %00110101
  7. INTCON = %11000000
  8. PIE1.0 = 1
  9. Symbol TIMER1 = TMR1L.WORD
  10. On Interrupt GoTo tickint
  11. Input PORTA.0
  12. Input PORTA.1
  13. Output PORTB
  14. Output PORTc
  15.  
  16. Dim b1, b2, b3, b4, b5
  17. Dim P
  18. dim s
  19. Dim hour, hourT, hourU
  20. Dim minute, minuteT, minuteU
  21. Dim secund, tick
  22. dim T
  23.  
  24. P = 0
  25. tick = 0
  26. secund = 0
  27. minute = 0
  28. hour = 12
  29. DelayMS 10
  30.  
  31. loop:
  32.  
  33. gosub gomb
  34.  
  35. GoSub Disp
  36.  
  37. GoTo loop
  38.  
  39. gomb:
  40. If PORTA.0 = 0 Then DelayMS 1
  41. If PORTA.0 = 0 Then
  42. Inc s
  43. If s > 10 Then s = 0
  44. If s = 0 Then
  45. minute = minute + 1
  46. secund = 0
  47. If minute > 59 Then
  48.  minute = 0
  49.  hour = hour + 1
  50.  EndIf
  51.  If hour > 23 Then hour = 0
  52. EndIf
  53. EndIf
  54. return
  55.  
  56. Disp:
  57. hourT = hour / 10
  58. hourU = hour // 10
  59. minuteT = minute / 10
  60. minuteU = minute // 10
  61.  portc = 1
  62.   b1 = LookUp hourT ,  [63, 6, 91, 79, 102, 109 ,125 ,7 ,127 ,111]
  63.   PORTB = b1
  64.   DelayMS 1
  65.   PORTB = 0
  66.   PORTc = 0
  67.   DelayUS 100
  68.   PORTc = 2
  69.   b2 = LookUp hourU , [63, 6, 91, 79, 102, 109 ,125 ,7 ,127 ,111]
  70.   PORTB = b2
  71.   DelayMS 1
  72.   PORTB = 0
  73.   PORTc = 0
  74.   DelayUS 100
  75.   PORTc = 4
  76.   PORTB = P
  77.   DelayMS 1
  78.   PORTB = 0
  79.   PORTc = 0
  80.   DelayUS 100
  81.   PORTc = 8
  82.   b4 = LookUp minuteT , [63, 6, 91, 79, 102, 109 ,125 ,7 ,127 ,111]
  83.   PORTB = b4
  84.   DelayMS 1
  85.   PORTB = 0
  86.   PORTc = 0
  87.   DelayUS 100
  88.   PORTc = 16
  89.   b5 = LookUp minuteU , [63, 6, 91, 79, 102, 109 ,125 ,7 ,127 ,111]
  90.   PORTB = b5
  91.   DelayMS 1
  92.   PORTc = 0
  93.   PORTB = 0
  94.   return
  95.  
  96.   Disable
  97.  
  98.   tickint: PIR1.0 = 0
  99.  
  100.   If tick = 0 Then P = 0
  101.   If tick = 1 Then P = 64
  102.   tick = tick + 1
  103.  
  104.   If tick > = 2 Then tick = 0
  105.   If tick <> 0 Then GoTo tickexit
  106.    secund = secund + 1
  107.    If secund > 59 Then
  108.    secund = 0
  109.    minute = minute + 1
  110.    EndIf
  111.    
  112.    If minute > 59 Then
  113.    minute = 0
  114.    hour = hour + 1
  115.    EndIf
  116.    
  117.    If hour > 23 Then hour = 0
  118.    
  119.   tickexit:
  120.   timer1 = 35
  121.   Resume
  122.   Enable
  123.  
  124. End

ORA16F~1.HEX
    
(#) janikukac hozzászólása Aug 15, 2012 /
 
Amíg a program el nem készül, van egy kérdésem: közös anódosra meg lehetne csinálni? Mert anódos kijelzőm van 6db, de katódosból csak 3.
(#) janikukac válasza GPeti1977 hozzászólására (») Aug 15, 2012 /
 
Köszönöm, közben az utolsó hszmhez még egy kérdés felmerült: miért kell 5 kijelző??,
(#) GPeti1977 válasza janikukac hozzászólására (») Aug 15, 2012 /
 
Ott villog a középső kijelzőn g szegmens, de a helyére 2 led-et is tehetsz mint kettőspont.
(#) janikukac válasza GPeti1977 hozzászólására (») Aug 15, 2012 /
 
Oké. És valahogy nem lehet anódosra megcsinálni a kapcsolást?
üdv!
(#) proba válasza _vl_ hozzászólására (») Aug 15, 2012 /
 
Nem tudom,Én úgy érzem , olyan kvarccal lehet pontos(abb) órát építeni ,amihez a timmer értékét nem kell állítani (tehát rendesen lefut ,majd mindenféle beavatkozás nélkül resetelődik , vagy újra töltődik.) mert a megszakítás érvényre jutása ,a timmer új értékkel való feltöltése nem pontosan ugyanakkor történik,Így elcsúszhat (csúszzkálhat) az idő egy előre pontosan ki nem számítható órajellel. Vagy nem másodperc alapú lesz az egész ,de akkor a világ végéig lehet korrigálgatni szoftveresen.
Ami még a külön kvarc (esetleg RTC) mellett szól ,a PIC-hez használt frekvenciákon már elég nagy hőfokfüggésű kvarcok csak vannak olcsón.
(#) GPeti1977 válasza janikukac hozzászólására (») Aug 15, 2012 /
 
Meg, a tranzisztorok kollektorát a + ra kötöd, az emitter meg meghajtja a közös anódokat, a szegmenseket meg egy ULN2003 IC-vel meghajtod.
Így jobb is főleg ha kis fényerejű a kijelző.
Nagy kijelzőhöz amiben több led is sorba van kötve már nem jó a tranzisztoros meghajtás hanem egy pozitív oldali meghajtó kell pl. TD62783 vagy hasonló IC és a szükséges tápfeszre kötni az ic + bemenetét.

oraanod.JPG
    
(#) janikukac válasza GPeti1977 hozzászólására (») Aug 15, 2012 /
 
Akkor inkább maradok a katódosnál, és próbálok 1-et bontani valahonnan.
Üdv!
(#) GPeti1977 válasza proba hozzászólására (») Aug 15, 2012 /
 
Én is erre gondoltam csak nem tudtam jól megfogalmazni, azért gyártanak ilyen frekvenciájú kristályt, ezeknek kicsi a hőfokfüggésük mert általában óra készül belőle, meg ott a termosztát is ha már pontosak szeretnénk lenni.
Nekem ez már 5 éve megy és a félévi óraállításkor jó ha 1 percet késik, de megoldhatnám egy trimmerkondival a dolgot ha lenne egy etalon frekvenciamérőm.
(#) janikukac válasza janikukac hozzászólására (») Aug 15, 2012 /
 
Egy datasheet-et tudsz mutatni arról a bizonyos HD-H103-ról? Nem találok semmit.
(#) GPeti1977 válasza janikukac hozzászólására (») Aug 15, 2012 /
 
Nem érdekes, csak az eagle rajzolóval ezt választottam ki, nekem FN1-0561 kijelzőm van a ret-től.
(#) janikukac válasza GPeti1977 hozzászólására (») Aug 15, 2012 /
 
Köszi. Akkor a lábkiosztás megfelel annak, ahogy be van kötve?
Üdv!
(#) GPeti1977 válasza janikukac hozzászólására (») Aug 15, 2012 /
 
Attól függ milyen kijelződ van annak eltérő lehet a lábkiosztása, ellenőrizd le még hány led van sorbakötve egy szegmensben mert módosulhat ezáltal a meghajtás.
(#) kissi válasza proba hozzászólására (») Aug 15, 2012 /
 
Szia!

A megszakítás során nem értéket kell betölteni, hanem a TIMER RESET-elődött és már továbbszámolt értékéhez hozzá kell adni! Ezzel a módszerrel nem számít, hogy kicsit később történik a megszakítás kiszolgálása, a hiba nem összegződik és "bármilyen" kvarccal képes jól működni!

Steve
(#) _vl_ válasza proba hozzászólására (») Aug 15, 2012 /
 
Idézet:
„amihez a timmer értékét nem kell állítani (tehát rendesen lefut ,majd mindenféle beavatkozás nélkül resetelődik , vagy újra töltődik.) mert a megszakítás érvényre jutása ,a timmer új értékkel való feltöltése nem pontosan ugyanakkor történik,Így elcsúszhat (csúszzkálhat) az idő egy előre pontosan ki nem számítható órajellel. Vagy nem másodperc alapú lesz az egész ,de akkor a világ végéig lehet korrigálgatni szoftveresen.”


Nehézséget okoz egy 4 MHz-es kvarcról járatott PIC esetén összeütni egy másodperc alapú, teljesen HW-ből futó timeren alapuló órát?
Mert Hp41C lentebb leírta, hogy hogyan kell csinálni...

Idézet:
„a PIC-hez használt frekvenciákon már elég nagy hőfokfüggésű kvarcok csak vannak olcsón.”

Hm? 20-30ppm-es kvarcokat lehet könnyűszerrel kapni (gyakorlatilag bármilyen frekvenciából), azok 15-35 Celsius fokon járatva (= beltérben) simán 10ppm alatti hőmérsékletfüggésűek, a példányonkénti különbségeket meg a kondikkal simán lehet erre a szintre kalibrálni.

Szerintem ennél sokkal pontosabb jelet 32kHz-esekkel sem fogsz előállítani.

A külön RTC-nek bizony van sok értelme, különösen, ha áramkimaradás után nem szeretnénk újra beállítani a készüléket.
(#) Hp41C válasza kissi hozzászólására (») Aug 16, 2012 /
 
Sziasztok!
- Végülis bármilyen frekvenciából előállítható a pontos 1Hz (vagy más frekvencia) hosszú idő átlagát nézve, csak egy kicsit macerás.
- Ha timer2 (4, 6) használunk, megszabadulink a timer írásától. A timer0 írása 2 ciklusig megakadályozza a számlálást, a timer1 írása sokkal bonyolultabb problémát vet fel: Timer1 Errata
- Egy átlagos quartz a 10 - 20 ppm pontossággal 0.8 - 1.6 s eltérés / nap. Lehet kapni sokkal pontosabbat, de sokkal drágábban és általában kerek frekvenciákra illetve a 32.768kHz -re. Egy 10.000MHz 2.5 ppm 850 Ft+Áfa, a 10.000MHz 1 ppm oszcilátor már 16000 Ft+Áfa... Egy DS32kHz 3000Ft +Áfa. Ezekhez a költségekhez jön még az állandó hőmérséklet tartásához szükséges termosztát is. Ne az alap oszcillátorra költsünk ennyit, inkább a szinkronizációra, lehet az RDS (500 Ft), DCF77 (3500 Ft) vagy GPS... Így nem kell törődnünk a dátum, a hét napjának számításával, a téli - nyári időszámítás áttéréssel és mindig pontos lesz az óra. Persze valamit tennünk kell, akkor is, ha nincs vétel...
(#) vicsys válasza Hp41C hozzászólására (») Aug 16, 2012 /
 
Én is ezt magyarázom. RTC+DCF rulez!
(#) janikukac hozzászólása Aug 16, 2012 /
 
Készítettem neki egy nyákot (katódosnak), felraktam ide, hogy nézze át valaki. Bővebben: Link
(#) Hp41C válasza vicsys hozzászólására (») Aug 16, 2012 /
 
Értettem... Teszem is bele a Propeller órába... Ld. topik...
(#) zenetom válasza Hp41C hozzászólására (») Aug 16, 2012 /
 
Szia!
Írtad, hogy a Timer1-et macerásabb időalapnak használni.
Erre a részre gondolsz:
  1. ; Insert the next 4 lines of code when TMR1 can not
  2. ; be reliably updated before clock pulse goes low
  3. RTCisr:
  4. btfsc TMR1L,0 ; wait for TMR1L<0> to become clear
  5. bra $-2 ; may already be clear (loops for 0 to 30.5us)
  6. btfss TMR1L,0 ; wait for TMR1L<0> to become set
  7. bra $-2 ; (loops for 30.5us)

?
Bár nem teljesen értem miért van szükség erre, mert ha megy a Timer, akkor itt marad, amíg nem nullázódik (majd állítódik 1-be) a TMR1L; ha meg valamiért itt megáll, akkor végtelen ciklusba megáll a program (bár erre nem tudom van-e esély).
(#) Hp41C válasza zenetom hozzászólására (») Aug 16, 2012 / 1
 
Szia!

Jók ezek a miért kérdések:
- Miért nem használjuk a 18F2550 család kétszintű megszakítás kezelését?
- Miért nem a movff utasítással írjuk az INTCON, BSR regisztereket?
- Miért kell várni 1 -2 utasítást a TXREG írása és a PIR1,TXIF olvasása között?
- Miért kell, hogy a timer1 regiszterek módosítása után lefutó órajelet kapjon a timer1, ha külső órajelről jár?
- Miért kell bizonyos kontrollereken az AD átalakítást programból megszakítani?
stb...

Mindegyiknek egy - egy aprócska áramköri hiba az oka..

Idézet:
„When Timer1 is started or updated, the timer needs to see a falling edge from the external clock source before a rising edge can increment the counter. If writes to TMR1H and TMR1L are not completed while the external clock pulse is still high, Timer1 will miss ounting the first clock pulse after the update.”
Következő: »»   5 / 12
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