Fórum témák

» Több friss téma
Cikkek » Kapunyitás gombnyomásra avagy Szezam_tarulj!
Kapunyitás gombnyomásra avagy Szezam_tarulj!
Szerző: Bonca, idő: Aug 16, 2011, Olvasva: 30009, Oldal olvasási idő: kb. 1 perc
Lapozás: OK   4 / 6

A nyolclábú 12F683 5-ös lábára kötöttem a nyomógombot. Ez a láb külső megszakítás kezelésére alkalmas (INT), ami jelen esetben az lesz, hogy a nyomógomb megnyomására az 5-ös láb logikai 1 állapotról megváltozik logikai 0-ra. (Az ehhez szükséges felhúzó-ellenállást a mikrovezérlőben levő weak pull-up adja.) Ez ébreszti az alvó állapotból a mikrovezérlőt, amely megkezdi az adást. A kulcs elemei ASCII karakterenként lesznek elküldve egymás után. A teljes kulcs pedig háromszor ismétlődik. Erre azért van szükség, mert az oszcillográfon jól látható, hogy a vevő az adás első 40ms-ára semmit nem reagál, és egyébként is lehet zavar az adás közben, mivel a 434 MHz-es sávban elég sok eszköz működik. A késleltetésekről sajnos nincs semmi információ az adatlapon, ezek számomra is csak az oszcilloszkópos méréseknél derültek ki. Mivel a kommunikáció egyirányú, ezért csak az adás vonal (Tx) van bekötve a mikrovezérlő 2-es lábára.

sárga - az adó digitális bemenete
kék - a vevő digitális kimenete

Mivel az adónak nincs alvó üzemmódja és kb. 30 mA-t vesz fel üresjárásban, ezért a tápfeszültségét az adás befejezésekor kikapcsoljuk. A küldés után a mikrovezérlő pedig újra alvó állapotba kerül.

  1. /*******************************************************************************
  2.  12F683
  3.  CONFIG: 0x0FD4
  4. *******************************************************************************/
  5. const char key[] = "Szezam_tarulj!"; // kulcs
  6. char key_cnt = 0;                    // kulcs elemeinek számlálója
  7. char button_pressed = 0;
  8. char i = 0;
  9.  
  10. void interrupt (){
  11.   if (INTCON.INTF){
  12.     button_pressed = 1;
  13.     INTCON.INTF = 0;
  14.   }
  15. }
  16.  
  17. void main (){
  18.   OSCCON = 0b01110001;     // pdf 22.
  19.   ANSEL = 0;               // pdf 35.
  20.   CMCON0 = 0b00000111;     // pdf 58.
  21.   ADCON0 = 0;              // pdf 67.
  22.   INTCON = 0b11010000;     // pdf 15.
  23.   TRISIO = 0b00011100;     // pdf 34., gomb GP2-n, GP3 csak bemenet, Rx
  24.   GPIO = 0;
  25.   OPTION_REG = 0b00000000; // pdf 45.
  26.   WPU = 0b00000100;        // pdf 36. felhúzó-ellenállás GP2-n
  27.  
  28.   Soft_UART_Init(&GPIO, 4, 5, 2400, 0); // fmax=4.8 kb/s
  29.   delay_ms(100);
  30.  
  31.   while (1){
  32.     if (button_pressed){
  33.       GPIO.F1 = 1;         // táp az adónak
  34.       delay_ms(200);
  35.       for (i=0; i<3; i++){ // 3x küldi el a kulcsot
  36.         for (key_cnt=0; key_cnt<(sizeof(key)-1); key_cnt++){
  37.           Soft_UART_Write(key[key_cnt]);
  38.           // delay_us(90); // teszt időtúllépés (a vevőnél)
  39.         }
  40.       }
  41.       GPIO.F1 = 0;         // adó táp kikapcsolása
  42.       delay_ms(1000);      // ha lenyomva maradna a gomb
  43.       button_pressed = 0;
  44.       }
  45.     asm sleep;             // hogy tovább bírja az elem
  46.     asm nop;               // pdf 94., "user should have a NOP
  47.                            // after the SLEEP instruction"
  48.   }
  49. }


A cikk még nem ért véget, lapozz!
Következő: »»   4 / 6
É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