Code sưu tầm PIC16F877A trên CCS, RFID và DS1307

0
5294

RFID 

RFID (Radio Frequency Identification, nhận dạng bằng sóng vô tuyến) là một phương pháp nhận dạng tự động dựa trên việc lưu trữ dữ liệu từ xa, sử dụng thiết bị thẻ RFID và một đầu đọc RFID

1, Mô tả:

– Radio Frequency Identification (RFID) là công nghệ nhận dạng đối tượng bằng sóng vô tuyến. Hai thiết bị này hoạt động thu phát sóng điện từ cùng tần số với nhau. Các tần số thường được sử dụng trong hệ thống RFID là 125Khz hoặc 900Mhz

  • Sử dụng hệ thống không dây thu phát sóng radio. Không sử dụng tia sáng như mã vạch.
  • Thông tin có thể được truyền qua những khoảng cách nhỏ mà không cần một tiếp xúc vật lý nào.
  • Có thể đọc được thông tin xuyên qua các môi trường, vật liệu như: bê tông, tuyết, sương mù, băng đá, sơn và các điều kiện môi trường thách thức khác mà mã vạch và các công nghệ khác không thể phát huy hiệu quả.

2, Cấu tạo:
Một thiết bị hay một hệ thống RFID được cấu tạo bởi hai thành phần chính là thiết bị đọc ( reader) và thiết bị phát mã RFID có gắn chip hay còn gọi là tag. Thiết bị đọc được gắn antenna để thu- phát sóng điện từ, thiết bị phát mã RFID tag được gắn với vật cần nhận dạng, mỗi thiết bi RFID tag chứa một mã số nhất định và không trùng lặp nhau.
3, Nguyên lý hoạt động:
Thiết bị RFID reader phát ra sóng điện từ ở một tần số nhất định, khi thiết bị RFID tag trong vùng hoạt động sẽ cảm nhận được sóng điện từ này và thu nhận năng lượng từ đó phát lại cho thiết bị RFID Reader biết mã số của mình. Từ đó thiết bị RFID reader nhận biết được tag nào đang trong vùng hoạt động.
4, Độ bảo mật và tin cậy:
Thẻ chip (tag) RFID chứ rất nhiều mã nhận dạng khác nhau, thông thường là 32bit tương ứng với hơn 4 tỷ mã số khác nhau. Ngoài ra khi xuất xưởng mỗi thẻ chip RFID được gán một mã số khác nhau . Do vậy khi một vật được gắn chip RFID thì khả năng nhận dạng nhầm vật đó với 1 thẻ chip RFID khác là rất thấp, xác suất là 1 phần 4 tỷ.
Với ưu điểm về mặt công nghệ như vậy nên sự bảo mật và độ an toàn của các thiết bị ứng công nghệ RFID là rất cao.

Module RFID RC522

Điện áp hoạt động: 3.3V 13-26mA
Dòng tiêu thụ ở chế độ Stand by: 3.3V 10-13mA
Sleep-mode: <80uA
Tải tối đa: 30mA
Tần số hoạt động: 13.56Mhz
Khoảng cách đọc: 0 – 60mm
Giao thức truyền thông: SPI
Tốc độ dữ liệu tối đa: 10Mbit / s
Kích thước: 40 x 60 mm
Nhiệt độ hoạt động: -20 đến 80 ° C
Độ ẩm hoạt động: 5% -95%
Tốc độ cao SPI: 10Mbit / s
HỖ TRỢ ISO / IEC 14443A /MIFARE

1: SDA(CS)-Chân lựa chọn chip khi giao tiếp SPI( Kích hoạt ở mức thấp)
2: SCK-Chân xung trong chế độ SPI
3: MOSI(SDI)-Master Data Out- Slave In trong chế độ giao tiếp SPI
4: MISO(SDO)-Master Data In- Slave Out trong chế độ giao tiếp SPI
5: IRQ – Chân ngắt
6: GND – Chân mass
7: RST – Chân reset module
8: Nguồn 3V3

