امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
درخواست:کنترل روشنایی به روش pwm
نویسنده پیام
liliansh آفلاین
تازه وارد

ارسال‌ها: 5
موضوع‌ها: 1
تاریخ عضویت: تير ۱۳۸۹

تشکرها : 1
( 0 تشکر در 0 ارسال )
ارسال: #1
درخواست:کنترل روشنایی به روش pwm
سلام
برنامه ای برای کنترل روشنایی می خواستم.به وسیله avr و به روش pwm
وقتی نور محیط کم میشه لامپ 12 ولت روشن بشه وقتی محیط تاریک میشه لامپ کم کم خاموش بشه.به وسیله صفحه کلید 4*4هم بشه کنترلش کرد و روی lcd اون مقدار رو نشون بده.یعنی مقدار بدیم و باتوجه به اون مقدار نور لامپ تنظیم بشه
ممنون میشم جواب بدید
۱۵-تير-۱۳۸۹, ۱۵:۳۸:۳۴
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

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

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #2
RE: درخواست:کنترل روشنایی به روش pwm
مهندس کاری نداره !

کجاشو مشکل داری !!!!؟

شما شروع کن هر جاشو مشکل داشتی بگو !!!
(آخرین ویرایش در این ارسال: ۱۵-تير-۱۳۸۹, ۱۶:۱۳:۲۱، توسط t3r!p3000.)
۱۵-تير-۱۳۸۹, ۱۵:۴۷:۱۹
ارسال‌ها
پاسخ
تشکر شده توسط : yasina
t3r!p3000 آفلاین
         
*****

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

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #3
RE: درخواست:کنترل روشنایی به روش pwm

اتصال کي پد



ابتدا در مورد چگونگي کار کي پد بحث کنيم .
در زير شکل اين وسيله را مشاهده مي کنيد .

[تصویر:  232e55b2178a40389ce9.GIF]

'گاهي به تعداد زيادي کليد نياز داريم ، ما بايد اين کليد ها را به ميکرو متصل کنيم و مدام آنها را چک نماييم . براي اين کار دو راه وجود دارد که روش اول اتصال هر کليد به يک پايه و روش دوم استفاده از صفحه کليد ماتريسي است .

روش اول، چون تعداد زيادي از پايه هاي ميکرو اشغال مي شود،کمتر مورد استفاده قرار مي گيرد .

دستور بسکام براي استفاده از صفحه کليد ماتريسي که از اين به بعد به آن KBD مي گوييم به شرح زير است :

کد php:
Config Kbd PORTX [, Debounce Value Delay Value

که PORTX ، پورتي است که KBD به آن متصل مي شود .

Debounce تاخير کليد است که بين 1 تا 255 ميلي ثانيه است . (اگر تعریف نشود 20 میلی ثانیه در نظر گرفته می شود )

Delay هم تاخیر بین هر فشردن کلید است که در بین 1 تا 255 میلی ثانیه قابل تنظیم است . (اگر تعریف نشود 100 میلی ثانیه در نظر گرفته می شود )

بعد از تعريف KBD در برنامه نوبت به استفاده از آن است براي اين کار از دستور زير استفاده مي شود

کد php:
Var = Getkbd() 

که Var يک متغيير از جنس بايت است که عدد گرفته شده از KBD در آن گذاشته مي شود و در صورتي که کليدي فشرده نشود عدد 16 در داخل آن گذاشته مي شود ، براي حذف عدد 16 مي توان از دستور شرطي If استفاده کرد.

مانند :

کد php:
"regfile = "m16def.dat
crystal 12000000
Config Lcd 16 
Config Lcdpin 
Pin Db4 Portd.0 Db5 Portd.1 Db6 Portd.2 Db7 Portd.3 Portd.4 Rs Portd.5
Config Kbd 
Portb,DEBOUNCE 50 
Dim A 
As Byte 
Q

Getkbd() 
If 
15 Then 
Goto 
End 
If 
Locate 1 
Lcd A 
Goto 
End 

دو خط اول برنامه مثل هميشه معرفي ميکرو و کريستال است (که در اينجا از ميکرو مگا 16 و کريستال 8 مگاهرتز استفاده شده است) .

در خط سوم و چهارم و پنجم LCD راه اندازي شده است ( که در اينجا از LCD 6*2 استفاده شده وLCD به پورتD متصل است) .

در خط ششم KBD معرفي شده (که در اينجا KBD به پورت B متصل شده وDebounce پنجاه ميلي ثانيه گرفته شده است ) .

در خط هفتم يک متغيير از جنس بايت معرفي گرديده .

در خط هشتم يک برجسب به نام Q قرار داده شده است .

در خط نهم عدد گرفته شده از KBD در متغيير A قرار مي گيرد (در صورتي که هيچ کليدي فشرده نشود مقدار 16 (A=16) در A ريخته مي شود ) .

در خط ده ويازده و دوازده يک دستور شرطي قرار گرفته که اين دستور شرطي ميگويد : اگر A بزرگتر از 15 شد به برچسب Q پرش کن (در صورتي که شرط درست باشد دستورات بين If و Endif اجرا مي شود و اگر شرط درست نباشد برنامه از خط بعد از Endif ادامه مي يابد ).

در خط سيزده و چهارده مقدار A در سطر اول و ستون اول LCD نمايش داده مي شود .

و در خط پانزده برنامه به برچسب Q پرش ميکند و مراحل قبل دوباره تکرار ميگردد .

خط اخر برنامه هميشه End است .

مدار مورد استفاده :

[تصویر:  bc298e8d9ce9449ba85e.PNG]

مثال :

در اين مثال به ازاي هر کليد در LCD يک نام نوشته مي شود :

کد php:
"regfile = "m16def.dat
crystal 12000000
Config Lcd 16 
Config Lcdpin 
Pin Db4 Portd.0 Db5 Portd.1 Db6 Portd.2 Db7 Portd.3 Portd.4 Rs Portd.5
Config Kbd 
Portb Debounce 20
Dim A 
As Byte
Q
:
Getkbd()
If 
15 Then : Goto End If
If 
0 Then Locate 1 Lcd "qwer" End If
If 
1 Then Locate 1 Lcd "asdf" End If
If 
3 Then Locate 1 Lcd "FDFD" End If
If 
4 Then Locate 1 Lcd "aFDf" End If
If 
5 Then Locate 1 Lcd "SAKr" End If
If 
6 Then Locate 1 Lcd "1234" End If
If 
7 Then Locate 1 Lcd "5687" End If
If 
8 Then Locate 1 Lcd "7541" End If
If 
9 Then Locate 1 Lcd "IO12" End If
If 
10 Then Locate 1 Lcd "wqsf" End If
If 
11 Then Locate 1 Lcd "1l2k" End If
If 
12 Then Locate 1 Lcd "3,m5" End If
If 
13 Then Locate 1 Lcd ")(*(" End If
If 
14 Then Locate 1 Lcd "****" End If
If 
15 Then Locate 1 Lcd "++++" End If
Locate 2 Lcd A : Goto Q
End 

در برنامه بالا براي اينکه حجم کمتري اشغال شود دستورات به صورت سطري نوشته شده اند ، شما ميتوانيد با قرار دادن علامت دونقطهShy) در بين دو دستور آنها را در يک خط بنويسيد ، هعمچنين با قرار دادن علامت ويرگولWink) چندين علامت را روي LCD در يک خط نمايش دهيد ، همچنين با دستور کما (,) چندين متغيير را در يک خط معرفي کنيد .

