ساعت دیجیتال با قابلیت اعلام هشدار
در این بخش تیم الکترونیک و برنامه نویسی الکترونیک ۹۸, اقدام به طراحی و انتشار پروژه ای جذاب و بسیار حرفه ی با عنوان, ساخت ساعت دیجیتال با قابلیت تعین زمان هشدار و نمایش تاریخ در سون سگمنت توسط میکروکنترلر AVR, برای شما علاقه مندان به پروژه های میکروکنترلر AVR کرده است. سون سگمنت (Seven Segment) قطعه ای الکترونیکی است که برای نمایش اعداد 0 تا 9 بکار می رود و اغلب بصورت بسته ای مکعبی شکل در اندازه های مختلف می باشد که در ساختمان آن 7 عدد دیود نورانی طوری قرار داده شده اند که با روشن شدن همه آن ها, تصویری از عدد 8 به وجود می آید و بخاطر همین مسئله نام آن را سون سگمنت (وسیله هفت قطعه ای) گذاشته اند.
طبیعی است که با روشن و خاموش ماندن تعداد معینی از این دیودهای نورانی, تصویری از اعداد 0 تا 9 به وجود خواهد آمد. سون سگمنت ها به دلیل نمایش بزرگ اعداد و ساطع کردن نور خیره کننده جزوء نمایشگرهای جذاب و پرطرفدار دسته بندی می شوند به طوری که امروزه شاهد استفاده بسیار زیاد از آن ها در اکثر تجهیزات برقی و الکترونیکی هستیم. در این پروژه تصمیم گرفته ایم تا با استفاده از یک سون سگمنت 4 رقمه مولتی پلکس یک ساعت بسیار زیبا با قابلیت نمایش تاریخ و اعلام هشدار توسط میکروکنترلر ATmega32 از خانواده میکروکنترلر های AVR طراحی کنیم.
سون سگمنت
یک سون سگمنت معمولی (تک رقمه) دارای 8 پایه خروجی می باشد که یک پایه از آن مشترک بوده و ولتاژ همه LED ها را تامین می کند, به طور خلاصه می توان گفت در تمامی سون سگمنت ها یه پایه به نام پایه مشترک وجود دارد که تمامی پین های مثبت یا منفی دیودهای نورانی موجود در سون سگمنت به این پایه (پایه مشترک) متصل می باشد.
دومین الی هشتمین پایه از سون سگمنت ها مربوط به ولتاژ های مستقل دیود های نورانی خواهد بود. به صورت قراردادی وقتی به یک قطعه سون سگمنت از روبرو نگاه می کنیم, ترتیب قرار گرفتن پایه های آن به ترتیبی که در شکل زیر مشاهده می کنید با حروف انگلیسی a,b,c,d,e,f,g نشان داده می شود.
نکته : چون برای نشان دادن ارقام زیاد, تعدادی از این سون سگمنت ها کنار همدیگر قرار می گیرند, لذا برای نمایش (ممیز) در گوشه راست و پایین این قطعه یک دیود نورانی دیگری را با علامت اختصاری dp نامیده می شود, در نظر گرفته اند که پایه مخصوص به خود را نیز دارد.
سون سگمنت کاتد مشترک
(کاتد = منفی) یعنی سون سگمنتی که پایه مشترک آن به خط منفی تغذیه مدار وصل می شود و برای روشن شدن هر کدام از سگمنت های دیگر, باید از ولتاژ مثبت استفاده شود.
سون سگمنت آند مشترک
(آند = مثبت) یعنی سون سگمنتی که پایه مشترک آن به خط مثبت تغذیه مدار وصل می شود و برای روشن شدن هر کدام از سگمنت های دیگر, باید از ولتاژ منفی استفاده شود.
نکته : ولتاژ کاری سون سگمنت های معمولی, حداقل 3 ولت و حداکثر 5 ولت می باشد و بیشتر از این باعث سوختن و خرابی آن خواهد شد.
نکته : برای جلوگیری از خرابی و فرسودگی سون سگمنت, بهتر است در مسیر تغذیه آن از یک مقاومت محدود کننده جریان مانند 56 اهم تا 330 اهم استفاده شود.
توجه : همانطور که گفته شد در این پروژه برای نمایش ساعت و تاریخ از یک سون سگمنت مالتی پلکس چهار رقمه آند مشترک استفاده شده است, از آنجا که در پروژه های گذشته در این سایت به صورت کامل در مورد سون سگمنت های مولتی پلکس بحث شده و نحوه راه اندازی آن به صورت کامل شرح داده شده است از تکرار دوباره مطالب گذشته خودداری می کنیم. همچنین همواره شما دوستان عزیز می توانید از طریق لینک زیر با ساختمان و نحوه راه اندازی سون سگمنت های مولتی پلکس به صورت کامل آشنا شوید.
ویدئو ضبط شده از عملکرد مدار
در زیر یک ویدئو از نحوه عملکرد پروژه ساخت ساعت دیجیتال با قابلیت تعین زمان هشدار و نمایش تاریخ در سون سگمنت توسط میکروکنترلر AVR ضبط شده است, که می توانید برای درک بیشتر از نحوه عملکرد پروژه به صورت آنلاین مشاهده و یا از انتهای همین پست دانلود نمائید.
نقشه شماتیک پروژه ساعت دیجیتال با قابلیت اعلام هشدار و نمایش تاریخ
در این پروژه برای رسیدن به زمان دقیق از کریستال 32768Hz استفاده شده است که در بین فروشندگان قطعات الکترونیکی به کریستال ساعت معروف است. همچنین از آنجایی که حداکثر جریان قابل تحمل هر پایه از میکروکنترلر AVR حداکثر 30 میلی آمپر است به همین دلیل نمی توانیم پایه های سون سگمنت را به طور مستقیم به میکروکنترلر AVR متصل کنیم به همین جهت برای تامین ولتاژ مثبت 4 پایه مشترک سون سگمنت مولتی پلکس از ترانزیستور NPN به شماره 2N3904 و برای تامین ولتاژ منفی پایه های a,b,c,d,e,f,g سون سگمنت از تراشه ULN2804 که یک یک آی سی راه انداز منفی با جریان قابل تحمل 500 میلی آمپری می باشد استفاده کرده ایم.
برنامه نوشته شده در نرم افزار BASCOM-AVR به زبان بیسیک BASIC
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 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 |
$regfile = "m32def.dat" $crystal = 1000000 '************************************************************************** Time Config Timer2 = Timer , Async = On , Prescale = 32 Enable Interrupts Enable Ovf2 On Ovf2 Clock Start Timer2 '****************************************************************** Config Input Config Pind.4 = Input 'SW1 Config Pind.5 = Input 'SW2 '***************************************************************** Config Output Config Porta = Output 'Anod Seven Segment Config Portb = Output 'A,B,C,D,E,F,G,DP, Seven Segment Config Portd.6 = Output 'Buzzer '******************************************************************* Alias Input Sw1 Alias Pind.4 Sw2 Alias Pind.5 '****************************************************************** Alias Output Buzzer Alias Portd.6 Buzzer = 0 '**************************************************************** Dim Var As ... Dim Dp As Bit Dim S As Byte Dim M As Byte Dim H As Byte Dim Key As Bit Dim M_a As Byte Dim H_a As Byte Dim Day As Byte Dim Mon As Byte Dim Tik As Byte Dim Var As Byte Dim Alarm As Bit Dim Audio As Byte Dim _mode As Byte Dim Var1 As String * 2 Dim Var_segment_1_2 As Byte Dim Var_segment_3_4 As Byte Dim Segment_1_2 As String * 2 Dim Segment_3_4 As String * 2 Dp = 0 : S = 0 : M = 0 : H = 0 : Key = 0 : H_a = 24 : M_a = 0 : Day = 1 : Mon = 1 Tik = 0 : Alarm = 0 : Audio = 0 : _mode = 0 Gosub Main '******************************************************************** Sub [Meno] Main: Do '''''''''''''''''''''''''''''''''''''''''''''''''''Change Mode With SW2 If Sw2 = 1 And Key = 0 Then Key = 1 Incr _mode If _mode > 6 Then _mode = 0 End If '''''''''''''''''''''''''''''''''''''''''''''''''''INCR VAR With SW1 If Sw1 = 1 And _mode = 0 And Key = 0 Then Key = 1 : _mode = 7 End If If Sw1 = 1 And _mode = 1 And Key = 0 Then Key = 1 Incr M End If If Sw1 = 1 And _mode = 2 And Key = 0 Then Key = 1 Incr H End If If Sw1 = 1 And _mode = 3 And Key = 0 Then Key = 1 Incr Day End If If Sw1 = 1 And _mode = 4 And Key = 0 Then Key = 1 Incr Mon End If If Sw1 = 1 And _mode = 5 And Key = 0 Then Key = 1 Incr M_a End If If Sw1 = 1 And _mode = 6 And Key = 0 Then Key = 1 Incr H_a End If If Sw1 = 0 And _mode = 7 Then _mode = 0 If Sw1 = 0 And Sw2 = 0 And Key <> 0 Then Key = 0 '''''''''''''''''''''''''''''''''''''''''''''''''''Clock If S > 59 Then S = 0 Incr M End If If M > 59 Then M = 0 Incr H End If If H > 23 Then H = 0 : M = 0 : S = 0 Incr Day End If '''''''''''''''''''''''''''''''''''''''''''''''''''DATE If Mon < 7 And Day > 31 Then Day = 1 Incr Mon End If If Mon > 6 And Day > 30 Then Day = 1 Incr Mon End If If Mon > 12 Then Mon = 1 : Day = 1 End If '''''''''''''''''''''''''''''''''''''''''''''''''''Clock Alarm If M_a > 59 Then M_a = 0 If H_a > 24 Then H_a = 0 '''''''''''''''''''''''''''''''''''''''''''''''''''Alarm If H_a = H And M_a = M Then Alarm = 1 Else If Alarm = 1 Then Alarm = 0 End If '''''''''''''''''''''''''''''''''''''''''''''''''''Mode If _mode = 0 Then Var_segment_1_2 = H Var_segment_3_4 = M End If If _mode = 1 Then Var_segment_1_2 = 99 Var_segment_3_4 = M End If If _mode = 2 Then Var_segment_1_2 = H Var_segment_3_4 = 99 End If If _mode = 3 Then Var_segment_1_2 = 99 Var_segment_3_4 = Day End If If _mode = 4 Then Var_segment_1_2 = Mon Var_segment_3_4 = 99 End If If _mode = 5 Then Var_segment_1_2 = 99 Var_segment_3_4 = M_a End If If _mode = 6 Then Var_segment_1_2 = H_a Var_segment_3_4 = 99 End If If _mode = 7 Then Var_segment_1_2 = Mon Var_segment_3_4 = Day End If Segment_1_2 = Str(var_segment_1_2) Segment_3_4 = Str(var_segment_3_4) If Len(segment_1_2) = 1 And Segment_1_2 <> "99" Then Porta = &B00000000 Portb = &B00000000 Waitus 100 Porta = &B00000001 Portb = Lookup(0 , _data) Waitus 2500 Porta = &B00000000 Portb = &B00000000 Waitus 100 Porta = &B00000010 Portb = Lookup(var_segment_1_2 , _data) Waitus 2500 END IF If Len(segment_1_2) = 2 And Segment_1_2 <> "99" Then Porta = &B00000000 Portb = &B00000000 Waitus 100 Var1 = Mid(segment_1_2 , 1 , 1) Var = Val(Var1) Porta = &B00000001 Portb = Lookup(var , _data) Waitus 2500 Porta = &B00000000 Portb = &B00000000 Waitus 100 Var1 = Mid(segment_1_2 , 2 , 1) Var = Val(var1) Porta = &B00000010 Portb = Lookup(var , _data) Waitus 2500 End If If Dp = 1 And _mode = 0 Then Porta = &B00000010 Portb = &B10000000 Waitus 2500 End If If Len(segment_3_4) = 1 And Segment_3_4 <> "99" Then Porta = &B00000000 Portb = &B00000000 Waitus 100 Porta = &B00000100 Portb = Lookup(0 , _data) Waitus 2500 Porta = &B00000000 Portb = &B00000000 Waitus 100 Porta = &B00001000 Portb = Lookup(var_segment_3_4 , _data) Waitus 2500 END IF If Len(segment_3_4) = 2 And Segment_3_4 <> "99" Then Porta = &B00000000 Portb = &B00000000 Waitus 100 Var1 = Mid(segment_3_4 , 1 , 1) Var = Val(Var1) Porta = &B00000100 Portb = Lookup(var , _data) Waitus 2500 Porta = &B00000000 Portb = &B00000000 Waitus 100 Var1 = Mid(segment_3_4 , 2 , 1) Var = Val(var1) Porta = &B00001000 Portb = Lookup(var , _data) Waitus 2500 End If Loop Return '******************************************************************* Sub [Clock] Clock: '''''''''''''''''''''''''''''''''''''''''''''''''''Sec Incr Tik If Tik >= 4 Then Tik = 0 Incr S Toggle Dp End If '''''''''''''''''''''''''''''''''''''''''''''''''''Play OR Stop Alarm If Alarm = 1 And Audio < 5 Then Incr Audio If Audio = 1 Then Buzzer = 1 If Audio = 2 Then Buzzer = 0 If Audio = 3 Then Buzzer = 1 If Audio = 4 Then Buzzer = 0 If Audio = 5 Then Buzzer = 0 : Audio = 0 End If If Alarm = 0 And Audio <> 0 Then Buzzer = 0 : Audio = 0 End If Return End 'end program '*********************************************************************START DATA _data: Data &B0111111 '0=0 Data &B0000110 '1=1 Data &B1011011 '2=2 Data &B1001111 '3=3 Data &B1100110 '4=4 Data &B1101101 '5=5 Data &B1111101 '6=6 Data &B0000111 '7=7 Data &B1111111 '8=8 Data &B1101111 '9=9 Data &B0000000 '10=OFF Data &B1110111 '11=A Data &B1111001 '12=C Data &B1111001 '13=E Data &B1110001 '14=F Data &B1110110 '15=H Data &B1110011 '16=P Data &B0111000 '17=L Data &B0110111 '18=UP Data &B0111110 '19=DOWN '***********************************END PROJECT********************************* |
سلام این نویز سون سگمنتا که تو کیلیپه رو نمیشه ازبین برد ممنون
سلام دوست عزیز، شما می تونید با کم کردن زمان های تاخیر در برنامه پروژه و یا استفاده از کریستال خارجی بالاتر 8 مگاهرتز نویز را به صورت کامل از بین ببرید.
با عرض سلام و خستعه نباشد پروژه را در برنامه پروتوئوس شبیه سازی ک؟ردم جواب نداد ؟مشکل از کجاست
سلام.من پروژه رو دانلود کردم و شبیه سازی کردم ولی جواب نداد سون سگمت ها کلا عدد 8 رو نمایش میدن؟ایراد از کجا میشه باشه
سلام دوست عزیز
لطفا فایل شبیه سازی شده Proteus را به آدرس ایمیل ما که در صفحه تماس با ما قرار دارد ارسال کنید، تا پس از بررسی مشکل فایل شبیه سازی شده شما در نرم افزار Proteus را اعلام کنیم.
سلام.پروژه ای که شبیه سسازی کرده بودمو رو فرستادم .اگه میشه سریع تر جواب بدید چون لازم دارم این پروژه رو .
سلام خسته نباشید .سون سگمنتی که من خریدم 4تایی ساعتی هستش led های وسط رو باید با پایه ای A3وA4روشن کنم اما تو نقشه شماتیک شما به پایه A2 وصل کردید .چه طور میتونم وصل کنم؟
سلام دوست عزیز، در برنامه پروژه شرط If Dp = 1 And _mode = 0 Then را بیابید و تغیرات لازم را اعمال کنید.
سلام خسته نباشید می خواستم ببینم سون سگمت پروژه چه آند مشترک هست یا کاتد مشترک برای من آند مشترک هستش اصلا معلوم نیست چی نشون میده ؟
سلام دوست عزیز
باید از سون سگمنت آند مشترک استفاده کنید، پیشنهاد می کنم ابتدا از صحت اتصال سون سگمنت به میکرو مطمئن شوید و سپس چک کنید ببینید میکروکنترلر مورد استفاده شما بر روی کریستال داخلی 1 مگاهرتز تنظیم شده است یا خیر. یادتان باشد حتما باید فیوز بیت JTAG را غیر فعال کنید و کریستال ساعت را به پایه های PORTC.6 و PORTC.7 متصل نمائید.
سلام چرا تو شبیه سازی پروتیوس همش سون سگمنت عدد 8 رو نشون میدن
سلام دوست عزیز
برای اینکه بتونید این پروژه رو در Proteus شبیه سازی کنید باید زمان های تاخیر در برنامه رو ویرایش کنید.
سلام ببخشیدشماتیک مدار کدام قسمت هست
سلام دوست عزیز
شماتیک پروژه درون فایل پیوست پروژه قرار دارد، بعد از دانلود فایل پروژه می توانید آنرا مشاهده کنید.
سلام وقت بخیر اگر بخوام از باطری به عنوان منبع تغذیه استفاده کنم چه باطری مورد نیازه و چه مدت دوام داره؟
تشکر