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 songchodep76Cảm ơn bác đã nhiệt thành chia sẻ kinh nghiệm bản thân mình cho mọi người.
Tuy nhiên, theo tiếp xúc hạn hẹp của em với mosfet thì vấn đề bác đo vôn ở cực D và thấy đỉnh nó 70V/55V Vds max, như thí nghiệm và trong hình của bác...-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 09:46 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Cho tới thời điểm này, quả thật Đình Thường đây quá thất vọng, không hào hứng với Suno-AI lắm bởi ra lệnh Creat mấy chục lần với các thay đổi thì mới chọn được 2 bản hát đúng giai điệu tầm 80% để cắt ghép tạo thành bài hát...
-
Channel: Tâm tình dân kỹ thuật
06-02-2026, 17:01 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Kính chào cả nhà, nhân dịp Tết đang về, sắp 23 tháng chạp rồi, xin gởi lời chúc xuân qua bài hát sau ạ:
Bao nhiêu hân hoan
Chúc Mừng Năm Mới, xuân sang!
Nơi nơi hát vang
nâng chén vui chúc câu An Lành.
Vạn Sự đều Hanh Thông,
Rạng...-
Channel: Tâm tình dân kỹ thuật
06-02-2026, 16:46 -
-
bởi ittcChán quá các bác, em nhạt nhẽo quá nên tán em nào cũng tạch, tuyệt vọng vô cùng, nay lại được mấy anh đồng nghiệp cty đối tác mách cho em gái kia sinh năm 2K đầu, em chả biết nhóm đối tượng này phải tán ra sao bây giờ ?
Tính ra em...-
Channel: Tâm tình dân kỹ thuật
06-02-2026, 00:18 -
-
bởi bqvietCó thể, ví dụ phần phản hồi gồm vi mạch cách ly quang, zener thứ cấp, transistor và điện trở phản hồi dòng ... Bất kỳ linh kiện nào nhóm đó hỏng dẫn tới mất đường phản hồi. TNY chính hãng phát hiện được chuyện đó nhưng linh kiện...
-
Channel: Điện tử công suất
05-02-2026, 18:36 -
-
bởi Nexus 6Pcho e hỏi, khi mạch có linh kiện nào đó hư thì có làm hỏng led đắt tiền (osram) không?
-
Channel: Điện tử công suất
05-02-2026, 10:42 -
-
bởi chinhnguyen9· Thí nghiệm 1 (Mạch boost, Vcc=12V, kích bằng dao động PƯM, duty 10%):
* Không có snubber + không tải: Xuất hiện hiện tượng dao động tắt dần tại cực D Mosfet (ringing). Hình 1 cho thấy trong chu kỳ đầu, điện áp spike lên tới hàng trăm V, điện...-
Channel: Hướng dẫn sử dụng diễn đàn
04-02-2026, 09:16 -
-
bởi Nexus 6Pe dùng KiCad 9.0 và đã xuất được file PDF mạch in gòi bác...
-
Channel: Điện tử công suất
03-02-2026, 16:25 -
-
bởi bqvietBấm chuột vào các tệp sẽ bật ra chương trình tương ứng. Nên dùng bản KiCAD sau
https://kicad-downloads.s3.cern.ch/a...ll_version.exe-
Channel: Điện tử công suất
03-02-2026, 14:57 -
-
bởi Nexus 6Pe cài KiCAD 2012 khi mở ra nó chỉ hiện ntn...
-
Channel: Điện tử công suất
03-02-2026, 11:20 -

Comment