امتیاز موضوع:
  • 2 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
نوشتن در LCD با ارتباط سریال
نویسنده پیام
behzady آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,169
موضوع‌ها: 57
تاریخ عضویت: آبان ۱۳۹۰

تشکرها : 4094
( 6339 تشکر در 2085 ارسال )
ارسال: #1
نوشتن در LCD با ارتباط سریال
این بردی هست که من برای این کار ساختم و کلا با قطعات و اینا 15 تومن شد
این برد شبیه این نمونه یه خارجی (LCD03) هست فعلا فقط با ارتباط سریال هست و در اینده ارتباط دو سیمه هم بهش اضافه میشه
الان شما متن رو میفرستید و در اخرش یه علامت $ و روی LCD نمایش داده میشه اگه طول حرف ها از 16 بیشتر شه خودش متن رو تایپ می کنه و نیازی به $ نخواهد بود
وقتی مشغوله PORTD.4 یک میشه البته نیازی به این کار نیست بیشتر مواقع درست کار میکنه
یه سری کاراکتر هم داره که باهاش میتونید پروگرس بار بسازید خودتون بسته به نیاز میتونید تغییرش بدید
روی برد دوتا جامپر هست یکی برای پروگرام کردن یکی هم برای تست که روی LCD یه مقداری رو به طور ثابت مینویسه و در اینده برای انتخاب مد استفاده میشه
نیازی به کریستال خارجی هم نیست اون مال تایمر 2 هست که فعلا با تایمر 1 راش انداختم سنسور دما رو هم میتونید نزارید
رمز
myrobo.org


فایل‌(های) پیوست شده بندانگشتی (ها)
       

.zip   LCD.zip (اندازه: 29.16 KB / تعداد دفعات دریافت: 861)

به همه عشق بورز، به معدودی اعتماد کن و در حق کسی بدی نکن.
ویلیام شکسپیر

نباید ایمان به انسانیت را از دست دهید. انسانیت یک اقیانوس است؛ اگر قطرات اندکی از اقیانوس کثیف است، اقیانوس کثیف نمی‌شود.
مهاتما گاندی

يَا أَيُّهَا الَّذِينَ آمَنُواْ اسْتَعِينُواْ بِالصَّبْرِ وَالصَّلاَةِ إِنَّ اللّهَ مَعَ الصَّابِرِينَ
(آخرین ویرایش در این ارسال: ۱۰-آذر-۱۳۹۱, ۲۱:۵۶:۱۵، توسط babyy.)
۰۹-آذر-۱۳۹۱, ۲۳:۱۳:۱۸
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : salehjg, h0x00i, رسول, orange signal, vahiddigi
behzady آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,169
موضوع‌ها: 57
تاریخ عضویت: آبان ۱۳۹۰

