لینک پرداخت و دانلود در "پایین مطلب"
فرمت فایل: word (قابل ویرایش و آماده پرینت)
تعداد صفحات:20
در این پروژه از ATmega8 به عنوان کنترولر و مدار فرمان رله ها استفاده شده است . در عین حال برای ارتباط با کامپیوتر از طریق پورت USB نیز ، از این میکرو کنترولر استفاده شده است.این میکرو کنترولر از خانواده میکروکنترولر های AVR است .
پروتکل USB به صورت نرم افزاری در برنامه (Firmware) میکرو پیاده سازی شده است و می تواند با استاندارد USB 1.1 Low به تبادل اطلاعات بپردازد.
برنامه این میکرو بر اساس کامپایلر GCC نوشته شده است که برای کامپایل آن می توان از برنامه WinAvr استفاده کرد .
LCD بکار رفته در این پروژه کاراکتری و 16*2 می باشد که بصورت مستقیم توسط نرم افزار کامپیوتری ، متن یا دستوالعمل را گرفته و اجرا می کند .
در برنامه کامپیوتری برای ارتباط با پورت USB از درایور آماده libusb استفاده شده است .
برنامه کامپیوتری توسط زبان C++Builder تهیه شده است. این برنامه مستقیماٌ از میکروفن کامپیوتر صوت را دریافت کرده و پس از ذخیره در بافر داخلی شروع به تجزیه و تحلیل می کند. روال کار به این صورت است که از اطلاعات ورودی که در بازه زمان هستند تبدیل فوریه (FFT) گرفته شده تا به بازه فرکانس بروند . سپس با پردازش روی طیف فرکانسی و کمی کار آماری حدود شباهت صوت دریافتی را با نمونه های ذخیره شده مقایسه می کند .
1-1-2- لخت افزار Firmware :
میکرو میتواند پنج دستورالعمل مختلف را از کامپیوتر دریافت نموده و اجرا نماید .
1- ارسال یک بایت دستورالعمل به LCD : cmdLCD_Command
2- ارسال یک بایت دیتا به LCD : cmdLCD_Data
3- نمایش یک رشته متنی روی LCD : cmdLCD_Str
4- روشن و خاموش کردن BackLight : cmdLCD_BL
5- کنترل رله ها : cmdSWITCH
برای کنترل LCD سه تابع طراحی شده است :
void LCD_Command(uchar command)
void LCD_Data(uchar data)
void LCD_Init(void)
این توابع برای ارسال دستورالعمل ودیتا و همچنین تنظیمات اولیه استفاده می شوند .
یکی از توابعی که در بخش USB آن استفاده می شود usbFunctionSetup است که توسط آن به درخواست رسیده شده از کامپیوتر پاسخ داده می شود .از تابع usbFunctionWrite جهت دریافت اطلاعات از کامپیوتر استفاده می گردد . تابع دیگری که برای ارسال دیتا به کامپیوتر از آن استفاده می شود usbFunctionRead نام دارد که در این پروژه از آن استفاده نگردیده است .
متن کامل این توابع را در زیر مشاهده می کنید :
void LCD_Command(uchar command){
PORTB &= 0b11000111;
PORTC &= 0b11100000;
PORTC |= (((command & 0b00000001) << 4) & 0b00010000);
PORTC |= (((command & 0b00000010) << 2) & 0b00001000);
PORTC |= (((command & 0b00000100) ) & 0b00000100);
PORTC |= (((command & 0b00001000) >> 2) & 0b00000010);
PORTC |= (((command & 0b00010000) >> 4) & 0b00000001);
PORTB |= (((command & 0b00100000) ) & 0b00100000);
PORTB |= (((command & 0b01000000) >> 2) & 0b00010000);
PORTB |= (((command & 0b10000000) >> 4) & 0b00001000);
PORTD &= ~(1 << 6);
PORTC |= (1 << 5);
_delay_ms(10);
PORTC &= ~(1 << 5);
}
void LCD_Data(uchar data){
PORTB &= 0b11000111;
PORTC &= 0b11100000;
PORTC |= (((data & 0b00000001) << 4) & 0b00010000);
PORTC |= (((data & 0b00000010) << 2) & 0b00001000);
PORTC |= (((data & 0b00000100) ) & 0b00000100);
PORTC |= (((data & 0b00001000) >> 2) & 0b00000010);
PORTC |= (((data & 0b00010000) >> 4) & 0b00000001);
PORTB |= (((data & 0b00100000) ) & 0b00100000);
PORTB |= (((data & 0b01000000) >> 2) & 0b00010000);
PORTB |= (((data & 0b10000000) >> 4) & 0b00001000);
PORTD |= (1 << 6);
PORTC |= (1 << 5);
_delay_ms(10);
PORTC &= ~(1 << 5);
}
void LCD_Init(void){
مقاله میکرو کنترولر