các pác cho tui hỏi làm sao tui quét led =595 nếu quét cở 4 con thì ok mà quét nhiều hơn 16 con thì nó nhiều hay cái chổ là là phần gần các chân xung (89c51) thì hông nhiểu mà càng xa nó càng nhiễu giúp mình với
Thông báo
Collapse
No announcement yet.
Thắn mắc về ic 74hc595?
Collapse
X
-
Nguyên văn bởi thanhnha220 Xem bài viếtcác pác cho tui hỏi làm sao tui quét led =595 nếu quét cở 4 con thì ok mà quét nhiều hơn 16 con thì nó nhiều hay cái chổ là là phần gần các chân xung (89c51) thì hông nhiểu mà càng xa nó càng nhiễu giúp mình vớiBạn mắc thêm 3 con điện trở kéo nguồn 4,7K cho chân clock, chân latch, chân data của con đầu tiên. Thế là hết ngay!Nguyên văn bởi thanhnha220 Xem bài viếtbạn có chạy nhiều 595 hong chứ tui ghi dịch 1 lần 4 con thì không sao cả lên 16 con nó nhiều đó là hiện tương kì lạ ai biết hương dẫn giúm
Comment
-
bạnb có thể cho mình biết nguyên nhân được hông để tìm cách khác phụcNguyên văn bởi tosang Xem bài viếtBạn mắc thêm 3 con điện trở kéo nguồn 4,7K cho chân clock, chân latch, chân data của con đầu tiên. Thế là hết ngay!
Comment
-
các bác cho em hỏi là mạch em làm các led không tắt hẳn mà sáng mờ mờ thế ak
hình như trong code em còn lỗi chỗ nào thì phải.Các bác xem qua giúp em với
Code:/***************************************************** Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 8.000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega16.h> #include <delay.h> #define DATA PORTA.2 #define SCK PORTA.3 #define SCL PORTA.4 #define DATA60 PORTA.5 #define SCK60 PORTA.6 #define SCL60 PORTA.7 unsigned char h,m,s; unsigned char h1,h2,m1,m2,s1,s2; unsigned char ma1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xFF}; unsigned char ma2[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00}; unsigned char MALED1[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; unsigned char MALED2[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; unsigned char i,j,k; // I2C Bus functions #asm .equ __i2c_port=0x15 ;PORTC .equ __sda_bit=1 .equ __scl_bit=0 #endasm #include <i2c.h> // DS1307 Real Time Clock functions #include <ds1307.h> // Timer 0 overflow interrupt service routine static unsigned int counter; interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Reinitialize Timer 0 value TCNT0=0x06; ++counter; } #define FIRST_ADC_INPUT 0 #define LAST_ADC_INPUT 1 unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1]; #define ADC_VREF_TYPE 0x60 // ADC interrupt service routine // with auto input scanning interrupt [ADC_INT] void adc_isr(void) { static unsigned char input_index=0; // Read the 8 most significant bits // of the AD conversion result adc_data[input_index]=ADCH; // Select next ADC input if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) input_index=0; ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index; // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; } void Show_TIME(unsigned char x) { int i,temp; for(i=0;i<8;i++) { temp=x;//gan bien temp=temp&0x80;//lay ra bit dau tien (bit 7) if(temp==0x80)//so sanh bit DATA=1; //bang 1 thi xuat vao chip =1 else DATA=0; //nguoc lai bang 0 x*=2; //dich bit lay bit trong so thap SCK=0; //tao xung tren chan 11 SCK=1; //1 xung dua vào 1 bít } //SCL=0; // SCL=1; } void Ghidich(unsigned char x) { int i,temp; for(i=0;i<8;i++) { temp=x;//gan bien temp=temp&0x80;//lay ra bit dau tien (bit 7) if(temp==0x80)//so sanh bit DATA60=1; //bang 1 thi xuat vao chip =1 else DATA60=0; //nguoc lai bang 0 x*=2; //dich bit lay bit trong so thap SCK60=0; //tao xung tren chan 11 SCK60=1; //1 xung dua vào 1 bít } } void ghi_dich(unsigned char t1,unsigned char t2,unsigned char t3,unsigned char t4,unsigned char t5,unsigned char t6,unsigned char t7,unsigned char t8) {unsigned char i,Q; Q=t8; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t7; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t6; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t5; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t4; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t3; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t2; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t1; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } SCL60=0; SCL60=1; } void Clear_60LED(void) { ghi_dich(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00); } void Clear_TIME(void) { Show_TIME(0x00); Show_TIME(0x00); Show_TIME(0x00); Show_TIME(0x00); SCL=0; SCL=1; } void Show_LED1(unsigned char gia_tri) {unsigned char k1,k2,k3; k1=0; k2=MALED1[gia_tri%8]; k3=0xFF; if((gia_tri>=0)&&(gia_tri<8)) ghi_dich(k2,k3,k3,k3,k3,k3,k3,k3); if((gia_tri>=8)&&(gia_tri<16)) ghi_dich(k1,k2,k3,k3,k3,k3,k3,k3); if((gia_tri>=16)&&(gia_tri<24))ghi_dich(k1,k1,k2,k3,k3,k3,k3,k3); if((gia_tri>=24)&&(gia_tri<32))ghi_dich(k1,k1,k1,k2,k3,k3,k3,k3); if((gia_tri>=32)&&(gia_tri<40))ghi_dich(k1,k1,k1,k1,k2,k3,k3,k3); if((gia_tri>=40)&&(gia_tri<48))ghi_dich(k1,k1,k1,k1,k1,k2,k3,k3); if((gia_tri>=48)&&(gia_tri<56))ghi_dich(k1,k1,k1,k1,k1,k1,k2,k3); if((gia_tri>=56)&&(gia_tri<60))ghi_dich(k1,k1,k1,k1,k1,k1,k1,k2); } void Show_LED2(unsigned char gia_tri) {unsigned char k1,k2,k3; k1=0; k2=MALED2[gia_tri%8]; k3=0xFF; if((gia_tri>=0)&&(gia_tri<8)) ghi_dich(k2,k1,k1,k1,k1,k1,k1,k1); if((gia_tri>=8)&&(gia_tri<16)) ghi_dich(k3,k2,k1,k1,k1,k1,k1,k1); if((gia_tri>=16)&&(gia_tri<24))ghi_dich(k3,k3,k2,k1,k1,k1,k1,k1); if((gia_tri>=24)&&(gia_tri<32))ghi_dich(k3,k3,k3,k2,k1,k1,k1,k1); if((gia_tri>=32)&&(gia_tri<40))ghi_dich(k3,k3,k3,k3,k2,k1,k1,k1); if((gia_tri>=40)&&(gia_tri<48))ghi_dich(k3,k3,k3,k3,k3,k2,k1,k1); if((gia_tri>=48)&&(gia_tri<56))ghi_dich(k3,k3,k3,k3,k3,k3,k2,k1); if((gia_tri>=56)&&(gia_tri<60))ghi_dich(k3,k3,k3,k3,k3,k3,k3,k2); delay_ms(5);Clear_60LED();delay_us(200); } void TIME(void) { m1=m%10; m2=m/10; h1=h%10; h2=h/10; Show_TIME(ma2[m1]); Show_TIME(ma2[m2]); Show_TIME(ma2[h1]); Show_TIME(ma2[h2]); SCL=0; SCL=1; } void main(void) { // Input/Output Ports initialization // Port A initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=In Func0=In // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=T State0=T PORTA=0xFC; DDRA=0xFC; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 125.000 kHz // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x03; TCNT0=0x06; OCR0=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; // ADC initialization // ADC Clock frequency: 1000.000 kHz // ADC Voltage Reference: AVCC pin // ADC Auto Trigger Source: Free Running // Only the 8 most significant bits of // the AD conversion result are used ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff); ADCSRA=0xEB; SFIOR&=0x1F; // I2C Bus initialization i2c_init(); // DS1307 Real Time Clock initialization // Square wave output on pin SQW/OUT: On // Square wave frequency: 1Hz rtc_init(0,1,0); rtc_set_time(01,59,50); // Global enable interrupts #asm("sei") while (1) { rtc_get_time(&h,&m,&s); Show_LED2(s); TIME(); } }
Comment
-
1. do nguồn gánh không nổiNguyên văn bởi chand Xem bài viết
các bác cho em hỏi là mạch em làm các led không tắt hẳn mà sáng mờ mờ thế ak
hình như trong code em còn lỗi chỗ nào thì phải.Các bác xem qua giúp em với
Code:/***************************************************** Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 8.000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega16.h> #include <delay.h> #define DATA PORTA.2 #define SCK PORTA.3 #define SCL PORTA.4 #define DATA60 PORTA.5 #define SCK60 PORTA.6 #define SCL60 PORTA.7 unsigned char h,m,s; unsigned char h1,h2,m1,m2,s1,s2; unsigned char ma1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xFF}; unsigned char ma2[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00}; unsigned char MALED1[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; unsigned char MALED2[]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF}; unsigned char i,j,k; // I2C Bus functions #asm .equ __i2c_port=0x15 ;PORTC .equ __sda_bit=1 .equ __scl_bit=0 #endasm #include <i2c.h> // DS1307 Real Time Clock functions #include <ds1307.h> // Timer 0 overflow interrupt service routine static unsigned int counter; interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Reinitialize Timer 0 value TCNT0=0x06; ++counter; } #define FIRST_ADC_INPUT 0 #define LAST_ADC_INPUT 1 unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1]; #define ADC_VREF_TYPE 0x60 // ADC interrupt service routine // with auto input scanning interrupt [ADC_INT] void adc_isr(void) { static unsigned char input_index=0; // Read the 8 most significant bits // of the AD conversion result adc_data[input_index]=ADCH; // Select next ADC input if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) input_index=0; ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index; // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; } void Show_TIME(unsigned char x) { int i,temp; for(i=0;i<8;i++) { temp=x;//gan bien temp=temp&0x80;//lay ra bit dau tien (bit 7) if(temp==0x80)//so sanh bit DATA=1; //bang 1 thi xuat vao chip =1 else DATA=0; //nguoc lai bang 0 x*=2; //dich bit lay bit trong so thap SCK=0; //tao xung tren chan 11 SCK=1; //1 xung dua vào 1 bít } //SCL=0; // SCL=1; } void Ghidich(unsigned char x) { int i,temp; for(i=0;i<8;i++) { temp=x;//gan bien temp=temp&0x80;//lay ra bit dau tien (bit 7) if(temp==0x80)//so sanh bit DATA60=1; //bang 1 thi xuat vao chip =1 else DATA60=0; //nguoc lai bang 0 x*=2; //dich bit lay bit trong so thap SCK60=0; //tao xung tren chan 11 SCK60=1; //1 xung dua vào 1 bít } } void ghi_dich(unsigned char t1,unsigned char t2,unsigned char t3,unsigned char t4,unsigned char t5,unsigned char t6,unsigned char t7,unsigned char t8) {unsigned char i,Q; Q=t8; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t7; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t6; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t5; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t4; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t3; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t2; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } Q=t1; for(i=0;i<8;i++){DATA60=(Q&0x01)?1:0;SCK60=1;SCK60=0;Q>>=1; } SCL60=0; SCL60=1; } void Clear_60LED(void) { ghi_dich(0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00); } void Clear_TIME(void) { Show_TIME(0x00); Show_TIME(0x00); Show_TIME(0x00); Show_TIME(0x00); SCL=0; SCL=1; } void Show_LED1(unsigned char gia_tri) {unsigned char k1,k2,k3; k1=0; k2=MALED1[gia_tri%8]; k3=0xFF; if((gia_tri>=0)&&(gia_tri<8)) ghi_dich(k2,k3,k3,k3,k3,k3,k3,k3); if((gia_tri>=8)&&(gia_tri<16)) ghi_dich(k1,k2,k3,k3,k3,k3,k3,k3); if((gia_tri>=16)&&(gia_tri<24))ghi_dich(k1,k1,k2,k3,k3,k3,k3,k3); if((gia_tri>=24)&&(gia_tri<32))ghi_dich(k1,k1,k1,k2,k3,k3,k3,k3); if((gia_tri>=32)&&(gia_tri<40))ghi_dich(k1,k1,k1,k1,k2,k3,k3,k3); if((gia_tri>=40)&&(gia_tri<48))ghi_dich(k1,k1,k1,k1,k1,k2,k3,k3); if((gia_tri>=48)&&(gia_tri<56))ghi_dich(k1,k1,k1,k1,k1,k1,k2,k3); if((gia_tri>=56)&&(gia_tri<60))ghi_dich(k1,k1,k1,k1,k1,k1,k1,k2); } void Show_LED2(unsigned char gia_tri) {unsigned char k1,k2,k3; k1=0; k2=MALED2[gia_tri%8]; k3=0xFF; if((gia_tri>=0)&&(gia_tri<8)) ghi_dich(k2,k1,k1,k1,k1,k1,k1,k1); if((gia_tri>=8)&&(gia_tri<16)) ghi_dich(k3,k2,k1,k1,k1,k1,k1,k1); if((gia_tri>=16)&&(gia_tri<24))ghi_dich(k3,k3,k2,k1,k1,k1,k1,k1); if((gia_tri>=24)&&(gia_tri<32))ghi_dich(k3,k3,k3,k2,k1,k1,k1,k1); if((gia_tri>=32)&&(gia_tri<40))ghi_dich(k3,k3,k3,k3,k2,k1,k1,k1); if((gia_tri>=40)&&(gia_tri<48))ghi_dich(k3,k3,k3,k3,k3,k2,k1,k1); if((gia_tri>=48)&&(gia_tri<56))ghi_dich(k3,k3,k3,k3,k3,k3,k2,k1); if((gia_tri>=56)&&(gia_tri<60))ghi_dich(k3,k3,k3,k3,k3,k3,k3,k2); delay_ms(5);Clear_60LED();delay_us(200); } void TIME(void) { m1=m%10; m2=m/10; h1=h%10; h2=h/10; Show_TIME(ma2[m1]); Show_TIME(ma2[m2]); Show_TIME(ma2[h1]); Show_TIME(ma2[h2]); SCL=0; SCL=1; } void main(void) { // Input/Output Ports initialization // Port A initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=In Func0=In // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=T State0=T PORTA=0xFC; DDRA=0xFC; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 125.000 kHz // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x03; TCNT0=0x06; OCR0=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; // ADC initialization // ADC Clock frequency: 1000.000 kHz // ADC Voltage Reference: AVCC pin // ADC Auto Trigger Source: Free Running // Only the 8 most significant bits of // the AD conversion result are used ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff); ADCSRA=0xEB; SFIOR&=0x1F; // I2C Bus initialization i2c_init(); // DS1307 Real Time Clock initialization // Square wave output on pin SQW/OUT: On // Square wave frequency: 1Hz rtc_init(0,1,0); rtc_set_time(01,59,50); // Global enable interrupts #asm("sei") while (1) { rtc_get_time(&h,&m,&s); Show_LED2(s); TIME(); } }
2. do đường clock và latch dài xa, nên mức 1 đưa vào 595 không rõ
3. do nhiễu trên đường clock và latch, chủ yếu là nhiễu latch
Comment
-
bác cho em hướng giải quyết điNguyên văn bởi tosang Xem bài viết1. do nguồn gánh không nổi
2. do đường clock và latch dài xa, nên mức 1 đưa vào 595 không rõ
3. do nhiễu trên đường clock và latch, chủ yếu là nhiễu latch
Comment
-
Bạn chụp hình mạch bác làm up lên đi bác. Chứ 0 biết đâu mà mò dùmNguyên văn bởi chand Xem bài viếtbác cho em hướng giải quyết đi
Comment
-
vấn đề đi mạch không hề đơn giản đối với các mạch tần số cao, công suất lớn, như tôi chạy mạch pwm 2MHz đã biến đường line dài 3cm đã thành 1 cuộn cảm.
trong trường hợp này bạn nên mắc 1 con tụ 102,103,104 ngay sát chân nguồn 595 và 1 con trở từ 100R đến 1KR để khắc phụcTamPhieuLuuKy@yahoo.com
092 2838 712 --->>
Comment
Bài viết mới nhất
Collapse
-
bởi afrendlyCảm ơn bạn. Mình hỏi để thợ có thể tham khảo thôi chứ không đủ kiển thức để sửa, mà cũng không có đồ nghề, mua đồ nghề quá tiền máy. Gọi nhiều lần mà thợ hẹn mãi chưa có tới ấy bạn. Mình muốn sửa được chứ bỏ thì uống, nhưng sợ là được mỗi người thợ mà lại không sửa nổi....
-
Channel: Điện tử gia dụng
Hôm qua, 00:34 -
-
bởi mèomướpDạ nó bị tắc ẩm hoặc rò thiếu gas hoặc lốc yếu hoặc van tiết lưu có vấn đề hoặc tất cả những nguyên nhân trên ạ. Chú ko chuyên về mảng này thì bán đi, giành thời gian trồng rau sạch đem ra chợ bán lấy tiền mua tủ mới ạ. Còn...
-
Channel: Điện tử gia dụng
10-05-2026, 17:01 -
-
bởi afrendlyXin chào mọi người. Mình lại có vấn đề về đồ điện cần nhờ mọi người hỗ trợ giúp. Mình có tủ lạnh Sharp dùng cũng lâu rồi. Trước có bị kém lạnh, không đông đá thì có thợ họ mang về, sục đường ga gì đó hết 900k và đã dùng...
-
Channel: Điện tử gia dụng
10-05-2026, 16:53 -
-
bởi dinhthuong92Đấy, cái tôi thắc mắc là chỗ màu hồng ấy bạn, để áp vào cao chứ không bị sụt gần bằng áp pin thì rất cần cuộc cảm để làm điều đó. Tuy nhiên, trong công thức bác thớt dẫn không thấy mặt L, và một vài mạch MPPT tôi đã kiểm...
-
Channel: Nguồn!
09-05-2026, 10:01 -
-
bởi mèomướpDạ mạch sạc là 1 cục nguồn, nó sẽ điều chỉnh công suất đầu ra để có tổng trở bằng nội trở của pin ạ. Và cái cách nó chỉnh công suất đầu ra sẽ là dạng buck, boot. Đều cần đến cuộn cảm ạ. Tất nhiên chú thích thì có thể dùng dạng tuyến tính transistor để bù trừ nhưng mà nó đốt năng lượng vô ích ạ...
-
Channel: Nguồn!
08-05-2026, 16:26 -
-
bởi dinhthuong92Tng trở R của tải (gồm pin và mạch sạc) trong công thức đó rõ ràng khống có L xuất hiện. Nếu tính các dây dẫn thì rất nhỏ, bỏ qua. Vì nội trở pin là rất nhỏ, có thể nói luôn lớn hơn nội trở solar, nên mạch MPPT sẽ hầu như luôn tính...
-
Channel: Nguồn!
08-05-2026, 11:00 -
-
bởi dinhthuong92Chào bác. Đã là công thức phải tổng quát chứ, nó phải thể hiện cả quá trình, rối thì quá độ hay xác lập tính sau vì tùy điều kiện. Cũng như công thức tính diện tích chả hạn, phải là tích phân....
-
Channel: Nguồn!
08-05-2026, 10:49 -

Comment