chả là đang muốn làm mạch thu phát dùng avr điều khiển modul thu phát mua sẵn,nhưng phần mã hóa bằng vi điều khiển khó nhai quá,có ai giúp em phần này với ạ:mã hóa như thế nào,rồi lập trình ra sao
Thông báo
Collapse
No announcement yet.
mã hóa bằng VĐK trong RF
Collapse
X
-
Nguyên văn bởi vietran2708 Xem bài viếtchả là đang muốn làm mạch thu phát dùng avr điều khiển modul thu phát mua sẵn,nhưng phần mã hóa bằng vi điều khiển khó nhai quá,có ai giúp em phần này với ạ:mã hóa như thế nào,rồi lập trình ra sao
( Bạn nghiên cứu dựa trên mã module TX13 - RX13 của Quế Dương xem) ( Hàng ở ngoài không biết có chạy được không !) ( cái này thì mình chịu ) và không có giải thích.
Transmitter CODE :
Code:////////////////// Transmitter TX13 : ATmega8 - 8Mhz . Man + SYNC + ID + checksum /////////// #include <mega8.h> #include <delay.h> #define button_on PINB.0 #define button_off PINB.1 #define TX PORTD.4 // out RF-TX module #define ID 0x25 unsigned char TX_packet[3],TX_data; unsigned char i,j; unsigned int checksum; void Transmitter_Mode(); void main() { DDRB=0b00100100; // PB2-PB5 output DDRC=0b00000000; // All input DDRD=0b00010010; // PD1-PD4 output TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; MCUCR=0x00; TIMSK=0x00; ACSR=0x80; SFIOR=0x00; TX=0; // Low-TX pin WDTCR=0x1E; // Watchdog time out 1 sec WDTCR=0x0E; #asm("wdr") while(1) { #asm("wdr") if(button_on) // Transmitter Mode ( button ON pressed ! ) { do { TX_data =0x01; // 0x01 send to Receiver module ON LED #asm("wdr") Transmitter_Mode();// Do Transmitter_Mode } while(button_on); delay_ms(200); // button debouncer } else if(button_off) // Transmitter Mode ( button OFF pressed ! ) { do { TX_data =0x02; // 0x02 send to Receiver module OFF LED #asm("wdr") Transmitter_Mode();// Do Transmitter_Mode } while(button_off); delay_ms(200); // button debouncer } } // End while(1) } // END MAIN //////////////////////////// Functions //////////////////////////// void Transmitter_Mode() { checksum=0; TX_packet[0]=ID; checksum+= TX_packet[0]; TX_packet[1]=TX_data; checksum+= TX_packet[1]; TX_packet[2]=checksum; for (i=0;i<35;i++) // send preamble { #asm("wdr") TX=0; delay_us(416); // Delay 416 uS TX=1; delay_us(416); // } delay_us(1248); // Delay 1248 uS or 3Te for syn bit #asm("wdr") //----------------- TX=0; // start bit delay_us(416); TX=1; delay_us(416); //----------------- for (j=0;j<3;j++) // Extract and Send 3 byte in TX_packet[3] to Receiver Module { #asm("wdr") for(i=0;i<8;i++) { #asm("wdr") if ((TX_packet[j] & 0x80) == 0x80) { TX=0; delay_us(416); TX=1; delay_us(416); } else { TX=1; delay_us(416); TX=0; delay_us(416); } TX_packet[j]=TX_packet[j]<<1; } } //------ send stop bit ------- TX=0; delay_us(416); TX=1; delay_us(416); delay_ms(2); // delay gaurd TX =0; #asm("wdr") }
Code:///// RX13 receiver : 8 MHz , ID + checksum////// #include <mega8.h> #include <delay.h> #define LED PORTB.2 // Yellow Led #define RX PIND.3 // in RF-RX module #define ID 0x25 unsigned char RX_packet[3]; bit rx_bit; unsigned char i,j,k; unsigned int checksum; char Receiver_packet(unsigned char *buff); void main() { DDRB=0b00100100; // PB2-PB5 output DDRC=0b00000000; // All input DDRD=0b00010010; // PD1-PD4 output TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; MCUCR=0x00; TIMSK=0x00; ACSR=0x80; SFIOR=0x00; WDTCR=0x1E; // Watchdog time out 1 sec WDTCR=0x0E; LED=0; // Led off #asm("wdr") while(1) { #asm("wdr") // Do Receiver_Mode checksum=0; while(Receiver_packet(RX_packet)); for(k=0;k<2; k++) checksum+= RX_packet[k]; checksum&= 0x0FF; if(checksum==RX_packet[2]) { #asm("wdr") if (RX_packet[0]==ID)// check ID { if (RX_packet[1]==0x01) {LED=1;} // Turn ON LED else if (RX_packet[1]==0x02) {LED=0;} // Turn OFF LED } } } // End while(1) } // END MAIN //////////////////////////// Functions //////////////////////////// char Receiver_packet(unsigned char *buff) { unsigned char T0,count; #asm("wdr") i=35; count=0; TCCR0=0x03; // 125 Khz step=8us while(--i) // wait preamble { #asm("wdr") #asm{ NOP NOP NOP } #endasm while(RX); TCNT0=0; #asm("wdr") #asm{ NOP NOP NOP } #endasm while(!RX); T0=TCNT0; if (T0==0xFF) {return 1;} // error if ((T0>=49) && (T0<=55)) // 49x8 =392----> 55x8 =440 uS it OK. +-24us { count++; if ((count>=1)|| (i==0)) break; } } if ((count==0)&&(i==0)) {return 1;} // error TCCR0=0x03; // step 8us T0=0; while (!((T0>=188) && (T0<=228))) // 1504 - 1824 uS it OK. syn bit for 3Te + start or 1664 uS { #asm("wdr") #asm{ NOP NOP NOP } #endasm while(RX); // wait syn TCNT0=0; #asm("wdr") #asm{ NOP NOP NOP } #endasm while(!RX); T0=TCNT0; } #asm("wdr") while(RX); //wait start bit go low delay_us(580); // delay before sampling (1.5Te) #asm("wdr") for (j=0;j<3;j++) { i=8; buff[j]=0; while(i--) { buff[j]=buff[j]<<1; rx_bit=RX; // sampling buff[j]=buff[j] | rx_bit; if (rx_bit==0) while(!RX); else while(RX); delay_us(580); // delay for 1,5Te #asm("wdr") } #asm("wdr") } if (rx_bit==0) if (!RX) return 1; // error (no stop bit found) else if (!RX) return 1; // error (no stop bit found) return 0; }
Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com
-
Vấn đề này em cũng đang quan tâm vì dạo này nghe tin bọn trộm có thể dò được mã cửa cuốn. Nhà em cũng dùng cửa cuốn nên muốn lắp thêm 1 bộ khóa điện RF được mã hóa bằng MCU để cắt nguồn cửa cuốn. Khóa cũ chỉ dùng nâng hạ thôi. Vậy các bác cho em hỏi mã hóa bằng MCU thế này bọn trộm có thể dò được nữa không ạ?
@ queduong: Em xem sản phẩm trên trang web của bác nhưng không thấy có modul TX-13 và RX-13 đã tích hợp MCU. Vậy bác đã có sản phẩm tích hợp chưa hay đặt hàng bác mới làm? Thanks!Mưu sự tại nhân, thành sự tại thiên,
Comment
-
Nguyên văn bởi thwcs Xem bài viếtVấn đề này em cũng đang quan tâm vì dạo này nghe tin bọn trộm có thể dò được mã cửa cuốn. Nhà em cũng dùng cửa cuốn nên muốn lắp thêm 1 bộ khóa điện RF được mã hóa bằng MCU để cắt nguồn cửa cuốn. Khóa cũ chỉ dùng nâng hạ thôi. Vậy các bác cho em hỏi mã hóa bằng MCU thế này bọn trộm có thể dò được nữa không ạ?
@ queduong: Em xem sản phẩm trên trang web của bác nhưng không thấy có modul TX-13 và RX-13 đã tích hợp MCU. Vậy bác đã có sản phẩm tích hợp chưa hay đặt hàng bác mới làm? Thanks!
Bạn hỏi là trộm nó có dò được không ? thế thì tôi cũng chịu không biết nói là thế nào ... Tốt nhất là phải đi hỏi thằng trộm thôi.Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com
Comment
-
Nguyên văn bởi queduong Xem bài viết
Thường thì mua ở chỗ nào kêu người ta hướng dẫn cách dùng chứ !!! ? Mỗi loại sản phẩm đều có các thông số khác nhau nên chưa chắc đã hoạt động giống nhau với cùng 1 mã code .
( Bạn nghiên cứu dựa trên mã module TX13 - RX13 của Quế Dương xem) ( Hàng ở ngoài không biết có chạy được không !) ( cái này thì mình chịu ) và không có giải thích.
Transmitter CODE :
Code:////////////////// Transmitter TX13 : ATmega8 - 8Mhz . Man + SYNC + ID + checksum /////////// #include <mega8.h> #include <delay.h> #define button_on PINB.0 #define button_off PINB.1 #define TX PORTD.4 // out RF-TX module #define ID 0x25 unsigned char TX_packet[3],TX_data; unsigned char i,j; unsigned int checksum; void Transmitter_Mode(); void main() { DDRB=0b00100100; // PB2-PB5 output DDRC=0b00000000; // All input DDRD=0b00010010; // PD1-PD4 output TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; MCUCR=0x00; TIMSK=0x00; ACSR=0x80; SFIOR=0x00; TX=0; // Low-TX pin WDTCR=0x1E; // Watchdog time out 1 sec WDTCR=0x0E; #asm("wdr") while(1) { #asm("wdr") if(button_on) // Transmitter Mode ( button ON pressed ! ) { do { TX_data =0x01; // 0x01 send to Receiver module ON LED #asm("wdr") Transmitter_Mode();// Do Transmitter_Mode } while(button_on); delay_ms(200); // button debouncer } else if(button_off) // Transmitter Mode ( button OFF pressed ! ) { do { TX_data =0x02; // 0x02 send to Receiver module OFF LED #asm("wdr") Transmitter_Mode();// Do Transmitter_Mode } while(button_off); delay_ms(200); // button debouncer } } // End while(1) } // END MAIN //////////////////////////// Functions //////////////////////////// void Transmitter_Mode() { checksum=0; TX_packet[0]=ID; checksum+= TX_packet[0]; TX_packet[1]=TX_data; checksum+= TX_packet[1]; TX_packet[2]=checksum; for (i=0;i<35;i++) // send preamble { #asm("wdr") TX=0; delay_us(416); // Delay 416 uS TX=1; delay_us(416); // } delay_us(1248); // Delay 1248 uS or 3Te for syn bit #asm("wdr") //----------------- TX=0; // start bit delay_us(416); TX=1; delay_us(416); //----------------- for (j=0;j<3;j++) // Extract and Send 3 byte in TX_packet[3] to Receiver Module { #asm("wdr") for(i=0;i<8;i++) { #asm("wdr") if ((TX_packet[j] & 0x80) == 0x80) { TX=0; delay_us(416); TX=1; delay_us(416); } else { TX=1; delay_us(416); TX=0; delay_us(416); } TX_packet[j]=TX_packet[j]<<1; } } //------ send stop bit ------- TX=0; delay_us(416); TX=1; delay_us(416); delay_ms(2); // delay gaurd TX =0; #asm("wdr") }
Code:///// RX13 receiver : 8 MHz , ID + checksum////// #include <mega8.h> #include <delay.h> #define LED PORTB.2 // Yellow Led #define RX PIND.3 // in RF-RX module #define ID 0x25 unsigned char RX_packet[3]; bit rx_bit; unsigned char i,j,k; unsigned int checksum; char Receiver_packet(unsigned char *buff); void main() { DDRB=0b00100100; // PB2-PB5 output DDRC=0b00000000; // All input DDRD=0b00010010; // PD1-PD4 output TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; MCUCR=0x00; TIMSK=0x00; ACSR=0x80; SFIOR=0x00; WDTCR=0x1E; // Watchdog time out 1 sec WDTCR=0x0E; LED=0; // Led off #asm("wdr") while(1) { #asm("wdr") // Do Receiver_Mode checksum=0; while(Receiver_packet(RX_packet)); for(k=0;k<2; k++) checksum+= RX_packet[k]; checksum&= 0x0FF; if(checksum==RX_packet[2]) { #asm("wdr") if (RX_packet[0]==ID)// check ID { if (RX_packet[1]==0x01) {LED=1;} // Turn ON LED else if (RX_packet[1]==0x02) {LED=0;} // Turn OFF LED } } } // End while(1) } // END MAIN //////////////////////////// Functions //////////////////////////// char Receiver_packet(unsigned char *buff) { unsigned char T0,count; #asm("wdr") i=35; count=0; TCCR0=0x03; // 125 Khz step=8us while(--i) // wait preamble { #asm("wdr") #asm{ NOP NOP NOP } #endasm while(RX); TCNT0=0; #asm("wdr") #asm{ NOP NOP NOP } #endasm while(!RX); T0=TCNT0; if (T0==0xFF) {return 1;} // error if ((T0>=49) && (T0<=55)) // 49x8 =392----> 55x8 =440 uS it OK. +-24us { count++; if ((count>=1)|| (i==0)) break; } } if ((count==0)&&(i==0)) {return 1;} // error TCCR0=0x03; // step 8us T0=0; while (!((T0>=188) && (T0<=228))) // 1504 - 1824 uS it OK. syn bit for 3Te + start or 1664 uS { #asm("wdr") #asm{ NOP NOP NOP } #endasm while(RX); // wait syn TCNT0=0; #asm("wdr") #asm{ NOP NOP NOP } #endasm while(!RX); T0=TCNT0; } #asm("wdr") while(RX); //wait start bit go low delay_us(580); // delay before sampling (1.5Te) #asm("wdr") for (j=0;j<3;j++) { i=8; buff[j]=0; while(i--) { buff[j]=buff[j]<<1; rx_bit=RX; // sampling buff[j]=buff[j] | rx_bit; if (rx_bit==0) while(!RX); else while(RX); delay_us(580); // delay for 1,5Te #asm("wdr") } #asm("wdr") } if (rx_bit==0) if (!RX) return 1; // error (no stop bit found) else if (!RX) return 1; // error (no stop bit found) return 0; }
Comment
Bài viết mới nhất
Collapse
-
Comment on Đồng hồ công tơ điện tửbởi qpdt03
-
Channel: Điện tử dành cho người mới bắt đầu
23-03-2024, 17:03 -
-
Comment on Đồng hồ công tơ điện tửbởi qpdt03
-
Channel: Điện tử dành cho người mới bắt đầu
23-03-2024, 17:03 -
-
Trả lời cho Đồng hồ công tơ điện tửbởi qpdt03Hình ảnh mạch của nó đây, mình mang đồng hồ điện tử ra đo giá trị điện trở dán ghi trên lưng các con điện trở trong mạch đều đúng, mà công tơ điện tử vẫn đo sai, không biết nó hỏng chỗ nào; đã ấn nút reset lại nhưng vẫn không đc. Nhờ các bác có kinh nghiệm giúp đỡ. Thanks!
-
Channel: Điện tử dành cho người mới bắt đầu
23-03-2024, 17:03 -
-
bởi qpdt03Mình mới mua 1 cái đồng hồ công tơ điện tử trên shopee; loại hiển thị 4 thông số V,A,W và tổng số Kwh nhưng về cắm thử đc 1 hôm thì chỉ số V báo 378v, cắm về 100v cũng báo 350v có bác nào biết cách sửa chữa nó không chỉ giúp mình nhé. Xin cảm ơn mọi người đã đọc bài.
-
Channel: Điện tử dành cho người mới bắt đầu
23-03-2024, 16:46 -
-
bởi notooth1Các bạn xem giúp mình đây là tụ phân cực hay không phân cực nhé.
...-
Channel: Hướng dẫn tìm thông tin linh kiện
20-03-2024, 18:06 -
-
bởi carl22Xin chào tất cả mọi người.
Tôi hiện đang chế tạo một máy phay CNC. Máy phay được điều khiển thông qua Raspberry Pi 3 b+ và Smoothieboard v1.1 với trình điều khiển động cơ bước ACT DM 542 và động cơ 1,8° 2A.
Trục X 1,8° 3 A chạy qua trình điều khiển động cơ bước vì bảng sinh tố chỉ...-
Channel: Cơ cấu chấp hành (Actuator)
20-03-2024, 15:48 -
-
bởi ningoleChào các bác! Em là newbie về điện tử đang muốn làm một cái đèn báo cho ổ cắm nhưng chưa rành về mạch mong các bác giúp đỡ!
Nhu cầu của e là muốn làm 1 đèn báo nguồn AC 220V:
Nguồn 220v -> Phích cắm -> nối với 1 ổ cắm....-
Channel: Điện tử dành cho người mới bắt đầu
20-03-2024, 11:09 -
-
Trả lời cho có cần thiết phải lắp mạch bms cho khối pin ?bởi bao98Tất nhiên là bạn cần nó!
BMS là một phần không thể thiếu trong hệ thống ắc quy của xe điện.
nếu bạn không cài đặt BMS, có thể xảy ra vấn đề về pin, thậm chí có thể dẫn đến tai nạn-
Channel: Điện tử dành cho người mới bắt đầu
19-03-2024, 22:51 -
-
Trả lời cho [đồ án] xung đột nguồn điện 12vbởi bao98Để tìm hiểu xem bộ điều hợp UART của bạn được kết nối với cổng USB nào trên Raspberry Pi, bạn có thể sử dụng lệnh ls /dev/ttyUSB* hoặc ls /dev/ttyACM* trong thiết bị đầu cuối. Điều này sẽ liệt kê các cổng USB có sẵn để liên lạc nối tiếp. Cáp có thể được xem ở đây. Bạn cũng có thể kết nối và...
-
Channel: Hỗ trợ học tập
19-03-2024, 22:38 -
-
Trả lời cho cho hỏi move điện là g?bởi DiennuocAQLà sự tiếp xúc giữa 2 tiếp điểm không được tốt gây ra. Ví dụ như đầu dây điện cắm vào chân attomat nhưng lâu ngày ốc siết lỏng dần ra, làm dòng điện chuyển tiếp không tốt, gây ra hệ thống điện chập chờn gọi là move ạ
-
Channel: Điện tử dành cho người mới bắt đầu
19-03-2024, 12:40 -
Comment