برنامه بالا را با استفاده از جدول lookupstr مي نويسيم :

کد php:
"regfile = "m16def.dat
crystal 12000000
Config Lcd 16 
Config Lcdpin 
Pin Db4 Portd.0 Db5 Portd.1 Db6 Portd.2 Db7 Portd.3 Portd.4 Rs Portd.5
Config Kbd 
Portb Debounce 20 
Dim A 
As Byte 
Dim B 
As String 
Q

Getkbd() 
If 
15 Then 
Goto 
End 
If 
Lookupstr(W
Locate 1 1Lcd B  
Locate 2 
1Lcd A 
Goto 
End 
W

Data "qwer" "asdf" "gdfh" "jlhl" "hkn," "yryh" "bmn4" "2452" "jkym" "jytj" "njhf" "uyjn" "dyr4" "e5yh" "9768" "hnbh" 

جدولLookupstr نيز مانند جدول Lookup است اما جدول Lookup براي باز گرداني اعداد و جدول Lookupstr براي بازگرداني حروف به کار مي رود .

شما جاي پايه هاي KBD که به پايه ميکرو متصل است را تغيير دهيد ونتيجه راببينيد. هميشه نياز نيست که ورودي يک کليد باشد بعضي وقت ها مي توان صفر يا يک شدن يک پين را هم چک کرد.

بعضي وقت ها به کيپد با تعداد کليد بيشتر نياز است شما با دستور زير 2 سطر ديگر به تعدا سطر هاي کيپد اضافه کنيد (در مجموع 24 کليد)

کد php:
Config Kbd Portx Debounce Value Rows Row5 PINA.BRow6 PINA.

X نام پورتي است که کيپد به آن متصل شده است (4سطر و4ستون اصلي).

Value مقدار تاخير در فشردن کليد براي گرفتن لرزش است.

A.B نام پورت و پيني است که دوسطر ديگر به آن متصل شده اند.

کد php:
$regfile "m16def.dat"
$crystal 12000000
Config Lcd 
16 2
Config Lcdpin 
Pin Db4 Portd.0 Db5 Portd.1 Db6 Portd.2 Db7 Portd.3 Portd.4 Rs Portd.5
Config Kbd 
Portb Debounce 20 Rows Row5 Pina.0 Row6 Pina.1
Dim A 
As Byte
Q
:
Getkbd()
If 
16 Then : Goto End If
Locate 1 Lcd A : Goto Q
End 

منبع : http://www.iranled.com/forum/showthread.php?tid=10869
(آخرین ویرایش در این ارسال: ۱۵-تير-۱۳۸۹, ۱۵:۵۸:۲۴، توسط t3r!p3000.)
۱۵-تير-۱۳۸۹, ۱۵:۵۷:۳۵
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

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

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #4
RE: درخواست:کنترل روشنایی به روش pwm

اندازه گيري يک خازن يا مقاومت



شما با استفاده از دستور زير ميتوانيد مقدار ثابت زماني مقاومت و خازني که به پايه دلخواه ميکرو AVR متصل شده است را بدست اوريد :

کد php:
Var = Getrc Pin number

Var: يک متغيير از جنس Word ميباشد که مقدار ثابت زماني در آن ريخته مي شود.

PIN : نام پورتي است که خازن و مقاومت به آن متصل است ( مانند PORTA يا PORTD).

Number : شماره پايه اي است که مقاومت و خازن به آن متصل شده است (مانند 1 يا 2 ) ( اين مقدار نميتواند از 7 بيشتر شود )).