تشکرها : 4094
( 6339 تشکر در 2085 ارسال )
ارسال: #2
RE: نوشتن در LCD با ارتباط سریال
با عرض پوزش برای استفاده در محیط نرم افزار پروتئوس اتصال گراند یکی از پین های ال سی دی )RW( رو حذف کنید
مانند عکس
مشاهده
(این نوشته ی روی عکس هارو خود سایت اضافه میکنه دیگه حالشو ندارم غیر فعالش کنم بعد دباره فعال شرمنده)
میتوانید برنامه را نیز به این صورت تغییر دهید
(دفعات ریست watchdog کاهش یافته است نیازی بهش نبود)
کد:
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 100
$swstack = 100
$framesize = 100

Config Portb = Input
Config Portd = Input
Config Portc = Input
Portb = 255
Portd = 255
Portc = 255
Led Alias Portd.7
Set Portd.6
Dim Ti As Byte
Set Portb.1
Set Portb.2
Set Portb.3
Set Portb.4
Set Portb.5
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.7 = Output
Config Portb.0 = Output
Set Portd.4

Config Portb.0 = Input
Portb.0 = 0
Disable Interrupts : Set Portd.4
On Ovf1 Sectic
Config Timer1 = Timer , Prescale = 256
Enable Timer1
Enable Ovf1
Start Timer1
Timer1 = 34286

On Urxc Rs
Enable Urxc
$baud = 9600
Reset Portd.7
Light Alias Portb.0
Config Adc = Single , Prescaler = 128 , Reference = Avcc
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0 , Wr = Portd.5
Config Lcd = 16 * 2
Dim Lt As Byte
Deflcdchar [0] , 31 , 32 , 32 , 32 , 32 , 32 , 32 , 31 ' replace [x] with number (0-7)
Deflcdchar [1] , 31 , 16 , 16 , 16 , 16 , 16 , 16 , 31 ' replace [x] with number (0-7)
Deflcdchar [2] , 31 , 24 , 24 , 24 , 24 , 24 , 24 , 31 ' replace [x] with number (0-7)
Deflcdchar [3] , 31 , 28 , 28 , 28 , 28 , 28 , 28 , 31 ' replace [x] with number (0-7)
Deflcdchar [4] , 31 , 30 , 30 , 30 , 30 , 30 , 30 , 31 ' replace [x] with number (0-7)
Deflcdchar [5] , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31 ' replace [x] with number (0-7)
Dim L(2) As String * 16
Dim D As Byte

Dim C As String * 1
Dim A As Word
Dim B As Single
Dim E As Bit
Dim Ln As Bit

Display On
Cls
Cursor Off
Lt = 0
Light = 1
Start Adc
Led = 1
Lcd "Hi!"
Lowerline

A = Getadc(6)
A = A * 5
B = A / 1023
C = Fusing(b , "#.#")
Lcd "Temp Is: " ; C ; "'C"

Wait 1

Lt = 0
Cls
A = Getadc(7)
A = A * 5
B = A / 1023

C = Fusing(b , "#.#")
Lcd "LCD Cont: " ; C ; "V"
Lowerline

A = Getadc(14)
A = A * 5
B = A / 1023
C = Fusing(b , "#.#")
Lcd "Int Ref is: " ; C ; "V"

Wait 1

Lt = 0
Cls
Reset Portd.4
Enable Urxc
Enable Interrupts : Reset Portd.4
Start Timer1
Config Watchdog = 2048
Start Watchdog

Do

Reset Portd.4
If E = 1 Then
Disable Interrupts : Set Portd.4
Set Portd.4
Cls
Lcd L(1)

Lowerline
Lcd L(2)

Lt = 0
Light = 1
E = 0
A = Ln + 1
L(a) = ""
Lt = 0
Light = 1
Enable Interrupts : Reset Portd.4
End If
If Len(l(1)) = 0 Then
If Len(l(2)) = 0 Then
Ln = 0
Light = 0
End If
End If
If L(1) = "disoff" Or L(2) = "disoff" Then
Display Off
L(1) = ""
L(2) = ""
E = 0
Ln = 0
End If
If L(1) = "dison" Or L(2) = "dison" Then
L(1) = ""
L(2) = ""
E = 0
Ln = 0
Display On
End If
If Pind.6 = 0 Then
Set Portd.4
Disable Interrupts : Set Portd.4
Led = 1
While Pind.6 = 0
Set Portd.4
Cls
Wait 1
Lcd " BehzadMokhtari "
Lowerline
Lcd " @live.com "
Wait 2
Light = 1
Wend
Cls
Light = 0
L(1) = ""
L(2) = ""
E = 0
Ln = 0
Enable Interrupts : Reset Portd.4
Reset Portd.4
End If

Idle
Loop
End
Sectic:

Toggle Led
Timer1 = 34286
If Lt = 6 Then
Light = 0
Lt = 0
Else
Incr Lt
End If
Reset Watchdog
Return
Rs:
D = Udr
Disable Interrupts : Set Portd.4

Light = 1
C = Chr(d)
If D < 6 Then
Lcd Chr(d)
C = ""
End If
If C = "$" Then
E = 1
Light = 1
Toggle Ln
Else
A = Ln + 1
L(a) = L(a) + C
End If

If Len(l(a)) = 16 Then
Toggle Ln
E = 1
Light = 1
End If
If E = 1 Then
Enable Interrupts
Set Portd.4
Else
Enable Interrupts : Reset Portd.4
End If

Return
برنامه همراه با I2C یکم وقت میخواد که فعلا موجود نیست اگه هم بهش نیاز دارید بهتره این برد رو نسازید چون به احتمال زیاد باید تغییر پیدا کنه(خودم که کارم راه افتاده دیگه فکر ایناش نبودم!)

به همه عشق بورز، به معدودی اعتماد کن و در حق کسی بدی نکن.
ویلیام شکسپیر

نباید ایمان به انسانیت را از دست دهید. انسانیت یک اقیانوس است؛ اگر قطرات اندکی از اقیانوس کثیف است، اقیانوس کثیف نمی‌شود.
مهاتما گاندی

يَا أَيُّهَا الَّذِينَ آمَنُواْ اسْتَعِينُواْ بِالصَّبْرِ وَالصَّلاَةِ إِنَّ اللّهَ مَعَ الصَّابِرِينَ
(آخرین ویرایش در این ارسال: ۱۶-آذر-۱۳۹۱, ۱۳:۰۴:۵۰، توسط behzady.)
۱۶-آذر-۱۳۹۱, ۱۲:۵۶:۰۸
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : orange signal, salehjg
behzady آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,169
موضوع‌ها: 57
تاریخ عضویت: آبان ۱۳۹۰

تشکرها : 4094
( 6339 تشکر در 2085 ارسال )
ارسال: #3
RE: نوشتن در LCD با ارتباط سریال
والا بعضی از دوستان خواستند که توضیح بیشتری درمورد این برد بدم منم گفتم چشم!:)
گاهی وقت ها ما توانایی اینو نداریم که LCD رو به طور مستقیم به میکرو خودمون متصل کنیم(پایه کم داریم، نمی تونیم سرعت کار رو پایین بیاریم و ...) یا مثلا نیاز داریم با کامپیوتر روی LCD چیز بنویسیم(جل الخالق!)
خوب این برد بکارمون میاد
این برد کلیه داده هایی رو که توی خط سریال درحال رد و بدل شدن هست رو روی LCD می نویسه(شاید عیبشم باشه بهتر بود اون هایی رو که مخصوص خودش فرستاده میشه رو بنویسه)(این مضکل در آینده حل میشه)
برنامه ی پیچیده ای نداره برای همین میتونید برخی از پردازش هاتون رو روی این میکرو ببرید و استفاده کنید که سرعت میکرو اصلی خودتون بالا بره(اون پین های اضافه رو برای این کار سوکت بهش زدم)
قسمت اول برنامه که چیز خاصی نداره یه سری تنظیمات انجام میده و یه متن پیش فرضی رو مینویسه
تایمر واچ داگ هم گذاشتم که اگر میکرو هنگید خودش ریست بشه ممکنه جایی باشه که نتونید ریستش کنید(مثلا رو ربات) پس این لازمه
توی قسمت اصلی برنامه اگر بیت مربوط به اماده بودن داده ها برای نوشتن یک بشه کل LCD رو پاک میکنه و دو خط رو با متغییر های مربوط به اونا پر میکنه
قسمت دوم هم مال اینه که جامپری که روی برد هست اگه وصل شد یه متنی رو هی مینویسه
در اخر هم میره توی مد اسلیپ.
یه زیر برنامه داریم sectic که هر وقت تایمر 1 پر شد اجرا میشه(1 ثانیه)
این باعث بیدار شدن میکرو میشه LED روی برد رو تغییر وضعیت میده و اگه نور LCD به اندازه کافی روشن مونده باشه اونو خاموش میکنه متغییر Light.
زیر برنامه ای هم هست به نام RS
وقتی داده ای توی خط سریال ارسال بشه اجرا میشه و میکرو بیدار میشه
بسته به داده مقداری رو به متغییر C میده
اگه مقدار $ بود نشانه از اتمام داده از سوی ما هست پس بیت اماده بودن داده رو یک میکنه تا دفعه بعد میکرو داده ها رو روی LCD بنویسه اگه طول متغییر هایی که برای نگه داری داده ها هست بیشتر از طول LCD بشه خودش بیت اماده بودن داده هارو یک میکنه
در غیر این صورت ها C رو به متغییر خطی که درش هستیم اضافه میکنه
و تمام در این مدت میکرو ای که داده رو ارصال میکنه باید پین D.4 میکرو ی مارو پول آپ کنه و فقط وقتی این پایه صفر هست داده رو ارسال کنه وگرنه میکرو ریست میشه البته این اتفاق خیلی نادره مگر اینکه سرعت نوشتن داده هاتون خیلی زیاد باشه که اون موقع حتما باید این پین رو چک کنید (بهتره توی وقفه اتمام ارسال داده توی میکرو خودتون ویا تابعی که داده هارو تک تک میفرسته چک کردن این پین رو بنویسید تا این مشکل پیش نیاد )

