Fórum témák

» Több friss téma
Cikkek » Időkapcsolós hosszabbító és elosztó
Időkapcsolós hosszabbító és elosztó
Szerző: Topi, idő: Feb 22, 2007, Olvasva: 39594, Oldal olvasási idő: kb. 2 perc
Lapozás: OK   5 / 8
A programot CCS fordítóban írtam. Maga a fordító elég könnyen kezelhető, és meg is érthető a programozása. Mikor megmutattam Deguss kollégámnak a fordítót, egyből rákapott, és mit ne mondjak. Annyira rákapott a témára, hogy meg is írta a PIC programozás C nyelven - CCS - I. lecke cikket!
Aki még nem találkozott vele, az olvassa el mindenféle képpen, és ha bármi kérdésed van, állunk rendelkezésre. Írhatsz nekem is (Topi) és Deguss barátomnak is.

  1. #include <18F2320.h>
  2. #device adc=8
  3. #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT
  4. #use delay(clock=20000000)
A kód fejrészében semmi extra nincs. ADC-t nem fontos beállítani, mivel nem használjuk.
Van a kódnak két fontos rekorja, amikben az aktuális idő és az aktuális program van tárolva.
  1. struct Ttime {
  2.         unsigned int sec,minute,hour,wday;
  3. };
  4. struct Tprog {
  5.         byte wday_id,output;//csak 4 bit
  6.         byte minute, hour;
  7. };
  8. struct Ttime time;
  9. struct Tprog aprg;//act prg
Ezek után jönnek a port definíciók:
  1. #define LCD_E           PIN_C6
  2. #define LCD_RW          PIN_C4
  3. #define LCD_RS          PIN_C5
  4. #define LCD_DB4         PIN_C3
  5. #define LCD_DB5         PIN_C2
  6. #define LCD_DB6         PIN_C1
  7. #define LCD_DB7         PIN_C0
  8. #define LCD_BACKL       PIN_C7  //háttérvil
  9.  
  10. #define BTN_UP          PIN_B0
  11. #define BTN_DOWN        PIN_B1
  12. #define BTN_CLOCK       PIN_B2
  13. #define BTN_PRG         PIN_B3
  14. #define BTN_P1          PIN_B4
  15.  
  16. #define RTC_SCLK PIN_B5
  17. #define RTC_IO   PIN_B6
  18. #define RTC_RST  PIN_B7
Eztuán van egy pontos timer rutin változó deklarációja:
  1. //RTC variables
  2. #define XTAL_FREQUENCY  20000000
  3. #define TIMER1_FREQUENCY (XTAL_FREQUENCY / 8)   //nyolc, mert eredetileg 4-de 1s helyett 500ms
  4. boolean Timer_half_tick = true;
  5. int32 Ticker;
Ez egy általam írt nagyon pontos osztás nélküli másodperces időzítő. (Deguss a cikkében is ezzel oldotta meg a timert)
Ez egy fontos kódrészlet. A funkciója az, hogy ebben van eltárolva a heti bitmaszkok a prog beállításhoz.
  1. int const wday[] = {
  2.         0b00000001,     //0
  3.         0b00000010,     //1
  4.         0b00000100,     //2
  5.         0b00001000,     //3
  6.         0b00010000,     //4
  7.         0b00100000,     //5
  8.         0b01000000,     //6
  9.         0b00010101,     //7
  10.         0b00101010,     //8
  11.         0b00011111,     //9
  12.         0b00111111,     //10
  13.         0b01100000,     //11
  14.         0b01111111,     //12
  15. };
Minden bit egy napot jelent. 0. bit hétfő, 6.bit vasárnap. Ezen belül mint fentebb láthatjuk hogy van olyan maszk is ami pl minden hétköznapra szól, vagy csak hétvégére, vagy csak minden másnapra.

Szerintem elég megemlíteni részletesen a fejrészt, mert a többi rutin eléggé egyértelmű, mielőtt megkeresel, hogy ez és az mi, azért nézd át még egyszer!

Itt letöltheted a unit forrásokat, saját IO rutinjaimmal, és a DS1302-höz kezelő rutonokat.
A kódokat beleegyezésem nélkül ne reprezentáld sehol légyszíves!

Mivel valószínűleg használat közben fognak kiderülni még apróságok, vagy bugok, ezért verziószámmal ellátott ZIP-et teszek fel. Ha találsz benne hibát akkor küld el nekem - másoknak is érdeke!

Letöltés: 070222sw_idokapcsolo.zip
A cikk még nem ért véget, lapozz!
Következő: »»   5 / 8
É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