Học Avr Từ Cơ Bản Đến Nâng Cao

kelvinngd

Học sinh phổ thông
Chào mn, mình có mua 1 kít AVR, thử led đơn ok, giờ qua tìm hiểu LCD, mình chạy mô phỏng trên proteus ok nhưng khi nạp xuống chip chạy trên kit thì LCD ko hiển thị cái gì cả. Mn có thể giải thích giúp mình ko vậy?
Mình gửi code và file proteus cùng cái clip quay kit thực tế
Thank!
 

Đính kèm

mta_cdt

Super Moderator
Thành viên BQT
Chào mn, mình có mua 1 kít AVR, thử led đơn ok, giờ qua tìm hiểu LCD, mình chạy mô phỏng trên proteus ok nhưng khi nạp xuống chip chạy trên kit thì LCD ko hiển thị cái gì cả. Mn có thể giải thích giúp mình ko vậy?
Mình gửi code và file proteus cùng cái clip quay kit thực tế
Thank!
Cái này có 2 khả năng xảy ra.
- Chân trên kit không đúng so với mô phỏng.
- Bạn chưa bỏ chế độ debug chip, dùng mạch nạp set lại bit JTAG trong fuse bit là ok.
 

kelvinngd

Học sinh phổ thông
Cái này có 2 khả năng xảy ra.
- Chân trên kit không đúng so với mô phỏng.
- Bạn chưa bỏ chế độ debug chip, dùng mạch nạp set lại bit JTAG trong fuse bit là ok.
Chân thì mình đảm bảo đúng rồi, bạn có thể hướng dẫn mình cái vụ fuse bit được không? vì xem trên mạng thấy nó dễ die chip. mình dùng ATmega16, thạch anh ngoài 8MHz, mới mua bộ kít nó bán như vậy nên xài như vậy luôn, dùng mạch nạp E-Burn bạn nhé, cám ơn bạn!
 

mta_cdt

Super Moderator
Thành viên BQT
Chân thì mình đảm bảo đúng rồi, bạn có thể hướng dẫn mình cái vụ fuse bit được không? vì xem trên mạng thấy nó dễ die chip. mình dùng ATmega16, thạch anh ngoài 8MHz, mới mua bộ kít nó bán như vậy nên xài như vậy luôn, dùng mạch nạp E-Burn bạn nhé, cám ơn bạn!
Thế chuẩn do chưa set bit JTAG rồi, bạn dùng burn-E đọc fuse của nó là chụp lên xong rùi mình chỉ cho tiếp.
 

kelvinngd

Học sinh phổ thông
Thế chuẩn do chưa set bit JTAG rồi, bạn dùng burn-E đọc fuse của nó là chụp lên xong rùi mình chỉ cho tiếp.
Thank ban nhé, minh fuse bit lại và bi lock chip, tự mày mò unlock luôn, giờ có thể hoạt động bình thường.
Các bạn có ai sd AVR điều khiển tốc độ motor DC từ xa bằng RF ko? dùng biến trở điều khiển đó. Ai từng là có thể share cho mình dc ko?
 

Super.tt

Học sinh phổ thông
Có ai biết hàm ngắt TWI trong codevision như thế nào không? tệp twi.lib trong codevisionavr bị lỗi font nên mình không hiểu được các hàm sẵn có vì vậy mình có ý định viết đè thêm các hàm dựa theo bài hướng dẫn của bên hocavr.com nhưng mới viết thêm mỗi hàm khởi tạo cho slave:
twi.lib:
Mã:
void TWI_init_slave(char Addr) // Function to initilaize slave
{
    TWAR=(Addr<<1)+1;    // Fill slave address to TWAR  
    TWCR=(1<<TWEA)|(1<<TWEN)|(1<<TWIE);      //set ACK, TWI, Interupruptis Enable
}
và hàm ngắt trong chương trình chính cho slave:

Mã:
interrupt [TWI] void twi_int(void)
{
    char Status;
   
    Status = TWSR;
   
    switch(Status)
    {
        case 0x60:
        {
            SLAVE_mode = 0;
            Rec_Num = 0;
            TWCR|=(1<<TWINT)|(1<<TWEA);           //clear TWINT, set ACK
            break;
        }        
        case 0x80:
        {
            SLAVE_buff[Rec_Num++] = TWDR;
            TWCR|=(1<<TWINT)|(1<<TWEA);
            break;
        }        
        case 0x88:
        {
            SLAVE_buff[Rec_Num++] = TWDR;
            TWCR|=(1<<TWINT)|(1<<TWEA);
            break;
        }        
        case 0x70:
        {
            SLAVE_mode = 1;
            Rec_Num = 0;
            TWCR|=(1<<TWINT)|(1<<TWEA);           //clear TWINT, set ACK
            break;
        }
        case 0x90:
        {
            SLAVE_buff[Rec_Num++] = TWDR;
            TWCR|=(1<<TWINT)|(1<<TWEA);
            break;
        }        
        case 0x98:
        {
            SLAVE_buff[Rec_Num++] = TWDR;
            TWCR|=(1<<TWINT)|(1<<TWEA);
            break;
        }        
        case 0xA0:
        {
            TWCR|=(1<<TWINT)|(1<<TWEA);
            break;
        }                                          
        case 0xA8:
        {
            Tran_Num++;
            TWDR = SLAVE_wData[Tran_Num];
            TWCR|=(1<<TWINT)|(1<<TWEA);
            break;
        }        
        case 0xB8:
        {
            TWDR = SLAVE_wData[Tran_Num];
            TWCR|=(1<<TWINT)|(1<<TWEA);
            break;
        }        
        case 0xB0:
        {
            TWDR = SLAVE_wData[Tran_Num];
            TWCR|=(1<<TWINT)|(1<<TWEA);
            break;
        }        
        case 0xC0:
        {
            TWCR|=(1<<TWINT)|(1<<TWEA);
            break;
        }                   
        case 0xC8:
        {
            TWDR = SLAVE_wData[Tran_Num];
            TWCR|=(1<<TWINT)|(1<<TWEA);
            break;
        }        
       
        default:
            break;
    }
}
biên dịch chương trình thì thấy báo lỗi sau
Mã:
Packed library error: C:\cvavr\lib\twi.lib(241): interrupt vector #20 is already used by function 'twi_int'
ai biết hay từng làm về vấn đề này rồi thì giúp mình với!
 

Đính kèm

Quảng cáo Google