NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3287 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 19 از 19

موضوع: درخواست کمک

  1. #1
    عضو جدید
    تاریخ عضویت
    Jul 2010
    نوشته ها
    8
    تشکر
    0
    تشکر شده 8 بار در 8 پست

    پیش فرض درخواست کمک

    سلام
    من میخوام با استفاده از یه میکرو atmega32 با یه فتوسل و یه لامپ 12 ولت یه کنترلر روشنایی بسازم طوری که وقتی نور محیط کم میشه نور لامپ زیاد بشه و وقتی نور محیط زیاد میشه نور لامپ کم بشه به روش pwm .البته میخوام به صورت دستی هم قابل کنترل باشه یعنی خودمم هم بتونه میزان نور خروجی رو هر زمان که خواستم دستی تنظیم کنم کسی هست که بتونه کمکم کنه؟
    البته خودم یه برنامه نصفه نیمه نوشتم اما نمیدونم چه قد درسته!!!

  2. تشکرها از این نوشته :


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  4. #2
    عضو جدید
    تاریخ عضویت
    Jul 2010
    نوشته ها
    8
    تشکر
    0
    تشکر شده 8 بار در 8 پست

    پیش فرض

    اگه درمورد سخت افزارش هم میتونید کمکم کنید

  5. تشکرها از این نوشته :


  6. #3
    عضو جدید
    تاریخ عضویت
    Jul 2010
    نوشته ها
    8
    تشکر
    0
    تشکر شده 8 بار در 8 پست

    پیش فرض

    راستی برنامه با bascom باشه

  7. تشکرها از این نوشته :


  8. #4
    مدیر باز نشسته هنرفر آواتار ها
    تاریخ عضویت
    Sep 2009
    نام
    اصفهان
    نوشته ها
    408
    تشکر
    372
    تشکر شده 311 بار در 154 پست

    پیش فرض

    خوب برنامه را بزارید تا دوستان کمکتون کنند.
    جوان ایرانی زانو نمیزند حتی اگر حتی اگر سقف آسمان کوتاه تر از قدش باشد....

    iran-ehda.ir


  9. تشکرها از این نوشته :


  10. #5
    عضو جدید
    تاریخ عضویت
    Jul 2010
    نوشته ها
    8
    تشکر
    0
    تشکر شده 8 بار در 8 پست

    پیش فرض

    نمیدونم چرا اینجا نمیشه فایلی ضمیمه کرد
    این برنامه است:
    $regfile = "m132def.dat"
    $crystal = 1000000
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
    Enable Timer1
    Dim W As Word
    Dim B As Byte
    Start Timer1
    Do
    Start Adc
    W = Getadc(0)
    Stop Adc
    B = W / 4
    Pwm1a = B
    Wait 1
    Loop
    کمکم کنید ممنون میشم
    End

  11. تشکرها از این نوشته :


  12. #6
    مدیر باز نشسته هنرفر آواتار ها
    تاریخ عضویت
    Sep 2009
    نام
    اصفهان
    نوشته ها
    408
    تشکر
    372
    تشکر شده 311 بار در 154 پست

    پیش فرض

    من برنامه تون را اصلاح کردم.یه مشکل کوچیک داشت.در مورد سخت افزار هم خودتون پیشنهاد بدید ما کمکتون میکنیم.
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: rar pwm.rar (38.2 کیلو بایت, 23 نمايش)
    جوان ایرانی زانو نمیزند حتی اگر حتی اگر سقف آسمان کوتاه تر از قدش باشد....

    iran-ehda.ir


  13. کاربران : 2 تشکر کرده اند از شما هنرفر برای ارسال این پست سودمند:


  14. #7
    عضو جدید
    تاریخ عضویت
    Jul 2010
    نوشته ها
    8
    تشکر
    0
    تشکر شده 8 بار در 8 پست

    پیش فرض

    ممنون
    اما برای قسمت کنترلیش چی؟ چی باید بهش اضافه کنم؟

  15. تشکرها از این نوشته :


  16. #8
    کاربر فعال ghaem313 آواتار ها
    تاریخ عضویت
    Oct 2009
    نام
    محمد قديمي
    نوشته ها
    233
    تشکر
    34
    تشکر شده 194 بار در 105 پست

    پیش فرض

    سلام
    من فکر کنم که برای کنترلش با پتانسیومتر بشه این کارو کرد
    توسط adc یه عدد به به دست می آید که به عنوان ضریب در پهنای پالس ضرب بشه

  17. تشکرها از این نوشته :


  18. #9
    عضو جدید
    تاریخ عضویت
    Jul 2010
    نوشته ها
    8
    تشکر
    0
    تشکر شده 8 بار در 8 پست

    پیش فرض

    نه. منظورم از قسمت کنترلی اینه که خودم با استفاده از یه صفحه کلید بهش مقدار بدم با توجه به اون نور خروجی رو تنظیم کنه!

  19. تشکرها از این نوشته :


  20. #10
    عضو جدید
    تاریخ عضویت
    Jul 2010
    نوشته ها
    8
    تشکر
    0
    تشکر شده 8 بار در 8 پست

    پیش فرض

    لطفا اگه کسی میتونه کمکم کنه

  21. تشکرها از این نوشته :


  22. #11
    مدیر باز نشسته هنرفر آواتار ها
    تاریخ عضویت
    Sep 2009
    نام
    اصفهان
    نوشته ها
    408
    تشکر
    372
    تشکر شده 311 بار در 154 پست

    پیش فرض

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

    iran-ehda.ir


  23. تشکرها از این نوشته :


  24. #12
    کاربر فعال ghaem313 آواتار ها
    تاریخ عضویت
    Oct 2009
    نام
    محمد قديمي
    نوشته ها
    233
    تشکر
    34
    تشکر شده 194 بار در 105 پست

    پیش فرض

    نقل قول نوشته اصلی توسط saeedeh1988 نمایش پست ها
    نه. منظورم از قسمت کنترلی اینه که خودم با استفاده از یه صفحه کلید بهش مقدار بدم با توجه به اون نور خروجی رو تنظیم کنه!
    خب برای این کار یه کی پد ماتریسی رو به یکی از پورت ها وصل میکنی
    آموزش نصب کیپد هم تو آموزش AVR که توسط رضا سپاس یار نوشته شده هست
    این جوری میشه عدد خونده شده رو توی رجیستر ocr ریخت و با مد fast pwm نور لامپ رو کنترل کرد
    اگه از تایمر 8 بیتی استفاده کنی میشه یه عدد بین 0 تا 100 داد و در 2.55 ضربش کرد
    اگه 16 بیتی باشه میشه در 6.5535 ضربش کرد

    البته دوستان با تجربه تری تو این سایت هستند و میتونن کمکت کنن

  25. کاربران : 2 تشکر کرده اند از شما ghaem313 برای ارسال این پست سودمند:


  26. #13
    عضو جدید
    تاریخ عضویت
    Jul 2010
    نوشته ها
    8
    تشکر
    0
    تشکر شده 8 بار در 8 پست

    پیش فرض

    دوستان من خودم از نظر تئوری میدونم که باید چیکار کنم که باید یه کیپد به میکرو وصل کنم و یه کلید که تغییر وضعیت بده از حالت اتومات بره رو حالت دستی و مقداری که دستی بهش میدم رروی یه ال سی دی نشون بده اما چون وقت ندارم که خیلی با برنامه کار کنم و مدام روی میکرو بریزم ببینم کار نمیکنه میخوام یه نفر واسم برنامم رو اصلاح کنه و کاملش رو واسم بذاره . لطفا کمک کنید

  27. تشکرها از این نوشته :


  28. #14
    کاربر علاقه مند
    تاریخ عضویت
    Mar 2010
    نوشته ها
    50
    تشکر
    1
    تشکر شده 100 بار در 31 پست

    پیش فرض

    regfile = "m132def.dat"
    $crystal = 1000000
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
    config portb=input
    Enable Timer1
    Dim W As Word
    Dim B As Byte
    dim a as bit
    Start Timer1
    Do
    Start Adc
    goto main
    loop

    main:
    if portb.0=1
    if a=0 then
    a=1
    else
    a=0
    endif
    endif
    do
    if portb=0 then exit do
    loop

    if a=1 then goto manual
    if a=0 then goto auto
    goto main

    auto:
    W = Getadc(0)
    B = W / 4
    Pwm1a = B
    goto main

    manual:
    if portb.1=1 then incr b
    if portb.2=1 then decr b
    pwm1a=b
    waitms 100
    goto main

  29. تشکرها از این نوشته :


  30. #15
    کاربر علاقه مند
    تاریخ عضویت
    Mar 2010
    نوشته ها
    50
    تشکر
    1
    تشکر شده 100 بار در 31 پست

    پیش فرض

    البته یه then جا افتاد

  31. تشکرها از این نوشته :


  32. #16
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

    برنامتون به نظر درست میاد اگرچه می شد کوتاه تر و خیلی گویا تر نوشتش. من فقط اشتباه هاتون رو تصحیح کردم و با رنگ قرمز نشون دادم.

    البته یه نکته برنامه نویسی مخصوصاً با میکرو:
    به هیچ عنوان از دستور Goto استفاده نکنید. قانون کلی اینه که اگر برنامه به جایی رسید که مجبور شدین از دستور Goto استفاده کنید مطمئن باشید راه اشتباهی رو برای نوشتن برنامه انتخاب کردین و راه بهتری هم وجود داشته.

    در برنامه های پیچیده این دستور باعث هنگ کردن میکرو و سخت شدن رفع اشکال برنامه می شه.

    کد:
    $regfile = "m132def.dat"
    $crystal = 1000000
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
    config portb=input
    
    
    'برای فعال کردن pullup های داخلی پورت B
    portb=255 Enable Timer1 Dim W As Word Dim B As Byte dim a as bit Start Timer1 Do Start Adc goto main loop main: if pinb.0=1 then if a=0 then a=1 else a=0 endif endif do if pinb=0 then exit do loop if a=1 then goto manual if a=0 then goto auto goto main auto: W = Getadc(0) B = W / 4 Pwm1a = B goto main manual: if pinb.1=1 then incr b if pinb.2=1 then decr b pwm1a=b waitms 100 goto main end

    دقت کنید که pullup های پورت B هم غیر فعال هستن. در ساخت سخت افزار اونها رو لحاظ کنید یا خطی که با سبز نشون دادم رو اضافه کنید.

    بهتره در آخر برنامتون end هم بزارید.
    ویرایش توسط ali_h : 14-01-2012 در ساعت 12:41

  33. تشکرها از این نوشته :


  34. #17
    کاربر علاقه مند
    تاریخ عضویت
    Mar 2010
    نوشته ها
    50
    تشکر
    1
    تشکر شده 100 بار در 31 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ali_h نمایش پست ها
    برنامتون به نظر درست میاد اگرچه می شد کوتاه تر و خیلی گویا تر نوشتش. من فقط اشتباه هاتون رو تصحیح کردم و با رنگ قرمز نشون دادم.

    البته یه نکته برنامه نویسی مخصوصاً با میکرو:
    به هیچ عنوان از دستور goto استفاده نکنید. قانون کلی اینه که اگر برنامه به جایی رسید که مجبور شدین از دستور goto استفاده کنید مطمئن باشید راه اشتباهی رو برای نوشتن برنامه انتخاب کردین و راه بهتری هم وجود داشته.

    در برنامه های پیچیده این دستور باعث هنگ کردن میکرو و سخت شدن رفع اشکال برنامه می شه.

    کد:
    $regfile = "m132def.dat"
    $crystal = 1000000
    config adc = single , prescaler = auto , reference = avcc
    config timer1 = pwm , pwm = 8 , compare a pwm = clear down , prescale = 1
    config portb=input
    
    
    'برای فعال کردن pullup های داخلی پورت b
    portb=255 enable timer1 dim w as word dim b as byte dim a as bit start timer1 do start adc goto main loop main: If pinb.0=1 then if a=0 then a=1 else a=0 endif endif do if pinb=0 then exit do loop if a=1 then goto manual if a=0 then goto auto goto main auto: W = getadc(0) b = w / 4 pwm1a = b goto main manual: If pinb.1=1 then incr b if pinb.2=1 then decr b pwm1a=b waitms 100 goto main end

    دقت کنید که pullup های پورت b هم غیر فعال هستن. در ساخت سخت افزار اونها رو لحاظ کنید یا خطی که با سبز نشون دادم رو اضافه کنید.

    بهتره در آخر برنامتون end هم بزارید.
    با سلام
    اگر ممکن بر نامه رو به سبک خودتون بنویسید تا ما هم یه چیز جدید یاد بگیریم

  35. تشکرها از این نوشته :


  36. #18
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

    نقل قول نوشته اصلی توسط hamedtv نمایش پست ها
    با سلام
    اگر ممکن بر نامه رو به سبک خودتون بنویسید تا ما هم یه چیز جدید یاد بگیریم
    سلام، البته شما که استاد ما هستین ولی من برنامه رو به شکل زیر ترجیح می دم :

    کد:
    $regfile = "m32def.dat"
    $crystal = 1000000
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down
    
    Config Portb = Input
    Portb = 255
    
    Dim W As Word
    Dim Lastbstate As Bit
    Dim B As Byte
    Dim A As Bit
    Dim State As Byte
    
    ' State = 0 : Auto Mode
    ' State = 1 : Manual Mode
    
    
    Start Timer1
    
    Start Adc
    
    Do
       If Lastbstate <> Pinb.0 Then
          If Pinb.0 = 0 Then
             If State = 0 Then State = 1 Else State = 0
          End If
          Lastbstate = Pinb.0
       End If
    
       If State = 0 Then
          W = Getadc(0)
          B = W / 4
          Pwm1a = B
       Else
          If Pinb.1 = 0 Or Pinb.2 = 0 Then
             If Pinb.1 = 0 Then Incr B
             If Pinb.2 = 0 Then Decr B
             Pwm1a = B
             Waitms 100
          End If
       End If
    Loop
    
    End
    این طوری حلقه Do Loop شما دائماً منتظر ورودی از کاربر باقی نمی مونه و پردازنده در گیر ورودی کاربر نمی شه و شما می تونید در حلقه DoLoop قسمت های دیگه ای هم به برنامه اضافه کنید.

    دلیل این که در if ها pinb.0=1 به pinb.0=0 تغییر پیدا کرده اینه که من از PullUp های داخلی میکرو استفاده کردم که باعث می شه در حالت پیش فرض پایه های ورودی میکرو، مقدار 1 رو داشته باشن.

    بهتره یک خازن هم روی پایه pinb.0 به صورت زیر قرار بدین تا خروجی کلید Debounce بشه و میکرو سریع بین حالت Auto و Manual سوئیچ نکنه.


    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست debounce.GIF  

  37. #19
    کاربر فعال mohamad_musav آواتار ها
    تاریخ عضویت
    Aug 2012
    نام
    سید محمد موسوی
    نوشته ها
    189
    تشکر
    61
    تشکر شده 39 بار در 29 پست

    پیش فرض

    سلام کسی همین پروژه رو به زبان c نمس تونه توضیح بده؟ من خوشم اومد از این پروزه اما بسکام بلد نیستم زیاد.

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •