ايران ويج

نسخه‌ی کامل: مشکل عجیب با برنامه بسکام
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام به همه عزیزان

یک برنامه بسکام هست که مربوط به atmega32 و ds1307 هستش که خیلی کوتاه و ابتداییه و فقط شامل خوندن ثانیه و دقیقه و ساعت میشه .

اما مشکل اینجاست که به محض اینکه میخوام مقادیر رو بصورت مرتب شده (format شده) روی lcd نمایش بدم برنامه هنگ میکنه و بعد از آزمایش و حذف
واضافه کردن معلوم شد مشکل از این خط هست(با برداشتن این خط مشکل رفع میشه)

'Hourr = Format(hourr , "00") : Minu = Format(minu , "00") : Seco = Format(seco , "00")
در صورتی که این خط رو اضافه کنم صفحه lcd هیچی نشون نمیده و حتی cls هم نمیشه که معلومه تو همین خط هنگ میکنه .

(توی مدار از پایه sqw/out رو بصورت 1 هرتز تنظیم کردم و به عنوان اینتراپت دهنده به پایه اینتراپت 0 مگا32 دادم )

این هم کل برنامه :

کد:
Enable Interrupts
Enable Int0
Config Int0 = Falling
On Int0 Main
Config Sda = Portd.6
Config Scl = Portd.5
Dim _sec As Byte
Dim _min As Byte
Dim _hour As Byte
Dim Seco As String * 2
Dim Minu As String * 2
Dim Hourr As String * 2
Const Ds1307w = 208
Const Ds1307r = 209


I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte 0
I2cwbyte 0
I2cwbyte 0
I2cwbyte 0
I2cwbyte 0
I2cwbyte 0
I2cwbyte 0
I2cwbyte 16
I2cstop

Do : Loop
End


Main:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Nack
I2cstop
Waitms 10
_hour = Makedec(_hour)
_min = Makedec(_min)
_sec = Makedec(_sec)
Hourr = Str(_hour)
Minu = Str(_min)
Seco = Str(_sec)
'Hourr = Format(hourr , "00") : Minu = Format(minu , "00") : Seco = Format(seco , "00")
Cls : Lcd Hourr ; ":" ; Minu ; ":" ; Seco
Return
بین فرمان DO و LOOP باید یه سر فرمان داشته باشین و گرنه یه حلقه بینهایت بوجود میاد که باقی برنامه رو اجرا نمیکنه
نقل قول: بین فرمان DO و LOOP باید یه سر فرمان داشته باشین و گرنه یه حلقه بینهایت بوجود میاد که باقی برنامه رو اجرا نمیکنه

نه مشكلي ندارهه ، برنامه ي ايشون بقيه اي ندارهه ، سيستم اجراش وقفه اي هست.

-----------------------
نقل قول: اما مشکل اینجاست که به محض اینکه میخوام مقادیر رو بصورت مرتب شده (format شده) روی lcd نمایش بدم برنامه هنگ میکنه و بعد از آزمایش و حذف
واضافه کردن معلوم شد مشکل از این خط هست(با برداشتن این خط مشکل رفع میشه)

'Hourr = Format(hourr , "00") : Minu = Format(minu , "00") : Seco = Format(seco , "00")

تا حالا سعي نكرم متغيير از نوع String رو روي LCD نشون بدم !
نمي دونم درست هست يا نه !!
در help بسكام هم فقط متغيير عددي و Constant در مثال نمونه براي دستور LCD امتحان كردهه.
شما يه برنامه ي معمولي بنويس و سعي كن يه متغيير String رو روي LCD نشون بدي ، ببين اصلا جواب مي دهه يا نه .
خبرش رو بدهه تا ادامه رو بگم.

موفق باشي.
(۰۶-مرداد-۱۳۹۱, ۰۱:۵۰:۵۷)sharin نوشته است: [ -> ]
نقل قول: بین فرمان DO و LOOP باید یه سر فرمان داشته باشین و گرنه یه حلقه بینهایت بوجود میاد که باقی برنامه رو اجرا نمیکنه

نه مشكلي ندارهه ، برنامه ي ايشون بقيه اي ندارهه ، سيستم اجراش وقفه اي هست.

-----------------------
نقل قول: اما مشکل اینجاست که به محض اینکه میخوام مقادیر رو بصورت مرتب شده (format شده) روی lcd نمایش بدم برنامه هنگ میکنه و بعد از آزمایش و حذف
واضافه کردن معلوم شد مشکل از این خط هست(با برداشتن این خط مشکل رفع میشه)

'Hourr = Format(hourr , "00") : Minu = Format(minu , "00") : Seco = Format(seco , "00")

تا حالا سعي نكرم متغيير از نوع String رو روي LCD نشون بدم !
نمي دونم درست هست يا نه !!
در help بسكام هم فقط متغيير عددي و Constant در مثال نمونه براي دستور LCD امتحان كردهه.
شما يه برنامه ي معمولي بنويس و سعي كن يه متغيير String رو روي LCD نشون بدي ، ببين اصلا جواب مي دهه يا نه .
خبرش رو بدهه تا ادامه رو بگم.

