1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

Giao tiếp ADC với ATTINY85

Thảo luận trong 'Lập trình C cho vi điều khiển AVR nâng cao' bắt đầu bởi baptrang, 26 Tháng năm 2010.

  1. baptrang New Member

    Số bài viết: 1
    Đã được thích: 0
    Điểm thành tích: 0
    Nhờ các bạn giúp mình với, mình đang định làm một mạch dùng AVR TINY85 với mục đích như sau:
    - Nếu điện áp vào ADC1>200mA thì led trê PB1 sẽ sáng
    - Mình đã viết chương trình chạy được trên Protues nhưng khi nạp IC thực tế lại không chạy,
    - Đây là chương trình của mình:

    /************************************************** ***
    This program was produced by the
    CodeWizardAVR V1.24.8d Professional
    Automatic Program Generator
    © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 5/26/2010
    Author : F4CG
    Company : F4CG
    Comments:


    Chip type : ATtiny85
    Clock frequency : 12.000000 MHz
    Memory model : Small
    External SRAM size : 0
    Data Stack size : 128
    ************************************************** ***/

    #include <tiny85.h>
    #include <delay.h>

    #define FIRST_ADC_INPUT 0
    #define LAST_ADC_INPUT 1
    unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
    #define ADC_VREF_TYPE 0x30

    // ADC interrupt service routine
    // with auto input scanning
    interrupt [ADC_INT] void adc_isr(void)
    {
    register static unsigned char input_index=0;
    // Read the 8 most significant bits
    // of the AD conversion result
    adc_data[input_index]=ADCH;
    // Select next ADC input
    if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
    input_index=0;
    ADMUX=(FIRST_ADC_INPUT|ADC_VREF_TYPE)+input_index;
    // Start the AD conversion
    ADCSRA|=0x40;
    }

    // Declare your global variables here
    /***********Ham so sanh***********/
    void sosanh(unsigned char adc)
    {
    unsigned char so;
    so=adc;
    if (so>0x0F)
    PORTB.1=1;
    else
    PORTB.1=0;
    }
    void main(void)
    {
    // Declare your local variables here

    // Crystal Oscillator division factor: 1
    #pragma optsize-
    CLKPR=0x80;
    CLKPR=0x00;
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif

    // Input/Output Ports initialization
    // Port B initialization
    // Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=In
    // State5=T State4=T State3=T State2=T State1=0 State0=T
    PORTB=0x00;
    DDRB=0x02;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0A output: Disconnected
    // OC0B output: Disconnected
    TCCR0A=0x00;
    TCCR0B=0x00;
    TCNT0=0x00;
    OCR0A=0x00;
    OCR0B=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFh
    // OC1A output: Disconnected
    // OC1B output: Disconnected
    // Timer 1 Overflow Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    PLLCSR=0x00;
    TCCR1=0x00;
    GTCCR=0x00;
    TCNT1=0x00;
    OCR1A=0x00;
    OCR1B=0x00;
    OCR1C=0x00;

    // External Interrupt(s) initialization
    // INT0: Off

    // Interrupt on any change on pins PCINT0-5: Off
    GIMSK=0x00;
    MCUCR=0x00;

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

    // Universal Serial Interface initialization
    // Mode: Disabled
    // Clock source: Register & Counter=no clk.
    // USI Counter Overflow Interrupt: Off
    USICR=0x00;

    // Analog Comparator initialization
    // Analog Comparator: Off
    ACSR=0x80;
    ADCSRB=0x00;

    // ADC initialization
    // ADC Clock frequency: 750.000 kHz
    // ADC Voltage Reference: 2.56V, AREF discon.
    // ADC Bipolar Input Mode: Off
    // ADC Reverse Input Polarity: Off
    // ADC Auto Trigger Source: None
    // Only the 8 most significant bits of
    // the AD conversion result are used
    // Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
    DIDR0&=0x03;
    DIDR0|=0x00;
    ADMUX=FIRST_ADC_INPUT|ADC_VREF_TYPE;
    ADCSRA=0xCC;
    ADCSRB&=0x5F;

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

    while (1)
    {
    // Place your code here
    sosanh(adc_data[1]);
    delay_ms(30);
    };
    }

    Mình có gởi kèm mạch nguyên lý, nhờ mấy pro giúp với. Thanks!

Chia sẻ trang này