به همه عشق بورز، به معدودی اعتماد کن و در حق کسی بدی نکن.
ویلیام شکسپیر

نباید ایمان به انسانیت را از دست دهید. انسانیت یک اقیانوس است؛ اگر قطرات اندکی از اقیانوس کثیف است، اقیانوس کثیف نمی‌شود.
مهاتما گاندی

يَا أَيُّهَا الَّذِينَ آمَنُواْ اسْتَعِينُواْ بِالصَّبْرِ وَالصَّلاَةِ إِنَّ اللّهَ مَعَ الصَّابِرِينَ
۱۶-آذر-۱۳۹۱, ۱۶:۴۳:۱۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : salehjg
salehjg آفلاین
مدیر بخش
*****

ارسال‌ها: 1,281
موضوع‌ها: 133
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 9560
( 8557 تشکر در 2603 ارسال )
ارسال: #4
RE: نوشتن در LCD با ارتباط سریال
سلام

؟؟؟؟ :
نقل قول: Config Portb = Input
Config Portd = Input
Config Portc = Input
Portb = 255
Portd = 255
Portc = 255

سطر آخر رو پاک کنید تا lcd کار کنه
۲۹-تير-۱۳۹۳, ۲۱:۱۹:۱۰
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  ریموت کنترل مادون قرمز و ارتباط با AVR t3r!p3000 30 70,459 ۲۷-آذر-۱۳۹۵, ۱۴:۰۳:۵۷
آخرین ارسال: safeland
  پروژه ارتباط سریال AVR با hyper terminal و matlab و Labview 2nafar 13 39,623 ۰۵-دى-۱۳۹۳, ۲۰:۱۵:۱۹
آخرین ارسال: biner
  ارتباط AVR بلوتوث علي برقي 22 26,498 ۱۱-اردیبهشت-۱۳۹۳, ۱۰:۳۹:۱۷
آخرین ارسال: student-p
  ارتباط میکرو با درگاه USB بدون نیاز به وابسته h0x00i 14 29,586 ۲۲-مهر-۱۳۹۲, ۰۱:۳۹:۳۵
آخرین ارسال: dadashy
  ارتباط با کامپیوتر از طریق USB ha_60 6 17,012 ۰۹-اسفند-۱۳۹۱, ۱۴:۱۶:۳۷
آخرین ارسال: afshinmar
  ارتباط USB با tf232 و rs232 h0x00i 13 16,212 ۲۵-مهر-۱۳۹۱, ۱۵:۴۶:۰۲
آخرین ارسال: abbasalifix
  مقاله آموزش استفاده از پورت سریال در دات نت Serial In DOTNET محمد حسینی 5 15,301 ۰۸-مرداد-۱۳۹۱, ۲۲:۳۴:۳۱
آخرین ارسال: sharin

پرش به انجمن:


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

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