در مدارات مقاومت يا خازن که به اختصار به آن RC مي گويند ، خازن بعد از 5 ثابت زماني شارژ مي شود ( بعد از 5t ) مقدار دقيق اين ثابت زماني به مقدار خازن و مقدار مقاومت بستگي دارد و فرمول آن به شکل t = R * C است ، ميکرو مقدار ثابت زماني را اندازه مي گيرد ، شما با داشتن مقدار يکي از المانها ميتوانيد مقدار ديگر را بدست آوريد ،

مانند :

کد php:
$regfile "M16DEF.DAT"
$crystal 8000000
Config Lcdpin 
Pin Db4 Pinc.1 Db5 Pinc.2 Db6 Pinc.3 Db7 Pinc.4 Pind.2 Rs Pind.3
Config Lcd 
16 2
Config Porta 
Output
Dim W 
As Word
Do
Getrc(pina 7) : 1000 Locate 1 Lcd W Wait 2
Loop
end 

در مثال بالا مقدار يک خازن اندازه گرفته شده است ، خازن مجهول با يک مقاومت 1 کيلو اهم سري شده و PORTA.7 متصل شده است ، ( شما همچنين ميتوانيد مقدار مقاومت را نيز اندازه گيري کنيد ، به شرطي که مقدار خازن را بدانيد) مدار مثال بالا را در زير مشاهده مي کنيد :

[تصویر:  8f72aff8335e49c4a7ed.GIF]
۱۵-تير-۱۳۸۹, ۱۶:۰۳:۲۷
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

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

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #5
RE: درخواست:کنترل روشنایی به روش pwm
از کتاب سعید یه نفر : آموزش بسکام


مبدل آنالوگ به ديجتال(ADC) :



گاهي نياز است که يک کميت بيروني (مانند دما و شدت صدا و شدت نور و... ) اندازه گيري شود ، براي اينکار از وسيله اي به نام سنسور استفاده مي شود.

سنسور ها مقدار يک کميت آنالوگ را به ولتاژ يا جريان تبديل مي کند ، سپس اين ولتاژ انالوگ به مبدل انالوگ به ديجتال ميکرو داده مي شود و مبدل انالوگ به ديجتال مقدار ولتاژ را به کميت ديجتال متناظر تبديل ميکند ، سپس اين مقدار ديجتال با اعمال رياضي به مقدارعددي متناظر تبديل مي شود و روي LCD يا سون سگمنت نمايش داده مي شود .

حداکثر ولتاژي که مبدل انالوگ به ديجتال ،که از اين به بعد به آن Adcمي گوييم ميتواند اندازه بگيرد برابر با VCC است و اگر ولتاژ اعمالي از VCC بيشتر شود ممکن است مبدل انالوگ به ديجتال آسيب ببيند (معمولا بيشرين ولتاژ ورودي که به ADC اعمال ميکنند 5 ولت است) و کمترين ولتاژ اعمالي برابر با GND است .

ADC به ازاي ولتاژ 5 ولت عدد 1023 و به ازاي صفر ولت عدد صفر را در متغيير مربوطه قرارمي دهد .

Adcبا دستور زير راه اندازي مي شود :

کد php:
Config Adc Single/Free Prescaler Auto Reference Opt 

گزينه هاي single/free :
در حالتي که Single انتخاب شود مقدار ديجتال سيگنال انالوگ توسط دستور Getadc در يک متغيير از جنس Word ريخته مي شودو در حالتي که Free انتخاب شود مقدار ديجتال سيگنال انالوگ کانال صفر در ريجيستر مربوط به Adc ريخته مي شود .

Prescaler :
اين گزينه فرکانس ADC را مشخص ميکند و در حالتي که Autoانتخاب شود کامپاير با توجه به کريستال انتخاب شده بهترين کلاک را در نظر مي گيرد ، موارد ديگر براي کلاک عبارتند از 2 و 4 و 8 و 15 و 32 و 64 يا 128 است که يه جاي گزينه Auto نوشته مي شود .
هر چه عدد کمتری وارد شود فرکانس فوق بیشتر است .

Reference :
در صورتي که بخواهيد از يک ولتاژ مرجع استفاده کنيد اين گزينه را بنويسيد (در صورت عدم استفاده از اين دستور ولتاژ مرجع زمين است و نيازي به نوشتن اين دستور نيست) .
(اين امکان فقط در بعضي از ميکرو ها وجود دارد ) Opt ميتواند يکي از موارد زير باشد :
Off : در اين حالت ولتاژمرجع داخلي خاموش شده و از ولتاژ مرجع بر روي پايه Aref استفاده مي شود.
Avcc : در اين حالت ولتاژ پايه Avcc به عنوان ولتاژ مرجع در نظر گرفته مي شود .
Internal : در اين حالت از ولتاژ مر جع داخلي 2.65 ولت استفاده مي شود .

