Mua bán máy hàn điện tử chất lượng tại Nha trang và sửa máy hàn điện tử ở Nha trang, sửa chữa máy hàn điên tử CO2 MIG MAG, TIG, Plasma tại khánh hòa, sửa chữa máy hàn điên tử CO2 MIG MAG, TIG, Plasma ở khánh hòa, mua máy hàn điên tử cũ CO2 MIG MAG, TIG, Plasma ở khánh hòa.Sửa đồ điện gia dụng tận nhà ở khánh hòa, | Kỹ thuật Khánh Hoà #congnghieptudong, #chiasehuuich, #chiasekinhnghiem, #dientu, #daihoc, #caodang, #trungcap, #hocnghedien, #meovathay, #meovat, #diencongnghiep, #tudonghoa,

Showing posts with label AVR. Show all posts
Showing posts with label AVR. Show all posts

Saturday, May 3, 2014

Code cơ bản điều khiển led đơn dùng ATMEGA8/16/32

1.Đèn LED nhấp nháy 1s.

  • Chương trình mẫu:
Program type     : Application
AVR Core Clock frequency: 8.000000 MHz
Memory model   : Small
External RAM size : 0
Data Stack size  : 256
*****************************************************/
#include   "delay.h" //khai bao thu vien ham tao tre
#define LED PORTC.0    //dinh nghi LED la PORTC.0
void main(void)
{    
    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=1 
    PORTC=0x01;  //LED duoc noi vao PORTC.0 vi vay chon trang thai led sau khi mach duoc cap nguon la LED tat 
    DDRC=0x01;   //chon trang thai cho phep xuat ra dieu khien led
    {
          LED = ~LED;//dao trang thai led ( 1-> 0 va 0-> 1)
          delay_ms(500); //tre 500ms
    };
}

 2.LED sáng 4 LED tắt luân phiên.
  • Chương trình mẫu:
Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 8.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/
#include  "mega16.h"
#include   "delay.h" //khai bao thu vien ham tao tre
#define LED PORTC   //dinh nghia LED la PORTC
void main(void)
{    
    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=1 
    PORTC=0xFF;  //LED duoc noi vao PORTC vi vay chon trang thai led sau khi mach duoc cap nguon la LED tat 
    DDRC=0xFF;   //chon trang thai cho phep xuat ra dieu khien led
    while (1)
    {
          LED = 0x0F;//dao trang thai led ( 1-> 0 va 0-> 1)
          delay_ms(500); //tre 500ms
          LED = 0xF0;
          delay_ms(500);
    };
}
3.LED sáng từ trái sang phải.

  • Chương trình mẫu:
Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 8.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/
#include  "mega16.h"
#include   "delay.h" //khai bao thu vien ham tao tre
#define LED PORTC   //dinh nghia LED la PORTC
void main(void)
{    
    char i; //khai bao mot bien su dung de dem so lan dich bit
    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=1 
    PORTC=0xFF;  //LED duoc noi vao PORTC vi vay chon trang thai led sau khi mach duoc cap nguon la LED tat 
    DDRC=0xFF;   //chon trang thai cho phep xuat ra dieu khien led
    while (1)
    {
          for(i=0;i
          {   
                LED = ~(1 << i);
               delay_ms(500); //tre 500ms
          }
          
    };
}

4.LED sáng từ phải sang trái.
  • Chương trình mẫu:
Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 8.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/
#include  "mega16.h"
#include   "delay.h" //khai bao thu vien ham tao tre
#define LED PORTC   //dinh nghia LED la PORTC
void main(void)
{    
    char i; //khai bao mot bien su dung de dem so lan dich bit
    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=1 
    PORTC=0xFF;  //LED duoc noi vao PORTC vi vay chon trang thai led sau khi mach duoc cap nguon la LED tat 
    DDRC=0xFF;   //chon trang thai cho phep xuat ra dieu khien led
    while (1)
    {
          for(i=0;i          {   
                LED = ~(0x80>>i); //dich so 128 di i don vi ( bit cao nhat la 1)sau do dao trang thai bit
                delay_ms(500); //tre 500ms
          }
          
    };
}


MỜI BẠN TRUY CẬP HỆ THỐNG

Share:

PID| Codevision | Tốc độ động cơ| Lập trình C dùng PID điều khiển tốc độ động cơ



Dưới đây là một mô hình tôi đã thiết kế dựa trên một bài viết bài viết Điều khiển Động cơ DC servo (PID) trên trang hocavr.com bài viết này được viết bằng WinAVR, việc này khó khăn hơn cho những anh em sử dụng trình dịch codevision.

Trong bài code này tôi đã tích hợp 2 động cơ. Khuyếch đại băm xung bằng TRAN. Ngoài thực tế có thể sử dụng mạch cầu H để điều khiển.

Sử dụng PID giúp điều khiển tốc độ quay của động cơ dễ dàng hơn, ổn định hơn mà không phụ thuộc nhiều vào các thông số bên ngoài như: điện áp của acquy,thông số của động cơ hay masat của hai bánh. Trong quá trình lập trình robot thì độ ổn định là điều tối quan trọng.

Đây chỉ là phần code và mô phỏng, để hiểu thêm và sâu hơn về thuật toán. Các bạn nên vào trang hocavr để tìm hiểu thêm. Tôi chỉ chuyển từ WinAVR sang codevision mà thôi. Đây là trang web hay và bổ ích cho những ai đang muốn đi sâu hơn về chip AVR. 

Các thành phần chính gồm: Chip ATMEGA 16, 2 Tran Q1, Q2 để khuếch đại băm xung (Chỉ mang tính chất mô phỏng), 2 động cơ có hồi tiếp encoder, Công tắc DSW1 chọn tốc độ quay cho 2 động cơ, LCD hiển thị tốc độ hiện thời và tốc độ mong muốn đạt được của cả 2 motor.
Trong quá trình mô phỏng các bạn nên thay đổi tốc độ đáp ứng, và tốc đọ qua của động cơ giúp thuận tiện trong quá trình quan sát. Nháy đúp chuột vào động cơ các bạn sẽ thấy bảng hội thoại như sau, trong đó ta chú ý: "Zero Load RPM" là tốc độ quay trong 1 phút (8000). "Effective Mass" tốc độ đáp ứng (0.00001).


DOWNLOAD :




#include <delay.h>
#include <mega16.h>
#include <math.h>
#include <stdio.h>
#include <alcd.h>
#include <stdlib.h>

//Dinh nghia cac duong dieu khien motor
#define MOTOR_DDR   DDRD
#define MOTOR_PORT  PORTD
  

#define Sampling_time        25     //thoi gian lay mau (ms)
#define inv_Sampling_time    40      // 1/Sampling_time
#define PWM_Period           8000 //8000 cycles = 1ms, f=8MHz

unsigned char toc_do_phai[8] = {15,17,19,21,23,25,27,29};

unsigned char toc_do_trai[8] = {15,17,19,21,23,25,27,29};  

    long int Pulse1,Pulse2,  pre_Pulse1,pre_Pulse2;
    long int rSpeed1,rSpeed2,Err1 ,Err2, pre_Err1,pre_Err2;
    long int Kp1=40, Kd1=1, Ki1=1; //for speed control
    long int Kp2=40, Kd2=1, Ki2=1; //for speed control
    long int pPart1=0, iPart1=0, dPart1=0,pPart2=0, iPart2=0, dPart2=0; //PID gains
    long int Ctrl_Speed1=5,Ctrl_Speed2=5;     //van toc can dieu khien (desired speed)
    long int Output1, absrSpeed1,Output2, absrSpeed2;
    unsigned char sample_count=0;

//dieu khien van toc bang PID

void Motor1_Speed_PID(long int des_Speed1){       
    rSpeed1=Pulse1-pre_Pulse1;     //tinh van toc (trong sampling time)
    pre_Pulse1=Pulse1;            //luu lai gia tri Pulse: so xung
    Err1=des_Speed1-abs(rSpeed1);  //tinh error (loi)
    //cac thanh phan cua PID
    pPart1=Kp1*Err1;
    dPart1=Kd1*(Err1-pre_Err1)*inv_Sampling_time;
    iPart1+=Ki1*Sampling_time*(Err1+pre_Err1)/1000;
    Output1 +=pPart1+dPart1+iPart1;     //cong thuc duoc bien doi vi la dieu khien van toc
    //saturation
    if (Output1 >=PWM_Period) Output1=PWM_Period-1;
    if (Output1 <=0) Output1=1;
   
    OCR1A=Output1; //gan duty cycle cho OCR1A: update PWM   
    pre_Err1=Err1;  //luu lai gia tri error 
}

void Motor2_Speed_PID(long int des_Speed2){       
    rSpeed2=Pulse2-pre_Pulse2;     //tinh van toc (trong sampling time)
    pre_Pulse2=Pulse2;            //luu lai gia tri Pulse: so xung
    Err2=des_Speed2-abs(rSpeed2);  //tinh error (loi)
    //cac thanh phan cua PID
    pPart2=Kp2*Err2;
    dPart2=Kd2*(Err2-pre_Err2)*inv_Sampling_time;
    iPart2+=Ki2*Sampling_time*(Err2+pre_Err2)/1000;
    Output2 +=pPart2+dPart2+iPart2;     //cong thuc duoc bien doi vi la dieu khien van toc
    //saturation
    if (Output2 >=PWM_Period) Output2=PWM_Period-1;
    if (Output2 <=0) Output2=1;
   
    OCR1B=Output2; //gan duty cycle cho OCR1A: update PWM   
    pre_Err2=Err2;  //luu lai gia tri error 
}

void main(void){
    unsigned char dis[5]; //bien tam, hien thi LCD
    Pulse1=Pulse2=0;
    //Encoder va cac chan nhap toc do   
    DDRB=0x00; //set PORTB as a input port to use the T0 input pin and INT2
    PORTB=0xFF; //dien tro keo len (nhat la encoder)      
    //Motor
    MOTOR_DDR=0xF0;
   
    //ngat ngoai, cho encoder--------------------------------------------------------------
    MCUCSR|=(0<<ISC11)|(0<<ISC01); //ngat INT1-INT0 la ngat canh xuong - Falling Edge
    GICR  |=(1<<INT0)|(1<<INT1);    //Enable INT0-INT0
    //---------------------------------------------------------------------------------

    //dung timer 2 lam bo dinh thi 25ms, sampling time--------------------------------
    TCCR2=(1<<CS22)|(1<<CS21)|(1<<CS20); //CS22=1, CS21=1, CS20=1: chon Prescaler=1024 (trang 125 datasheet)
    TCNT2=60;           //gan gia tri khoi tao cho T/C2 de duoc 25ms (truong hop f=8MHz)
    TIMSK=(1<<TOIE2);  // cho phep ngat khi co tran o T/C2
    //--------------------------------------------------------------------------------

    //dung timer1 lam PWM generator, Fast PWM mode 14: ICR1 chua time period
    TCCR1A=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
    TCCR1B=(1<<WGM13) |(1<<WGM12) |(1<<CS10) ;
    //--------------------------------------------------------------------------------   

    //**********LCD*************************
    lcd_init(16);
    lcd_clear();
    lcd_putsf("TEST PID");   
    lcd_gotoxy(0,1);
    lcd_putsf("DC Servo Motor");
    delay_ms(100);
    lcd_clear();
    lcd_putsf("-Ac1:   ");
    lcd_putsf("-Ac2:  ");   
    lcd_gotoxy(0,1);
    lcd_putsf("-De1:   ");
    lcd_putsf("-De2:  ");  
    //**********LCD*************************   
   
    //---khoi dong gia tri PWM----------   
    OCR1A=1;
    OCR1B=1;
    ICR1H=PWM_Period/256;
    ICR1L=PWM_Period%256;

    #asm ("sei")
    //----------------------------------
   
    while (1){
        if (sample_count>=10){ //hien thi moi 250ms
            Ctrl_Speed1=Ctrl_Speed2=PINB; //doc switches
           
            //------in van toc hien tai (tinh tren 25ms)
            absrSpeed1=abs(rSpeed1);
            sprintf(dis,"%i", absrSpeed1);
            lcd_gotoxy(5,0);
            lcd_puts(dis);
            lcd_putsf(" ");
           
            //------in van toc mong muon (tinh tren 25ms)
            sprintf(dis,"%i", Ctrl_Speed1);
            lcd_gotoxy(5,1);
            lcd_puts(dis);
            lcd_putsf(" "); 
            //------in van toc mong muon (tinh tren 25ms)
            absrSpeed2=abs(rSpeed2);
            sprintf(dis,"%i", absrSpeed2);
            lcd_gotoxy(13,0);
            lcd_puts(dis);
            lcd_putsf(" ");
           
            //------in van toc mong muon (tinh tren 25ms)
            sprintf(dis,"%i", Ctrl_Speed2);
            lcd_gotoxy(13,1);
            lcd_puts(dis);
            lcd_putsf(" ");
           
            sample_count=0;
        }       
    }
}

interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{        //update sampling time---------------
    TCNT2=60; //gan gia tri khoi tao cho T/C2   
    sample_count++;
    Motor1_Speed_PID(Ctrl_Speed1);
    Motor2_Speed_PID(Ctrl_Speed2);
}

interrupt [EXT_INT0] void encoder_1(void)
{
    if (PINB==0) Pulse1++;
    else Pulse1--;
}
interrupt [EXT_INT1] void encoder_2(void)
{
    if (PINB==0) Pulse2++;
    else Pulse2--;
}


MỜI BẠN TRUY CẬP HỆ THỐNG

Share:

Giới thiệu cách thiết lập trình hỗ trợ CodeWinzardAVR | Cách làm việc với CodeWinzardAVR - Kỹ thuật Khánh hòa




Giới thiệu trình dịch C - CodeVisionAVR compliler.

 
Khởi tạo Project mới.
          Để bắt đầu một dự án mới (project) đối với CodeVision cần có 1 thư mục mới để lưu toàn bộ các tệp tin có trong dự án. Có nhiều cách để bắt đầu một dự án mới trong CodeVision, nhưng sử dụng trình hỗ trợ CodeWinzardAVR giúp người dùng tiết kiệm khá nhiều thời gian set bit cho các thanh ghi.
          Trong các cách set bit tuyền thống người lập trình khi cần dùng đến tài nguyên nào của chip cần xem datasheet về các thanh ghi của chip. Sau đó sử dụng đến bit nào thì set bit đó. Tiếp đến là tính toán các thông số cho phù hợp. Điều này có thể dễ gây nhầm lẫn cho người lập trình. Nhìn chung set bit theo cách truyền thống khá phức tạp, đòi hỏi người lập trình phải am hiểu về cấu trúc chip AVR. Nên trong phạm vi đề tài chỉ giới thiệu cách khởi tạo một dự án mới đơn giản bằng cách sử dụng trình hỗ trợ CodeWinzardAVR. Trong trình hỗ trợ này tất cả các tài nguyên của chip đuợc xắp xếp khoa học, khi người dùng cần đến tài nguyên nào chỉ cần chọn trong các bảng thông số, trình hỗ trợ CodeWinzardAVR sẽ tự động tính toán và ghi vào các thanh ghi. Ngoài ra trình hỗ trợ còn có các thư viện viết sẵn cho việc ứng dụng các chuẩn giao tiếp khác nhau như: I2C, SPI, UART… và các thiết bị ngoại vi  như: LCD, đồng hồ thời gian thực,… Sau  khi thiết lập trình hỗ trợ đưa ra cho người dùng một đoạn code mẫu, nếu đoạn nào thừa không cần thiết người dùng có thể xoá đi hoặc thêm vào theo cách truyền thống. Nhưng khi sử dụng trình hỗ trợ CodeWinzardAVR người dùng dễ tạo thói quen không am hiểu sâu về cấu trúc của chip. Vì vậy nên sử dụng trình hỗ trợ này sau khi đã thành thạo cách làm truyển thống. 
Khởi tạo một dự án mới.
Mở trình dịch CodeVision -> chọn New -> tích vào project -> chọn OK -> Tiếp tục chọn OK -> Chọn OK. Sau đó xuất hiện một hộp giao diện như hình…. Sau đó chọn loại chíp cần sử dụng và giá trị thạch anh tại vùng vòng tròn đỏ.

     Trong trình hỗ trợ có hỗ trợ thiết lập các tài nguyên trên chip như:
     External IRQ: Ngắt ngoài.
     Timers: Khởi tạo timer, counter, xung PWM.
     USART0, USART0: Giao diện nối tiếp USART (tương thích chuẩn nối tiếp RS-232).
     Analog Comparator:
     ADC: Chuyển đổi tương tự sang số.
     SPI: Giao diện nối tiếp 4 dây do hãng Motorola đề xướng.
     I2C: Giao diện nối tiếp 2 dây do hãng Intel đề xướng.
     1 Wire: Giao diện nối tiếp 1 dây.
     TWI (I2C): Truyền thông đã chip chủ dựa trên giao diện nối tiếp 2 dây.
     Alphanumeric LCD: Hỗ trợ LCD 16x2 hoặc 8x2.
     Project Information: Thông tin về dự án.
     External SRAM: Ngắt khi tràn SRAM (giới hạn tràn SRAM do người lập trình quy định).
     Chip: Chọn loại chíp, giá trị thạch anh.
     Ports: Chọn đầu ra xuất nhập I/O cho các PORT.   
          
Khởi tạo PORT xuất nhập I/O.
Trong AVR trên bất kì một chân nào, khi người lập trình muốn sử dụng chân đó là nhập hay xuất cũng cần phải khai báo. Khi muốn sử dụng đến PORT nào chỉ cần chọn PORT đó, sau đó nếu chân nào là chân nhập (đưa tín hiệu vào) thì vẫn để nguyên (In), nếu là chân xuất (đưa tín hiệu ra) chỉ cần kích vào đó và chọn là Out.
Sang cột bên phải, nếu là Out: Có 2 mức là 0 hoặc 1, là mức mặc định của chân đó. Nếu là In: Có 2 mức là T và P. T là không sử dụng điện trở kéo nội, nguợc lại P là sử dụng điện trở kéo nội.



Khởi tạo PWM.
Trên chip Atmega 128 gồm có 4 bộ timer và một bộ định thời Watchdog.
Trong ví dụ về Timer1:
Clock Source: Nguồn cấp xung.
Clock Value: Giá trị xung clock đưa vào bộ timer là 1000 kHz.
Mode: Chế độ Fast PWM giá trị top đuợc lấy từ thanh ghi ICR1 (các mode có trong datasheet của chip).
Out A: Xung ra trên chân OCR1A là xung không đảo, OCR1A càng lớn t-on càng lớn.
Out B: Xung ra trên chân OCR1B là xung  đảo, OCR1B càng lớn t-on càng nhỏ.
Input Capt: Chống nhiễu PWM.
Interupt on: Ngắt tràn timmer.
Comp. A,B,C: Ngắt so sánh.



  Khởi tạo ngắt.
Chip Atmega 128 gồm có 8 ngắt ngoài.
INT0, INT1,…, INT7.
Mỗi ngắt có các Mode sau:
+ Falling Edge: Ngắt suờn xuống.
+ Rising EDGE: Ngắt suờn lên.
+ Low level: Ngắt khi ở mức thấp.
Ví dụ đọc encoder bằng ngắt ngoài:
interrupt [EXT_INT0] voidext_int0_isr(void) {
if(ngat1==0) {
    if(IN1==0) encoder_phai--;
    else encoder_phai++;
    ngat0=0;
    ngat1=1;
}}
         
Khởi tạo LCD.
Kích chọn Enable Alphanumeric LCD Support. Sau đó chọn số kí tự trên 1 hàng.
Trong các phiên bản CodeVision cũ chỉ cho phép chọn một PORT cố định. Nhưng trong những phiên bản đời cao hơn ví dụ v2.05.0 cho phép chọn từng bit. Điều này giúp việc thiết kế mạch thuận tiện hơn, và tận dụng được những chân đơn lẻ.
Cột bên trái là kí hiệu các chân trên LCD, cột giữa để chọn PORT trên vi điều khiển, cột bên phải để chọn chân tương ứng trên mỗi PORT.
          Thư viện alcd: Trong thư viện này đã có những hàm hiển thị lcd được trình hỗ trợ viết sẵn. Khi người dùng muốn sử dụng chỉ cần lấy ra và điền các thông số thích hợp sau và hiển thị lên lcd.
              - Cách sử dụng các hàm trong thư viện alcd:
void char lcd_init
(unsigned char lcd_columns)
Khởi tạo số kí tự trên 1 hàng
void lcd_clear
(void)
Xoá màn hình
void lcd_gotoxy
(unsigned char x, unsigned char y)
Dịch chuyển con trỏ đến 1 vị trí trên màn hình.
x: Hàng(0,1), y: cột(0-15)
(2 hàng, 16 cột)

void lcd_putchar
(char c)
Hiển thị một kí tự trong bảng mã ASCII
VD hiển thị số “1”:
 lcd_putchar(1+48);
void lcd_puts
(char *str)
Hiển thị một chuỗi kí tự đuợc lưu trongSRAM
void lcd_putsf
(char flash *str)
Hiển thị một chuỗi kí tự được lưu trong bộ nhớ flash
void lcd_putse
(char eeprom *str)
Hiển thị một chuỗi kí tự được lưu trong bộ nhớ eeprom
          VD: hiển thị chương trình: “ VDNT Group!” đếm ngược từ 1000 đến 0:
#include <mega128.h>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <alcd.h>
#include <delay.h>
unsigned int z;
unsigned char MyName []={“VDNT Group!”};  // Lưu từ “VDNT Group!” vào chuỗi MyName trong SRAM
////////////////// Hàm hiển thị 4 số///////////////////
void lcd_putnum(long so){
unsigned int j,t;
unsigned char s[9];
long so1, so2, so3;
so1 = so/10000;
so2= so-(so1*10000);
for(j=1;j<=8;j++){
if(j<5) {so3=so1, t=0;}
else {so3=so2; t=4;}
s[1+t]= so3/1000;
s[2+t]= (so3%1000)/100;
s[3+t]= ((so3%1000)%100)/10;
s[4+t]= ((so3%1000)%100)%10;}
for(j=0;j<8;j++){
    lcd_putchar(s[j+1]+48);
}}
//////////////////////////////////////////
void main(void){
lcd_init(16);
while (1){
lcd_gotoxy(0,0); // Di chuyển con trỏ đến đầu dòng thứ nhất
lcd_puts(MyName[]); // xuất chữ “VDNT Group!” từ trong SRAM
lcd_gotoxy(1,0); // Di chuyển con trỏ đến đầu dòng thứ hai
for(z=1000; z>0;z--){
lcd_putnum(z); // Hiển thị giá trị hiện thời của biến z lên LCD
delay_ms(10);}
}
}
         
Khởi tạo ADC:

Điện áp tham chiếu cho ADC trên AVR có thể được tạo bởi 3 nguồn: dùng điện áp tham chiếu nội 2.56V (cố định), dùng điện áp AVCC hoặc điện áp ngoài đặt trên chân VREF.
Kích vào ADC Enabled thấy bảng như hình bên cạnh.
Interupt: Cho phép ngắt, một ngắt sẽ xảy ra khi một quá trình chuyển đổi ADC kết thúc và các giá trị chuyển đổi đã được cập nhật (các giá trị chuyển đổi chứa trong 2 thanh ghi ADCL và ADCH).
Use 8 bits: Chọn độ phân giải 10bits hoặc 8 bits.
Volt. Ref: Chọn điện áp tham chiếu.
Clock: Chọn tần số xung đưa vào ADC.
Automâticlly Scan Inputs: Chế độ tự động chuyển đổi nếu giá trị ADC vượt giới hạn đuợc thiết lập trong ô First và Last.
Ngoài ra còn khá nhiều chức năng của ADC mà trình hỗ trợ không đề cập đến có trong datasheet của chip.



       

          Dưới đây là ví dụ chương trình đọc ADC đơn kênh sử dụng trong robot tự động 1, khi cần đọc đến kênh ADC nào chỉ cần truyền vào hàm như sau: ADC=read_adc(0); khi này giá trị của ADC ở kênh 0 sẽ được lưu vào biến ADC.   
unsigned int read_adc(char cb)
{
    ADMUX  = 0x20 | cb;// Dich ket qua sang ben trai, Chon sensor doc
    delay_us(10);
    ADCSRA |= 0x40;         // Toc do doc ADC chia cho 16
    while((ADCSRA&0x10)==0);// Cho den khi doc compelete
    ADCSRA|=0x10;
    return ADCH;            // Doc gia tri 8 bit ADC tu thanh ADCH
}

Sau khi hoàn tất quá trình khởi tạo với trình hỗ trợ Code Winzard AVR:
Chọn program -> Genarate, Save and Exit -> Tiếp tục nhấn OK đến khi hiện ra bảng “Save C Compliler Source File” -> Tạo tiệp tin mới để lưu dự án -> Vào trong tập tin mới -> Đặt tên cho tệp tin C (.c) -> Đặt tên cho dự án (.prj) -> Đặt tên cho tệp tin lưu quá trình khởi tạo với trình hỗ trợ CodeWinzardAVR (.cwp) -> Bắt đầu viết chương trình.
          Chương trình  có thể có những chú thích hoặc những tài nguyên không cần sử dụng đến, người dùng có thể xoá hoặc thiết lập lại theo ý muốn.




Share:

Bài viết

Lưu trữ Blog