به نام خدا
سلام یه پروژه دیگه هم درست کردم واسه بچه های 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]
[/HIDE-THANKS]
امیدوارم به درد خورده باشه ولذت برده باشید
(حق این مطلب برای مهندس احمدی و وبسایت WWW.ECA.IR است کپی فقط باذکر دقیق منبع لینک همین تایپیک مجاز میباشد)
<<موفق باشید در پناه حق بدرود>>
سلام یه پروژه دیگه هم درست کردم واسه بچه های 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 است کپی فقط باذکر دقیق منبع لینک همین تایپیک مجاز میباشد)
<<موفق باشید در پناه حق بدرود>>