Thông báo

Collapse
No announcement yet.

Thắc mắc về set fuse dùng AVRprog và Giao tiếp máy tính !

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

  • Thắc mắc về set fuse dùng AVRprog và Giao tiếp máy tính !

    Chào các bác .
    Em mới học AVR và làm thử mạch giao tiếp máy tính qua cổng COM, nhưng mãi nó vẫn không chạy.Em nghĩ code đã Ok rồi còn phần em đang nghi ngờ là dùng thạch anh ngoài .Em dùng con 7,3728Mhz cho nó chuẩn , và giá trị UBRRL = 2F (47). Nhưng em dùng mạch vạp AVR 910 và cái AVRProg chỉ có các chế độ như vầy



    Và em chọn là Ext XTAL,Medium Frequency , sau đó em Write và nạp code --> nó không chạy . và em thấy là dù em chọn là Medium Frequency hay High Frequency thì test bằng mấy con LED , chip vẫn chạy OK
    .Em tưởng set sai thì không chạy chứ ?
    Đây là cái mạch của em :



    Và đây là code :
    Code:
    #include <mega16.h>
    #include <delay.h>
    
    
    // Alphanumeric LCD Module functions
    #asm
       .equ __lcd_port=0x18 ;PORTB
    #endasm
    #include <lcd.h>
    
    
    
    #define RXB8 1
    #define TXB8 0
    #define UPE 2
    #define OVR 3
    #define FE 4
    #define UDRE 5
    #define RXC 7
    
    #define FRAMING_ERROR (1<<FE)
    #define PARITY_ERROR (1<<UPE)
    #define DATA_OVERRUN (1<<OVR)
    #define DATA_REGISTER_EMPTY (1<<UDRE)
    #define RX_COMPLETE (1<<RXC)
    
    // USART Receiver buffer
    #define RX_BUFFER_SIZE 8
    char rx_buffer[RX_BUFFER_SIZE];
    
    #if RX_BUFFER_SIZE<256
    unsigned char rx_wr_index,rx_rd_index,rx_counter;
    #else
    unsigned int rx_wr_index,rx_rd_index,rx_counter;
    #endif
    
    // This flag is set on USART Receiver buffer overflow
    bit rx_buffer_overflow;
    
    // USART Receiver interrupt service routine
    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    char status,data;
    status=UCSRA;
    data=UDR;
    if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
       {
       rx_buffer[rx_wr_index]=data;
       if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
       if (++rx_counter == RX_BUFFER_SIZE)
          {
          rx_counter=0;
          rx_buffer_overflow=1;
          };
       };
    }
    
    #ifndef _DEBUG_TERMINAL_IO_
    // Get a character from the USART Receiver buffer
    #define _ALTERNATE_GETCHAR_
    #pragma used+
    char getchar(void)
    {
    char data;
    while (rx_counter==0);
    data=rx_buffer[rx_rd_index];
    if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
    #asm("cli")
    --rx_counter;
    #asm("sei")
    return data;
    }
    #pragma used-
    #endif
    
    // USART Transmitter buffer
    #define TX_BUFFER_SIZE 8
    char tx_buffer[TX_BUFFER_SIZE];
    
    #if TX_BUFFER_SIZE<256
    unsigned char tx_wr_index,tx_rd_index,tx_counter;
    #else
    unsigned int tx_wr_index,tx_rd_index,tx_counter;
    #endif
    
    // USART Transmitter interrupt service routine
    interrupt [USART_TXC] void usart_tx_isr(void)
    {
    if (tx_counter)
       {
       --tx_counter;
       UDR=tx_buffer[tx_rd_index];
       if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
       };
    }
    
    #ifndef _DEBUG_TERMINAL_IO_
    // Write a character to the USART Transmitter buffer
    #define _ALTERNATE_PUTCHAR_
    #pragma used+
    void putchar(char c)
    {
    while (tx_counter == TX_BUFFER_SIZE);
    #asm("cli")
    if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
       {
       tx_buffer[tx_wr_index]=c;
       if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
       ++tx_counter;
       }
    else
       UDR=c;
    #asm("sei")
    }
    #pragma used-
    #endif
    
    // Standard Input/Output functions
    #include <stdio.h>
    
    
    
    void main(void)
    {
    
    char test;
    
    char lcd_buffer[10];
    
     State0=T 
    PORTA=0x00;
    DDRA=0x00;
    
     State0=T 
    PORTB=0x00;
    DDRB=0x00;
    
    State0=T 
    PORTC=0x00;
    DDRC=0x00;
    
     State0=T 
    PORTD=0x01;
    DDRD=0x02;
    
    
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    
    MCUCR=0x00;
    MCUCSR=0x00;
    
    
    TIMSK=0x00;
    
    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=0x00;
    UCSRB=0xD8;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x2F;
    
    
    ACSR=0x80;
    SFIOR=0x00;
    
    
    // LCD module initialization
    lcd_init(16);
    
    // Global enable interrupts
    #asm("sei")
    
     lcd_clear();
            lcd_gotoxy(0,0);
            lcd_putsf("RS232");
           
            
    while (1)
          {
               
       
        lcd_gotoxy(0,1);
        //    lcd_putsf("RS");
      //  test=getchar();
    //   putchar(test);
    
       putchar('a');
    
          };
    }
    EM cũng đã tham khảo code của các bác trên này và code em viết cũng chẳng khác gì .Em đoán do mạch em sai hoặc set fuse sai .
    Em mới tìm hiểu AVR nên nếu câu hỏi gà quá các bác đừng cười nhé.
    Mong các bác giúp em.
    Thanks nhiều !

  • #2
    Bạn nối chân T1OUT (chân 14 của MAX323) vào chân 4 của cổng DB9 thì chạy thế nào được, chuyển dùm sang chân 2 đi.
    PNLab
    Mạch nạp/debug ULink2, Jlink ARM USB
    Mạch nạp AVR, PIC, 8051, MSP430 USB
    Mạch phát triển STM32, ARM9, ARM11
    more...www.pnlabvn.com

    Comment


    • #3
      Nguyên văn bởi sphinx Xem bài viết
      Bạn nối chân T1OUT (chân 14 của MAX323) vào chân 4 của cổng DB9 thì chạy thế nào được, chuyển dùm sang chân 2 đi.
      Cảm ơn bác Sphinx nhiều,em làm được rồi, chỉ vì trong Orcad em vẽ không để ý nên nó bị mirror . Nhưng em vẫn phải dùng thạch anh trong 4Mhz chứ không biết set thạch anh ngoài dùng AVRProg.Cũng may là không thấy bị lỗi
      Mày mò trong CodeVision thì cũng có set fuse cho mạch AVR 910 nhưng ko dám thử. Lỡ tay mà mất 40k thi toi .

      Comment


      • #4
        Nếu bạn dùng ATMEGA16 với thạch anh 7.3728 thì viết mã khởi tạo UART như sau để có baud rate 9600.

        Code:
        // USART initialization
        // Communication Parameters: 8 Data, 1 Stop, No Parity
        // USART Receiver: On
        // USART Transmitter: On
        // USART Mode: Asynchronous
        // USART Baud Rate: 9600
        UCSRA=0x00;
        UCSRB=0x18;
        UCSRC=0x86;
        UBRRH=0x00;
        UBRRL=0x2F;
        Fuse bit bạn có thể chọn Ext XTAL,Medium Frequency hoặc High Frequency đều okie.
        PNLab
        Mạch nạp/debug ULink2, Jlink ARM USB
        Mạch nạp AVR, PIC, 8051, MSP430 USB
        Mạch phát triển STM32, ARM9, ARM11
        more...www.pnlabvn.com

        Comment


        • #5
          Cac bac cho em hoi mua con max323 o dau vay? Ai ban con nay call em nhe --- 0919136286

          YM: khuc_truong_son_hp_vn
          Call 0982928782

          Comment


          • #6
            e viết chương trình thời gian thực bằng timer 2. sử dụng thạch anh ngoài là 32.768kHz. kết nối vào 2 chân TOSC1 và TOSC2. nhưng khi xét fuse bit thì bị tiêu mất chip atmega8. e dùng avr frog. mấy bác ai biết chỉ e với. hiện giờ e đang quẩn trí quá

            Comment


            • #7
              Nguyên văn bởi lethanhthuy Xem bài viết
              e viết chương trình thời gian thực bằng timer 2. sử dụng thạch anh ngoài là 32.768kHz. kết nối vào 2 chân TOSC1 và TOSC2. nhưng khi xét fuse bit thì bị tiêu mất chip atmega8. e dùng avr frog. mấy bác ai biết chỉ e với. hiện giờ e đang quẩn trí quá
              http://www.dientuvietnam.net/forums/...i-vo-day-7402/
              Mấy cái này có sẵn trên diễn đàn hết rồi, bạn chịu khó đọc đi trước khi đi hỏi.
              Còn muốn biết cách set fuse thì bạn vào trang này:
              Thiết lập Fuse Bits
              Nhận làm mạch, ĐAMH sử dụng vđk Pic & AVR tại tp.HCM
              Liên hệ sđt: 0902.808.371

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X