امتیاز موضوع:
  • 3 رأی - میانگین امتیازات: 4.67
  • 1
  • 2
  • 3
  • 4
  • 5
Servo???
نویسنده پیام
bozonghare آفلاین
كاربر دو ستاره
**

ارسال‌ها: 185
موضوع‌ها: 9
تاریخ عضویت: آبان ۱۳۸۷

تشکرها : 110
( 164 تشکر در 90 ارسال )
ارسال: #23
RE: Servo???
برنامه 480 خط بیشتر نیست ولی فایل هگز 16 کیلوبایت شده . تو میکرو مگا8 جا میشه؟

بفرما اینم برنامه بدون LCD و خیلی کوتاه بازم کار نمیکنه(نه سروو میچرخه و نه تو اسکوپ نشون میده): چرا؟؟


$regfile = "m8def.dat"
$crystal = 8000000



Config Portd = Output
Dim A As Word

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc
Do
A = Getadc(1)
A = A + 1000
Set Portd.0
Waitus A
Reset Portd.0
Waitus 18000
Loop
End

هنوز وقت برای پیشرفت باقیست

اطلاعات خویش را به دیگران بیاموزید تا دیگران راه رفته شما را دوباره نروند بلکه ادامه دهند!

۰۸-اسفند-۱۳۸۷, ۲۰:۵۲:۳۱
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #24
RE: Servo???
کد php:
Getadc(1
این خط خودش به اندازه کل حلقه طول می کشه .
۰۸-اسفند-۱۳۸۷, ۲۳:۵۵:۱۸
ارسال‌ها
پاسخ
bozonghare آفلاین
كاربر دو ستاره
**

ارسال‌ها: 185
موضوع‌ها: 9
تاریخ عضویت: آبان ۱۳۸۷

تشکرها : 110
( 164 تشکر در 90 ارسال )
ارسال: #25
RE: Servo???
منظورت چیه اگه ایرادی میبینی خوب رفعش کن تا درست کار کنه!!!؟؟

مشکل اینه که دستور WAIT درست کار نمیکنه!

هنوز وقت برای پیشرفت باقیست

اطلاعات خویش را به دیگران بیاموزید تا دیگران راه رفته شما را دوباره نروند بلکه ادامه دهند!

۰۹-اسفند-۱۳۸۷, ۰۰:۱۵:۳۵
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #26
RE: Servo???
دستور Wait درست کار می کنه در صورتی که فرکانس کریستال رو درست وارد کرده باشی . ( فیوز بیت ها فراموش نشه )


من پیشنهاد می کنم اول برنامه یه بار مقدار AGC رو بخون و تو برنامه دیگه نخون و اینطوری امتحان کن .

کد php:
$regfile "m8def.dat"
$crystal 8000000

Config Portd 
Output
Dim A 
As Word

Config Adc 
Single Prescaler Auto Reference Avcc


Start Adc

Getadc(1)
1000

Do

     
Set Portd.0
     Waitus A
     Reset Portd.0
     Waitus 18000

Loop
End 
۰۹-اسفند-۱۳۸۷, ۰۰:۲۷:۱۱
ارسال‌ها
پاسخ
تشکر شده توسط : ilgar
bozonghare آفلاین
كاربر دو ستاره
**

ارسال‌ها: 185
موضوع‌ها: 9
تاریخ عضویت: آبان ۱۳۸۷

تشکرها : 110
( 164 تشکر در 90 ارسال )
ارسال: #27
RE: Servo???
اینم امتحان کردم کار نمیکنه یعنی هم سروو رو 90- باقی میمونه مثل قبل و هم تو اسکوپ تاخیر 1000 میکرو رو نمیبینی!
خوب شما هم یبار امتحان کن شاید پروتئوس من مشکل داره این تصویر مدار(همونطور که تو تصویر میبینی نیم سیکل مثبت بصورت یک خط عموده و بازه ای ندارهSad

http://www.dehcadeh.com/upload/images/88...hvg6lf.jpg

هنوز وقت برای پیشرفت باقیست

اطلاعات خویش را به دیگران بیاموزید تا دیگران راه رفته شما را دوباره نروند بلکه ادامه دهند!

(آخرین ویرایش در این ارسال: ۰۹-اسفند-۱۳۸۷, ۰۳:۱۷:۱۲، توسط bozonghare.)
۰۹-اسفند-۱۳۸۷, ۰۳:۱۵:۵۸
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #28
RE: Servo???
مهندس من نفهمیدم چرا از توابع آماده بسکام استفاده نمی کنی ؟؟

تایم دیویژنت هم زیاده .

و بهتر نیست برای زمان بندیت از تایمر استفاده کنی حالا که می گی waitus مشکل داره .
البته شاید دستور waitus از نوع 8 بیتی باشه و حداکثر بشه 255 رو بهش داد. ( البته بعید می دونم اینطوری باشه ) .

این برنامه رو هم یه تست کن :

کد php:
$regfile "m8def.dat" $crystal 8000000

Config Timer1 
Timer Prescale 64
Enable Interrupts 
Enable Timer1 On Timer1 Ant Stop Timer1

Dim A 
As Word As Word

Config Adc 
Single Prescaler Auto

Ddrd 
255  

Gosub Ant 
Start Timer1

Do
      
Set Portd.0
      Waitms A
      Reset Portd.0
      Waitms B
Loop

Ant
:
      
Start Adc Getadc(1) : Stop Adc
      A 
20 50 A
Return 
(آخرین ویرایش در این ارسال: ۰۹-اسفند-۱۳۸۷, ۰۳:۴۵:۱۲، توسط t3r!p3000.)
۰۹-اسفند-۱۳۸۷, ۰۳:۳۷:۵۳
ارسال‌ها
پاسخ
تشکر شده توسط : ilgar
ilgar آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 843
موضوع‌ها: 17
تاریخ عضویت: اردیبهشت ۱۳۸۷

تشکرها : 383
( 2597 تشکر در 855 ارسال )
ارسال: #29
RE: Servo???
بله خوب شد گفتین میکروثانیش از نوع 8 بیتیه ولی میلی ثانیش از نوع 16 بیتی.
ولی اگه از تایمر استفاده بشه باز همون تأخیر وسط برنامه پیش میاد اینبار دیگه سرعت غر یکنواخت میشه چون تایمر هر جا که دلش خواست اجرای برنامه رو قطع میکنه.
اگه بخواین دائم سرعتو عوضش کنین چاره ای نیست و باید دائماً مقدار گیری کنید و این وقت میبره ولی اگه بخواین سرعت قابل تنظیم باشه ولی در طول برنامه یک روند ثابتیو طی کنه همون ADC بهترین پیشنهاده.
ببینم نمیشه زمانهای بزرگتری به موتورتون بدین (در حد چند ده میلی ثانیه) ؟
۰۹-اسفند-۱۳۸۷, ۱۵:۱۱:۴۹
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000
bozonghare آفلاین
كاربر دو ستاره
**

ارسال‌ها: 185
موضوع‌ها: 9
تاریخ عضویت: آبان ۱۳۸۷

تشکرها : 110
( 164 تشکر در 90 ارسال )
ارسال: #30
RE: Servo???
آقا تریب
ممکنه درباره برنامت توضیح بدی من که هرچی تفکر کردم متوجه نشدم Ddrd = 255 ؟؟؟
Start Adc : A = Getadc(1) : Stop Adc
A = A / 20 : B = 50 - A

اینا برا چیند


و این برنامه رو هم تست کردم جواب نداد
یعنی اون تغییر 1 تا 2 میلی ثانیه رو نداشت و اصلا سیکل قسمت مثبت کلا نداشت چه برسه به 1 میلی ثانیه!!!

آقا ILGAR چرا دستور WAITMS اعداد اعشاریرو قبول نمیکنه اگه 1 تا 2 رو قبول میکرد همه چی حل بود مثلا در برنامه زیر تا 1.5 رو همون 1 میگیره و از 1.6 تا 2 رو میپره به 2 و 2 قبول میکنه !!!:حتی A رو تو متغیر دیگری که SINGLE باشه ریختم که اعشاری بپذیره ولی مشکل از دستور WAITMS بود (پایین توضیح دادم چطور معلوم شد)
$regfile = "m8def.dat"
$crystal = 8000000

Config Portd = Output
Dim A As Word

Config Adc = Single , Prescaler = Auto , Reference = Avcc


Start Adc
Do

A = Getadc(1)
A = A / 1024
A = A + 1

Set Portd.0
Waitms A
Reset Portd.0
Waitms 18

Loop
End

اصلا نیازی هم به برنامه نیست میتوان با دادن عدد 1.5 یه دستور WAITMS تو خروجی با اسکوپ دید که تغییری نمیکنه! راستی چرا؟

هنوز وقت برای پیشرفت باقیست

اطلاعات خویش را به دیگران بیاموزید تا دیگران راه رفته شما را دوباره نروند بلکه ادامه دهند!

(آخرین ویرایش در این ارسال: ۰۹-اسفند-۱۳۸۷, ۱۷:۳۷:۵۰، توسط bozonghare.)
۰۹-اسفند-۱۳۸۷, ۱۶:۴۴:۲۷
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #31
RE: Servo???
اون Ddrd = 255 یعنی پورت د خروجی .
و برنامه قبلی یه فرکانس 50 هرتز درست می کرد با ضریب مدلاسیونی که توسط پتانسیومتر تنظیم می شد .
اون ضرب و تقسیم هم واسه همینه .
برنامه قبلی درسته و فقط سیکل کاریش 50 هرتز هستش .

-------------------------------------------------------------------

و مهندس تو این برنامه من هیچ ایرادی نمی بینم و مدت زمان یک بودن خروجی بین 1 تا 2 میلی ثانیه توسط پتانسیومرتری که به پایه 28 میکرو وصله قابل تنظیمه . کریستال میکرو هم فراموش نشه رو یک مگ بذاری .
کل سیکل هر پالس نیز 20 میلی ثانیه هست . یعنی زمان صفر بودن خروجی بسته به پتانسیومتر بین 18 تا 19 میلی ثانیه هستش . ( پایه های رفرنس آنالوگ میکرو هم فراموش نشه - پایه های 20 و 21 به 5 ولت و 22 به زمین )
تقریبا هر 4 ثانیه هم موقیعت پتانسیومتر خونده می شه . ( پایه 28 میکرو . ADC5 )
از هر پایه پورت d هم می توان به عنوان خروجی استفاده کرد .

کد php:
$regfile "m8def.dat" $crystal 1000000

Dim A 
As Byte As Byte As Word

Config Adc 
Single Prescaler Auto

Config Timer1 
Timer Prescale 64
Enable Interrupts 
Enable Timer1 On Timer1 Ant Start Timer1

Ddrd 
255 Gosub Ant

Do
      
Set Portd Waitms 1
      Waitus A 
Waitus A Waitus A Waitus A
      Reset Portd 
Waitms 18
      Waitus B 
Waitus B Waitus B Waitus B
Loop

Ant
:
      
Start Adc Getadc(5) : Stop Adc
      C 
255 A
Return 
۱۰-اسفند-۱۳۸۷, ۰۱:۰۱:۰۵
ارسال‌ها
پاسخ
bozonghare آفلاین
كاربر دو ستاره
**

ارسال‌ها: 185
موضوع‌ها: 9
تاریخ عضویت: آبان ۱۳۸۷

تشکرها : 110
( 164 تشکر در 90 ارسال )
ارسال: #32
RE: Servo???
تریپ جان برنامه شما اینطوریکه دیده میشه کاملا درسته و باید کار کنه ولی مسئله اینکه دستور WAITUS اصلا متغیر نمیپذیره! نمیدونم تو پروتئوس من این مشکل هست یا کلیه! برنامه شما به کنار برنامه پایین ریختن مقدار متغیر B که مقدارشم از 255 کوچکتر هست ، ثابت و بدون ADC ، کار نمیکنه!! ولی اگر مستقیم به WAITUS عدد بدیم اونوقت کار میکنه! حتی اگر 1000 هم مستقیم بدیم میپذیره و کار میکنه ولی متغیر نمیگیره چرا؟؟

$regfile = "m8def.dat"
$crystal = 8000000

Config Lcdpin = Pin , Db4 = Pinb.3 , Db5 = Pinb.2 , Db6 = Pinb.1 , Db7 = Pinb.0 , E = Pinb.4 , Rs = Pinb.5
Config Lcd = 16 * 2 : Cursor Off : Cls

Config Portd = Output

Dim B As Single


Do

B = 100
Set Portd.0
Waitus B
Reset Portd.0
Waitus 18000

Loop
End

هنوز وقت برای پیشرفت باقیست

اطلاعات خویش را به دیگران بیاموزید تا دیگران راه رفته شما را دوباره نروند بلکه ادامه دهند!

(آخرین ویرایش در این ارسال: ۱۲-اسفند-۱۳۸۷, ۱۱:۳۸:۲۷، توسط bozonghare.)
۱۲-اسفند-۱۳۸۷, ۱۱:۳۴:۲۵
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #33
RE: Servo???
نمی دونم

فکر نمی کنید عیب از کامپایلر باشه .

بسکامتون ورژن چنده .
۱۲-اسفند-۱۳۸۷, ۱۶:۲۹:۵۷
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Sad servo motor sg5010 DORAN 3 6,363 ۱۶-شهریور-۱۳۸۹, ۲۱:۴۴:۱۹
آخرین ارسال: saeidjan
  servo motor alizeraatcar 21 21,003 ۳۰-تير-۱۳۸۸, ۱۰:۴۰:۵۳
آخرین ارسال: t3r!p3000
  servo sg5010 nex2004 1 3,538 ۳۱-شهریور-۱۳۸۷, ۱۹:۵۷:۰۱
آخرین ارسال: 1nafar

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 4 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS