ايران ويج

نسخه‌ی کامل: کانتر در بسکام
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام خدمت دوستان عزیز
بنده یک برنامه کانتر دارم که قراره تعداد قطع و وصل میکروسویچ من رو بشماره و به تعداد خاصی رسید یک پالس به من بده و  صفر بشه و دائم کار کنه فقط مشکلی که دارم با هر بار تحریک میکروسوئچ کانتر اعداد مختلفی میده و چندین عدد اضافه میکنه مثلا از روی 1 میپره روی 63 و این خلل ایجاد مبکنه برای من
به نظر شما راه حلش چیه در بسکام؟


کد php:
$regfile "m32def.dat"
$crystal 1000000
Config Lcd 
16 2
Config Lcdpin 
Pin Rs Portb.7 Portb.6 Db4 Portb.2 Db5 Portb.3 Db6 Portb.4 Db7 Portb.5
Config Timer1 
Counter Edge Falling

Config Portd.2 
Output
Counter1 
0
Dim A 
As Word
Portd.2 
0
Cls
Do
Counter1
Locate 1 
1
Lcd A
If 10 Then

Counter1 
0
Portd.2 
1
wait 1
Portd.2 
0
Cls

End 
If
Loop
End 
سلام
مهندس پایه میکرو  رو پول آپ کردین؟
(۰۹-اردیبهشت-۱۳۹۷, ۱۵:۵۰:۴۷)hadikh73 نوشته است: [ -> ]سلام
مهندس پایه میکرو  رو پول آپ کردین؟

آره مهندس
اگر نباشه میکرو خودش دائم میشماره و بالا میره بدون این که پالس بگیره
والا من کلا بسکام رو یادم رفته!
ولی چک کنید ک آیا وقفه رو درست کانفیگ کردید؟
چون میکرو الکی شمارش انجام میده!
خیلی وقت پیش اینو نوشته بودم(کلیک- دابل کلیک و....) رو با میکرو سوئیچ تشخیص میداد
یه نگاه بندازید »
کد:
$regfile = "attiny13.dat"
$Crystal=1000000
$hwstack = 32
$swstack = 8
$framesize = 16
                                           'default use 40 for the frame space



Const Dbl_tick = 4                                          ' Double_click Window = 5*(1/3.8) =  1.31 Sec





Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.4 = Output

Led1 Alias Portb.0
Led2 Alias Portb.1
Led3 Alias Portb.2
Led4 Alias Portb.4

Config Debounce = 30


Enable Interrupts




Config Timer0 = Timer , Prescale = 1024
On Timer0 P




Dim Time001 As Integer
Dim Click_cnt0 As Integer


Config Debounce = 30


Time001 = 0
Click_cnt0 = 0






Do

   Debounce Pinb.3 , 0 , Dbnc , Sub

Loop

End









P:

  If Time001 < Dbl_tick Then
     Incr Time001
  Else


     'final result here!
     Select Case Click_cnt0
        '=============================
        Case 1:                                            'one Click
           'Reset Led1
           Reset Led2
           Reset Led3
           Reset Led4

           Set Led1

           Waitms 200
           Reset Led1
           Reset Led2
           Reset Led3
           Reset Led4
        '=============================
        Case 2:                                            'double Click
           Reset Led1
           'Reset Led2
           Reset Led3
           Reset Led4

           Set Led2

           Waitms 200
           Reset Led1
           Reset Led2
           Reset Led3
           Reset Led4
        '=============================
        Case 3:                                            'triple Click
           Reset Led1
           Reset Led2
           'Reset Led3
           Reset Led4

           Set Led3

           Waitms 200
           Reset Led1
           Reset Led2
           Reset Led3
           Reset Led4
        '=============================
     End Select

     Time001 = 0
     Click_cnt0 = 0
     Stop Timer0
     disable Timer0
  End If

Return

Dbnc:
  Time001 = 0

  If Click_cnt0 = 0 Then
     Enable Timer0
     Start Timer0

  End If
  Click_cnt0 = Click_cnt0 + 1
Return
راستی یه خازن مناسب یا یه مدار پایین گذر مناسب(rc) بین کلید و میکرو بذارید شاید سیگنالتون بین 0و 1 نوسان میکنه با هر کلیک

(البته دقیق کدتون رو بررسی نکردم شاید در کدتون اینو حل کرده باشید)
آقا من الان یه نگاه به کد صالح کردم و کد شما رو دیدم فهمیدم که وقفه سراسری روفعال نکردید
از کد زیر استفاده کنید

کد:
Enable Interrupts
با سلام خدمت همه مهندسین گرامی
بنده میکرو atmega 32  دارم یک lcd 2*16 و 5 عدد سون سگمنت و کی برد 4*4 
می خواهم با بسکام برنامه ای بنویسم که 
عددی تا حداکثر 5 رقم رو با کی برد بنویسم روی lcd و با سون سگمنت ها نمایش داده بشه
اگر کمکم کنید ممنون میشم البته خیلی مسلط نیستم در حد مبتدی توضیح بدید
با تشکر