Fórum témák

» Több friss téma
Cikkek » Oszcilloszkóp óra
Oszcilloszkóp óra
Szerző: zzzzzzzzzz, idő: Jún 30, 2008, Olvasva: 24230, Oldal olvasási idő: kb. 2 perc
Lapozás: OK   9 / 13

A programot assemblyben írtam az MPLAB nevű szoftverrel. Mondanom se kell, egy kissé hosszú lett, több, mint 2000 soros, persze lehet, hogy ez csak nekem hosszú.

Itt le tudjátok tölteni, sajnos a kommentes változatot elette a fene , csak a komment nélküli van, bár így egy kicsit nehezebb lesz megérteni a program működését:

 183/progioscora.rtf

A program két fő részből áll:

  • óra rész
  • D/A átalakítót vezérlő rész

Óra rész

A program óra részét timer megszakítással csináltam. A PIC16F873-as 3 TIMER-t is tartalmaz. Ez úgy működik, hogy 1 s-onként meghívódik egy TIMER megszakítás és ebben a rutinban található az idő számlálása. A TIMER1-es megszakítást használtam, mivel ez egy 16 bites számlálót használ és sokkal pontosabban be lehet állítani a megszakítás idejét. Úgy működik, hogy van egy TMR1H és egy TMR1L regiszter, amelyeknek az értéke előre meghatározott módon folyamatosan növekszik, majd amikor eléri a maximumot, akkor a TMR1 (TMR1H + TMR1L) regiszter túlcsordul és a TMR1IF jelzőbit 1-be vált, amelynek hatására meghívódik a megszakítás.

Az 1 s-os beállítás:

Egy 20 Mhz-es kvarcot használok, a PIC-nél 1 ciklus az 4 órajelből áll, tehát 20 000 000 / 4 = 5000 000. A TIMER1-nél 1/8-as előosztást használok, ami azt jelenti, hogy csak minden 8-ik ciklusnál fog növekedni 1-el a TMR1 regiszter értéke, tehát 5000 000 / 8 = 625000. Mivel a TMR1 16 bites, ez azt jelenti, hogy 11111111 11111111 = 65535, és ha TMR1 csak 62500-ig fog számolni (TMR1 = 3036 indulási érték), akkor 625000 / 62500 = 10, ez egy nagyon szép kerek szám és már csak egy lépés van hátra, 10 / 10 = 1, vagyis elérkeztünk az 1 s-hoz. A 10-es osztásról egy IDOZIT1 nevű változó fog gondoskodni.

Csakhogy a valóság egy kicsit más, sajnos ez a 20 MHz-es kvarc nem pontosan 20 MHz, ami a gyakorlatban azt jelenti, hogy megváltozik a TMR1 értéke, TMR1 = 3027.

 

A TIMER1 által meghívott rutinhoz a következő változókat használom:

MASODPERCE > ez a változó minden s-ban növekszik 1-el

MASODPERCT > ez a változó minden 10. s-ban növekszik 1-el

PERCE               > ez a változó minden percben növekszik 1-el

PERCT               > ez a változó minden 10. percben növekszik 1-el

ORAE                  > ez a változó minden órában növekszik 1-el

ORAT                  > ez a változó minden 10. órában növekszik 1-el

MSE                    > kijelzéshez, másodperc egyes

MST                    > kijelzéshez, másodperc tízes

PE                       > kijelzéshez, perc egyes

PT                       > kijelzéshez, perc tízes

OE                      > kijelzéshez, óra egyes

OT                      > kijelzéshez, óra tízes

IDOZIT1            > a másodperc beállításához szükséges változó

EJFEL               > az éjfél kijelzéséhez szükséges változó

 

A TIMER1 által meghívott rutin a TIMEREGY. Ez a rutin gondoskodik arról, hogy megfelelő időközönként növekedjenek az adott változók.

És most következzen a D/A átalakítót vezérlő programrészlet.


A cikk még nem ért véget, lapozz!
Következő: »»   9 / 13
Értékeléshez bejelentkezés szükséges!
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