راه اندازی سون سگمنت با آی سی 74HC595
در این بخش تیم الکترونیک و برنامه نویسی الکترونیک ۹۸, اقدام به طراحی و انتشار پروژه ای کاربردی و حرفه ای با عنوان, راه اندازی و کنترل هشت سون سگمنت با میکروکنترلر AVR تنها با 6 پایه, برای شما علاقه مندان به پروژه های میکروکنترلر AVR کرده است. نمایشگرهای هفت قسمتی (سون سگمنت) همیشه جزوء نمایشگرهای جذاب و پرکاربرد در پروژه های مختلف میکروکنترلرها می باشد.
یکی از مشکلات اصلی راه اندازی سون سگمنت ها توسط میکروکنترلرها اشغال زیاد پایه های میکروکنترلر می باشد. اصولا برای راه اندازی یک سون سگمنت 7 پایه از میکروکنترلر اشغال می شود، و به ازای هر رقم یا سون سگمنت اضافی یک پایه دیگر از میکروکنترلر استفاده می شود. به عنوان مثال اگر بخواهیم یک سون سگمنت مالتی پلکس هشت رقمه را به روش مرسوم توسط میکروکنترلر AVR راه اندازی کنیم باید 15 پایه از میکروکنترلر AVR را به این کار اختصاص دهیم.
نقشه شماتیک پروژه
شرح عملکرد پروژه
در برخی پروژه ها مواردی پیش می آید که پایه های میکروکنترلر برای راه اندازی ماژول ها و یا دیگر موارد اشغال شده، به همین دلیل تعداد پایه کافی برای راه اندازی سون سگمنت وجود ندارد. برای رفع این مشکل در این پروژه می خواهیم یک سون سگمنت مالتی پلکس هشت رقمه را که برای راه اندازی آن به روش مرسوم به 15 پایه از میکروکنترلر AVR احتیاج داریم را تنها با استفاده از 6 پایه میکروکنترلر ATmega8 توسط آی سی 74HC595 که یک تراشه شیفت رجیستر سریال 8 بیتی می باشد، راه اندازی کنیم.
برنامه میکروکنترلر به زبان بیسیک BASIC در نرم افزار BASCOM-AVR
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
$regfile = "m8def.dat" $crystal = 8000000 '-------------------------------------------- Config Portd = Output '-------------------------------------------- Dim A As Long Dim N1 As Byte Dim N2 As Byte Dim N3 As Byte Dim N4 As Byte Dim N5 As Byte Dim N6 As Byte Dim N7 As Byte Dim N8 As Byte Dim M1 As Long Dim M2 As Long Dim M3 As Long Dim M4 As Long Dim M5 As Long Dim M6 As Long Dim M7 As Long Dim M8 As Long Dim R As Byte '-------------------------------------------- Do A = 12345678 M1 = A M2 = M1 M3 = M1 M4 = M1 M5 = M1 M6 = M1 M7 = M1 M8 = M1 '-------------------------------------------- M1 = M1 / 10000000 N1 = Abs(m1) '-------------------------------------------- M2 = M2 Mod 10000000 M2 = M2 / 1000000 N2 = Abs(m2) '-------------------------------------------- M3 = M3 Mod 1000000 M3 = M3 / 100000 N3 = Abs(m3) '-------------------------------------------- M4 = M4 Mod 100000 M4 = M4 / 10000 N4 = Abs(m4) '-------------------------------------------- M5 = M5 Mod 10000 M5 = M5 / 1000 N5 = Abs(m5) '-------------------------------------------- M6 = M6 Mod 1000 M6 = M6 / 100 N6 = Abs(m6) '-------------------------------------------- M7 = M7 Mod 100 M7 = M7 / 10 N7 = Abs(m7) '-------------------------------------------- M8 = M8 Mod 10 N8 = Abs(m8) '-------------------------------------------- R = &B10000000 Gosub Anod R = Lookup(n1 , Numbers) Gosub Registr '-------------------------------------------- R = &B01000000 Gosub Anod R = Lookup(n2 , Numbers) Gosub Registr '-------------------------------------------- R = &B00100000 Gosub Anod R = Lookup(n3 , Numbers) Gosub Registr '-------------------------------------------- R = &B00010000 Gosub Anod R = Lookup(n4 , Numbers) Gosub Registr '-------------------------------------------- R = &B00001000 Gosub Anod R = Lookup(n5 , Numbers) Gosub Registr '-------------------------------------------- R = &B00000100 Gosub Anod R = Lookup(n6 , Numbers) Gosub Registr '-------------------------------------------- R = &B00000010 Gosub Anod R = Lookup(n7 , Numbers) Gosub Registr '-------------------------------------------- R = &B00000001 Gosub Anod R = Lookup(n8 , Numbers) Gosub Registr Loop End '-------------------------------------------- Numbers: Data &B11000000 '0 Data &B11111001 '1 Data &B10100100 '2 Data &B10110000 '3 Data &B10011001 '4 Data &B10010010 '5 Data &B10000010 '6 Data &B11111000 '7 Data &B10000000 '8 Data &B10010000 '9 '-------------------------------------------- Registr: Shiftout Portd.5 , Portd.6 , R , 1 Pulseout Portd , 7 , 10 Waitms 5 Return '-------------------------------------------- Anod: Shiftout Portd.3 , Portd.4 , R , 3 Pulseout Portd , 2 , 10 Return |
در این پروژه پس از تعریف 8 متغیر اصلی با فرمت Long و بارگذاری اعداد مورد نظر به آن ها با تقسیم آن ها از با ارزش ترین متغییر تا کم ارزش ترین بر 10000000 تا 10، و به دست آوردن باقیمانده آن، اعداد را تفکیک کرده و به کمک دستور Lookup پس از فراخوانی معادل آن عدد در سون سگمنت با دستور Shift به صورت سریال روی پورت خروجی قرار می دهیم. پس از آنها تراشه شیفت رجیستر معادل باینری داده سریال ورودی را به صورت پارارل روی خروجی خود که به سون سگمنت متصل است، قرار می دهد.
همچنین فایل شبیه ساز این پروژه نیز که با نرم افزار Proteus 8 Professional طراحی شده، پیوست فایل پروژه جهت دانلود قرار داده شده است، که می تواند شما را در یادگیری هر چه بهتر مدار و نحوه عملکرد آن یاری نماید.
دست شما درد نکنه خیلی مفید بود و کارامد و کاربردی.