Thông báo
Collapse
No announcement yet.
code cho PIC 16f887 chức năng giống PT 2262 -2272
Collapse
X
-
Nguyên văn bởi queduong Xem bài viếtNhớ ngày xưa cách đây chác vài năm cũng viết cho em nào đó ở Quảng Ninh , Hải Phòng ... cái đề tài tương tự ... mò trong máy tính được cái này :
Điều khiển 8 led nút bấm ( PIC16F877A) --- CCS nhé.
( cách thức hoạt động : Gạt switch ... bấm nút send ... bên thu sẽ sáng led tương ứng --- Có mã nguồn C ở bên dưới ... pốtùy ý sửa code theo ý muốn nha !
)
Thu :
Code:#include <16F877A.h> #device adc=8 #FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, WRT_50% #use delay(clock=4000000) #define RX_ID 0x30 // Receiver ID #define RX PIN_C7 // Chan nhan xung ma hoa #define Led PIN_D1 // power led unsigned char RX_packet[3],x; int1 rx_bit; // rx_bit range value : 0 or 1 unsigned int checksum; int1 Receiver(unsigned char *buff); void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_comparator(NC_NC_NC_NC); set_tris_b(0x00); // Port b all out put output_b(0x00); // port b all low set_tris_c(0xFF); // port C all input ( RC7 input) set_tris_d(0xFD); output_high(Led); while(TRUE) { checksum=0; while(Receiver(RX_packet)); for(x=0;x<2;x++) checksum+= RX_packet[x]; checksum&= 0x0FF; if(checksum==RX_packet[2]) // Kiem tra tong cua goi du lieu (packet) { if(RX_packet[0]==RX_ID) // Kiem tra ID { output_b(RX_packet[1]); // Xuat ra port b } } } // End while(1) } //////////////////////////// Functions //////////////////////////// int1 Receiver(unsigned char *buff) { unsigned char i,j,T0,count; i=32; count=0; setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); // setup timer 0 div 2 while(--i) // wait preamble { #asm NOP; NOP; NOP; #endasm while(input(RX)); set_timer0(0); // reset timer0 = 0 #asm NOP; NOP; NOP; #endasm while(!input(RX)); T0=get_timer0(); // doc timer 0 if (T0==0xFF) {return 1;} // error if ((T0>=198) && (T0<=218)) // check pulse 396us --> 436us (OK ) { count++; if ((count>=1)|| (i==0)) break; } } if ((count==0)&&(i==0)) {return 1;} // error setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16); // setup time0 div 16 T0=0; while (!((T0>=94) && (T0<=114))) // 1504 - 1824 uS it OK. syn bit for 4Te or 1664 uS { #asm NOP; NOP; NOP; #endasm while(input(RX)); // wait syn set_timer0(0); // reset timer0 = 0 #asm NOP; NOP; NOP; #endasm while(!input(RX)); T0=get_timer0(); // doc timer 0 } while(input(RX)); //wait start bit go low delay_us(624); // delay before sampling (1.5Te) for (j=0;j<3;j++) // build packet bytes ( 3 bytes) { i=8; // build paket bit (8 bits ) buff[j]=0; while(i--) { buff[j]=buff[j]<<1; rx_bit=input(RX); // check logic (0,1) chan RX buff[j]=buff[j] | rx_bit; if (rx_bit==0) while(!input(RX)); else while(input(RX)); delay_us(624); // delay for 1,5Te } } if (rx_bit==0) if (!input(RX)) return 1; // error (no stop bit found) else if (!input(RX)) return 1; // error (no stop bit found) return 0; }
--- Thôi ... hết rồi . Đi ngủ cho khỏe !
#asm
NOP;
NOP;
NOP;
#endasm
- sao có phần code asm chi vậy bác, thay bằng delay ko được àh ?.
- với phần timer nếu dùng chia tỉ lệ là 1 thì trong 1 chu kì máy ở đây là 1us, thì timer0 nó đếm được 256 giá trị tương ứng trong khoảng thời gian 256us, nếu chọn tỉ lệ chia 2 thì 256 giá trị tương ứng khoảng thời gian 512us phải ko ?? . hơi mất căn bản timer bác thông cảm
if ((count>=1)|| (i==0)) code này thì hiểu như thế nào vậy ạh ? ,
- em thấy có dùng biến *buff trong đoạn sub int1 Receiver(unsigned char *buff) , vậy biến này là gị vậy ạ, hình như là biến đệm hay gì đó vì giống từ bufferLast edited by minhtri0405; 05-12-2013, 00:43.CK6C -HUI
Comment
-
Nguyên văn bởi minhtri0405 Xem bài viếtbác queduong cho e hỏi cái, phần code thu, chỗ
#asm
NOP;
NOP;
NOP;
#endasm
- sao có phần code asm chi vậy bác, thay bằng delay ko được àh ?.
- với phần timer nếu dùng chia tỉ lệ là 1 thì trong 1 chu kì máy ở đây là 1us, thì timer0 nó đếm được 256 giá trị tương ứng trong khoảng thời gian 256us, nếu chọn tỉ lệ chia 2 thì 256 giá trị tương ứng khoảng thời gian 512us phải ko ?? . hơi mất căn bản timer bác thông cảm
if ((count>=1)|| (i==0)) code này thì hiểu như thế nào vậy ạh ? ,
- em thấy có dùng biến *buff trong đoạn sub int1 Receiver(unsigned char *buff) , vậy biến này là gị vậy ạ, hình như là biến đệm hay gì đó vì giống từ buffer
Comment
-
Nguyên văn bởi duong_act Xem bài viết
Nếu (count lớn hơn hoặc bằng 1) hoặc (i=0).CK6C -HUI
Comment
-
Nguyên văn bởi minhtri0405 Xem bài viếtem cũng hiểu là như vậy nhưng nếu vậy thì điều kiện đó luôn đúng mà, giả sử 1 xung đủ điều kiện là >396us và < 436us thì count lên 1 rồi => câu if ((count>=1)|| (i==0)) đúng , lệnh break thực hiện rồi còn đâu ?? mà đếm nữaModule 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 minhtri0405 Xem bài viếtcó thể dùng ngắt trong mạch thu Rx được ko các bác, e dùng thời gian thực nữa mà vòng lặp nó làm cho thời gian thực chạy ko được, nếu ngắt được thì port C có ngắt được ko , cụ thể là PIN C0, chứ e in mạch rồi lười vẽ lại quá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
-
anh ơi cho em hỏi .giờ e muốn điều khiển 1 led bằng mắt thu hồng ngoại .sau đó cho nó qua triac khuyếch đại công suất lên điều khiển bóng 220v .thì code này viết lại hay xóa phần nào anh ! tks anh nhiều ....e đang làm đồ án .mong mấy a giúp đỡ
Comment
-
Nguyên văn bởi queduong Xem bài viếtNhớ ngày xưa cách đây chác vài năm cũng viết cho em nào đó ở Quảng Ninh , Hải Phòng ... cái đề tài tương tự ... mò trong máy tính được cái này :
Điều khiển 8 led nút bấm ( PIC16F877A) --- CCS nhé.
( cách thức hoạt động : Gạt switch ... bấm nút send ... bên thu sẽ sáng led tương ứng --- Có mã nguồn C ở bên dưới ... pốtùy ý sửa code theo ý muốn nha !
)
[ATTACH=CONFIG]77578[/ATTACH]
Phát :
Code:#include <16F877A.h> #device adc=8 #FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, WRT_50% #use delay(clock=4000000) #define TX_ID 0x30 // Transmitter ID #define TX PIN_C6 // Chan phat xung ma hoa #define Button PIN_D0 // nut bam #define Led PIN_D1 // Power led unsigned char TX_packet[3]; unsigned char i,j; unsigned int checksum; void Transmitter(); void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_comparator(NC_NC_NC_NC); set_tris_c(0b10111111); output_c(0x00); set_tris_a(0x00); output_a(0x00); set_tris_d(0xFD); // rd1 output output_high(Led); while(TRUE) { if(!input(Button)) { do { // Dong goi du lieu // ( data packet ) checksum=0; TX_packet[0]=TX_ID; // Transmitter ID checksum+= TX_packet[0]; TX_packet[1]=input_b(); // doc trang thai port b checksum+= TX_packet[1]; TX_packet[2]=checksum; // goi du lieu ( Tong ( Sum ) ) // gui du lieu qua chan TX Transmitter(); } while(!input(Button)); delay_ms(200); // Chong rung phim } } } ///////////////// functions //////////////////////// void Transmitter() { for (i=0;i<32;i++) // send preamble { output_high(TX); delay_us(416); // Delay 416 uS output_low(TX); delay_us(416); // } delay_us(1248); // delay 1248 uS or 3Te for syn bit //----------------- output_high(TX); // start bit delay_us(416); output_low(TX); delay_us(416); //----------------- for (j=0;j<3;j++) // 3 bytes packet transmitter { for(i=0;i<8;i++) { if ((TX_packet[j] & 0x80) == 0x80) { output_high(TX); delay_us(416); output_low(TX); delay_us(416); } else { output_low(TX); delay_us(416); output_high(TX); delay_us(416); } TX_packet[j]=TX_packet[j]<<1; } } //------ send stop bit ------- output_high(TX); delay_us(416); output_low(TX); delay_us(416); delay_ms(20); // delay gaurd } //////////////////////////////
Thu :
Code:#include <16F877A.h> #device adc=8 #FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, WRT_50% #use delay(clock=4000000) #define RX_ID 0x30 // Receiver ID #define RX PIN_C7 // Chan nhan xung ma hoa #define Led PIN_D1 // power led unsigned char RX_packet[3],x; int1 rx_bit; // rx_bit range value : 0 or 1 unsigned int checksum; int1 Receiver(unsigned char *buff); void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_comparator(NC_NC_NC_NC); set_tris_b(0x00); // Port b all out put output_b(0x00); // port b all low set_tris_c(0xFF); // port C all input ( RC7 input) set_tris_d(0xFD); output_high(Led); while(TRUE) { checksum=0; while(Receiver(RX_packet)); for(x=0;x<2;x++) checksum+= RX_packet[x]; checksum&= 0x0FF; if(checksum==RX_packet[2]) // Kiem tra tong cua goi du lieu (packet) { if(RX_packet[0]==RX_ID) // Kiem tra ID { output_b(RX_packet[1]); // Xuat ra port b } } } // End while(1) } //////////////////////////// Functions //////////////////////////// int1 Receiver(unsigned char *buff) { unsigned char i,j,T0,count; i=32; count=0; setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2); // setup timer 0 div 2 while(--i) // wait preamble { #asm NOP; NOP; NOP; #endasm while(input(RX)); set_timer0(0); // reset timer0 = 0 #asm NOP; NOP; NOP; #endasm while(!input(RX)); T0=get_timer0(); // doc timer 0 if (T0==0xFF) {return 1;} // error if ((T0>=198) && (T0<=218)) // check pulse 396us --> 436us (OK ) { count++; if ((count>=1)|| (i==0)) break; } } if ((count==0)&&(i==0)) {return 1;} // error setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16); // setup time0 div 16 T0=0; while (!((T0>=94) && (T0<=114))) // 1504 - 1824 uS it OK. syn bit for 4Te or 1664 uS { #asm NOP; NOP; NOP; #endasm while(input(RX)); // wait syn set_timer0(0); // reset timer0 = 0 #asm NOP; NOP; NOP; #endasm while(!input(RX)); T0=get_timer0(); // doc timer 0 } while(input(RX)); //wait start bit go low delay_us(624); // delay before sampling (1.5Te) for (j=0;j<3;j++) // build packet bytes ( 3 bytes) { i=8; // build paket bit (8 bits ) buff[j]=0; while(i--) { buff[j]=buff[j]<<1; rx_bit=input(RX); // check logic (0,1) chan RX buff[j]=buff[j] | rx_bit; if (rx_bit==0) while(!input(RX)); else while(input(RX)); delay_us(624); // delay for 1,5Te } } if (rx_bit==0) if (!input(RX)) return 1; // error (no stop bit found) else if (!input(RX)) return 1; // error (no stop bit found) return 0; }
--- Thôi ... hết rồi . Đi ngủ cho khỏe !
Comment
-
Nguyên văn bởi gse7en Xem bài viếtanh ơi cho em hỏi .giờ e muốn điều khiển 1 led bằng mắt thu hồng ngoại .sau đó cho nó qua triac khuyếch đại công suất lên điều khiển bóng 220v .thì code này viết lại hay xóa phần nào anh ! tks anh nhiều ....e đang làm đồ án .mong mấy a giúp đỡ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 09069 Xem bài viếtảnh nhỏ quá bác quế dương ơi chả thấy gì cả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
-
Click vào nó sẽ hiện 1 nhỏ , 1 to :
- Đây là cái hình nhỏ : http://www.dientuvietnam.net/forums/...2-led_send.jpg
- Đây là cái hình to :
http://www.dientuvietnam.net/forums/...2-led_send.jpgModule 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
Bài viết mới nhất
Collapse
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi mèomướpDạ thấy chú dinh... có vẻ mặn nồng với đèn sự cố nên cháu rình lúc chị hàng xóm đi vắng bắc thang trèo lên chụp mấy cái đèn nhà chị ấy ạ. Tầm vài trăm cái dùng tuýp led 220v bình thường ấy ạ. Dùng chiếu sáng thay bóng tuýp luôn Hơn...
-
Channel: Điện tử công suất
Hôm qua, 22:38 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietTheo sơ đồ bạn đã vẽ thì đây chỉ là mạch nguồn flyback không cách ly, phản hồi cả dòng lẫn áp thôi mà. Một dạng nguồn CC-CV thông dụng. Kiếm con chip tốt làm là được, nếu chịu chạy dãy LED có cách ly thì càng tốt.
Vấn đề...-
Channel: Điện tử công suất
Hôm qua, 21:56 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80Phật có dạy là CHÁNH NIỆM (hay CHÍNH gì ấy, ĐT bị... rối loạn ngôn ngữ và trí nhớ, mong lượng thứ!) - CHÁNH NGỮ - CHÁNH HÀNH ĐỘNG, đó là đường hướng tới CHÁNH ĐẠO.
ĐT ngu muội nên cứ áp dụng vào điện tử: phải cố...-
Channel: Điện tử công suất
06-02-2025, 06:16 -
-
Trả lời cho [HELP] mạch cầu H inverter 100vdc to 100v ?bởi ngoctn93Em cũng có nguồn 250 đến 280vdc muốn chuyển sang 100vac bằng mạch cầu H dùng esg002. Có bác nào làm rồi chỉ em hoặc bán em với ạ. Em xin cảm ơn ạ
-
Channel: Điện tử công suất
05-02-2025, 23:00 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi mèomướpCháu thấy chú nhat... viết toàn cái gì gì ấy ạ khó hiểu ghê, chắc mai cháu phải đi hỏi mấy anh chị lớp lớn hơn xem sao ạ. Những việc lớn tầm cỡ thì hông phải ai cũng có đủ kiến thức, thời gian, sức khỏe, tiền bạc, đam mê, kiên...
-
Channel: Điện tử công suất
05-02-2025, 22:11 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Bác bảo ai lớn tờ iếng tiếng?
Hùng là không nhé. Chỉ bảo tận tình chứ không tận diệt.
Yêu kỹ thuật nên vẫn tham gia cho vui thôi. Mấy của nợ này dùng con PIC hai chục ngàn còn ngon luôn....-
Channel: Điện tử công suất
05-02-2025, 21:38 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi vi van phamThôi mà, anh em giúp đỡ nhau, có gì mà lớn tiếng?
Ai không chịu giúp đỡ nhau thì vào đây nhậu với tui. Bà xã hôm nay ngũ sớm tui được tự do, solo buồn quá, Nhathung,Dinhthuong ,Đinh Vặn gì đó tui cân tuốt.-
Channel: Điện tử công suất
05-02-2025, 21:16 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Thằng I Lôn Mút nó sắp đưa người lên sao Hỏa rồi.
Mấy anh em vẫn bàn cái "Một Phát Phải Thôi" thì nẫu quá.
Ngâm cứu cái gì cho đáng đi. Còn tôi nói gì hơi quá thì xin lỗi nhé.-
Channel: Điện tử công suất
05-02-2025, 19:45 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Và tôi thấy cái này như con bò sữa thôi mà. Nếu xét nguyên lý.
Bóp bóp bóp... đến hết thì thôi. Cái mạch thì nguồn sơ đẳng. Con để bóp thì vu nó lại cáo cào cao.
Ắc qui hay pin thì vưỡn giá nào xào nấy. Inverter thì...-
Channel: Điện tử công suất
05-02-2025, 19:33 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Chip hay trở? Chip tôi có vài bịch để từ trước tết, mai giặt.
Trở thì tồn vài cân. Toàn hàng đặt, sai số 1%.
Nhưng ở đây ko buôn bán, chỉ tặng....-
Channel: Điện tử công suất
05-02-2025, 19:14 -
Comment