ايران ويج

نسخه‌ی کامل: كنترل سرعت و نور فلاشر 8 كاناله با كامپيوتر همراه با GLCD
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
يه پروژه براي آشنايي با پورت سريال ، LCD گرافيكي ، تايمر و كار با رشته ها بوسيله AVR و تحت BASCOM .
با كامپيوتر دستور بدين ، ميكرو براتون انجامش بده .

درا ين پروژه با پورت سريال كامپيوتر مي توانيم : يك LED را خاموش و روشن كنيم ، سرعت و شدت نور فلاشر 8 كاناله پيشرفته اي را كنترل و تنظيم كنيم ، با دستورات خاصي عمليات مختلفي را انجام بديم ( مثلاً با دستور cls صفحه نمايش را پاك و يا با دستور love شكل يك قلب را نشان دهيم و ... ) .
تمام اطلاعات مورد نياز بر روي صفحه نمايش نشان داده مي شود .
با هر دستوري كه وارد مي كنيم دستورات قبلي يه خط به بالا منتقل مي شوند . ( همچون DOS )
ارتباط ميكرو با كامپيوتر از طريق HyperTerminal كه در هر ويندوزي وجود دارد استفاده شده است .
براي كسب اطلاعات بشتر فايل HELP موجود در پروژه را مشاهده كنيد .
اميدوارم كه استفاده كافي را از مدار ببريد .

با تشكر از مديريت سايت

A.N.T
با سلام عرض خسته نباشید
3 تا سوال داشتم
1) میتونید یک توضیح خط به خط راجع به برنامتون بزارید .چون من خودم در مورد دریافت اطلاعات از کامپیوتر مشکل دارم
2)چه طور ال سی دی گرافیکی را به ال سی دی 2*16 تو برنامه بسکام تبدیل بکنیم

3)شما چه طور و با چه دستوری اطلاعات را از پورت سریال دریافت میکنید

با تشکر
1-
وای!
توضیحات پورت سریال رو به زودی تو پست بعدی می ذارم !!

2-
کانفیگش رو عوض کنید و دستورات نمایشی رو طبق اون عوض کنین !

3-
inkey
آره علی جان هرکی دوست میداری یه آموزش جامع در این باره و مخصوصا قسمت کامپیوترش بزار من اون تاپیکایی رو که قبلا گزاشته بودی گم کردم


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
مثال از کتاب آقای یه نفر ( سعید جون ) :


ارتباط سریال rs232 :


در این ارتباط از دوسیم به نام های rxd و txd استفاده میشود که خط txd وسیله اول دیتا را از ان به بیرون منتقل میکندو خط خروجی دیتا است و به ورودی دیتا دستگاه دوم ( txd ) متصل میشود و خط rxd ورودی دیتا است که به خروجی دیتای دستگاه دیگر (rxd ) متصل میشود.


در این روش میتوان نهایتا تا دووسیله را به هم متصل کرد .(از طریق یک پورت)

این پروتکل برای ارتباط میکرو با میکرو ، میکرو با کامپیوتر و کامپیوتر با کامپیوتر استفاده میشود ، برای ارتباط میکرو با میکرو شما نیاز به دو برنامه برای دو میکرو دارید ، برای ارتباط میکرو با کامپیوتر شما باید علاوه بر نوشتن برنامه برای میکرو یک برنامه نیز برای کامپیوتر بنویسید و در نهایت برای ارتباط دو کامپیوتر با هم شما باید با یکی از زبان های برنامه نویسی برای هر دو کامپیوتر برناه بنویسید که این موضوع از بحث ما خارج است.(برای راه اندازی این پروتکل از کریستال خارجی استفاده کنید)

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

تعیین نرخ انتقال دیتا:
کد php:
$BAUD=VAR 
این دستور میزان انتقال دیتا در ثانیه را مشخص میکند وباید در هر دو وسیله ای که به هم متصل میشوند یکی باشد (در غیر این صورت ارتباط کار نمیکند) بهتر است نرخ انتقال دیتا در مناطق دارای نویز کمتر انتخاب شود.

دستور PRINT :
کد php:
PRINT  VAR 
توسط این دستور میتوان داده یا متغیری را به پورت سریال ارسال کرد. VAR یم متغیر از جنس متغیرهای گفته شده میباشد.

دستور PRINTBIN :
کد php:
PRINTBIN VAR 
توسط این دستور متغیر VAR به باینر تبدیل شده سپس به پورت سریال ارسال میشود.

دستور WAITKEY :
کد php:
VAR=WAITKEY() 
این دستور تا زمانی که متغییر توسط دستگاه دیگر به پورت سریال ارسال شود منتظر میماند و پس از دریافت متغیر برنامه از خط بعد ادامه می یابد.

دستور INKEY :
کد php:
VAR=INKEY() 
این دستور مقدار اسکی کاراکتر دریافت شده از پورت سریال را برمیگرداند.