بعد از راه اندازي Adc نوبت به استفاده از آن است براي اينکار با دستور Start Adc ، ADC روشن شده و شروع به نمونه برداري از سيگنال انالوگ موجود بر روي پايه اش مي کند و آن را به مقدار ديجتال تغيير مي دهد ، اين مقدار ديجتال با دستور زير در يک متغيير از جنس Word ريخته مي شود

کد php:
Var = Getadc (Channel

Var يک متغيير از جنس Word ميباشد
Channel : شماره : شماره Adc است که سيگنال انالوگ به آن اعمال شده .

مانند :

کد php:
$regfile "m8def.dat" 
$crystal 8000000 
Config Lcd 
16 
Config Lcdpin 
Pin Db4 Pinb.2 Db5 Pinb.3 Db6 Pinb.4 Db7 Pinb.5 Rs Pinb.0 Pinb.1 
Config Adc 
Single Prescaler Auto 
Dim A 
As Word 
Start adc 
Q

Getadc(1
Locate 1 
Lcd A 
Goto 
End 

در خط هاي اول LCD و ADC پيکر بندي شده است در خط دهم مقدار انالوگ داده شده به پايه 24 ميکرو (PORTC.1) بعد از تبديل به مقدار ديجتال در متغيير A ريخته مي شود وسپس اين متغيير در سطر اول وستون اول LCD به نمايش در مي آيد .

مثال

کد php:
$regfile "m16def.dat"
$crystal 12000000
Config Lcd 
16 4
Config Lcdpin 
Pin Db4 Portd.0 Db5 Portd.1 Db6 Portd.2 Db7 Portd.3 Portd.4 Rs Portd.5
Config Adc 
Single Prescaler Auto
Dim A 
As Word As Word As Word As Word As Word As Word As Word As Word
Cls
Q
:
Getadc(0) : Locate 1 Lcd A
Getadc(1) : Locate 1 Lcd B
Getadc(2) : Locate 2 Lcd C
Getadc(3) : Locate 2 Lcd D
Getadc(4) : Locate 3 Lcd E
Getadc(5) : Locate 3 Lcd F
Getadc(6) : Locate 4 Lcd G
Getadc(7) : Locate 4 Lcd H
Goto Q
End 

در اين مثال از ميکرو مگا 16 و LCD 16*4 استفاده شده است ، ميکرو مگا 16 داراي 8 کانال ADC ميباشد ، که در اين مثال از همه ADC هاي اين ميکرو استفاده شده است .

ممکن است اين سوال براي شما پيش بيايد که : ADC نمي تواند بيشتر از 5 ولت را اندازه گيري کند ، ما ولتاژ هاي بالا تر را چگونه اندازه بگيريم؟ براي اندازه گيري ولتاژ هاي زياد شما بايد آن را با مقاومت کم کنيد ، فرض کنيد يک ولتاژ از 0 تا 200 ولت متغيير داريد و ميخواهيد آن را با ميکرو اندازه بگيريد ، شما بايد اين ولتاژ متغيير را به 0 تا 5 ولت تبديل کنيد ...
۱۵-تير-۱۳۸۹, ۱۶:۰۶:۱۷
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

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

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #6
RE: درخواست:کنترل روشنایی به روش pwm
این مقاله رو هم در مورد pwm بگیر :
http://forum.iranled.com/attachment.php?aid=1695

این تایپیک ها رو هم ببین :
http://forum.iranled.com/showthread.php?tid=11453
http://forum.iranled.com/showthread.php?tid=15969



اینم از کتاب سعید یه نفر


> پیکر بندی تایمر/کانتر یک در مد PWM :


pwm یا مدولاسین پهنای پالس یکی از امکانات پرکاربرد در avr میباشد ، از این موج برای کنترل دور موتور ساخت پالس مربعی و دیگر پالس ها و ... استفاده میشود

در این نوع مدولاسیون دامنه پالس ثابت است و نسبت زمان صفر به یک ان تغییر میکند برای درک بیشتر موضوع بهتر است کلیه مثالها را اجراکنید.

راه اندازی تایمر/کانتر 1 در مد pwm با دستورات زیر انجام میشود :

کد php:
Config Timer1 Pwm,Pwm 8|9|10 Compare A Pwm=Clear Up |Clear Down |Disconnect ,Compare B Pwm =Clear Up |Clear Down |Disconnect Prescale=1|8|64|256|1024 

Pwm = 8|9|10
pwm میتواند 8 یا 9 یا 10 بیتی باشد که مقدار بیت هرچه بیشتر یاشد دقت موج بیشتر است (تعدا پله بیشتر است )

pwm 8 بیتی تا 256 سرریز میشود (شما میتوانید 256 واحد ان را کم یا زیاد کنید) pwm 9 بیتی تا 512 و pwm 10 بیتی تا 1024 سرریز میشود.


Compare A Pwm=Clear Up |Clear Down |Disconnect:
در صورت استفاده از گزینه Clear Up، موج pwm از سطح 1 شروع میشود و در صورت انتخاب Clear Down ، موج pwm از سطح صفر شروع میشود و در صورت انتخاب Disconnect ، هنگامی که مقدار pwm با pwm1a که در برنامه مشخص میشود برابر شد ، ارتباط پالس با پایه ی oc1a قطع میشود .

Compare b Pwm=Clear Up |Clear Down |Disconnect:
در صورت استفاده از گزینه Clear Up، موج pwm از سطح 1 شروع میشود و در صورت انتخاب Clear Down ، موج pwm از سطح صفر شروع میشود و در صورت انتخاب Disconnect ، هنگامی که مقدار pwm با pwm1b که در برنامه مشخص میشود برابر شد ، ارتباط پالس با پایه ی oc1b قطع میشود .

Prescale :
این گزینه و مقدار کریستال در تعیین فرکانس pwm نقش دارند . برای تولید PWM با فرکانس های متفاوت از این گزینه ها استفاده می شود.

با استفاده از دو دستور زیر میتوان یک عدد ثابت یا متغییر را در ریجیستر pwm قرار داد تا مقدار pwm با انها مقایسه شود:

کد php:
Pwm1a=x
Pwm1b
=

یا

کد php:
COMPARE1A 
 COMPARE1B 


مثال:

کد php:
$regfile "m16def.dat"
$crystal 8000000
Config Lcd 
16 2
Config Lcdpin 
Pin Db4 Portc.4 Db5 Portc.5 Db6 Portc.6 Db7 Portc.7 Portc.3 Rs Portc.2
Config Timer1 
Pwm Pwm Compare A Pwm Clear Up Compare B Pwm Clear Down Prescale 1
Dim A 
As Byte
Dim B 
As Byte
Config portd 
output
Do
Pwm1a A
Pwm1b 
B
Incr A
Incr B
Waitms 500
Loop
End 

در مثال بالا مقدار دو متغییر a و b در ریجیستر pwm قرار داده شده اند ، مقدار انها هر یک میلی ثانیه افزایش میابد .

زمان تناوب پالس pwm از رابطه ی زیر بدست میاید:
زمان / 1 = فرکانس
۱۵-تير-۱۳۸۹, ۱۶:۰۸:۴۲
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

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

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #7
RE: درخواست:کنترل روشنایی به روش pwm
Lcd کاراکتری :


این نوع lcd در چندین نوع ساخته میشوند و دارای چند سطر وستون می باشند که نام گذاری انها برمبنای سطر وستون می باشد .

در زیر نام این lcd اورده شده است:

16*1: که دارای یک سطر و 16 ستون می باشد.
16*1a: که دارای یک سطر و 16 ستون می باشد و میتوان ستون هشتم به بعد ان را ادرس دهی کرد.
16*2: که دارای 2 سطر و 16 ستون می باشد.
16*4 :که دارای 4 سطر و 16 ستون می باشد .
20*2 :که دارای 2 سطر و 20 ستون می باشد.
20*4 :که دارای 4 سطر و 20 ستون می باشد.
40*2 :که دارای 2 سطر و 40 ستون می باشد.
40*4: که دارای 4 سطر و40 ستون می باشد.

تمام lcd های کاراکتری دارای 16 پایه می باشد که در زیر اورده شده است :

پایه شماره 1 : VSS ، این پایه ،پایه گراند lcd است و باید به زمین مدار وصل شود.
پایه شماره 2 : VDDاین پایه پایه VCC، LCD است که باید به 5ولت وصل شود.
پایه شماره 3 : VEE این پایه روشنایی پیکسل های LCD را تعیین میکند واتصال ان طبق مدار روبرو است:
پایه شماره 4 : RS در lcd دو رجیستر به نام دستورالعمل وداده وجود دارد اگر rs =0 باشد lcd برای گرفتن دستورالعمل اماده می شود در غیر این صورت برای داده .مثلا دستور cls یک دستور العمل است و qwer که باید روی lcd نوشته شود یک داده است .
پایه شماره 5 :RW این پایه دو وضعیت دارد ، rw =1 برای خواندن از lcd و rw=0 برای نوشتن در lcd .
پایه شماره 6 : E با این پایه می توان LCD را انتخاب کرد.
پایه شماره 7 : DB0 این پایه برای گرفتن دیتا (اطلا عات) از LCD میباشد (پایه دیتا ی صفر) .
پایه شماره 8 : DB1 این پایه برای گرفتن دیتا (اطلا عات) از LCD میباشد (پایه دیتا ی یک).
پایه شماره 9 : DB2 این پایه برای گرفتن دیتا (اطلا عات) از LCD میباشد (پایه دیتا ی دو).
پایه شماره 10 : DB3 این پایه برای گرفتن دیتا (اطلا عات) از LCD میباشد (پایه دیتا ی سه).
پایه شماره 11 : DB4 این پایه برای ارسال دیتا (اطلا عات) به LCD میباشد (پایه دیتا ی چهار).
پایه شماره 12 : DB5 این پایه برای ارسال دیتا (اطلا عات) به LCD میباشد (پایه دیتا ی پنج).
پایه شماره 13 : DB6 این پایه برای ارسال دیتا (اطلا عات) به LCD میباشد (پایه دیتا ی شش).
پایه شماره 14 : DB7 این پایه برای ارسال دیتا (اطلا عات) به LCD میباشد (پایه دیتا ی هفت).
پایه شماره 15 : این پایه و پایه شماره 16 تغذیه LED پشت LCD می باشد که به 5ولت متصل میشود.
پایه شماره 16 : این پایه و پایه شماره 15 تغذیه LED پشت LCD می باشد که به 5ولت متصل میشود.

راه اندازی LCD در محیط بسکام:

Lcd میتواند ازدو طریق 8سیمه و 4سیمه به میکرو متصل شود.

کد php:
CONFIG LCDBUS constant 

Constant میتواند 4 به معنای استفاده از مد 4 سیمه یا 8 به معنای مد هشت سیمه باشد ( در صورتی که این دستور نوشته نشود ، مد 4 سیمه در نظر گرفته میشود.)

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

به طور کلی از خطوط دیتای 0 تا 3 برای خوانده از lcd و از خطوط 4 تا 7 برای نوشتن در lcd نوشته میشود در حالت نوشتن در lcd باید پایه RS پایین نگه داشته شود (صفر شود) ودر حالت خواندن از LCD باید پایه RS ،1 شود) 5 ولت وصل شود) .

