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
-
Trả lời cho Hỏi cách điều chế xungbởi thetungBạn cho qua cái Tờ ri gơ Sờ mít ấy ......
-
Channel: Kỹ thuật điện tử tương tự
16-12-2024, 11:26 -
-
Trả lời cho Hỏi cách điều chế xungbởi nguyendinhvanCó gì mà khó ?
Răn cưa vuông đây
...-
Channel: Kỹ thuật điện tử tương tự
15-12-2024, 23:36 -
-
Trả lời cho hỏi về tụ điệnbởi ndp62Chữ " VENT" không phải là tên hãng sx tụ đâu ,vó thế là 1 ký hiệu liên quan tụ lowesr ?
-
Channel: Điện thanh
15-12-2024, 18:24 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi bqvietTrừ trường hợp công suất (rất) thấp, hầu như tất cả các loại nguồn xung thông thường đều có tụ nhỏ 1 - 10nF nối giữa sơ cấp và thứ cấp, để thoát nhiễu và để chống hiện tượng tương tự tĩnh điện. Vụ này đã thảo luận vài...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 22:02 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi namlangnhoE thử 3 cái nguồn nó đều giống nhau. Nên e làm tiếp địa luôn.
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 19:58 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi mèomướpDạ chú sắm con át chống giật và thay nguồn tổ ong khác cho an toàn ạ. Đa phần nguồn xung đều xả nhiễu của bên thứ cấp về điện lưới qua 1 con tụ nên cảm giác tê sẽ khó xác định rõ ràng là do rò điện hay là nó vốn vậy...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 18:51 -
-
bởi namlangnhoXin chào mọi người. E có sử dụng 1 cục nguồn tổ ong 12v-30A chạy đèn led xe trà sữa. Mà thợ thi công bị rò điện nên điện rò ra khung xe. E dùng đồng hồ đo điện ở khung xe và cả output thì thấy có dòng điện xoay chiều hơn 100v. Nên chạm...
-
Channel: Điện tử dành cho người mới bắt đầu
14-12-2024, 00:12 -
-
bởi Manh.n.trCác bác cho em hỏi cách điều chế xung răng cưa sang xung vuông với ạ. Em đang thấy khó ạ...
-
Channel: Kỹ thuật điện tử tương tự
13-12-2024, 20:46 -
-
Trả lời cho hỏi về thiết kế mạch tuần tự trên proteusbởi Hatruong1309
-
Channel: Hỗ trợ học tập
12-12-2024, 00:33 -
-
bởi Hatruong1309Cho e hỏi là phần chân X thì nối cái j thì mạch mới chạy được ạ và kiểm tra đúng sai kiểu j ạ
Đề bài thiết kế mạch dãy đồng bộ nhận biết dãy tín hiệu vào ở dạng nhị phân được đưa liên tiếp ở đầu vào X và được đồng...-
Channel: Hỗ trợ học tập
12-12-2024, 00:33 -
Comment