امتیاز موضوع:
  • 7 رأی - میانگین امتیازات: 3.29
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش بیسکام و کدویژن با پروژه های عملی ( بدون جزوه و فیلم )
نویسنده پیام
aKaReZa75 آفلاین
حسین باقری
*****

ارسال‌ها: 1,488
موضوع‌ها: 23
تاریخ عضویت: مرداد ۱۳۹۱

تشکرها : 4898
( 4581 تشکر در 1478 ارسال )
ارسال: #23
ولتمتر DC با میکرو کنترل AVR Atmega8
سلام دوستان.
اینم یک پروژه باحال.
این پروژه اندازه گیری ولتاژ 0 تا 220ولت Dc با میکروکنترل avr مدل atmega8 هستش.

مشخصات پروژه:
میکرو کنترل به کار رفته:atmega8
کریستال:8.000.000
زبان برنامه:بیسیک و سی

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

برنامه به زبان بیسیک:
کد:
$regfile = "m8def.dat"
$crystal = 8000000

Config Lcdpin = Pin , Db7 = Portd.7 , Db6 = Portd.6 , Db5 = Portd.5 , Db4 = Portd.4 , E = Portd.3 , Rs = Portd.2 : Config Lcd = 16 * 2
Config Adc = Single , Prescaler = Auto

Dim A As Word
Dim B As Single
Dim V As String * 5

Cursor Off

Locate 1 , 1 : Lcd "Www.IranLed.Com" : Locate 2 , 1 : Lcd "h.unique" : Wait 1 : Cls

Start Adc

Do
A = Getadc(6)
B = A * 0.2150537634408602
V = Fusing(b , "#.&")
Locate 1 , 1 : Lcd "Vlotag:" ; V ; "v" ; " "
Locate 2 , 1 : Lcd "Dc VoltMetr"

Loop

End

برنامه به زبان سی:
کد:
#include <mega8.h>
#include <alcd.h>
#include <stdio.h>
#include <delay.h>

unsigned int a;
float b;
char v[20];

unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (0x40 & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

void main(){
ADMUX=0x40 & 0xff;
ADCSRA=0x83;
lcd_init(16);
lcd_gotoxy(0,0);lcd_putsf("Www.IranLed.Com");lcd_gotoxy(0,1);lcd_putsf("h.unique");delay_ms(1000);lcd_clear();
do{
a=read_adc(6);
b=a*0.2150537634408602;
sprintf(v,"Vlotag:%0.1f v ",b);
lcd_gotoxy(0,0);lcd_puts(v);
lcd_gotoxy(0,1);lcd_putsf("Dc VoltMetr");
}while(1);
}

شبیه ساز:
[تصویر:  Dc_Voltmetr_220V_Pic.jpg]

توضیحات کلی:
مبدل آنالوگ به دیجیتال.
یکی از قابلیت های میکروکنترل Avr اینه که یک مبدل آنالوگ به دیجیتال 10 بیتی دارن که اگه ولتاژ آنالوگ بین 0 تا 5 ولت رو رو پایه های ADCx قرار بدیم اونو اندازه گیری میکنه و اگه 0 بود ریجستر خودشو 0 میکنه و اگه 5ولت بود رجیسترش برابر 1023میشه.
تو این پروژه هم با استفاده از پل مقاومت 220 ولت رو به 5ولت تبدیل کردیم که میکرو بتونه اونو اندازه گیری کنه.
اون پتانسیومتری رو هم که قرار دادم واسه ایته که ولتاژ رو ورودی رو تغییر بدیم.
اگه ما ولتاژ اصلی رو بر 1023 تفسیم کنیم و بعد جواب رو ضرب در مقدار ADC کنیم ولتاژ رو میتونیم رو Lcd نشون بدیم!

تـوجـه:حتما هردو پایه های Avcc و Aref رو به +5ولت متصل کنید.

توضیحات برنامه بیسیک:
1.پیکر بندی ADC در بیسیک:
کد:
CONFIG ADC = single, PRESCALER = AUTO, REFERENCE = opt
فقط در اینجا اگر گزینه ی REFERENCE رو انتخاب کنیم ما 3تا انتخاب خواهیم داشت.
1.Avcc
2.Aref
3.Internal
اگه ما گزینه ی Avcc رو انتخاب کنیم ولتاژ پایه adc با ولتاژ پایه Avcc مقایسه میشه.
اگه ما گزینه ی Aref رو انتخاب کنیم ولتاژ پایه adc با ولتاژ پایه Aref مقایسه میشه.
اگه ما گزینه ی Internal رو انتخاب کنیم ولتاژ پایه adc با ولتاژ داخلی میکرو که 2.56 ولت هستش مقایسه میشه.

2.دستورات مربوط به ADC:

2-1:برای شروع مقایسه باید از دستور:
کد:
Start Adc
استفاده کنیم و واسه استپ کردن مقایسه از دستور:
کد:
Stop Adc
استفاده کنیم.

2-2:برای دریافت مقدار ADC باید یک متغیر از نوع Word تعریف کنیم و از دستور:
کد:
var = GETADC(channel [,offset])
متغیری رو که تعریف کردیم برابر این دستور قرار میدیم و بجای Channel شماره پایه ADC که رو اون ولتاژ قرار داره رو قرار میدیم.
مثال:
کد:
Config Adc = Single , Prescaler = Auto
Dim A As Word
A = Getadc(0)
Lcd A
در مثال بالا مقدار ADC0 تو متغیر a ریخته میشه و رو lcd نمایش داده میشه.

3.دستور Fusing.
این دستور برای ساده کردن متغیر ها استفاده میشه.
فرم کلی این دستور:
کد:
target = FUSING(source, "mask")
مثال:
کد:
V = Fusing(b , "#.&")
متغیری که برابر این دستور قرار میگره حتما باید از توع String باشه.
در این مثال متغیر b با یک رغم اعشار ساده شده ولی روند نشده.
این علامت & برای ساده کردن هستش ولی عدد رو رند نمیکنه.
این علامت # برای ساده کردن هستش ولی عدد رو هم رند میکنه.

توضیحات برنامه سی:
در این کامپایلر دستوراتی همانند دستورات بیسکام وجود نداره و باید ریجستر هارو دستی مقدار دهی کنیم که اگه من بخوام ریجیستر ها و مقدار دهی اونارو توضیح بدم خیلی خیلی حجم مطالب زیاد میشه لذا از توضیح دادن این مطالب خوداری میکنم و به شما عزیزان توصیه میکنم که حتما یک کتاب مانند مرجع کامل میکرو کنترل های AVR تهیه کنید.اگر بازم کسی سوالی در این مورد داشت حتما با من در میون بزاره.

ساخت کد ها با استفاده از کدویزاد در کدویژن:
1.بر روی گزینه ی CodeWizard کلیک کنید.با کلیک بر روی این گزینه صفحه ی زیر باز میشه و بعد از انتخاب گزینه ی اول برروی ok کلیک کنید.
[تصویر:  Dc_Voltmetr_220V_CodeWizard_1_.jpg]

بعد از انجام کار های بالا صفحه ی زیر باز میشه.
[تصویر:  Dc_Voltmetr_220V_CodeWizard_2_.jpg]
در این صفحه گزینه ی ADC رو انتخاب کنید.
بعد گزینه ی Enable ADC رو انتخاب کنید.
در قسمت 5 پایه ای که ولتاژ روی اون با ADC مقایسه میشه رو انتخاب کنید و در قسمت 6 هم اون فرکانسی که دوس دارین رو انتخاب کنید.
اگه گزینه ی Use 8 bit رو انتخاب کنید مقایسه کننده از 10 بیتی به 8 بیتی تغییر میکنه.
اگه گزینه ی Interrupt رو انتخاب کنید بعد از پایان مقایسه یک وقفه رخ میده.
بعد از اینکه تنظیمات مورد نظرتونو انجام دادین رو گزینه 7 که Preview هستش رو انتخاب کنید.
بعد از انتخاب این گزینه کد های شما در صفحه ی Program Preview نمایش داده میشه.اون کد هارو مارک آل کنید و درون برنامه اصلی قرار بدین.

برای خواندن مقدار ADC ابتدا یک متغیر 16 بیتی تعریف میکنیم و از دستور:
کد:
var=read_adc(x);
که در اینجا var نام متغیری هستش که تعریف کردیم و x هم شماره پایه ای هستش که ولتاژ رو اون قرار داره.
مثال:
کد:
a=read_adc(0);
در مثال بالا مقدار ADC0 درون متغیر a قرار میگیره.

نـــکــــتـــه:بچه ها این کد هایی که در زیر گذاشتم مربوط به پیکر بدی ADC هستش.همون دستوراتی که با کدویزارد به دست آوردیم.
کد:
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (0x40 & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

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

امید وارم که توضیحات من و این پروژه بهتون کمکی کرده باشه.
موفق باشید.....Heart


فایل‌(های) پیوست شده
.zip   Dc_Voltmetr_220V[Www.IranLed.Com].zip (اندازه: 175.88 KB / تعداد دفعات دریافت: 198)

سلام، من حسین باقری هستم، طراح الکترونیک و برنامه نویس میکروکنترلر.
توی کانال یوتیوب من قراراه طراحی انواع بردهای الکترونیکی مثل بردهای تک لایه، دو لایه یا به طور کلی بردهای چند لایه، بردهای مبتنی بر میکروکنترلر، بردهای صنعتی، بردهای الکترونیک قدرت و بردهای فرکانس بالارو یاد بگیریم.
همینطور کدنویسی انواع میکروکنترلرهای 8 بینی مثل میکروکنترلرهای خانواده AVR-STM8، میکروکنترلرهای میبتی بر معماری ARM مثل STM32 و پردازنده های مخصوص اینترنت اشیاء مثل ESP32-ESP8266 و DSPها یاد میگیریم.
در کنار مباحث گفت شده، اصول اندازه الکترونیکی، نحوه صحیح مونتاژ و عیب‌یابی بردهای الکترونیکی، شبیه سازی مدارات مختلف رو هم یاد میگیریم.
اگر علاقه مند به یادگیری موضوعات عنوان شده هستید، به کانال یوتیوب من با آدرس زیر سر بزنید.
https://www.youtube.com/@aKaReZa75
(آخرین ویرایش در این ارسال: ۲۸-شهریور-۱۳۹۱, ۱۴:۲۵:۵۱، توسط aKaReZa75.)
۲۸-شهریور-۱۳۹۱, ۱۳:۱۲:۲۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : coloop, omid_phoenix, رسول, mahdi2210, helma, soy1345, asgarbs, navard, WhiteNoise, behzady, amiriyo, alimogmov, Pixar, a.mehran, alberto50
omid_phoenix آفلاین
مدیر بخش
*****

ارسال‌ها: 2,238
موضوع‌ها: 108
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 12682
( 15433 تشکر در 4574 ارسال )
ارسال: #24
RE: آموزش بیسکام و کدویژن با پروژه های عملی
حسین جون یه قفل رمز ساختم ولی نتونستم کی پدشو راه بندازم؛ یعنی حوصله ور رفتن نداشتمWhistle
مدارشو با برنامه بیسیک واست میذارم،قربون دستات ببین چطور میتونم برنامه کی پد و اصلاح کنم؛

کد:
$regfile = "m32def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
Config Kbd = Porta , Debounce = 200 , Delay = 100
Dim X As Byte
Dim F As Byte
Dim B As Byte
Dim Y As Byte
Dim Ramz As Integer
Dim Count As Byte
Declare Sub Convert()
Cursor Off
Cls
Locate 1 , 1
Lcd "enter pass"
Ramz = 0
Locate 1 , 2
Cursor Blink
Main:
Do
X = Getkbd()
Y = 16
If X < 16 Then Call Convert
If X = 0 Then
Waitms 200
Shiftcursor Left
Ramz = Ramz / 10
If Count > 1 Then Count = Count - 1
End If
If Y <= 9 Then
Waitms 200
Lcd Y
Ramz = Ramz * 10
Ramz = Ramz + Y
Count = Count + 1
End If
Loop Until Count = 4
If Ramz = 1372 Then
Locate 2 , 13
Lcd "pass is true "
Set Portd.1
Else
Lcd "pass is false "
End If
Goto Main
Sub Convert()
Select Case X
Case 8 : Y = 2
Case 4 : Y = 3
Case 5 : Y = 0
Case 13 : Y = 1
End Select
End Sub

پروژه هارو بدون منبع خودم کار می کنم، نمیدونم تا چه حد درسته؟

اینم کل پروژه؛

فایل پروژه

(آخرین ویرایش در این ارسال: ۰۱-مهر-۱۳۹۱, ۲۱:۴۲:۲۲، توسط omid_phoenix.)
۰۱-مهر-۱۳۹۱, ۲۱:۴۱:۱۳
ارسال‌ها
پاسخ
تشکر شده توسط : abbasalifix, WhiteNoise, behzady, alimogmov, Pixar
omid_phoenix آفلاین
مدیر بخش
*****

ارسال‌ها: 2,238
موضوع‌ها: 108
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 12682
( 15433 تشکر در 4574 ارسال )
ارسال: #25
RE: آموزش بیسکام و کدویژن با پروژه های عملی
سلام به همگی

این بار می خواهیم یاد بگیریم چطوری توسط adc میکرو یک سنسوری رو راه بندازیم؟
پروژه ای که میخواهیم کار کنیم، راه اندازی یه سنسور دما توسط میکرو avr که مقدار افزایش و کاهش دما روی lcd قابل رویت باشه.

[تصویر:  wqsw0kcwk0qj2olbj1kj.jpg]

برای راه اندازی این پروژه من از یک ای تی 32 ، یک سنسور دما lm35 و یک lcd 2*16 استفاده کردم؛

برنامه بیسیک(کلیه قسمت ها تو پروژه های قبلی توضیح داده شده اند) ؛

کد:
$regfile = "m32def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Dim Dama As Word
Dim A As Byte

Cursor Off

start adc

Do

A = Getadc(0)
Dama = A / 2
Dama = Dama - 1
Locate 1 , 1
Lcd "dama is : " ; Dama;
Loop
end


سورس و شبیه ساز پیوست شد.

(آخرین ویرایش در این ارسال: ۰۲-مهر-۱۳۹۱, ۲۲:۱۵:۴۴، توسط omid_phoenix.)
۰۲-مهر-۱۳۹۱, ۱۷:۰۷:۵۶
ارسال‌ها
پاسخ
تشکر شده توسط : aKaReZa75, رسول, mahdi2210, abbasalifix, navard, WhiteNoise, behzady, alimogmov
aKaReZa75 آفلاین
حسین باقری
*****

ارسال‌ها: 1,488
موضوع‌ها: 23
تاریخ عضویت: مرداد ۱۳۹۱

تشکرها : 4898
( 4581 تشکر در 1478 ارسال )
ارسال: #26
RE: آموزش بیسکام و کدویژن با پروژه های عملی
امید جان اینم همونی که میخواستی.
فقط چند تا توضیح بدم.موقعی که میخوای رمز انتخاب کنی(تو برنامه)اول رمزتو یدونه صفر بزار.ولی موقعی که میخوای اونو اجرا کنی نیازی به وارد کردن اون 0 اولی نیس.
اگه توجه کنی تو برنامه رمز رو:
کد:
Ramz = "012345"
انخاب کردم.ولی موقعی که میخوای رمز رو وارد کنی باید 12345 رو بزنی تا رمز رو قبول کنه.
بعد از اینکه رمزتو وارد کردی مساوی(=)رو بزن تا رمز تست شه.
بعد از اینکه رمز تست شد اگه اشتباه بود یا هر چیز دیگه و خواستی دوباره رمز بزنی کلید(on/c)رو بزن ورمزتو وارد کن.

بعد اون برنامه ای که لطف کردی و گذاشتی(همون دما سنجه)تو برنامه ای که نوشتی چندتا ایراد بود:
1.کریستال تو برنامه ای که نوشتی اشتباس.بجای 1مگا هرتز 100کیلو هرتز رو انتخاب کردی.
2.آخر برنامه هم End نذاشتی.
3.متغیر هارو بعد از کانفیگ تعریف کن.
4.Cursor Off رو هم نیازی نیس که تو حلقه بزاری.قبله حلقه بزار.
اینم برنامه اصلاح شده:
کد:
$regfile = "m32def.dat" : $crystal = 1000000

Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 : Config Lcd = 16 * 2
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Dim Dama As Word
Dim A As Byte

Cursor Off

Start Adc

Do

A = Getadc(0)
Dama = A / 2
Dama = Dama - 1
Locate 1 , 1 : Lcd "dama is : " ; Dama;

Loop

End

راستی پروتوس من با lm35 مشکل داره.دیگه نشد که اون تابعی که نوشتی رو چک کنم.Biggrin

موفق باشی.....Heart


فایل‌(های) پیوست شده
.zip   Ramz.zip (اندازه: 29.69 KB / تعداد دفعات دریافت: 95)

سلام، من حسین باقری هستم، طراح الکترونیک و برنامه نویس میکروکنترلر.
توی کانال یوتیوب من قراراه طراحی انواع بردهای الکترونیکی مثل بردهای تک لایه، دو لایه یا به طور کلی بردهای چند لایه، بردهای مبتنی بر میکروکنترلر، بردهای صنعتی، بردهای الکترونیک قدرت و بردهای فرکانس بالارو یاد بگیریم.
همینطور کدنویسی انواع میکروکنترلرهای 8 بینی مثل میکروکنترلرهای خانواده AVR-STM8، میکروکنترلرهای میبتی بر معماری ARM مثل STM32 و پردازنده های مخصوص اینترنت اشیاء مثل ESP32-ESP8266 و DSPها یاد میگیریم.
در کنار مباحث گفت شده، اصول اندازه الکترونیکی، نحوه صحیح مونتاژ و عیب‌یابی بردهای الکترونیکی، شبیه سازی مدارات مختلف رو هم یاد میگیریم.
اگر علاقه مند به یادگیری موضوعات عنوان شده هستید، به کانال یوتیوب من با آدرس زیر سر بزنید.
https://www.youtube.com/@aKaReZa75
(آخرین ویرایش در این ارسال: ۰۳-مهر-۱۳۹۱, ۱۵:۴۳:۲۷، توسط aKaReZa75.)
۰۲-مهر-۱۳۹۱, ۲۱:۰۱:۳۴
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix, coloop, hadikh73, رسول, mahdi2210, asgarbs, navard, WhiteNoise, behzady, alimogmov, Pixar
aKaReZa75 آفلاین
حسین باقری
*****

ارسال‌ها: 1,488
موضوع‌ها: 23
تاریخ عضویت: مرداد ۱۳۹۱

تشکرها : 4898
( 4581 تشکر در 1478 ارسال )
ارسال: #27
RE: آموزش بیسکام و کدویژن با پروژه های عملی
سلام دوستان.
اینم یک پروژه دیگه.
این پروژه ساخت ساعت دقیق و تقویم شمسی با تایمر های میکرو هستش.

مشخصات پروژه:
میکرو کنترل به کار رفته:atmega8
کریستال:1.000.000
زبان برنامه:بیسیک و سی

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

برنامه به زبان بیسیک:
کد:
$regfile = "m8def.dat"
$crystal = 1000000

Config Lcdpin = Pin , Db7 = Portd.7 , Db6 = Portd.6 , Db5 = Portd.5 , Db4 = Portd.4 , E = Portd.3 , Rs = Portd.2 : Config Lcd = 16 * 2
Config Timer2 = Timer , Async = On , Prescale = 128
Config Portc = Input

Dim H As Byte , M As Byte , S As Byte , Mo As Byte , D As Byte
Dim Y As Word

On Timer2 Timee

Enable Interrupts : Enable Timer2

Start Timer2

Cursor Off

Locate 1 , 1 : Lcd "Www.IranLed.Com" : Locate 2 , 1 : Lcd "h.unique" : Wait 1 : Cls

Y = 91 : Mo = 6 : D = 29 : H = 9 : M = 34 : S = 00

Do
If S > 59 Then : S = 0 : Incr M : End If
If M > 59 Then : S = 0 : M = 0 : Incr H : End If
If H > 23 Then : S = 0 : M = 0 : H = 0 : Incr D : End If

If D > 31 And Mo > 0 And Mo < 7 Then : Incr Mo : D = 1 : End If
If D > 30 And Mo > 6 And Mo < 9 Then : Incr Mo : D = 1 : End If
If D > 29 And Mo = 12 Then : Incr Y : Mo = 1 : D = 1 : End If
If Mo > 12 Then : Incr Y : Mo = 1 : D = 1 : End If

If Pinc.0 = 1 Then : Incr S : Bitwait Pinc.0 , Reset : End If
If Pinc.1 = 1 Then : Incr M : Bitwait Pinc.1 , Reset : End If
If Pinc.2 = 1 Then : Incr H : Bitwait Pinc.2 , Reset : End If

If Pinc.3 = 1 Then : Incr D : Bitwait Pinc.3 , Reset : End If
If Pinc.4 = 1 Then : Incr Mo : Bitwait Pinc.4 , Reset : End If
If Pinc.5 = 1 Then : Incr Y : Bitwait Pinc.5 , Reset : End If

Locate 1 , 1 : Lcd "H:" ; H ; " M:" ; M ; " S:" ; S ; " "
Locate 2 , 1 : Lcd "Y:" ; Y ; " M:" ; Mo ; " D:" ; D ; " "
Loop

End 'end program

Timee:
Incr S
Timer2 = 51
Return

برنامه به زیان سی:
کد:
#include <mega8.h>
#include <delay.h>
#include <alcd.h>
#include <stdio.h>

unsigned char h=9,m=34,s=0,mo=6,d=29;
unsigned int y=91;

char time[16];
char day[16];

interrupt [TIM2_OVF] void timer2_ovf_isr(void){
s++;
TCNT2=51;
}

void main(){
lcd_init(20);
ASSR=0x08;
TCCR2=0x05;
TIMSK=0x40;
#asm("sei")
DDRC=0xff;
lcd_gotoxy(0,0);lcd_putsf("Www.IranLed.Com");lcd_gotoxy(0,1);lcd_putsf("h.unique");delay_ms(1000);lcd_clear();
do{
sprintf(time,"H:%d M:%d S:%d",h,m,s);lcd_gotoxy(0,0);lcd_puts(time);
sprintf(day,"Y:%d M:%d D:%d",y,mo,d);lcd_gotoxy(0,1);lcd_puts(day);

if(s>59){s=0;m++;lcd_clear();}
if(m>59){s=0;m=0;h++;}
if(h>23){s=0;m=0;h=0;d++;}

if(d>31&&mo>0&&mo<7){mo++;d=1;lcd_clear();}
if(d>30&&mo>6&&mo<9){mo++;d=1;lcd_clear();}
if(d>29&&mo==12){y++;mo=1;d=1;lcd_clear();}
if(mo>12){y++;mo=1;d=1;lcd_clear();}

if(PINC.0==1){s++;do{if(PINC.0==0)break;}while(1);}
if(PINC.1==1){m++;do{if(PINC.1==0)break;}while(1);}
if(PINC.2==1){h++;do{if(PINC.2==0)break;}while(1);}

if(PINC.3==1){d++;do{if(PINC.3==0)break;}while(1);}
if(PINC.4==1){mo++;do{if(PINC.4==0)break;}while(1);}
if(PINC.5==1){y++;do{if(PINC.5==0)break;}while(1);}
}while(1);
}

شبیه ساز:
[تصویر:  Watch_data_simu_pic.jpg]

توضیحات کلی:
تایمر چیه؟تو میکرو های AVR تایمر اگه 16 بیتی باشه تا 65535 تا میشموره بعده اینکه تا 65535 شمورد پرچم سرریز خودشو 1 میکنه و از نو شروع به شموردن میکنه و اگه تایمر 8 بیتی باشه تا 255 تا میشموره بده اینکه تا 255 شمورد پرچم سرریز خودشو 1 میکنه و از نو شروع به شموردن میکنه.
با این امکان میشه وصیله های زیادی رو درست کرد و در کل خیلی کاربرد داره.
یکی از این کاربرد هاشم در ساخت ساعت هستش.

توضیحات برنامه بیسیک:
1.پیکر بندی تایمر/کانتر 2 در مد تایمر:
این تایمر 8 بیتی هستش و میتونه فرکانس خودش رو هم از پایه های TOSC1,TOSC2 دریافت کنه.
فرم کلی دستور به شکل زیر هستش:
کد:
CONFIG TIMER2 = TIMER | PWM , ASYNC=ON |OFF,
PRESCALE = 1 | 8 | 32 | 64 | 128 | 256 | 1024 ,
COMPARE = CLEAR | SET | TOGGLE | DISCONNECT ,
PWM = ON | OFF ,
COMPARE_PWM = CLEAR_UP| CLEAR_DOWN | DISCONNECT ,
CLEAR_TIMER = 1|0
[,CONFIGURATION=NAME]
در بالا با انتخاب ASYNC=ON تایمر فرکانس خودشو از پایه های TOSC1,TOSC2 دریافت میکنه و اگه ما یک کریستال ساعت که فرکانسش(32768Hz)هستش رو روی این پایه ها قرار بدیم و Prescale = 128 انتخاب کنیم به صورت دقیق هر 1ثانیه یکبار پرچم سریز شدن تایمر 1 میشه.
مثال:
کد:
Config Timer2 = Timer , Async = On , Prescale = 128

2.برای اینکه تایمر شروع به شمردن کنه از دستور:
کد:
Start TimerX
استفاده میشه که بجای X شماره تایمر مورد نظر رو قرار میدیم.

3.برای اینکه هر موقع پرچم سرریز تایمر 1شد ما متوجه شیم میشه از 1وقفه استفاده کرد.
مثال:
کد:
On Timer2 Timee
Enable Interrupts
Enable Timer2
در این مثال هر موقع تایمر 2 سرریز شد برنامه به لیبل Timee پرش میکنه.

4.دستور های Incr و Decr:
دستور Incr یک واحد به یک متغیر اضافه میکنه.
دستور Decr یک واحد از یک متغیر کم میکنه.
مثال:
کد:
Incr A
Decr B

5.دستور Bitwait:
فرم کلی این دستور:
کد:
BITWAIT x , SET/RESET
با این دستور تا X یکی از شرایط Set/Reset را پیدا نکنه اجرای برنامه متوقف میشود.
مثال:
کد:
Bitwait Pinc.3 , Reset
در این مثال تا Pinc.3 برابر با 0 منطقی نشه اجرای برنامه متوقف میشه.

توضیحات برنامه سی:
در این کامپایلر دستوراتی همانند دستورات بیسکام وجود نداره و باید ریجستر هارو دستی مقدار دهی کنیم که اگه من بخوام ریجیستر ها و مقدار دهی اونارو توضیح بدم خیلی خیلی حجم مطالب زیاد میشه لذا از توضیح دادن این مطالب خوداری میکنم و به شما عزیزان توصیه میکنم که حتما یک کتاب مانند مرجع کامل میکرو کنترل های AVR تهیه کنید.اگر بازم کسی سوالی در این مورد داشت حتما با من در میون بزاره.

ساخت کد ها با استفاده از کدویزاد در کدویژن:
1.بر روی گزینه ی CodeWizard کلیک کنید.با کلیک بر روی این گزینه صفحه ی زیر باز میشه و بعد از انتخاب گزینه ی اول برروی ok کلیک کنید.
[تصویر:  Dc_Voltmetr_220V_CodeWizard_1_.jpg]

با انجام عملیات های بالا صفحه ی زیر باز میشه.
[تصویر:  Untit2led_1.jpg]
در صفحه ی بالا گزینه ی Timers رو انتخاب کنید و در همون صفحه تایمر 2 رو هم انتخاب کنید.
در قسمت Clock Source گزینه ی TOCS1 Pin رو انتخاب کنید.
در قسمت Clock Value گزینه ی 128 رو انتخاب کنید.
و مطابق شکل تیک گزینه ی Overflow Interrupt رو انتخاب کنید تا وقفه ی مربوط به تایمر 2 هم فعال شه.
بعد از انجام تمامی کارهای بالا بر روی گزینه ی 8 که Preview هستش رو انتخاب کنید.
بعد از انتخاب این گزینه کد های شما در صفحه ی Program Preview نمایش داده میشه.اون کد هارو مارک آل کنید و درون برنامه اصلی قرار بدین.

نـکـتـه1:برای مقدار دهی ریجستر تایمر 2 ریجسترشو برابر یک مقدار قرار میدیم.
مثال:
کد:
TCNT2=51;

نـکـتـه2:برای خواندن مقدار ریجستر تایمر 2 یک متغیر رو برابر ریجسترش قرار میدیم.
مثال:
کد:
TCNT2=a;

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

امید وارم که توضیحات من و این پروژه بهتون کمکی کرده باشه.
موفق باشید.....Heart


فایل‌(های) پیوست شده
.zip   Saat_LCD[Www.IranLed.Com].zip (اندازه: 126.37 KB / تعداد دفعات دریافت: 211)

سلام، من حسین باقری هستم، طراح الکترونیک و برنامه نویس میکروکنترلر.
توی کانال یوتیوب من قراراه طراحی انواع بردهای الکترونیکی مثل بردهای تک لایه، دو لایه یا به طور کلی بردهای چند لایه، بردهای مبتنی بر میکروکنترلر، بردهای صنعتی، بردهای الکترونیک قدرت و بردهای فرکانس بالارو یاد بگیریم.
همینطور کدنویسی انواع میکروکنترلرهای 8 بینی مثل میکروکنترلرهای خانواده AVR-STM8، میکروکنترلرهای میبتی بر معماری ARM مثل STM32 و پردازنده های مخصوص اینترنت اشیاء مثل ESP32-ESP8266 و DSPها یاد میگیریم.
در کنار مباحث گفت شده، اصول اندازه الکترونیکی، نحوه صحیح مونتاژ و عیب‌یابی بردهای الکترونیکی، شبیه سازی مدارات مختلف رو هم یاد میگیریم.
اگر علاقه مند به یادگیری موضوعات عنوان شده هستید، به کانال یوتیوب من با آدرس زیر سر بزنید.
https://www.youtube.com/@aKaReZa75
(آخرین ویرایش در این ارسال: ۰۴-مهر-۱۳۹۱, ۱۶:۲۴:۱۹، توسط aKaReZa75.)
۰۳-مهر-۱۳۹۱, ۱۶:۵۷:۰۳
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix, coloop, svb93, hadikh73, رسول, abbasalifix, sammixer, navard, WhiteNoise, soheil.es69, behzady, شیوا843, microoo, alimogmov, Pixar, smhiri, potter_h112
svb93 آفلاین
كاربر تک ستاره
*

ارسال‌ها: 31
موضوع‌ها: 10
تاریخ عضویت: اسفند ۱۳۸۹

تشکرها : 19
( 20 تشکر در 11 ارسال )
ارسال: #28
RE: آموزش بیسکام و کدویژن با پروژه های عملی
سلام
ميشه مدار دماسنجو هم توي اين پروژه قرار داد اگه اره لطفا برنامشو اينجا بزارين
اگه برق ميكرو قطع بشه بايد تاريخ و ساعتو دوباره تنظيم كنيم ؟
ممنونم
(آخرین ویرایش در این ارسال: ۲۵-مهر-۱۳۹۱, ۱۲:۳۱:۰۲، توسط svb93.)
۲۵-مهر-۱۳۹۱, ۱۲:۲۵:۳۷
ارسال‌ها
پاسخ
تشکر شده توسط : WhiteNoise
aKaReZa75 آفلاین
حسین باقری
*****

ارسال‌ها: 1,488
موضوع‌ها: 23
تاریخ عضویت: مرداد ۱۳۹۱

تشکرها : 4898
( 4581 تشکر در 1478 ارسال )
ارسال: #29
RE: آموزش بیسکام و کدویژن با پروژه های عملی
نقل قول: سلام
درورد برشما.
نقل قول: ميشه مدار دماسنجو هم توي اين پروژه قرار داد اگه اره لطفا برنامشو اينجا بزارين
آره میشه ولی وقتش رو ندارم که انجامش بدم.
نقل قول: اگه برق ميكرو قطع بشه بايد تاريخ و ساعتو دوباره تنظيم كنيم ؟
بله.
نقل قول: ممنونم
خواهش میشه دوسته من.

سلام، من حسین باقری هستم، طراح الکترونیک و برنامه نویس میکروکنترلر.
توی کانال یوتیوب من قراراه طراحی انواع بردهای الکترونیکی مثل بردهای تک لایه، دو لایه یا به طور کلی بردهای چند لایه، بردهای مبتنی بر میکروکنترلر، بردهای صنعتی، بردهای الکترونیک قدرت و بردهای فرکانس بالارو یاد بگیریم.
همینطور کدنویسی انواع میکروکنترلرهای 8 بینی مثل میکروکنترلرهای خانواده AVR-STM8، میکروکنترلرهای میبتی بر معماری ARM مثل STM32 و پردازنده های مخصوص اینترنت اشیاء مثل ESP32-ESP8266 و DSPها یاد میگیریم.
در کنار مباحث گفت شده، اصول اندازه الکترونیکی، نحوه صحیح مونتاژ و عیب‌یابی بردهای الکترونیکی، شبیه سازی مدارات مختلف رو هم یاد میگیریم.
اگر علاقه مند به یادگیری موضوعات عنوان شده هستید، به کانال یوتیوب من با آدرس زیر سر بزنید.
https://www.youtube.com/@aKaReZa75
۰۱-آبان-۱۳۹۱, ۱۵:۴۷:۲۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : kamran0080, mahdi2210, WhiteNoise, Pixar
orange signal آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 233
موضوع‌ها: 18
تاریخ عضویت: مرداد ۱۳۹۱

تشکرها : 7077
( 9352 تشکر در 3221 ارسال )
ارسال: #30
RE: آموزش بیسکام و کدویژن با پروژه های عملی
با سلام و وقت بخیر
اقا حسین دستتون درد نکنه.تاپیک فوق العاده خوبی هستLaugh. خیلی کمکم کرد
البته از همه دوستان هم تشکر میکنم.
میشه بگین که مشکل این برنامه چی هستش؟
و شبیه سازیش رو واسم رسم کنین؟
بازم مرسی از همگی
موفق باشین[/align]

$regfile = "m16def.dat"
$crystal = 8000000
Config Kbd = Porta
Dim A As Byte
Ali:
Do
A = Getkbd
If A < 16 Then Goto Kerman
Loop
End
Kerman:
Cls
Lcd A
Do
Loop Until A = 16
Goto Ali

راستش نمیدونم خط هفت پرانتز رو داخل متغییر a
بذارم.هرکار میکنم اروور میدهSad
و در رسم پروتئوسم مشکل دارم
ممنون میشم کمکم کنین
(آخرین ویرایش در این ارسال: ۳۰-دى-۱۳۹۱, ۲۱:۵۵:۱۷، توسط orange signal.)
۳۰-دى-۱۳۹۱, ۲۱:۲۱:۲۱
ارسال‌ها
پاسخ
تشکر شده توسط : WhiteNoise, Pixar
omid_phoenix آفلاین
مدیر بخش
*****

ارسال‌ها: 2,238
موضوع‌ها: 108
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 12682
( 15433 تشکر در 4574 ارسال )
ارسال: #31
RE: آموزش بیسکام و کدویژن با پروژه های عملی
برنامه چندتا مشکل داره؛
lcd تعریف نشده

کد:
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcd = 16 * 2

Cursor Off
Cls
واسه کی پد، case تعریف نشده
کد:
A = Getkbd
Select Case A
.
.
.
end select

اون حلقه do و loop رو هم نذارید بهتره، به جاش از زیربرنامه استفاده کنید؛
مثلا
کد:
declare sub x
do
call x
.
.
.
loop

x:
.
.
end sub
return

در مورد مدارم اگه بگید می خواهید دقیقا چی کار کنه، تو شبیه ساز کمکتون می کنم
تا اینجا که به یه میکرو مگا16 و یه lcd و یه کی پد نیاز داریم که lcd و به یه پورت مثلا c و کی پد و به پورت دیگه ای مثل a وصل کنیم.

(آخرین ویرایش در این ارسال: ۳۰-دى-۱۳۹۱, ۲۲:۵۷:۰۱، توسط omid_phoenix.)
۳۰-دى-۱۳۹۱, ۲۲:۴۰:۵۶
ارسال‌ها
پاسخ
تشکر شده توسط : aKaReZa75, orange signal, WhiteNoise, behzady, alimogmov, Pixar
orange signal آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 233
موضوع‌ها: 18
تاریخ عضویت: مرداد ۱۳۹۱

تشکرها : 7077
( 9352 تشکر در 3221 ارسال )
ارسال: #32
RE: آموزش بیسکام و کدویژن با پروژه های عملی
من تعریف ال سی دی رو توی برنامه نمیگم.از جای دیگه تعریفش میکنم
option/compile/lcd
من می خوام زمانی روی صفحه کلید ماتریسی میزنم عدد زده شده رو روی ال سی دی نشون بده.
۳۰-دى-۱۳۹۱, ۲۳:۰۵:۰۸
ارسال‌ها
پاسخ
تشکر شده توسط : alimogmov, Pixar
omid_phoenix آفلاین
مدیر بخش
*****

ارسال‌ها: 2,238
موضوع‌ها: 108
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 12682
( 15433 تشکر در 4574 ارسال )
ارسال: #33
RE: آموزش بیسکام و کدویژن با پروژه های عملی
واسه این کار باید مثل کدی که گذاشتم واسه کی پد case تعریف کنید
کد:
Dim B As Byte

B = Getkbd()
Select Case B
Case 1:
Locate 1 , 2 : Lcd "*"
.
.
.
End Select
می تونید به روش date و از طریق جدول هم کی پد و راه اندازی کنید؛
کد:
Dim B As Byte
Dim a As String * 10

a = Lookupstr(b , key)

key:
Data "7" , "4" , "1" , "On" , "8" , "5" , "2" , "0" , "9" , "6" , "3" , "="
Data "/" , "*" , "-" , "+" , " "

(آخرین ویرایش در این ارسال: ۳۰-دى-۱۳۹۱, ۲۳:۱۵:۳۷، توسط omid_phoenix.)
۳۰-دى-۱۳۹۱, ۲۳:۰۸:۳۷
ارسال‌ها
پاسخ
تشکر شده توسط : aKaReZa75, WhiteNoise, behzady, alimogmov, Pixar


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  مشکل برنامه تایمر با بیسکام soy1345 7 2,026 ۲۲-فروردین-۱۳۹۸, ۲۰:۴۸:۰۶
آخرین ارسال: 1نفر
  راه اندازی ماژول gy-955 با AVR و کدویژن hadikh73 6 7,689 ۰۴-شهریور-۱۳۹۷, ۱۲:۰۸:۲۱
آخرین ارسال: hadikh73
  [مقاله] برنامه های بدون شرح hadikh73 48 43,686 ۰۲-اردیبهشت-۱۳۹۷, ۱۰:۱۷:۲۸
آخرین ارسال: babyy
  ماژول pn532 و کدویژن AVR hadikh73 1 4,205 ۰۴-خرداد-۱۳۹۶, ۰۱:۲۱:۲۴
آخرین ارسال: babyy
  پیکربندی SPI نرم افزاری در کدویژن pedram032 2 3,661 ۱۷-دى-۱۳۹۵, ۲۲:۳۷:۱۴
آخرین ارسال: omid_phoenix
  کمک در برنامه nrf24 با کدویژن sniper-70 0 2,893 ۱۹-آبان-۱۳۹۵, ۰۰:۱۶:۱۵
آخرین ارسال: sniper-70
  [آموزشی] بوتلودر BootloadHID برای AVR8 بدون نیاز به درایور usb salehjg 0 2,494 ۰۸-مهر-۱۳۹۵, ۲۳:۴۷:۰۶
آخرین ارسال: salehjg
  سوالات مربوط به بخش برنامه های بدون شرح omid_phoenix 64 40,813 ۲۵-خرداد-۱۳۹۵, ۱۸:۴۷:۴۸
آخرین ارسال: Ambassador
  برنامه نویسی بیسکام soy1345 17 13,270 ۲۳-مرداد-۱۳۹۴, ۱۷:۱۷:۵۶
آخرین ارسال: MN-123
  راهنمایی در یک پروژه cortex-m3 0 2,020 ۱۴-تير-۱۳۹۴, ۲۰:۲۰:۵۶
آخرین ارسال: cortex-m3

پرش به انجمن:


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

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