از انجا که با وجود حافظه میکرو و راحت شدن کار برنامه نویسی نیازی به خواندن از LCD نمی باشد ،از پایه DB 0 تا DB3 استفاده نمی شود و پایه RW نیز به GND (صفر ولت متصل میشود).

دومین مرحله برای راه اندازی LCD معرفی کردن نام ان است:

برای این کار بعد از معرفی میکرو وکریستال با استفاده از دستور زیر می توان LCD ارمعرفی کرد:

کد php:
CONFIG LCD LCDNAME 

که LCDNAME یکی از نام های با لا میباشد. مثلا معرفی LCD 2*16 :

کد php:
Config lcd =16*

مرحله بعد معرفی پایه های از میکرو است که lcd به انها وصل میشود: برای مد 4 سیمه:

کد php:
Config Lcdpin Pin Db4 Pinx.Db5 Pinx.Db6 Pinx.Db7 Pinx.Rs Pinx.Pinx.

X نام پورت است که یکی از پورت های a یا b یا c یا یd ... می باشد و y شماره پایه هست که از 0 تا 7 می باشد برای مثال در زیر lcd کاراکتری 16*2 به پورت (c (portc متصل است .

کد php:
"regfile="m16def.dat
crystal=8000000
Config Lcd 16*
Config lcdpin
=pin,db4=pinc.0,db5=pinc.1,db6=pinc.2_
,db7=pinc.3,rs=pinc.4,e=pinc

در این مثال که از میکرو مگا16(atmega16)استفاده شده ، اتصال میکرو وlcd به قرار زیر است:

پایه شماره 1 : VSS ، این پایه باید به زمین مدار وصل شود .
پایه شماره 2 : VDDاین پایه باید به 5ولت وصل شود.
پایه شماره 3 : VEE این پایه با یک مقاومت (مقدار مقاومت بستگی به روشنایی مورد نظر شما دارد)به vcc وصل میشود.
پایه شماره 4 : RS این پایه به پورت c پین شماره 4 یا پین c.4 متصل میشود (پایه 26 میکرو مگا16).
پایه شماره 5 :RW این پایه به gnd متصل میشود .
پایه شماره 6 : E این پایه به پورت c پین شماره 5 یا پین c.5 متصل میشود(پایه 27 میکرو مگا16) .
پایه شماره 7 : DB0 این پایه به جایی متصل نمی شود.
پایه شماره 8 : DB1 این پایه به جایی متصل نمی شود.
پایه شماره 9 : DB2 این پایه به جایی متصل نمی شود.
پایه شماره 10 : DB3 این پایه به جایی متصل نمی شود.
پایه شماره 11 : DB4 این پایه به پورت c پین شماره 0 یا پین c.0 متصل میشود(پایه 22 میکرو مگا16).
پایه شماره 12 : DB5 این پایه به پورت c پین شماره 1 یا پین c.1 متصل میشود(پایه 23 میکرو مگا16) .
پایه شماره 13 : DB6 این پایه به پورت c پین شماره 2 یا پین c.2 متصل میشود(پایه 24 میکرو مگا16) .
پایه شماره 14 : DB7 این پایه به پورت c پین شماره 3 یا پین c.3 متصل میشود(پایه 25 میکرو مگا16).
پایه شماره 15 : این پایه و پایه شماره 16 تغذیه LED پشت LCD می باشد که به 5ولت متصل میشود.
پایه شماره 16 : این پایه و پایه شماره 15 تغذیه LED پشت LCD می باشد که به 5ولت متصل میشود.
توجه کنید که اگر پایه VEE به 5ولت متصل شود پیکسل های LCD دارای بیشترین روشنای و اگر به گراند وصل شود دارای کمترین روشنایی می باشند.
اتصال پایه های 15 و16 اختیاری است .

برای مد 8 سیمه:

کد php:
Config Lcdpin Portd Rs Pinc.5 Pinc.6 Rw Pinc.7 

در مثال بالا پایه db0 به پورت d.0 و پایه db1 به پورت d.1 و ... پایه db7 به پایه d.7 و پایه rs به پایه c.5 و پایه e به پایه c.6 و پایه rw به پایه c.7 متصل میگردد ، در این حالت یازده پایه از lcd اشغال میشود .


بعد از راه اندازی LCD نوبت کار کردن با ان است .

برای نوشتن روی LCD از دستور زیر استفاده می شود :

کد php:
Lcd “x” 

که X می تواند هر چیز ی باشد (البته در محدوده کارکتر های اسکی ).مانند:

کد php:
Lcd “1nafar” 

یا

کد php:
LCD "+ +” 

یا

کد php:
Lcd "123@#$qwe” 

برای پاک کردن lcd از دستور cls استفاده می شود .مانند:

کد php:
")(*&&^%$%$#@" lcd 
Wait 1 
Cls 
Lcd 
"asdfgfghk” 

با دستور زیر می توان در سطر ها و ستون های دیگر lcd نوشت.

کد php:
Locate x,

که x ادرس سطر و y ادرس ستون می باشد.

کد php:
Locate 1,
Lcd 
"qwert” 
Locate 2,1 
Lcd "
123456
Locate 2,8 
Lcd "
mnbv

توجه کنید برای یک lcd ، مثلا 16*2 حداکثر x ،2 و حداکثر y ، 16 است .

با دستورات زیر میتوان به سطر های مختلف lcd پرش کرد و در انجا متن را نوشت :

کد php:
Upperline 

با این دستور به خط بالای پرش میشود

کد php:
Lowerline 

با این دستور به خط پایینی پرش میشود

کد php:
Home 

با این دستور به سطر اول ، ستون اول پرش میشود

کد php:
Thirdline
Fourthline 

با دو دستور بالا میتوان به ترتیب به خط سوم و چهارم پرش کرد (این دستور برای lcd های است که 4 سطر دارند)، مانند:

کد php:
$regfile "m16def.dat"
$crystal 8000000
Config Lcd 
16 4
Config Lcdpin 
Pin Db4 Pinc.0 Db5 Pinc.1 Db6 Pinc.2 Db7 Pinc.3 Rs Pinc.4 Pinc.5
Lowerline
Lcd 
"qwert"
Thirdline
Lcd 
"vcxz"
Fourthline
Lcd 
"1236"
Upperline
Lcd 
"erff"
Wait 2
Home
Lcd 
"123654"
End 

با دستور زیر میتوان تعداد فضای خالی دلخواه را بر روی lcd ایجاد کرد:

کد php:
LCD SPC(x

تعداد x ستون خالی میماند ، وبعد از ستون x نوشتن ادامه میابد.


با استفاده از دستور زیر میتوانید lcd را روشن یا خاموش کنید:

کد php:
DISPLAY ON OFF 

On : lcd روشن میشود / off : lcd خاموش میشود.

با استفاده از دستور زیر میتوانید کنتراست (میزان نور (کم رنگی وپر رنگی) متن) متن را تغییر دهید:

کد php:
Lcdcontrast x 

X میزان کنتراست است که میتوانید بین 0 تا 3 باشد ، به ازای 0 کمترین کنتراست و به ازای 3 بیشترین کنتراست مشاهده میشود.

Lcd دارای یک مکان نما می باشد که با دستور زیر میتوان ان را روشن یا خاموش یا چشمک زن یا ثابت قرارداد .

Cursor On با این دستور مکان نما روشن می شود (در حالت عادی مکان نما روشن است ).
Cursor off با این دستور مکان نما خاموش می شود.
Cursor blink با این دستور مکان نما چشمک می زند .
Cursor noblink با این دستور مکان نما دیگر چشمک نمی زند.

با دستور زیر می توانید کاراکتر های روی lcd را به چپ یا راست شیفت دهید.

shiftlcd left این دستور کارکترها را به اندازه یک ستون به چپ منتقل میکند.
shiftlcd right این دستور کارکترها را به اندازه یک ستون به راست منتقل میکند .

با دستور زیر میتوانید مکان نما را به راست یا چپ منتقل کنید:

کد php:
SHIFTCURSOR LEFT RIGHT 

left این دستور مکان نما را به اندازه یک ستون به چپ منتقل میکند.
right این دستور مکان نما را به اندازه یک ستون به راست منتقل میکند .

کد php:
$regfile "m16def.dat"
$crystal 8000000
Config Lcd 
16 4
Config Lcdpin 
Pin Db4 Pind.2 Db5 Pind.3 Db6 Pind.4 Db7 Pind.3 Rs Pind.0 Pind.1
Lcdcontrast 1
Locate 2 
1
Lcd 
"12356"
Shiftcursor Right
Wait 1
Display Off
Wait 1
Display On
Lcdcontrast 2
Locate 4 
1
Lcd Spc
(5)
Lcd "qwer"
Shiftcursor Left
End 

منبع : http://forum.iranled.com/showthread.php?tid=10869
۱۵-تير-۱۳۸۹, ۱۶:۱۱:۱۳
ارسال‌ها
پاسخ
تشکر شده توسط : liliansh
liliansh آفلاین
تازه وارد

ارسال‌ها: 5
موضوع‌ها: 1
تاریخ عضویت: تير ۱۳۸۹

تشکرها : 1
( 0 تشکر در 0 ارسال )
ارسال: #8
RE: درخواست:کنترل روشنایی به روش pwm
دستور pwm رو مشکل دارم طبق دستور کتاب کاهه نوشتم جواب نمیده
در ضمن تو قسمت compare مهمه که چی بنویسیم؟
۱۵-تير-۱۳۸۹, ۱۷:۱۸:۰۰
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

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

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #9
RE: درخواست:کنترل روشنایی به روش pwm
مهندس پیشنهاد می کنم پست شماره 6 ( سه تا پست بالاتر ) رو دوباره بخونی و تایپیک هایی هم که معرفی شده یه نگاهی بندازی !!!

مگه شما چی نوشتی که جواب نداده !
برنامتو بذار !!


compare تعیین می کنه خروجی مثبت باشه یا منفی !
بهتر بگم وقتی PWM رو آخر می ذاری سطح مثبت باشه یا منفی !!
یا اینکه خروجی NOT شده باشه یا نه !!!
شما رو همون Clear Down بذار تا هر چی عدد PWM رو بیشتر می کنی سطح مثبت خروجی بیشتر بشه !!!
۱۵-تير-۱۳۸۹, ۱۷:۳۲:۴۴
ارسال‌ها
پاسخ
liliansh آفلاین
تازه وارد

ارسال‌ها: 5
موضوع‌ها: 1
تاریخ عضویت: تير ۱۳۸۹

تشکرها : 1
( 0 تشکر در 0 ارسال )
ارسال: #10
RE: درخواست:کنترل روشنایی به روش pwm
جواب ها رو از قسمت ایمیل دیدم .بخاطر همین جواب اولتون زود تر اومد.بعد قسمت های دیگرو دیدم.ممنون.
میشه یکم هم راجع به pwma1 , pwmb1 توضیح بدین؟
۱۵-تير-۱۳۸۹, ۱۷:۴۴:۲۷
ارسال‌ها
پاسخ
t3r!p3000 آفلاین
         
*****

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

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #11
RE: درخواست:کنترل روشنایی به روش pwm
تایمر یک دو تا خروجی PWM داره به نام های pwma1 , pwmb1 که می تونین به صورت مستقل از هم عدد دهی کنید !!!

البته توجه کنین فرکانسشون یکیه !!!!!

شما که یه خروجی لازم دارین میتونین فقط از یکیش استفاده کنین !
یا اینکه از PWM تایمر دو استفاده کنین !!

و البته می تونین به هر دوشون یه عدد بدین و compare هاشون رو برعکس بذارین تا خروجی ها برعکس هم باشه !

مثلا با کاهش نور یه لامپ نورش کم بشه و یه لامپ نورش زیاد شه !!!!
۱۵-تير-۱۳۸۹, ۱۸:۱۶:۰۸
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  راهنمایی در مورد کنترل دور موتور کولر sinastar 12 23,448 ۱۰-آبان-۱۳۹۷, ۱۰:۱۸:۵۹
آخرین ارسال: alimogmov
  کنترل زاویه اتش تریستور nex2004 67 79,728 ۲۲-بهمن-۱۳۹۵, ۲۲:۴۴:۱۷
آخرین ارسال: pars_paya2
  ساخت کنترل فاز با avr mfazl22 3 3,832 ۲۸-اردیبهشت-۱۳۹۵, ۲۲:۴۸:۰۷
آخرین ارسال: kimiafars
  [فوری] کنترل سرعت موتور با کیپد kurd9691 0 2,231 ۱۴-اردیبهشت-۱۳۹۵, ۱۶:۵۷:۴۶
آخرین ارسال: kurd9691
  با میکرو یک کلید 220 رو کنترل کنیم saeidjan 7 13,676 ۱۹-بهمن-۱۳۹۴, ۱۰:۵۴:۱۵
آخرین ارسال: sharin
  شمارنده سه رقمی با امکان کنترل morvarid 1 2,557 ۲۴-مرداد-۱۳۹۴, ۱۵:۳۷:۱۴
آخرین ارسال: omid_phoenix
  [سوال] سرعت میکرو کنترل avr sajjad12 3 3,052 ۱۴-مرداد-۱۳۹۴, ۱۱:۵۷:۳۶
آخرین ارسال: sajjad12
  پیدا کردن باگ برنامه ساده کنترل دو طرفه موتور dc با pwm cortex-m3 1 2,801 ۰۱-مرداد-۱۳۹۴, ۲۳:۱۱:۰۰
آخرین ارسال: omid_phoenix
  [پروژه] کنترل ربات با موبایل ! a.mehran 10 7,773 ۱۱-خرداد-۱۳۹۴, ۱۶:۱۲:۱۸
آخرین ارسال: alira725
  کنترل دما با ترموکوپل abb_saleh 2 5,868 ۰۴-خرداد-۱۳۹۴, ۲۳:۱۴:۲۱
آخرین ارسال: hosseinip

پرش به انجمن:


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

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