Thông báo

Collapse
No announcement yet.

Led ma trận dùng atmega16 , can giup do

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

  • Led ma trận dùng atmega16 , can giup do

    Chao các bác, em đang làm cái led ma trận như của anh Nghaiha hướng dẫn, rất hay, làm thử mô phỏng trên protues khá tốt nên quyết định làm mạch thật nhìn cho đã

    Đây là sơ đồ của nó, em sửa đổi một tí là không dùng Tran để chốt nguồn dương mà dùng IC 74LS125, với lại ma trận của em chỉ là 8*8 thôi :
    Click image for larger version

Name:	led ma tran.JPG
Views:	1
Size:	118.8 KB
ID:	1413742

    Còn đây là code của nó, đây là thử mạch nên em chỉ để cho có 2 led giữa sáng kiểu dấu 2 chấm xem thế nào đã
    PHP Code:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.05.5a Evaluation
    Automatic Program Generator
    © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project : 
    Version : 
    Date    : 5/22/2012
    Author  : Freeware, for evaluation and
    non-commercial use only
    Company : 
    Comments: 


    Chip type               : ATmega16L
    Program type            : Application
    AVR Core Clock frequency: 1.000000 MHz
    Memory model            : Small
    External RAM size       : 0
    Data Stack size         : 256
    *****************************************************/

    #include <mega16.h>
     #include <delay.h>  

    #define B PORTA.1
    #define C PORTA.2
    #define A PORTA.0
    #define SCL PORTB.3
    unsigned char Pattern1[8]={0,1,2,3,4,5,6,7};
    unsigned char flash chao[]={0xFF,
    0xFF,
    0xFF,
    0xE7,
    0xE7,
    0xFF,
    0xFF,
    0xFF};
    unsigned char Dmen[8]; 

     
    // SPI functions
    #include <spi.h>
    unsigned char r=0;
    unsigned char i;
    void LatchData(){
        
    SCL=0;
        
    SCL=1;
    }
    // Timer1 output compare A interrupt service routine
    interrupt [TIM1_COMPAvoid timer1_compa_isr(void)
    {   
       
    spi(Dmen[r]);
        
    LatchData();
      
    PORTA=Pattern1[r]+8
       
    r++ ;
       if(
    r==7r=0;
    // Place your code here

    }



    // Declare your global variables here

    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTA=0x00;
    DDRA=0xFF;

    // Port B initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTB=0x00;
    DDRB=0xFF;

    // Port C initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTC=0x00;
    DDRC=0xFF;

    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTD=0x00;
    DDRD=0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 15.625 kHz
    // Mode: CTC top=OCR1A
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: On
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x0B;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0xB9;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x10;

    // USART initialization
    // USART disabled
    UCSRB=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // ADC initialization
    // ADC disabled
    ADCSRA=0x00;

    // SPI initialization
    // SPI Type: Master
    // SPI Clock Rate: 250.000 kHz
    // SPI Clock Phase: Cycle Half
    // SPI Clock Polarity: Low
    // SPI Data Order: LSB First
    SPCR=0x74;
    SPSR=0x00;

    // TWI initialization
    // TWI disabled
    TWCR=0x00;
    for (
    i=0;i<=7;i++){
            
    Dmen[i]=chao[i]; }

    // Global enable interrupts
    #asm("sei")

    while (1)
          {
          
    // Place your code here

          
    }

    Làm xong , lắp mạch chạy thử thì chả có em nào sáng cả, lấy đồng hồ ra đo thì thấy:
    hoá ra các chân A.1 A.2 A.3 nối vào các chân A B C của 74LS138 đều không có áp, dẫn đến các chấn output của nó đều dương cả, làm cho 74ls125 đệm dòng thành trở kháng cao hết, làm gì có áp cho led sáng .
    Mà rõ ràng các chân 6 của 74ls138 đã cho lên dương, hai chân 4 ,5 đều xuống âm cả. không hiểu sao cả. Mà con atmega 16 em chỉ nạp chương trình thôi, chứ chưa fuse bit gì cả, vẫn chạy dao động nội .

    Các bác xem bệnh giúp em với

  • #2
    Hic Hic , mấy ngày rồi không ai giúp mình à . Cho mình hỏi luôn con ẢTmega 16L lúc nguyên chưa Fuse bit thì cổng A có dùng vậy. Mong mọi người giúp đỡ

    Comment


    • #3
      Chú ý PORTC

      1. JTAGEN (JTAG Enable): trên AVR có tích hợp sẵn bộ JTAG, đó là một module giao tiếp với phần cứng của chip. Nhìn chung, JTAG thường được dùng để kiểm tra hoạt động của chip. Trên AVR, JTAG có thể được dùng để nạp chương trình nhưng phổ biến hơn là dùng để debug lỗi chương trình (gỡ rối chương trình). Module JTAG làm việc thông qua 4 chân TCK, TMS, TDO và TDI, trên chip ATmega32 4 chân lần lần lượt là PC2, PC3, PC4 và PC5. Theo mặc định JTAG được kích hoạt, bit JTAGEN=0 (programmed) như trong hình 1. Vì thế với các chip ATmega32 mới mua về, các chân PC2:5 trên PORTC có thể không sử dụng để xuất nhập thông thường được. Nếu bạn không muốn sử dụng chức năng Debug trực tiếp trên chip thì hãy uncheck bit JTAGEN(uncheck tương đương unprogrammed, tương đương JTAGEN=1) để dùng các chân JTAG như các chân xuất nhập thông thường.

      nguồn hocavr.com

      Comment


      • #4
        Hic, cám ơn bác
        Nhưng mình có dùng PortC đâu chỉ có A B thôi mà

        Comment


        • #5
          Nguyên văn bởi havian Xem bài viết
          Hic Hic , mấy ngày rồi không ai giúp mình à . Cho mình hỏi luôn con ẢTmega 16L lúc nguyên chưa Fuse bit thì cổng A có dùng vậy. Mong mọi người giúp đỡ
          Bạn thử test cái cổng A, B đó đi xem nó có truyền/nhận dữ liệu được không bằng cách dùng nút bấm cho vào 1 chân cổng A, cổng B cho điều khiển 1 led đơn. Phải đảm bảo mạch phần cứng chạy tốt, chương trình đã nạp được cho vi điều khiển thì mới tính tiếp được chứ.
          Mua bán thiết bị điện công nghiệp tại Hà Nội, toàn quốc.
          http://diencongnghiep360.com/
          http://tudienhathe.vn/

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X