موفق باشي.

نه مشکلی نداره متغیر نوع بایتی تعریف کردم و درست مثل همین برنامه تبدیلش کردم به استرینک و فرمتش کردم بدون هیچ مشکلی رو lcd نمایش داد.
OK. در تستي كه زديد در روال وقفه كه اين عمليات رو انجام نداديد؟
شما همين كدهاي روال وقفه رو بذار در do_loop در تنه ي اصلي برنامه.
در روال وقفه i=1 بشه و برگرده.
در تنه ي اصلي برنامه داخل DO_Loop يه شرط بذاريد كه اگر i=1 اون موقع اون كارهارو انجام بده و در آخريد خط i=0 و END IF .
اين رو هم تست كنيد و خبرش رو بديد. ( در ضمن هر مرحله كه تست مي زنيد كدها رو بذاريد كه چك بشه )
(۰۶-مرداد-۱۳۹۱, ۱۷:۵۶:۳۴)sharin نوشته است: [ -> ]OK. در تستي كه زديد در روال وقفه كه اين عمليات رو انجام نداديد؟
شما همين كدهاي روال وقفه رو بذار در do_loop در تنه ي اصلي برنامه.
در روال وقفه i=1 بشه و برگرده.
در تنه ي اصلي برنامه داخل DO_Loop يه شرط بذاريد كه اگر i=1 اون موقع اون كارهارو انجام بده و در آخريد خط i=0 و END IF .
اين رو هم تست كنيد و خبرش رو بديد. ( در ضمن هر مرحله كه تست مي زنيد كدها رو بذاريد كه چك بشه )

ممنون از کمکتون مشکل از کامپایلر بود من با ورژن های قدیمی کار میکردم

امروز با ورژن 2 کامپایل کردم مشکل حل شد. Happy
ا سلام
من یه مشکل در برنامه نویسی بسکام avr دارم اگه کسی بتونه مشکل من رو حل کنه ممنونش میشم.12:
من یه پروژه ای دارم که میخوام یه سری اطلاعات رو نگه داره و با قطع برق(ریست میکرو) اطلاعاتش پاک نشه .... برای این کار هم رفتم از eeprom استفاده کردم که بایدفایل eep رو که bascom در خروجیش میده رو باید رو میکرو پروگرام کنم. ولی متاسفاته وقتی که کامپیلر میکنمbascom یه سری فایل رو میده(hex,...) ولی فایل eep رو بهم نمیده یه نمونه برنامه در هلپ بسکام گذاشته بود که وقتی اون رو کامپایل میکردم eep رو بهم میداد...
تو اینترنت هم یه سری نمونه گذاشته بود که اونها هم فایل eep نمیداد...
نمیدونم چی کار کنم . شاید یه سری چیزا رو رعایت نکرده ام .... البته بسکام هم هیچ اروری نمیده
من خواهش میکنم از کسایی که با ای حافظه کار کرده کند و جئاب گرفته اند و اطلاعاتی در این مورد دارند به من کمک کنند12FD:s
(۱۳-شهریور-۱۳۹۱, ۲۲:۵۱:۵۳)alinavidy نوشته است: [ -> ]ا سلام
من یه مشکل در برنامه نویسی بسکام avr دارم اگه کسی بتونه مشکل من رو حل کنه ممنونش میشم.12:
من یه پروژه ای دارم که میخوام یه سری اطلاعات رو نگه داره و با قطع برق(ریست میکرو) اطلاعاتش پاک نشه .... برای این کار هم رفتم از eeprom استفاده کردم که بایدفایل eep رو که bascom در خروجیش میده رو باید رو میکرو پروگرام کنم. ولی متاسفاته وقتی که کامپیلر میکنمbascom یه سری فایل رو میده(hex,...) ولی فایل eep رو بهم نمیده یه نمونه برنامه در هلپ بسکام گذاشته بود که وقتی اون رو کامپایل میکردم eep رو بهم میداد...
تو اینترنت هم یه سری نمونه گذاشته بود که اونها هم فایل eep نمیداد...
نمیدونم چی کار کنم . شاید یه سری چیزا رو رعایت نکرده ام .... البته بسکام هم هیچ اروری نمیده
من خواهش میکنم از کسایی که با ای حافظه کار کرده کند و جئاب گرفته اند و اطلاعاتی در این مورد دارند به من کمک کنند12FD:s

برای حافظه eeromمشکل اساسی سر ادرس خونه حافطه است از ای استفاده کنید
کد:
Dim I As Byte
Dim I_eerom As Eram Byte

Gosub Eeprom_load
Gosub Display_lcd_i

Do
   If Key_up = 0 Then
      Incr I
      Gosub Eeprom_save
      Gosub Display_lcd_i
   End If
   If Key_down = 0 Then
      Decr I
      Gosub Eeprom_save
      Gosub Display_lcd_i
   End If
   Waitms 300
Loop

End


'*********************************************
Display_lcd_i:
   Cls : Lcd "I= " ; I
Return

'*********************************************
Eeprom_load:
   I = I_eerom
Return

'*********************************************
Eeprom_save:
   I_eerom = I
Return