Giao tiếp Module RF CC1101 UART với KIT ATmega 8 V2
Chào các bạn, hôm nay mình chia sẻ với các bạn một project lap trinh vi dieu khien giao tiếp module CC1101 UART với KIT ATmega8 V2. Các bạn về nạp code cho 2 mạch được thiết kế giống hệt nhau để test quá trình truyền nhận dữ liệu qua lại. Nhấn phím Key 1 trên KIT để gửi nội dung đi sang bên nhận. Bên nhận có thể gửi lại một nội dung khác tương tự để trả lời khi nhấn phím Key 1.
Ứng dụng của module này các bạn có thể biến nó thành một máy gửi tin nhắn không dây, truyền nhận dữ liệu cho MCU, máy tính....
- Mình xin giới thiệu qua về Module RF CC1101 UART:
+ Điện áp hoạt động: 3.3-5V
+ Khoảng cách hoạt động khoảng 200m tùy vào địa hình
+ Kích thước: 27.8x14.4x4MM
+ Tần số: 433Mhz
+ Tốc độ mặc định: 9600
+ Hỗ trợ 128 kênh truyền và 255 địa chỉ
+ Sử dụng tập lệnh AT qua chuẩn truyền thông UART
--> Để xem chi tiết về Module CC1101 UART: http://banlinhkien.vn/goods-3636-module-rf-433mhz-cc1101-uart.html
--> KIT ATmega 8 V2 NEW: http://banlinhkien.vn/goods-2637-kit-atmega8-v2-new-avr-v2-new-.html
- Mạch mô phỏng trên Proteus 7.10:
- Code viết trên CodeVisionAVR (lap trinh c):
Mã:
/* Code by Vu Thai - Giao tiep ATmega8 voi Module RF CC1101 UART */ #include <mega8.h> #include <delay.h> #include <alcd.h> #define SIZE 20 //Kich thuoc bo dem nhan /* Khai bao GPIO */ #define SET PORTD.2 //Chan SET cua module #define BUT PINC.5 //Chan nut nhan PC5 /* Khai bao bien*/ unsigned char u_data, k, m; unsigned char buffer[SIZE]; //Bo dem nhan unsigned char dem; //Bien luu gia tri dem void send_byte(unsigned char udata){//Ham gui 1 ky tu ASCII while(!(UCSRA & (1<<UDRE)));//Kiem tra co UDRE UDR=udata;//Send 1 byte } void send(flash unsigned char *u){//Ham gui mot chuoi ky tu while(*u){ send_byte(*u++); } } void cc1101_init(){ //Ham khoi tao module CC1101 lcd_clear(); lcd_puts("MODE FU1"); SET=0; //Keo chan 5 cua module xuong 0 de dung lenh AT send("AT+FU1\r"); //Cai dat che do cua module delay_ms(1000); lcd_clear(); lcd_puts("CHANNEL 102"); send("AT+C102\r"); //Cai dat kenh truyen delay_ms(1000); lcd_clear(); lcd_puts("ADDRESS 123"); send("AT+A123\r"); //Cai dat dia chi truyen nhan SET=1; //Keo chan 5 cua module len 1 de gui DATA delay_ms(1000); lcd_clear(); lcd_puts("OK! READY..."); } void clear(void){ //Ham xoa bo dem buffer unsigned char z; for(z=0;z<SIZE;z++)buffer[z]='\0'; } void xuly(){ //Ham xu ly du lieu nhan duoc qua UART lcd_clear(); lcd_puts("Nhan Noi Dung:"); lcd_gotoxy(0,1);//Dong 2 lcd_puts(buffer); //Xuat du lieu trong buffer ra LCD } interrupt [USART_RXC] void usart_rx_isr(void){ //Ngat UART nhan du lieu u_data=UDR; if(u_data==10 && m==0){m=1; clear(); k=0;} //Bat ky tu dau else if(u_data==13 && m>0){xuly(); m=0;} //Bat ky tu cuoi else if(m>0){ buffer[k]=u_data; //Luu du lieu vao buffer if(++k>SIZE){m=0; clear();} //Xoa bo dem khi tran du lieu } } void main(){ //Chuong trinh chinh UCSRB=0x98;//Ngat RX, cho phep RX va TX UCSRC=0x86;//8bit uart, 1bit stop, no parity UBRRL=47;//baud 9600bps (Crytal 7.3728 Mhz) DDRC.5=0; //PC5 input PORTC.5=1; //Tro keo Vcc PC5 DDRD.2=1; //PD2 ouput SET=1; lcd_init(16); //LCD16x2 init delay_ms(200); lcd_puts("BanLinhKien.Vn"); delay_ms(1000); lcd_gotoxy(0,1);//Dong 2 lcd_puts("TEST CC1101 UART");//Gui chuoi len LCD delay_ms(1000); cc1101_init(); //Khoi tao module cc1101 #asm("sei") //Cho phep ngat cuc bo while(1){ if(!BUT){ //Kiem tra nut nhan lcd_clear(); //Xoa man hinh lcd_puts("Gui Noi Dung:"); lcd_gotoxy(0,1);//Dong 2 lcd_puts("BanLinhKien.Vn_"); //Hien thi noi dung gui di lcd_putchar(dem+48); send("\nBanLinhKien.Vn_"); //Gui di noi dung send_byte(dem+48); //Gui kem so dem send("\r"); if(++dem>9)dem=0; //Tang bien dem len while(!BUT); //Cho nha phim delay_ms(200); //Tao tre cho lan gui tiep theo }//end if BUT }//end while }//end main
Lưu ý khi sử dụng KIT ATmega8 V2 là chân RX tức PD0 bị ảnh hưởng bởi con MAX232 trên KIT lên nó không nhận được dữ liệu từ Module RF CC1101 gửi sang, để khắc phục các bạn có thể làm mạch tương tự mạch nguyên lý để test. Do ở trên test được là do mình đã tháo con MAX232 ra khỏi mạch lên không còn bị ảnh hưởng nữa.
Chúc các bạn tu hoc lap trinh thành công!!!
Nguồn Lap trinh vi dieu khien
0 nhận xét:
Đăng nhận xét