ساخت ساعت دیجیتال
در این بخش تیم الکترونیک و برنامه نویسی الکترونیک ۹۸, اقدام به طراحی و انتشار پروژه ای کاربردی و جذاب با عنوان, نمایش ساعت و دقیقه روی سون سگمنت با قابلیت تنظیم RTC, برای شما علاقه مندان به پروژه های میکروکنترلر AVR کرده است. در این پروژه بر روی یک سون سگمنت مالتی پلکس چهار رقمی ساعت و دقیقه نمایش داده می شود، و هر ثانیه LED نقطه (DP) روشن و خاموش می گردد. همچنین توسط دو شستی می توان زمان را تغییر داد.
نقشه شماتیک پروژه
برای آنکه ساعت دیجیتالی با دقت بالایی داشته باشیم از کریستال 32768Hz یا همان کریستال ساعت برای فعال سازی واحد RTC استفاده می کنیم. دقت این تایمر به مراتب بالاتر از دستورات تاخیری است.
پس از پیکربندی RTC با دستور Config Clock = Soft, Gosub = Sectic و Timer$، ساعت داخلی میکروکنترلر ATmega8 با زمان اولیه 23:22 شروع به کار می کند. افزایش زمان با تابع Sub Keyscan انجام می شود. تابع Sub Send مربوط به ارسال معادل باینری زمان روی سون سگمنت (7-Segment) می باشد.
همچنین فایل شبیه ساز این پروژه نیز که با نرم افزار Proteus 8 Professional طراحی شده، پیوست فایل پروژه جهت دانلود قرار داده شده است، که می تواند شما را در یادگیری هر چه بهتر مدار و نحوه عملکرد آن یاری نماید.
برنامه میکروکنترلر به زبان بیسیک 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 |
$regfile = "m8def.dat" $crystal = 8000000 'Internal RC $hwstack = 64 $swstack = 64 $framesize = 64 '---------------------------------------RTC Config Clock = Soft , Gosub = Sectic Enable Interrupts Time$ = "23:22:10" '---------------------------------------I/O Config Portd = Output 'A-G (Data) Config Portc = Output 'Comm. Anode Config Pinb.0 = Input 'Hour Key Config Pinb.1 = Input 'Minute Key Config Pinb.2 = Output 'Blink Sec '---------------------------------------Set Pullup Resistor For Setting Key's Set Portb.0 Set Portb.1 '---------------------------------------Aliases Dataport Alias Portd Comm Alias Portc Hour_key Alias Pinb.0 Min_key Alias Pinb.1 Second_led Alias Portb.2 '---------------------------------------Variables Dim Temp As Byte Dim Temp2 As Byte Dim Scnd As Byte Dim Rtc_run As Byte Dim S As Bit Dim Dp As Bit '---------------------------------------Declaration Declare Sub Keyscan Declare Sub Refresh Declare Sub Send Declare Sub Wait4key Declare Sub Blink_sec '---------------------------------------Wait 4 RTC Start Comm = &H0F 'Prompt Do If Rtc_run > 0 Then Exit Do Loop '---------------------------------------Main Prog Start Here: Do Call Keyscan Call Refresh Call Blink_sec Loop End '--------------------------------------- Sub Keyscan If Hour_key = 0 Then Incr _hour If _hour > 23 Then _hour = 0 Call Wait4key End If If Min_key = 0 Then Incr _min If _min > 59 Then _min = 0 Call Wait4key End If End Sub '--------------------------------------- Sub Refresh Comm = &B1000 : Dp = 0 : Temp = _hour \ 10 : Call Send Comm = &B0100 : Dp = 1 : Temp = _hour Mod 10 : Call Send Comm = &B0010 : Dp = 0 : Temp = _min \ 10 : Call Send Comm = &B0001 : Dp = 0 : Temp = _min Mod 10 : Call Send End Sub '--------------------------------------- Sub Send Dataport = Lookup(temp , Segdata) If Dp = 1 Then Portd.7 = S Else Portd.7 = 1 End If Waitms 4 Dataport = &HFF End Sub '--------------------------------------- Sub Wait4key For Temp2 = 1 To 25 Call Refresh Next End Sub '--------------------------------------- Sub Blink_sec Incr Scnd If Scnd > 63 Then Scnd = 0 If Scnd > 0 And Scnd < 31 Then S = 1 Else S = 0 End If End Sub '--------------------------------------- Segdata: Data &B11000000 , &B11111001 , &B10100100 , &B10110000 Data &B10011001 , &B10010010 , &B10000010 , &B11111000 Data &B10000000 , &B10010000 '--------------------------------------- Sectic: Incr Rtc_run Return |
سلام دوست عزیز
به احتمال زیاد مشکل از عدم اتصال و تعریف صحیح کریستال ساعت در برنامه شبیه ساز باشد.
من با زبان c برنامه ساعت نوشتم حجمش 2 کیلوبایت شد برنامه شما 90کیلو بایت!!!
سلام خیلی عالیه فقط هر 24ساعت حدود 6ثانیه عقب میوفته دلیلش چی میتونه باشه کریستالم چند بار عوض کردم
سلام دوست عزیز
نباید این اتفاق رخ دهد، چراکه کریستال ساعت بسیار دقیق است، این مشکل به احتمال بسیار زیاد مربوط به نویزهای منابع تغذیه و یا محیط است لطفا بدنه کریستال را به منفی تغذیه متصل کنید و اگر مشکل برطرف نشد منبع تغذیه ای که از آن استفاده می کنید را تعویض کنید و یا از باتری استفاده کنید.
سلام خسته نباشین
من مدار رو روی بردبرد پیاده کردم ولی فقط 8888 رو نمایش میده
میتونه مشکل از کریستال باشه
اخه من از کریستال سر در نمیارم منظورتون از کریستال خارجی و داخلی چه چجوری باید تنظیمشون کنم
و اینکه من در حال حاضر روی برد برد از کریستال استفاده نکردم
میشه مشکل از اینجا باشه
سلام دوست عزیز
عملکرد این پروژه کاملا وابسته به کریستال ساعت است و اگر از کریستال استفاده نکنید به هیچ عنوان پروژه شما عمل نخواهد کرد و زمان محاسبه نخواهد شد، شما باید یک کریستال با مقدار 32768Hz تهیه کنید و مطابق نقشه شماتیک به پروژه متصل کنید.
همچنین در هنگام پروگرام کردن میکروکنترلر باید وضعیت فیوزبیت های مربوط به کریستال را بر روی مقدار 8 مگاهرتز داخلی تنظیم و سپس فیوزبیت ها را پروگرام کنید.
سلام خسته نباشین
من مدار رو بستم روی بردبرد و از کریستال ساعت ا ستفاده کردم
ساعت رو دقیق نمایش میده ولی 7segmet ها خاموش روشن میشن
Wait ms رو تغییر دادم گذاشتم روی 1 بهتر شد ولی هنوزم مشکل خاموش روشن شدن 7segmant برطرف نشده
سلام دوست عزیز
این مشکل به این علت رخ داده است که شما در هنگام پروگرام کردن میکروکنترلر، مقدار فیوزبیت های مربوط به کریستال را بر روی 8 مگاهرتز داخلی تنظیم و پروگرام نکرده اید.
واینکه ممنون از سایت خوبتون
با سپاس از لطف و محبت شما دوست عزیز
ممنون از پاسخ سریع شما فکر نمیکردم به این سرعت پیامم رو جواب بدین
و اینکه طبق فرمایش شما در هنگام پروگرام کردن فیوز بیت ها رو
CKSEL0=0 : CKSEL1=0 : CKSEL2=1 : CKSEL3=0 گذاشتم اما تغییر نکرده
لطفا زمانی که در برنامه تغییر داده بودید را به حالت اول خود بازگردانید و اینبار فیوزبیت ها را بر روی یک مگاهرتز داخلی تنظیم نمائید و دوباره این موضوع را آزمایش کنید.