باطريم(آخرش نفهميديم با كدوم ت نوشته ميشه ! :دي) از هر چيزي محكم تر سر جاشه و كاملا سالمه !
2 تا آي سي هم عوض كردم همين نتيجش بود احتمالا بايد با سومي خوب بشه ( تا 3 نشه ، ...)
باطريم(آخرش نفهميديم با كدوم ت نوشته ميشه ! :دي) از هر چيزي محكم تر سر جاشه و كاملا سالمه !
2 تا آي سي هم عوض كردم همين نتيجش بود احتمالا بايد با سومي خوب بشه ( تا 3 نشه ، ...)
بعد از چند وقت برگشتم
روش فقط ايپرام و سنسور دما و ال سي دي و مكس232 هست + همين 1307
بعد از چند وقت برگشتم
خوب ای سی eeprom و ای سی 1307 روی یک خط باس i2c هستند دیگه درسته
ببینید درست نمی دونم ولی الان شما باید زمانی که خودتون ست ای سی 1307 میکنید درست کار کنه و زمانی که ست رو برداشتی و خواستی از ای سی بخونه دیگه کار نکنه الان شما eeprom رو جدا کن و یه بار امتحان کن باید درست کار کنه
واگه کار کرد فکر کنم باید ادرس دهی eeprom را عوض کنی تا تداخلی در باس اطلاعات صورت نگیره و یه همچین چیزایی
دوست عزیز الان دیگه برنامه تو بگذار شاید نکته ای رو شما رعایت نکردید
همه چيز درست بود ! يه سوتي خيلي بد داده بودم كه نميگم !
بعد از چند وقت برگشتم
مگه سوتی خنده داره...!!!
اصلا مگه خندوندن خلق خدا ایرادی داره.
یادته اولین پست من تو تایپیک تابلو روان رو دیدی ، میدونم کلی خندیدی ... (خودم هم رفتم دیدم ، کلی خندیدم)
بگو که میخام تلافی کنم
*** اللّهم عجّل لولیک الفرج ***
من خواستم يكم جو بدم ، شماها چرا باور كردين !
مدارم رو برد سوراخدار بود ، از پايه مثبت باطري بكاپ سيم كشيده بودم آورده بودم كنار پايه 3 آي سي 1307 ، اما يادم رفته بود وصل كنم ، همين !
بعد از چند وقت برگشتم
محكم بود ، اما من تو مدارش حواسم نبود و پايه مثبت باطري رو به پايه 3 آي سي وصل نكرده بودم !
حالا بگذريم كه كار مهم تر دارم
يه برنامه خيلي ساده واس تبديل تاريخ ميلادي به شمسي ميخوام
نمونه برنامه هايي كه ديده بودم همشون خيلي تعداد دستوراتش زياد بود و متاسفانه نميتونم اينقدر از وقت سي پي يو رو به اين اختصاص بدم ، يه برنامه بهينه با دستورات كم تو كدويژن يا بسكام(ترجيحا كدويژن) دارين واس ما بزارين تا 2 شب ديگه فاتحه نثار رفتگانتون كنيم ؟!
بعد از چند وقت برگشتم
من قبلا یه برنامه برای بسکام نوشتم. ولی سال کبیسه رو دقیق حساب نمی کنه ، یعنی اون نوع هر چهار سال 1 بار رو حساب می کنه.
میذارمش اینجا که همه استفاده کنن.
کد:'------------------------------------------------------------------------------------- ' In The Name Of GOD 'Topic : Miladi To Jalali 'Author : Morteza Rahimi Kordmahalle (MRK) 'Microcontroller : ATmega32 'Compiler : BASCOM 1.11.9.8 'Creation Date : August 20, 2010 (1389.05.29) 'Copyright : (C) 2010 By www.mrkelectronic.blogfa.com 'License : This Is A Free Firmware , Ver 1.00 '------------------------------------------------------------------------------------- $regfile = "m32def.dat" $crystal = 4000000 $hwstack = 42 $swstack = 16 $baud = 9600 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Configurations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , Rs = Portc.0 , E = Portc.1 Config Clock = Soft Config Date = Ymd , Separator = / Enable Interrupts '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Variable ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Dim I As Byte Dim J As Byte Dim Jday As Byte 'Jalali day output Dim Jmonth As Byte 'Jalali month output Dim Jyear As Word 'Jalali year output Dim Jdayofyear As Byte 'Jalali day of year Dim Myear As Word 'Miladi (Georgian) year Dim Mdayofyear As Word 'Miladi (Georgian) day of year Dim Mdayofmonth As Byte Dim Temp As Byte 'for mathematics calculations Dim Temp2 As Byte Dim Temp3 As Byte Dim Isleapyear As Bit Dim Getdate As String * 8 Dim Bmode As Byte : Bmode = 0 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Initialize ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Cursor Off Time$ = "23:59:55" '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Main program ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Do Getdateblock: Input "Please enter a date in YY/MM/DD format :" , Getdate Print Date$ = Getdate Temp = Len(getdate) If Temp < 8 Then Print " Erroe : your date isn't on the YY/MM/DD format" Print " for example 2010/9/19 must be enter in the 10/09/19 formate" Print Print Goto Getdateblock End If If Bmode = 0 Then Home Myear = _year Myear = Myear + 2000 Jyear = Myear - 621 '-------------------- leap year condition -------------------- Temp = Myear Mod 4 Temp2 = Myear Mod 100 Temp3 = Myear Mod 400 If Temp2 = 0 And Temp3 = 0 Then Isleapyear = 1 Locate 1 , 5 Lcd "year is leap" Elseif Temp = 0 And Temp2 <> 0 Then Isleapyear = 1 Locate 1 , 5 Lcd "year is leap" Else Isleapyear = 0 Locate 1 , 2 Lcd "year isn't leap" End If '------------------------------------------------------------- J = _month - 2 'Mdayofyear calculation {for example 2010/03/28 = (days of before months + 28)} For I = 0 To J Temp = Lookup(i , Months) Mdayofmonth = Temp + Mdayofmonth Next Mdayofyear = Mdayofmonth + _day If Isleapyear = 1 Then 'Miladi leap year so Jalali is leap too so the 1st of Farvardin is March 20 (3/20) 'Jdayofyear , Jmonth calculation 'in the leap year difference between 1st of Farvardin and 1st of Murch is 79 days Mdayofyear = Mdayofyear - 78 Jdayofyear = Mdayofyear If Jdayofyear > 186 Then 'from 1st month to end of 6th month is 186 days in the Jalali year Temp = Jdayofyear - 186 Temp2 = Temp / 30 Temp3 = Temp Mod 30 Jmonth = Temp2 + 7 Jday = Temp3 Else Temp = Jdayofyear / 31 Temp2 = Jdayofyear Mod 31 Jmonth = Temp + 1 Jday = Temp2 End If Elseif Isleapyear = 0 Then Mdayofyear = Mdayofyear - 79 Jdayofyear = Mdayofyear If Jdayofyear > 186 Then 'from 1st month to end of 6th month is 186 days in the Jalali year Temp = Jdayofyear - 186 Temp2 = Temp / 30 Temp3 = Temp Mod 30 Jmonth = Temp2 + 7 Jday = Temp3 Else Temp = Jdayofyear / 31 Temp2 = Jdayofyear Mod 31 Jmonth = Temp + 1 Jday = Temp2 End If End If End If Locate 2 , 1 Lcd "your date : " ; Getdate For I = 1 To 20 Locate 3 , I Lcd "*" Waitms 100 Next Locate 4 , 1 Lcd "Jalali Date:" ; Jyear ; "/" ; Jmonth ; "/" ; Jday Loop End '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Subroutines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Months: Data 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31
.
من قبلا یه برنامه برای بسکام نوشتم. ولی سال کبیسه رو دقیق حساب نمی کنه ، یعنی اون نوع هر چهار سال 1 بار رو حساب می کنه.
میذارمش اینجا که همه استفاده کنن.
کد:'------------------------------------------------------------------------------------- ' In The Name Of GOD 'Topic : Miladi To Jalali 'Author : Morteza Rahimi Kordmahalle (MRK) 'Microcontroller : ATmega32 'Compiler : BASCOM 1.11.9.8 'Creation Date : August 20, 2010 (1389.05.29) 'Copyright : (C) 2010 By www.mrkelectronic.blogfa.com 'License : This Is A Free Firmware , Ver 1.00 '------------------------------------------------------------------------------------- $regfile = "m32def.dat" $crystal = 4000000 $hwstack = 42 $swstack = 16 $baud = 9600 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Configurations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , Rs = Portc.0 , E = Portc.1 Config Clock = Soft Config Date = Ymd , Separator = / Enable Interrupts '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Variable ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Dim I As Byte Dim J As Byte Dim Jday As Byte 'Jalali day output Dim Jmonth As Byte 'Jalali month output Dim Jyear As Word 'Jalali year output Dim Jdayofyear As Byte 'Jalali day of year Dim Myear As Word 'Miladi (Georgian) year Dim Mdayofyear As Word 'Miladi (Georgian) day of year Dim Mdayofmonth As Byte Dim Temp As Byte 'for mathematics calculations Dim Temp2 As Byte Dim Temp3 As Byte Dim Isleapyear As Bit Dim Getdate As String * 8 Dim Bmode As Byte : Bmode = 0 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Initialize ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Cursor Off Time$ = "23:59:55" '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Main program ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Do Getdateblock: Input "Please enter a date in YY/MM/DD format :" , Getdate Print Date$ = Getdate Temp = Len(getdate) If Temp < 8 Then Print " Erroe : your date isn't on the YY/MM/DD format" Print " for example 2010/9/19 must be enter in the 10/09/19 formate" Print Print Goto Getdateblock End If If Bmode = 0 Then Home Myear = _year Myear = Myear + 2000 Jyear = Myear - 621 '-------------------- leap year condition -------------------- Temp = Myear Mod 4 Temp2 = Myear Mod 100 Temp3 = Myear Mod 400 If Temp2 = 0 And Temp3 = 0 Then Isleapyear = 1 Locate 1 , 5 Lcd "year is leap" Elseif Temp = 0 And Temp2 <> 0 Then Isleapyear = 1 Locate 1 , 5 Lcd "year is leap" Else Isleapyear = 0 Locate 1 , 2 Lcd "year isn't leap" End If '------------------------------------------------------------- J = _month - 2 'Mdayofyear calculation {for example 2010/03/28 = (days of before months + 28)} For I = 0 To J Temp = Lookup(i , Months) Mdayofmonth = Temp + Mdayofmonth Next Mdayofyear = Mdayofmonth + _day If Isleapyear = 1 Then 'Miladi leap year so Jalali is leap too so the 1st of Farvardin is March 20 (3/20) 'Jdayofyear , Jmonth calculation 'in the leap year difference between 1st of Farvardin and 1st of Murch is 79 days Mdayofyear = Mdayofyear - 78 Jdayofyear = Mdayofyear If Jdayofyear > 186 Then 'from 1st month to end of 6th month is 186 days in the Jalali year Temp = Jdayofyear - 186 Temp2 = Temp / 30 Temp3 = Temp Mod 30 Jmonth = Temp2 + 7 Jday = Temp3 Else Temp = Jdayofyear / 31 Temp2 = Jdayofyear Mod 31 Jmonth = Temp + 1 Jday = Temp2 End If Elseif Isleapyear = 0 Then Mdayofyear = Mdayofyear - 79 Jdayofyear = Mdayofyear If Jdayofyear > 186 Then 'from 1st month to end of 6th month is 186 days in the Jalali year Temp = Jdayofyear - 186 Temp2 = Temp / 30 Temp3 = Temp Mod 30 Jmonth = Temp2 + 7 Jday = Temp3 Else Temp = Jdayofyear / 31 Temp2 = Jdayofyear Mod 31 Jmonth = Temp + 1 Jday = Temp2 End If End If End If Locate 2 , 1 Lcd "your date : " ; Getdate For I = 1 To 20 Locate 3 , I Lcd "*" Waitms 100 Next Locate 4 , 1 Lcd "Jalali Date:" ; Jyear ; "/" ; Jmonth ; "/" ; Jday Loop End '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Subroutines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Months: Data 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31
.
البته اینم بگم که زیاد به قیافش نگاه نکن. چیز خاصی نداره.
اگه خودت تقویمو باز کنی می تونی یه دونه بنویسی. شما اصلا با این کد کاری نداری. فقط از ایش بعنوان یک تابع استفاده می کنی.
.
آقا يه چيزي
من 24 ساعت ميشه حدودا كه باطري انداختم توش
تو اين 24 ساعت 2 ثانيه عقب افتاده ، چرا ؟!
بعد از چند وقت برگشتم
سلام
من چندوقت پیش با این ای سی کار می کردم برای رفع این مشکل موارد زیر باید رعایت شوند
1-اصلی بودن ای سی
2-اصلی بودن کریستال
3-گرم نشدن کریستال هنگام لحیم کاری
4-اتصال بدنه کریستال به منفی مدار(البته نه با لحیم بلکه با یک سیم که دور کریستال حلقه میکنیم و به منفی متصل می کنیم)
5-طبق دیتا شیت یک حلقه بایستی دور پایه های کریستال متصل به آی سی روی سمت pcb رسم و به منفی متصل گردد.(طبق عکس ضمیمه)
6-البته بعضی مواقع می تونه از نحوه برنامه نویسی هم باشه
7-مرغوب و نو بودن باتری هم می تونه دخیل باشد
دوست عزیزمون نکات رو گفتم برای اینکه تکمیل بشه من عکس زیر رو میگذارم یه نیگاه بهش بندازید.
همه چی دستتون میاد
دو تا نکته هم من بگم کریستال اصلی 32768 خیلی کوچیکه و بر روی اون عدد 32768 حکاکی شده
ای سی ds1307 از اون 1000 تومنی هاش بگیر این 500 تومنی ها مفتش گرونه مشخصه اش اینه که روش با خط سفید نوشته مثل توی عکس
ویرایش توسط Ma3ood : 13-06-2012 در ساعت 23:04
سلام خدمت دوستان عزیز
من برنامم رو با کد ویژن نوشتم ولی نمیدونم چرا بعد از 20 ساعت چرت و پرت تحویل میده کسی همچین مشکلی نداشته