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

                      Đang tải...
                      X