Thông báo

Collapse
No announcement yet.

[Help] 16 led đơn + 4 nút nhấn => 4 chương trình chạy led ATMEGA32

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • [Help] 16 led đơn + 4 nút nhấn => 4 chương trình chạy led ATMEGA32

    Số là em đang làm 1 bài về điều khiển led đơn với 4 nút nhấn điều khiển 16 led với 4 chương trình mà sao thấy xương quá . Bác nào pro về AVR giúp em với
    Hình mạch là như thế này ạ :
    Click image for larger version

Name:	uivn.jpg
Views:	1
Size:	117.9 KB
ID:	1419884

  • #2
    bạn hay nói rõ hơn vấn đề của bạn được không?
    bạn sử dụng ngôn ngử gì?

    Comment


    • #3
      Em dùng codevision bác ơi . Em lấy ví dụ như thế này nha
      Bấm nút 1 thì led dịch từ trái sang phải . Delay 100 ms chẳng hạn
      Bấm nút 2 thì led dịch từ phải sang trái .
      Bấm nút 3 thì led nhấp nháy
      Bấm nút 4 thì led sáng so le
      Em chỉ bí cái phần ngắt ngoài cho nút bấm thôi . Làm đến 4 nút . Còn chương trình cho led thì em có thể viết đc .

      Comment


      • #4
        Cái này không cần tới ngắt ngoài đâu bạn
        như vầy nha: số chân mà nối với led thì khai báo trong CV là PORT...=0xFF; PIN...=0xFF;// khai báo như vầy có nghĩa là bạn hứơng ra.
        số chân mà nối với nút nhấn thì khai báo là PORT...=0xFF; PIN...=0x00;//khai báo như vầy là hứơg vào.
        Bạn thấy 2 dòng khác đúng chỗ PIN cái này là khai báo chân I/O của avr nha bạn. Cái này không khó nhưng nếu không cận là nhầm đó.
        Chào bạn
        PS:Mình viết = đt bạn chịu khó đọc nha.

        Comment


        • #5
          Nguyên văn bởi bbbooo Xem bài viết
          Em dùng codevision bác ơi . Em lấy ví dụ như thế này nha
          Bấm nút 1 thì led dịch từ trái sang phải . Delay 100 ms chẳng hạn
          Bấm nút 2 thì led dịch từ phải sang trái .
          Bấm nút 3 thì led nhấp nháy
          Bấm nút 4 thì led sáng so le
          Em chỉ bí cái phần ngắt ngoài cho nút bấm thôi . Làm đến 4 nút . Còn chương trình cho led thì em có thể viết đc .
          Thử làm thế này xem bạn:
          Sử dụng một biến x để lưu trạng thái nút bâm. vd khi bấm nút 1 thì gán x=1, nút 2 thì x=2... , nut 4 thì x=4, sau đó kiểm tra điều kiện nếu x==1 thì cho chạy chương trình nhấp nháy, nếu x==2 thì sáng dồn trái, x==3 dồn phải... Vậy là có thể điều khiển được 4 chương trình với 4 nút bấm.

          Comment


          • #6
            Nguyên văn bởi caonhan_2004 Xem bài viết
            Thử làm thế này xem bạn:
            Sử dụng một biến x để lưu trạng thái nút bâm. vd khi bấm nút 1 thì gán x=1, nút 2 thì x=2... , nut 4 thì x=4, sau đó kiểm tra điều kiện nếu x==1 thì cho chạy chương trình nhấp nháy, nếu x==2 thì sáng dồn trái, x==3 dồn phải... Vậy là có thể điều khiển được 4 chương trình với 4 nút bấm.
            dạ để em thử xem sao ạ . Mà bác để ý là cái nút bấm 1 ngõ chung là INT0 là ngắt ngoài và 1 đầu là nối a b c d tương ứng với PORTB.0 PORTB.1 PORTB.2 ... em đang muốn viết 1 chương trình như vậy . Mà suy nghĩ hoài cũng không ra . Mong bác giúp đỡ .

            Comment


            • #7
              Nguyên văn bởi bbbooo Xem bài viết
              dạ để em thử xem sao ạ . Mà bác để ý là cái nút bấm 1 ngõ chung là INT0 là ngắt ngoài và 1 đầu là nối a b c d tương ứng với PORTB.0 PORTB.1 PORTB.2 ... em đang muốn viết 1 chương trình như vậy . Mà suy nghĩ hoài cũng không ra . Mong bác giúp đỡ .
              oh. giờ mới để ý cái sơ đồ của bạn. Đặc biệt quá, mình không hiểu bạn phức tạp hóa làm gì? và cái sơ đồ của bạn mình cũng không nghĩ ra cách gì ( có lẽ là "độc".) ...

              Comment


              • #8
                Phải trái >> trái phải 1s zzz
                Code:
                #ifndef F_CPU
                #define F_CPU 12000000UL // 12 MHz
                #endif
                
                #include <avr/io.h>
                #include "interrupt.h"
                unsigned int val=1;
                unsigned char x=0;
                
                void phai_trai()
                {
                	PORTA = val;
                	PORTB = val >> 8;
                	val =val/2;
                	if (val == 0) val=0x8000;
                }
                void trai_phai()
                {
                	PORTA = val;
                	PORTB = val >> 8;
                	val*=2;
                	if (!val) val=1;
                }
                int main(void){
                	DDRA=0xFF;             
                	PORTA=0x00;
                	DDRB=0xFF;            
                	PORTB=0x00;
                	PORTC=0xFF;
                	DDRC=0x00;
                	PORTD=0xFF;
                	DDRD=0x00;
                	MCUCR	|=(1<<ISC01); 
                	GICR    |=(1<<INT0);  
                	//----------------------------------
                	TCCR1B = (1<<CS12);	
                	TIMSK |= (1<<TOIE1);						
                	TCNT1 = 0x85ED;
                	sei();
                	
                	while(1){
                	}
                	return 0;
                }
                ISR (INT0_vect){
                	if(!(PINC &(1<<0))){ x=1;val=1;}
                	if(!(PINC &(1<<1))){ x=2;val=0x8000;}
                }
                
                ISR (TIMER1_OVF_vect){
                	TCNT1 = 0x85ED;
                	
                	if(x==1){phai_trai();}
                	if(x==2){trai_phai();}
                		 
                }
                Have Fun !
                Attached Files

                Comment


                • #9
                  Nguyên văn bởi dorothy Xem bài viết
                  Phải trái >> trái phải 1s zzz
                  Code:
                  #ifndef F_CPU
                  #define F_CPU 12000000UL // 12 MHz
                  #endif
                  
                  #include <avr/io.h>
                  #include "interrupt.h"
                  unsigned int val=1;
                  unsigned char x=0;
                  
                  void phai_trai()
                  {
                  	PORTA = val;
                  	PORTB = val >> 8;
                  	val =val/2;
                  	if (val == 0) val=0x8000;
                  }
                  void trai_phai()
                  {
                  	PORTA = val;
                  	PORTB = val >> 8;
                  	val*=2;
                  	if (!val) val=1;
                  }
                  int main(void){
                  	DDRA=0xFF;             
                  	PORTA=0x00;
                  	DDRB=0xFF;            
                  	PORTB=0x00;
                  	PORTC=0xFF;
                  	DDRC=0x00;
                  	PORTD=0xFF;
                  	DDRD=0x00;
                  	MCUCR	|=(1<<ISC01); 
                  	GICR    |=(1<<INT0);  
                  	//----------------------------------
                  	TCCR1B = (1<<CS12);	
                  	TIMSK |= (1<<TOIE1);						
                  	TCNT1 = 0x85ED;
                  	sei();
                  	
                  	while(1){
                  	}
                  	return 0;
                  }
                  ISR (INT0_vect){
                  	if(!(PINC &(1<<0))){ x=1;val=1;}
                  	if(!(PINC &(1<<1))){ x=2;val=0x8000;}
                  }
                  
                  ISR (TIMER1_OVF_vect){
                  	TCNT1 = 0x85ED;
                  	
                  	if(x==1){phai_trai();}
                  	if(x==2){trai_phai();}
                  		 
                  }
                  Have Fun !

                  Em cảm ơn bác đã giúp đỡ . Nhưng cho em hỏi ngu tý , hình như ko phải codevision phải không bác ? Có gì bác gửi cho em cái file proteus với . Em đọc mãi code của bác mà không biết nên để nút ấn ở đâu . Cảm ơn bác rất nhiều ạ !

                  Comment


                  • #10
                    Nguyên văn bởi bbbooo Xem bài viết
                    Em cảm ơn bác đã giúp đỡ . Nhưng cho em hỏi ngu tý , hình như ko phải codevision phải không bác ? Có gì bác gửi cho em cái file proteus với . Em đọc mãi code của bác mà không biết nên để nút ấn ở đâu . Cảm ơn bác rất nhiều ạ !
                    full luôn nhé, có file mô phỏng trong đó rồi. trình biên dịch avrstudio6, proteus 8

                    Comment


                    • #11
                      Phần mềm "con bọ" chuyển sang CV không khó đâu bạn chắc mới học avr . CV lúc tạo project nó có sẵn những mục để bạn chọn vd như thạch anh , chip , timer bộ chia ...
                      Nhưng "con bọ" thì những chuyển đó bạn phải tự bật bit nào tắt bit nào phải = tay hết.
                      0ver

                      Comment

                      Về tác giả

                      Collapse

                      bbbooo Tìm hiểu thêm về bbbooo

                      Bài viết mới nhất

                      Collapse

                      • bqviet
                        Trả lời cho Đấu tắt điện cho máy tính bảng
                        bởi bqviet
                        Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                        06-12-2025, 17:17
                      • nguyendinhvan
                        Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                        bởi nguyendinhvan
                        Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                        05-12-2025, 19:59
                      • afrendly
                        Trả lời cho Đấu tắt điện cho máy tính bảng
                        bởi afrendly
                        Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
                        04-12-2025, 01:27
                      • nick22
                        Trả lời cho Máy điện châm ?
                        bởi nick22
                        Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
                        01-12-2025, 13:23
                      Đang tải...
                      X