ساخت ساعت دیجیتال
در این بخش تیم الکترونیک و برنامه نویسی الکترونیک ۹۸, اقدام به طراحی و انتشار پروژه ای کاربردی و جذاب با عنوان, نمایش ساعت و دقیقه روی سون سگمنت با قابلیت تنظیم 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 رو هم بذارین؟؟؟؟
سلام دوست عزیز
خوشحالیم که پروژه مورد رضایت شما بوده، به امید خدا در آینده نزدیک پروژه های از این قبیل به زبان C نیز در سایت منتشر خواهد شد.
خیلی ممنون از شما
ولی من امشب لازم دارم کد C این برنامه رو
براتون مقدور نیست امشب کدش رو بمن بدین؟؟؟
سلام خیلی ممنون .عالی بود . یه سوال داشتم چرا ساعتی که با این برنامه نوشتم هر دو ساعت حدود بیست ثانیه جلو میوفته ؟ برنامه رو با usb isp ,وبا برنامه extreme burner ریختم توی m8 کریستالو هم 32768 گزاشتم
سلام دوست عزیز
ساعت هایی که با کریستال ساعت توسط میکروکنترلر طراحی می شوند بسیار بسیار دقیق می باشند، معمولا مشکلات این چنینی می تواند به دلیل وجود نویز در مدار رخ دهد، که معمولا منبع این نویزها در مدار، استفاده از منابع تغذیه بی کیفیت است. برای اطمینان از کیفیت منبع تغذیه استفاده شده می توانید یکبار مدار را با باتری راه اندازی کنید و بررسی کنید که با استفاده از باتری نیز ساعت جلو می افتد یا خیر.
سلام جناب اکبری ممنون که وقت گزاشتید..من با باتری هم تست کردم .یه m8 دیگه هم خریدم تست کردم با کریستال جدید ولی بازم دقیقا همون طوره . منظور از قابلیت rtcقابل تنظیم چیه؟ نمیشه چیزی رو داخل برنامه کمو زیاد کنیم که این مشکل حل شه.
سلام دوست عزیز
تنها دلیل جلو یا عقب ماندن ثانیه می تواند به دلیل وجود نویز در مدار باشد، آیا در نرم افزار شبیه ساز نیز زمان عقب یا جلو می افتد؟
منظور از RTC قابل تنظیم، همان تنظیم Prescale می باشد که در تایمرهای میکروکنترلرهای avr در دسترس است و برای کریستال ساعت در برنامه باید بر روی 128 باشد.
البته برای رفع این مشکل می توانید در برنامه تغییراتی ایجاد کنید که مثلا هر دو ساعت 20 ثانیه از مقدار زمان کم کند.
سلام جناب اکبری در مورد این برنامه که جلو میوفته تحقیق کردم سایت picpars چند نفر مثل من همین مشکلو داشتن .الان برا حلش دقیقا باس چکار کرد.؟
سلام دوست عزیز
آیا این مشکل در شبیه ساز نیز وجود دارد؟
سلام .داخل نرم افزار 72ثانیه یک دقیقه رویه سونسگمنت ثبت میشه
سلام دوست عزیز
دقیقا متوجه موضوع نشدم لطفا کمی کاملتر توضیح دهید
یه مساله دیگه هم اینکه فرکانس میکرو تویه برنامه 8000000 هستش و داخل برنامه سونسگمنتا درست کار میکنن.ولی در عمل چشمک میزنن. وزمان بازم جلو میفته . من گزاشتمش 1000000 درست شد ولی مشکل زمان حل نشد.
لطفا توجه داشته باشید در برنامه مقدار فرکانس کریستال هر مقدار است باید هنگام پروگرام کردن میکروکنترلر و یا نرم افزارهای شبیه ساز نیز همان مقدار را در تنظیمات فیوزهای مربوط به کریستال تنظیم کنید، در صورت عدم تنظیم صحیح این موضوع ممکن است با مشکل پرش سون سگمنت ها و عقب و یا جلو افتادن زمان مواجه خواهید شد.
سلام اقای اکبری.. خیلی ممنون .مشکل حل شد.ایراد در فیوز بیت ها بود.من هر جور که تنظیمشون میکردم هیچ تغییری در عملکرد ساعت مشاهده نمیشد.تا بلاخره بعداز اخرین راهنمایی شما. همه فیوز بیتها رو default کردم بعد دوباره تنظیمشون کردم . یک دنیا ممنونم . میشه ثانیه شمارشم راه بیفته؟
سلام دوست عزیز
بسیار خوشحالم که مشکلتان برطرف شد
بله به راحتی می توانید ثانیه شمار نیز به برنامه اضافه کنید، برای این منظور کافی است از یک سون سگمنت 6 رقمه استفاده کنید و همانند برنامه نمایش دقیقه و یا ساعت چند خط برنامه نیز برای اضافه کردن ثانیه نیز بنویسید.