#include <16F877A.h>  
#device ADC=10
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used FOR I/O
#use delay(crystal=20000000)                          
#define DELAY 10                                                                                                                 
#define LCD_ENABLE_PIN PIN_E2             
#define LCD_RS_PIN PIN_E0                                                       
#define LCD_RW_PIN PIN_E1                          
#define LCD_DATA4 PIN_D4                                                          
#define LCD_DATA5 PIN_D5                                    
#define LCD_DATA6 PIN_D6                                                      
#define LCD_DATA7 PIN_D7                                    
#include <lcd.c>   
char key[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
char writeData[] = "TNT"; 

#define MFRC522_CS PIN_B3                 
#define MFRC522_SCK PIN_C3
#define MFRC522_SI  PIN_C5                           
#define MFRC522_SO  PIN_C4             
#define MFRC522_RST PIN_B4    
#include<Built_in.h>   

 
void main(){
 
   CHAR UID[6];
   UNSIGNED int TagType;    
   CHAR size;                         
   CHAR i;                                        
   lcd_init ();                                                                    
   printf (LCD_PUTC, "\f Test RFID\nPIC 16/18 Basic Kit");
   delay_ms (1000) ;
   printf (LCD_PUTC, "\fInitializing"); 
   MFRC522_Init ();
   printf (LCD_PUTC, "\nDone!");             
   WHILE (true){
           
      IF (MFRC522_isCard (&TagType)){
           
         printf (LCD_PUTC, "\fTAG TYPE:");
         printf (LCD_PUTC, "%X",TagType);
                                                      
         //Read ID 
         IF (MFRC522_ReadCardSerial (&UID)){
            printf (LCD_PUTC, "\nUID: ");
            FOR (i = 0; i < 5; i++){
               printf (LCD_PUTC, "%X",UID[i]);
            }
            size = MFRC522_SelectTag (&UID);
         
                    
         IF (MFRC522_Auth (PICC_AUTHENT1A, 7, &key, &UID) == 0){ //authentication key A   
            //Write data to block 1  
            lcd_gotoxy(13,1); 
            MFRC522_Write (1,&writeData);
            printf (LCD_PUTC, "W-A!"); 
         }                                        
         else IF (MFRC522_Auth (PICC_AUTHENT1B, 7, &key, &UID) == 0){ //authentication key B 
         
            //Write data to block 1 
            lcd_gotoxy(13,1); 
            MFRC522_Write (1,&writeData);
            printf (LCD_PUTC, "W-B!"); 
         }                                          
         ELSE{   
            lcd_gotoxy(13,1);   
            printf (LCD_PUTC, "W-Err!"); 
            CONTINUE;                             
         }
            
         IF (MFRC522_Read (4,&writeData) == 0){
            printf (LCD_PUTC, "\n%c", &writeData);
         }
         //Ngu dong
         MFRC522_Halt () ;
      }
      
   }
 }
}

RTC DS1307

DS1307 là chip thời gian thực hay RTC (Read time clock). Đây là một IC tích hợp cho thời gian bởi vì tính chính xác về thời gian tuyệt đối cho thời gian : Thứ, ngày,tháng, năm, giờ, phút, giây. DS1307 là chế tạo bởi Dallas. Chip  này có 7 thanh ghi 8 bit mỗi thanh ghi này chứa : Thứ , ngày, tháng, năm, giờ , phút, giây. Ngoài ra DS1307 còn chứa 1 thanh ghi điều khiển ngõ ra phụ và 56 thanh ghi trống các thanh ghi này có thể dùng như là RAM. DS1307 được đọc thông qua chuẩn truyền thông I2C nên do đó để đọc được và ghi từ DS1307 thông qua chuẩn truyền thông này. Do nó được giao tiếp chuẩn I2C nên cấu tạo bên ngoài nó rất đơn giản. Ví dụ 1 dạng đóng vỏ của DS1307 như sau :


Trên là hai dạng cấu tạo của DS1307. Chip này có 8 chân và chúng ta hay dùng là dạng Dip và các chân nó được mô tả như sau :
+ X1 và X2 là đầu vào dao động cho DS1307. Cần dao động thạch anh 32.768Khz.
+ Vbat là nguồn nuôi cho chip. Nguồn này từ ( 2V- 3.5V) ta lấy pin có nguồn 3V. Đây là nguồn cho chip hoạt động liên tục khi không có nguồn Vcc mà DS1307 vẫn hoạt động theo thời gian
+ Vcc là nguồn cho giao tiếp I2C. Điện áp cung cấp là 5V chuẩn và được dùng chung với vi xử lý. Nếu mà Vcc không có mà Vbat có thì DS1307 vẫn hoạt động bình thường nhưng mà không ghi và đọc được dữ liệu.
+ GND là nguồn Mass chung cho cả Vcc và Vbat
+ SQW/OUT là một ngõ ra phụ tạo xung dao động (xung vuông). Chân này tôi nghĩ không ảnh hưởng đến thời gian thực nên chúng ta không sử dụng chân này trong thời gian thực và bỏ trống chân này!
+ SCL và SDA là hai bus dữ liệu của DS1307. Thông tin truyền và ghi đều được truyền qua 2 đường truyền này theo chuẩn I2C

Một module DS1307 kèm Pin trên thị trường:

#include <16F877A.h>
#device *=16 ADC=10
#use delay(clock=20000000)

//////////Khai bao
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use i2c(Master, sda = PIN_A1, scl=PIN_A2)
#use FIXED_IO( D_outputs=PIN_D7,PIN_D6,PIN_D5,PIN_D4 )
#use FIXED_IO( E_outputs=PIN_E2,PIN_E1,PIN_E0 )
#include "lcd.c"
#include "RTC.c"
#define Slave_add 0x68
#define Read 1
#define Write 0

void send(int8 a);
int8 sec,min,hrs,day,month,yr,dow;

void main(){
   enable_interrupts(INT_EXT);         //cho phep ngat RB0
   ext_int_edge(0,H_TO_L);             //dat suon ngat
   enable_interrupts(GLOBAL);          //cho phep ngat toan cuc
   LCD_init();                         //Khoi tao LCD.
   delay_ms(10);
   ds1307_init();                      // khoi tao DS1307, tao xung 1Hz o chan 7 DS1307.
   ds1307_set_date_time(12,4,12,5,12,59,10);       /// Cai thoi gian bat dau dem
   while(true){ 
      ds1307_get_date(day,month,yr,dow);   ///Lay du lieu thoi gian
      ds1307_get_time(hrs,min,sec);       /// Lay du lieu
                                           //Truyen len LCD
      LCD_PutCmd(0x80);
      LCD_PutChar(hrs/10+48);
      LCD_PutChar(hrs%10+48);
      LCD_PutChar(":");
      LCD_PutChar(min/10+48);
      LCD_PutChar(min%10+48);
      LCD_PutChar(":");
      LCD_PutChar(sec/10+48);
      LCD_PutChar(sec%10+48);
      LCD_PutChar(" " );
      LCD_PutChar(day/10+48);
      LCD_PutChar(day%10+48);
      LCD_PutChar(45);
      LCD_PutChar(month/10+48);
      LCD_PutChar(month%10+48);  
   }
}

Nguồn: Mualinhkien.vn

LEAVE A REPLY

Please enter your comment!
Please enter your name here