اطلاعیه

Collapse
No announcement yet.

[پروژه] کنترل کننده خودکار فن با PWM و نشانگر وضعیت با LCD j توسط میکرو کنترلر ATmega8

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    [پروژه] کنترل کننده خودکار فن با PWM و نشانگر وضعیت با LCD j توسط میکرو کنترلر ATmega8

    به نام خدا

    سلام یه پروژه دیگه هم درست کردم واسه بچه های ECA امیدوارم جالب وکاربردی باشه.این پروژه با یه میکرو کنترلر ATmega8 قراره دمارو اندازه بگیره

    روی LCD نشون بده و به همون اندازه که واسش تعین کردم سرعت فن رو کنترل کنه.

    این مدارش:
    [HIDE-THANKS]

    [/HIDE-THANKS]
    خوب یکم توضیح بدم در مورد مدارش در اینجا من از L293 استفاده کردم اگه فنی که می زارید جریانش از 500میلی بیشتر نباشه همین کافیه ولی اگه بیشتر هستش از درایورL298 استفاده کنید.وقتی که فن روشن شد LED شماره D2 روشن میشه و وقتی دما خیلی بالا رفتLED شماره D1 روشن میشه و روی ال سی هم وضعیت Dangerرو می نویسه.(دما هرچقدر باشه نسبت به همون وضعیت رو می نویسه)دیود های هرزگرد فراموش نشه من روی برد بورد تستش کردم برق فن رو قبل از 7805بگیرید یعنی فن 12ولت بزارید و بعد 7805قرار بدید واسه میکرو وال سی دی من اینجوری تست کردم هیچ مشکلی نبود خازن های تغذیه خیلی مهم هستند هم قبل از 7805 وهم بعد از 7805 قبل از 7805 دوتا خازن الکترولیتی 470میکروفاراد به یه 100نانو مولتی لایر قرار بدید بعداز 7805 یه 1000میکرو فاراد و دوتا 100 نانو کنار میکرو وال سی دی
    اینم کدش که واسه کامپایلر کدویژن هستش :
    [HIDE-THANKS]

    /*******************************************************
    This program was created by the
    CodeWizardAVR V3.12 Advanced
    Automatic Program Generator
    © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 27/10/2016
    Author :
    Company :
    Comments:


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

    #include <mega8.h>

    #include <delay.h>

    // Alphanumeric LCD functions
    #include <alcd.h>

    #include <stdio.h>
    // Declare your global variables here

    // Voltage Reference: AREF pin
    #define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR))

    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | ADC_VREF_TYPE;
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=(1<<ADSC);
    // Wait for the AD conversion to complete
    while ((ADCSRA & (1<<ADIF))==0);
    ADCSRA|=(1<<ADIF);
    return ADCW;
    }
    float _x;
    void main(void)
    {
    // Declare your local variables here
    int x=0;

    char b[16];
    // Input/Output Ports initialization
    // Port B initialization
    // Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
    DDRB=(1<<DDB7) | (1<<DDB6) | (1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
    // State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0
    PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

    // Port C initialization
    // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
    // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

    // Port D initialization
    // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
    DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
    // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
    PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
    TCNT0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 7/813 kHz
    // Mode: Fast PWM top=0x00FF
    // OC1A output: Non-Inverted PWM
    // OC1B output: Disconnected
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer Period: 32/768 ms
    // Output Pulse(s):
    // OC1A Period: 32/768 ms Width: 4/1121 ms
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10);
    TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (1<<CS10);
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x20;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2 output: Disconnected
    ASSR=0<<AS2;
    TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
    TCNT2=0x00;
    OCR2=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);

    // USART initialization
    // USART disabled
    UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

    // Analog Comparator initialization
    // Analog Comparator: Off
    // The Analog Comparator's positive input is
    // connected to the AIN0 pin
    // The Analog Comparator's negative input is
    // connected to the AIN1 pin
    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);

    // ADC initialization
    // ADC Clock frequency: 1000/000 kHz
    // ADC Voltage Reference: AREF pin
    ADMUX=ADC_VREF_TYPE;
    ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
    SFIOR=(0<<ACME);

    // SPI initialization
    // SPI disabled
    SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

    // TWI initialization
    // TWI disabled
    TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTD Bit 0
    // RD - PORTD Bit 1
    // EN - PORTD Bit 2
    // D4 - PORTD Bit 4
    // D5 - PORTD Bit 5
    // D6 - PORTD Bit 6
    // D7 - PORTD Bit 7
    // Characters/line: 16
    lcd_init(16);
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_putsf("The Name Of GOD");
    delay_ms(2100);

    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_putsf("By Ali Ahmadi");
    delay_ms(1000);

    lcd_clear();
    lcd_gotoxy(4,0);
    lcd_putsf("Ahmadi98");
    lcd_gotoxy(2,1);
    lcd_putsf("@engineer.com");
    delay_ms(2000);

    lcd_clear();
    lcd_gotoxy(3,0);
    lcd_putsf("WWW.ECA.IR");
    delay_ms(1000);

    lcd_clear();
    lcd_gotoxy(4,0);
    lcd_putsf("Automatic");
    lcd_gotoxy(2,1);
    lcd_putsf("Fan Controller");
    delay_ms(1500);

    lcd_clear();

    while (1)
    {
    // Place your code here
    //read x
    _x=read_adc(0)*0.4887585327468;
    x=_x;
    //show x on lcd
    sprintf(b,"Temp:%d ",x);
    lcd_gotoxy(0,0);
    lcd_puts(b);
    delay_ms(100);

    if(x<=40){
    PORTB.4=0;
    PORTB.5=0;
    lcd_gotoxy(9,0);
    lcd_putsf("Fan OFF");
    PORTB.7=0;
    }

    if(x>=45){
    PORTB.4=1;
    PORTB.5=0;
    lcd_gotoxy(9,0);
    lcd_putsf("Fan ON ");
    PORTB.7=1;
    }

    if(x==45){
    OCR1AL=80;
    }

    if(x==55){
    OCR1AL=110;
    }

    if(x==65){
    OCR1AL=150;
    }

    if(x==75){
    OCR1AL=180;
    }

    if(x==85){
    OCR1AL=200;
    }

    if(x==90){
    OCR1AL=255;
    }

    if(x<=40){
    lcd_gotoxy(0,1);
    lcd_putsf("Status:Good ");
    }

    if(x==45){
    lcd_gotoxy(0,1);
    lcd_putsf("Status:Normal ");
    }

    if(x==55){
    lcd_gotoxy(0,1);
    lcd_putsf("Status:Warm ");
    }

    if(x==65){
    lcd_gotoxy(0,1);
    lcd_putsf("Status:Hot! ");
    }

    if(x==75){
    lcd_gotoxy(0,1);
    lcd_putsf("Status:Very Hot!");
    PORTB.0=0;
    }

    if(x>=85){
    lcd_gotoxy(0,1);
    lcd_putsf("Status:Danger!! ");
    PORTB.0=1;
    }
    }
    }

    [/HIDE-THANKS]
    امیدوارم به درد خورده باشه ولذت برده باشید

    (حق این مطلب برای مهندس احمدی و وبسایت WWW.ECA.IR است کپی فقط باذکر دقیق منبع لینک همین تایپیک مجاز میباشد)

    <<موفق باشید در پناه حق بدرود>>
    جدیدترین ویرایش توسط real_ahmadi; ۱۰:۳۲ ۱۳۹۵/۰۸/۱۷.
    Proudly @real_ahmadi
    #real_ahmadi

    واسه اسمت بجنگ
لطفا صبر کنید...
X