دستور INPUTBIN :
کد php:
INPUTBIN  VAR 
این دستور داده باینری را از پورت سریال میگیرد و در متغیر VAR قرار میدهد.

دستور INPUTHEX :
کد php:
INPUTHEX  VAR 
این دستور داده هگز رااز پورت سریال دریافت میکند و در متغیر VAR قرارمیدهد. مانند:

در مثال زیر با استفاده از ارتباط سریال ، یک ارتباط دوطرفه بین دو میکرو برقرار کرده ایم ،

کد php:
$regfile "m32def.dat" $crystal 1000000
$baud 
9600
Config Portb 
Input Config Porta Output
Dim A 
As Byte As Byte
W
:
Pinb Printbin Q
Inkey() : Porta A
Goto W
End
میکرو 2
:
$regfile "m32def.dat" $crystal 1000000
$baud 
9600
Config Portb 
Input Config Porta Output
Dim A 
As Byte Dim Q As Byte
W
:
Pinb Printbin Q
Inkey() : Porta A
Goto W
End 

از انجا که ارتباط دو طرفه میباشد ( هر دو میکرو دقیقا مانند هم هستند ) برنامه دو میکرو مشابه است ،

درخط اول میکرو و کریستال معرفی شده است که میکرو مگا 32 و کریستال مورد استفاده 10 مگا هرتز میباشد .

در خط دوم نرخ انتقال دیتا مشخص گردیده است ، مقدار ان 9600 است . نرخ انتقال دیتا باید در هر دو میکرو یکسان باشد .

در خط سوم پورت b به عنوان ورودی ( برای اتصال کلید ) و پورت a به عنوان خروجی (برای اتصال led) معرفی شده اند .

در خط چهارم دو متغیر از جنس بایت برای ذخیره مقادیر معرفی شده است .

در خط پنجم شروع یک حلقه میباشد ( شما میتواندی از دیگر حلقه ها نیز استفده کنید).

در خط ششم مقدار موجود بر روی پورت b در متغیر q ریخته میشود و سپس با دستور Printbin Q به پورت سریال فرستاده میشود.

در خط هفتم مقدار گرفته شده از پروت سریال در متغیر a ریخته میشود و بعد متغیر a بر روی پورت a ریخته میشود.

خط هفتم پایان حلقه میباشد ، هنگامی که cpu میکرو به این خط رسید به برچسب w پرش میکند.

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


در حالتی که هیچ یک از کلید ها یک نشده اند ، مقدار q صفر دسیمال و &b00000000 باینری است ، حال اگر هر یک از کلید ها فشرده شود مقدار q تغیر میکند.

دو پایه txd و rxd میکرو نقش دریافت و ارسال داده را در حالت پیشفرض برعهده دارند ، با دستور زیر شما میتوانید این دو پایه را به پایه های دلخواه تغییر دهید:

کد php:
Open "comx.y:$baud,8,n,1" For Output/input As #q 

comx.y : نام پورت و پایه ای است که باید به عنوان txd یا rxd جدید عمل کند.

:$baud نرخ داده عبوری از پایه را نشان میدهد ، این مقدار باید با نرخ انتقال دیتا ی اصلی برابر باشد.

Output/input : پایه میتواند وردی داده( rxd) یا خروجی داده( txd ) باشد.

Q : شماره کانال را مشخص میکند.
مانند:

کد php:
Open "comd.1:19200,8,n,1" For Output As #1
Open "comd.0:19200,8,n,1" For Input As #2 

در مورد بالا portd.1 به عنوان txd و portd.0 به عنوان rxd در نظر گرفته شده است ، همچنین نرخ انتقال داده برابر با 19200 است.
واسه قسمت کامپیوتر تایپیک های زیر رو ببینید :

http://www.iranled.com/forum/showthread.php?tid=12119

http://www.iranled.com/forum/showthread.php?tid=18367
دوستان همه این روش هایی که شما میگید رو من انجام دادم
ولی به نتیجه نرسیدم

در مورد ال سی دی هم دست آقای Gawky درد نکنه واقعا سالاری
دوستان یکی لطف کنه یک مثال خیلی ساده با AVR که فقط یکی یا دوتا لامپ رو با کامپیوتر خاموش و روشن بکنه
البته با بسکام ویک برنامه VB چون من ویندوزم 7 هست و هایپتر ترمینال ندارم

من از دستورات زیادی برای دریافت اطلاعات از پورت سریال کامپیوتر استفاده کردم ولی به نتیجه نرسیدم.البته خیلی خوب اطلاعات رو از میکرو به پورت سریال کامپیوتر میفرستم و از اون طرف هم دریافت میکنم

خواهشا یک نفر یک برنامه خیلی ساده بزاره تا من با نحوه استفاده از دستورات آشنا بشم

با تشکر