چکیده : در این پروژه پیرامون طراحی نرم افزار ساخت یک قفل الکترونیکی با استفاده از میکرو کنترلر AVR(ATMEGA8) مطالبی چند به میان آمده است این قفل توانایی این را دارد که توسط سه نفر و با سه رمز رقمی متفاوت مورد استفاده قرار گیرد .
میکرو AVR رمز را از یک صفحه کلید ماتریسی دریافت می کند و پس از نمایش برروی صفحه نمایشگر LCD پس از مقایسه با رمز موجود در حافظه در صورت صحیح بودن رله ای را برای یک ثانیه فعال می کند و قفل باز می گردد هر یک از این کاربرها به راحتی می توانند رمز مورد نظر خود را تغییر دهند و رمز دیگری را جایگزین آن کنند .
یک رمز 5 رقمی نیز به عنوان رمز SUPERVISER تعریف شده است که در صورتی که یکی از کاربرها رمز خود را فراموش کرد می تواند با وارد کردن آن سه رمز دیگر را صفر کند و کاربرها می توانند با مراجعه دوباره رمز مورد نظر خود را وارد کنند و پیغام های میکرو نیز در هر مرحله با توجه به کلید فشار داده شده بر روی صفحه نمایشگر LCD نمایش داده می شود .
در این پروژه در معرفی به نحوه کار با میکرو کنترلر AVR پرداخته شده است و سپس طراحی مدار و نرم افزار قفل آمده است که در آن نحوه عملکرد مدار ، نقشه شماتیک مدار معرفی زیر برنامه ها و در نهایت مجموعه متن نرم افزار بیان گردیده است .
مقدمه : مختصری راجع به AVR زبانهای سطح بالا یا همان HLL (HIGH Level Language) به سرعت در حال تبدیل شدن به زبان برنامه نویسی استاندارد برای میکرو کنترلرها (MCU) حتی برای میکروهای 8 بیتی کوچک هستند زبان برنامه نویسی C و BASIC بیشترین استفاده را در برنامه نویسی میکروها دارند ولی در اکثر کاربردها کدهای بیشتری را نسبت به زبان برنامه نویسی اسمبلی تولید می کنند .
ATMEL ایجاد تحولی در معماری جهت کاهشی کد به مقدار مینیمم را درک کرد که نتیجه این تحول میکروکنترلرهای AVR هستند که علاوه بر کاهش و بهینه سازی مقدار کدها به طور واقع عملیات را تنها در یک کلاک سیکل توسط معماری RISC انجام می دهند و از 32 رجیستر همه منظوره استفاده می کنند که باعث شده 4 تا 12 بار سریعتر از میکروهای مورد استفاده کنونی باشند .
تکنولوژی حافظه کم مصرف غیر مدار شرکت ATMEL برای برنامه ریزی AVR ها مورد استفاده قرار گرفته است در نتیجه حافظه های FLASH و EEPROM در داخل مدار قابل برنامه ریزی (ISP) هستتد میکرو کنترلرهای اولیه AVR دارای 1 و 2 و3 کیلوبایت حافظه FLASH و به صورت کلمه 16 بیتی سازماندهی شده بودند .
AVR ها به عنوان میکرو RISC با دستورات فراوان طراحی شده اند که باعث می شود حجم کد تولید شده کم و سرعت بالاتری بدست آید .
خصوصیات (ATMEGA 8) از معماری AVR RISC استفاده می کند .
دارای 16 دستورالعمل با کارآیی بالا که اکثرا ً تنها در یک کلاک سیکل اجرا می شوند 8*32 رجیستر کاربردی سرعتی تا 6m/ps ( در فرکانس 6mhz) حافظه ، برنامه و داده غیر فرار BK بایت حافظه FLASH داخلی قابل برنامه ریزی پایداری حافظه FLASH : قابلیت 1000 بار نوشتن و پاک کردن 1024 بایت حافظه داخلی SDRAM 512 بایت حافظه EEPROM داخلی قابل برنامه ریزی پایداری حافظه EEPROM : قابلیت 10000 بار نوشتن و پاک کردن قفل برنامه FLASH و حفاظت EEPROM خصوصیات جانبی دو تایمر – کانتر 8 بیتی با PRESCALER مجزا و دارای مد COMPARE یک تایمر – کانتر 16 بیتی با PRESCALER مجزا و دارای COMPARE و CAPTURE 3 کانال PWM 3 کانال مبدل ، آنالوگ به دیجتال در بسته بندی های TQFP و MLF 6 کانال با دقت 10 بیتی 2 کانال با دقت 8 بیتی 6 کانال مبدل آنالوگ به دیجیتال در بسته بندی های PDIP 4 کانال با دقت 10 بیتی 2 کانال با دقت 8 بیتی دارای RTC با اسیلاتور مجزا یک مقایسه کننده آنالوگ داخلی USART سریال قابل برنامه ریزی WATCHDOG قابل برنامه ریزی با اسیلاتور داخلی ارتباط سریال SPT برای برنامه ریزی داخل مدار قابلیت ارتباط با پروتکل سریال دو سیمه قابلیت ارتباط سریال SPI به صورت MASTER یا SLAVE خصوصیات ویژه میکروکنترلر POWER – ON RESET CIRCUIT دارای 5 حالت Sleep (ADC Noise و IDEL و STANDBY و POWER DOWN و POWER – SAVE و REDUCTION ) منابع وقفه ( INTERRUPT) داخلی و خارجی دارای اسیلاتور RC داخلی کالیبره شده عملکرد کاملا ً ثابت توان مصرفی پایین و سرعت بالا توسط تکنولوژی CMOS توان مصرفی در 25a,3V,4MHZ حالت فعال 3.6 MA در حالت غیر فعال 1.0MA ولتاژهای عملیاتی ( کاری ) 2.7V تا 5.5 برای (ATMEGA 8L) 4.5V تا 5.5 برای (ATMEGA8) فرکانس کاری 0MHZ تا 8MHZ برای (ATMEGA 8L) 0MHZ تا 16MHZ برای (ATMEGA8) خطوط I/O و انوع بسته بندی 23 خط ورودی / خروجی قابل برنامه ریزی 28 پایه PDIP و 32 پایه TQFP و MLF بخش دوم / عملکرد قفل : این قفل بوسیله سه رمز پنج رقمی که از صفحه کلید دریافت می کند عمل می کند چناچه رمز صحیح باشد یعنی با رمز موجود در حافظه EEPROM برابر باشد کاربر می تواند با انتخاب گزینه مورد نظر رمز خود را تغییر دهد یا قفل را باز کند کلیه مراحل کار با دستگاه ، متناسب با کلید فشار داده شده بر روی صفحه نمایشگر LCD نمایش داده می شود .
اگر در هنگام روشن شدن دستگاه کلید Ok گرفته شود دستگاه از کاربر یک رمز که مربوط به SUPERVISER است درخواست می کند که با وارد کردن آن و در صورت درست بودن ، میکرو کلیه رمزها را صفر می کند این برای این است که اگر یکی از کاربرها رمز خود را فراموش کرد با استفاده از این روش بتواند دوباره رمز خود را وارد کند .
در حالت عادی با روشن شدن دستگاه بر روی صفحه نمایش عبارت ENTER USER NUMBER نقش می بندد و از کاربر می خواهد USER خود را وارد کند وقتی USER وارد شد از او می خواهد PASSWORD را وارد کند با وارد کردن هر عدد بر روی صفحه نمایش یک * ظاهر می شود و در پایان با فشار دادن کلید OK اگر رمز درست بود بر روی صفحه نمایشگر عبارت WELCOM USER نقش می بندد و سه گزینه EXIT/CHANGE/OPEN برای کاربر نشان داده می شود که با انتخاب OK می تواند در را باز کند و با انتخاب CHANGE می تواند رمز را تغییر دهد و با انتخاب ESC از صفحه MENU خارج می شود .
تشریح سخت افزار مدار : نحوه اتصال پورتها : PB.1 : متصل به بوبین رله PD.0 : و PD.1 : و PD.2 : و PD.3 : (متصل به چهار ستون صفحه کلید ) PD.4 : و PD.5 : و PD.6 : و PD.7: ( متصل به چهار سطر صفحه کلید ) PC.5 : متصل به پایه RS صفحه نمایشگر LCD PC.4 : متصل به پایه E صفحه نمایشگر LCD PC.3 : متصل به پایه DB7 صفحه نمایشگر LCD PC.2 : متصل به پایه DB6 صفحه نمایشگر LCD PC.1 : متصل به پایه DB5 صفحه نمایشگر LCD PC.0 : متصل به پایه DB4 صفحه نمایشگر LCD قرار گرفتن ARMEGA 8 در مدار : پایه 7 به ولتاژ مستیم پنج ولت وصل شده است وپایه های 22 و 8 به زمین متصل می گردند وسایر پایه ها نیز مطابق آنچه در اتصال پورتها گفته شد به صفحه نمایشگر و صفحه کلید و بوبین رله متصل می شوند .
میکرو کنترلر AVR برخلاف سایر میکرو کنترلرهای موجود دارای یک اسیلاتور RC داخلی می باشد در این مدار نیز از اسیلاتور داخلی میکروکنترلر استفاده شده است و به پایه های 10 و 9 که برای استفاده از اسیلاتور کریستال خارجی و اسیلاتور RC خارجی و ...
است هیچ المانی متصل نگردیده است .
مدار تغذیه ورودی : از آنجایی که ولتاژ بالاتر از پنج ولت باعث سوختن میکرو و احیانا ً دیگر قطعات می شود مدار تثبیت کننده فوق برای سیستم ضروری است .
در این مدار از یک رگلاتور 7805 استفاده شده است که این رگلاتور ، ولتاژهای بالاتر از پنج ولت را به گرما تبدیل می کند و به این ترتیب ولتاژ را تثبیت می نماید .
وجود خازنها هم برای آنست که از ورود نویزهای فرکانس بالای برق شهر و تأثیرگذاری بر روی ولتاژ ورودی مدار جلوگیری به عمل آید و همچنین برای تثبیت هر چه بیشتر ولتاژ به کار برده شده است .
اتصال صفحه کلید : صفحه کلید ، یک صفحه کلید ماتریسی 4*4 است که ستونهای آن به پایه های PD.0 ، PD.1 ،PD.2 ، PD.3 متصل شده اند و چهارسطر آن به پایه های PD.6 ، PD.5 ، PD.4 ، PD.7 وصل گردیده اند .
میکروکنترلر به علت اینکه هم قابلیت جریان کشی و هم قابلیت جریان دهی خوبی دارد دیگر نیازی به وجود آی سی بافر برای خروجی و همچنین برای ورودی ندارد .
اتصال رله : رله استفاده شده در مدار یک رله 12 ولت است که جریان آن توسط یک مدار تقویت کننده جریان امیتر مشترک ، تامین می گردد ولتاژ حدود 12 ولت مستقیما ً از خروجی به یک سر بوبین رله وصل می گردد و سر دیگر بوبین ، با یک شدن پایه میکرو ودر نتیجه روشن شدن ترانزیستور مذکور ، زمین می گردد و این به معنای روشن شدن رله است .
در بیس تقویت کننده جریان امیتر مشترک یک دیود قرار دارد چون بوبین رله ذخیره کننده جریان است پس از قطع جریان از رله جریان ذخیره شده در رله باعث می شود که به میکرو ترانزیستور آسیب وارد شود و این دیود از آن جلوگیری می نماید .
نوع این دیود از نوع ژرمانیوم می باشد تا ولتاژی که دو سر آن افت می کند ناچیز باشد و ترانزیستور روشن شود.
پس از شروع برنامه و معرفی IC میکروکنترلر مورد استفاده در مدار و همچنین فرکانس کریستال داخلی میکرو کنترلر ، صفحه کلید و صفحه نمایشگر LCD برای میکرو کنترلر تعریف می شود .
میکرو AVR برخلاف میکروهای دیگر به خاطر استفاده از زبان سطح بالا دیگر نیاز به زیر برنامه ای مخصوص برای تعریف صفحه کلید و همچنین صفحه نمایشگر LCD ندارد و به راحتی با تعیین پورت متصل به صفحه کلید و تعیین پایه های مورد استفاده برای صفحه نمایشگر LCD و همچنین نوع آن قادر به شناختن آن است وبا چند برنامه مختصر به راحتی می توان از آنها استفاده کرد .
برچسب SUPERVISER : این برچسب برای SUPERVISER تعریف شده است بدین صورت که اگر استفاده کنندگان رمز مورد نظر خود را فراموش کردند می توانند در هنگام روشن شدن قفل کلید OK را فشار داده تا بدین صورت وارد برچسب SUPERVISER شوند .
رمز تعریف شده برای SUPERVISER یعنی P=12345 وقتی که رمز مورد نظر وارد شد هر سه رمز سه استفاده کنندگان برابر صفر می گردد که آنها می توانند با تغییر رمز خود ، رمز مورد دلخواه خود را وارد کنند .
در حالت عادی برنامه از برچسب STARTTCLS شروع می شود و پس از پاک کردن صفحه نمایشگر LCD ، بر روی صفحه نمایش از استفاده کننده می خواهد USER مورد نظر خود را انتخاب کند در برچسب CHEKEY1 ، USER مربوطه ای که از صفحه کلید انتخاب شده مورد بررسی قرار می گیرد و رمز مربوط به USER انتخاب شده در PASSWORD قرار می گیرد سپس در برچسب ENTPASS از USER می خواهد تا PASSWORD خود را وارد کند اگر PASSWORD اشتباه بود تا سه بار می تواند PASSWORD صحیح را وارد کند ولی اگر PASSWORD درست بود به برچسب WELCOM می رود و بر روی صفحه نمایشگر LCD ضمن خوشامدگویی به USER سه گزینه برای وی نمایش می دهد : (EXIT/CHANGE/OPEN) چنانچه USER کلید EXIT را بزند به ابتدای برنامه یعنی برچسب STARTTCLS می رود ولی اگر USER کلید CHANGE را بزند به زیربرنامه CHANGE می رود و در آنجا USER می تواند رمز خود را تغییر دهد اگر USER کلید Ok را فشار دهد پس از رفتن به زیربرنامه BEUTIFULER و بازگشت از آن به مدت یک ثانیه رله را وصل می نماید وقفل باز می گردد .
بخش سوم / تشریح زیربرنامه ها : زیربرنامه BEUTIFULER : این زیربرنامه فقط برای زیبایی طرز کار قفل در نظر گرفته شده است بدین صورت که پس از انتخاب گزینه OPEN برای باز کردن قفل مورد نظر قفل بلافاصله باز نمی شود بلکه پس از یک مکث چند ثانیه ای و نمایش دادن چند نقطه بر روی صفحه نمایشگر LCD قفل باز می شود .
زیربرنامه LOGO : قبل از اجرای زیربرنامه یک خط برنامه برای تبدیل اعداد صفحه کلید به اعداد دلخواه ما نوشته شده است زیرا میکروی AVR اعداد صفحه کلید را به ترتیب از 15-0 در نظر می گیرد و برای تبدیل شدن به فرم دلخواه ما باید ابتدا این خط برنامه نوشته شود .
این زیربرنامه برای گرفتن PASSWORD مورد استفاده قرار می گیرد یعنی هر جا که از USER خواسته شد PASSWORD خود را وارد کند به این زیر برنامه می آید و در آن پس از تبدیل کلید های زده شده به فرم دسیمال ( دهدهی ) آن ، عدد وارد شده را نیز در یک متغیر ذخیره می کند .
زیربرنامه COMP : این زیربرنامه برای مقایسه رمز وارد شده توسط USER بوسیله صفحه کلید و همچنین رمز ذخیره شده در هر یک از مکانهای حافظه ای که به هر USER اختصاص دارد به کار می رود چنانچه رمز مورد نظر اشتباه باشد به برنامه اصلی برگشته و در برنامه اصلی از USER می خواهد دوباره این رمز را وارد نماید چنانچه USER رمز را تا سه مرتبه اشتباه وارد نماید این زیربرنامه پس از نمایش SORRY!!
بر روی صفحه نمایشگر LCD به ابتدای برنامه باز می گردد و چنانچه رمز درست بود نیز به برنامه اصلی باز می گردد و به برچسب WELCOM می رود .
زیربرنامه CHANGE : این برنامه برای تغییر رمز مورد نظر USER به کار می رود .
در مرحله اول از USER خواسته می شود تا رمز قبلی خود را وارد کند چنانچه رمز اشتباه بود تا سه بار امکان وارد کردن رمز قبلی را دارد و اگر رمز درست بود از USER خواسته می شود که رمز جدید خود را وارد کند و سپس دوباره از او خواسته می شود تا رمز جدید خود را تکرار نماید که اگر رمز تکرار شده با رمز جدید متفاوت بود بر روی صفحه نمایشگر LCD عبارت DIFFERENT PASS !!
نمایش داده می شود و از USER خواسته می شود تا رمز جدید خود را دوباره تکرار نماید ولی اگر رمز تکرار شده با رمز جدید برابر بود رمز وارد شده در مکان حافظه اختصاص داده شده به USER مربوطه قرار می گیرد و رمز تغییر پیدا می کند .
$regfile = " m8def.dat" $crystal = 1000000 Config Lcdpin = pin , db4=portc.3,db5=portc.2,db6=portc.1,- Db7=portc.0 , E= portc.4 , Rs= Portc.5 Config Lcd=16*2 Config kbd=portd,Debounce =1 , Delay = 1 Config pinb.1 = output Declare Sub Comp Declare Sub Logo Declare sub change Declare sub beutifuler Dim A As Byte , number As Byte , B As Byte , B1 As Byte , c As Byte , - Length As Byte Dim Password As Long , P0 As Eram Long , p1 As Eram Long , p2 As Eram Long , p3 As Eram Long Dim E1 As Long , E As Long , G As Byte , Enew As Long , Key As Byte ,Comper As Byte Dim Erep As Long Relay Alias Portb.1 Reset Relay ‘relay off : P0=12345 ‘superviser password Waitms 4 ‘eeprom Superviser : A=Getbd( ) If A 15 Then Goto Starttcls ‘press Enter Password=P0 Cls Lcd “: “ Locate 2,5 Cursor Blink Call Logo If Key = “esc” Then Goto Superviser ‘Esc Call Comp If comper = “ sorry “ Then ‘SORRY Goto Superviser Elseif comper = “ invalid “ Then Goto Superviser ‘INVALID Else Endif P1=0 Waitms 4 P2= 0 Waitms 4 P3= 0 Waitms 4 Starttcls: G= 0 ‘start & cls Cls ‘ for no pet pet Startt: Cursor Noblink Locate 1 , 7 Lcd “ Enter “ Locate 2 , 4 Lcd “ User Number” Cursor off Chekey1: A= Getkbd( ) If A>15 Then Goto Chekey1 Select case A Case 3:Number = 1 Password=P1 ‘user1 Case 7: Number =2 Password=P2 ‘user2 Case11:Number=3 Password=P3 ‘user3 Case Else :jmp startt End select Entpass: Cls Locate 1,6 Lcd “user” ; number Locate 2,1 Lcd “password: “ Cursor Blink Call Logo IF key = “esc” Then Goto Starttcls ‘ESC Call Comp ‘Ok IF COMPER = “SORRY “ Then Goto Starttcls ‘SORRY Elseif comper = “ invalid” Then ‘INVALID Goto Entpass Else Endif Welcom: Cls ‘true Lcd “welcome user “ ; number Locate 2 , 1 Lcd “Exit / change / open” Chekey2: A=Getbd( ) IF A>15 Then Goto chekey2 Select case A Case 12: Goto starttcls ‘Esc Case15: ‘Ok Call Beutifuler Set Relay Cls ‘open door Lcd “ welcom !!!!
“ Wait 1 Reset Relay Wait 2 Goto starttcls Case 14: Call change ‘change Case Else :jmp Chekey2 End select End Sub change : Cls Cursor Blink Lcd “ change password” Locate 2, 1 Lcd “ old pass : “ Call Logo IF Key =”esc” Then Goto Welcom ‘Esc Call comp ‘ok If comper= “sorry” Then ‘sorry Goto starttcls Elseif comper = “ invalid “ Then ‘INVALID Goto change Else Endif Newpass : Cls ‘True Cursor Blink Lcd “ new pass : “ Call Logo Enew = E IF key = “esc” Then Goto change ‘Esc Reppass : Cls Cursor Blink Locate 2 , 1 Lcd “ rep pass : “ Call Logo Erep = E IF key=”esc” Then Goto change ‘Esc If Enew = Erep Then Goto Truerep Else Cls Lcd “different” Locate “ pass !!!!” Wait 1 Jmp reppass Endif Truerep : If number = 1 Then P1=E Waitms 4 ‘eeprom Elseif number = 2 Then P2 =E Waitms 4 ‘eeprom Else P3=E Witms 4 ‘eeprom End if Cls Lcd “changed” Locate 2 ,7 Lcd “password!!!” Wait 1 Goto welcom End sub Sub Beutifuler : Cls ‘open Cursor Noblink ‘Beutifuler Locate 1 , 6 Lcd “ .” Waitms 200 Locate 1,6 Lcd “ ..
“ Waitms 200 Locate 1,6 Lcd “ … “ Waitms 200 Locate 1,6 Lcd “ ….
“ Waitms 200 Locate 1,6 Lcd “ …..
“ Waitms 200 Cls Locate 1,6 Lcd “.
“ Waitms 200 Locate 1,6 Lcd “..
“ Waitms 200 Locate 1,6 Lcd”… “ Waitms 200 Locate 1,6 Lcd “….
“ Waitms 200 Locate 1,6 Lcd “…..
“ End sub Keydata : Data 1,2,3,10,4,5,6,11,7,8,9,12,13,0,14,15 Sub Logo: Length = 0 Key=0 Chekey: B=Getkbd( ) If B >15 Then Goto chekey Rep: C=Getkbd( ) If c>15 Then Goto Norep Jmp Rep Norep: B1=Lookup(b,keydata) ‘convert key to standard Select case B1 Case 13: ‘esc Key = “esc” Exit sub Case 15: ‘ok If Length Key=”ok” Exit sub Case 0 to 9: ‘number 0-9 Incr Length If Length>5 Then Goto chekey Lcd “ * “ Select case Length ‘convert input key decimal Case1:E=10000 *B1 Case2:E1=1000*B1 E= Case3:E1=100*B1 E= Case4:E1=10*B1 E= Case Else : E= Cursor Noblink End select Case Else :jmp chekey Ens select Goto chekey End sub Sub Comp: ‘I=0(SORRY),I=1(INVALID),I=2(TRUE) ‘compar input code by password If E=password Then jmp True Cls Lcd “INVALID!!!” Wait 1 Incr G If G=3 Then ‘exit if false pass for time Cls Lcd “ sorry!” Wait 1 Comper =”sorry” Else Comper =”invalid” End if Exit sub True : Comper = "True” End sub