چشمک زن ساده با میکرو ATMEGA8،کدویژن+شبیه ساز

در اين بخش مي‌توانيد آموزش و مثال‌های مرتبط با میکروکنترلرهای AVR را مشاهده بفرمایید

مدیران انجمن: SAMAN, sinaset, شوراي نظارت

ارسال پست
Colonel II
Colonel II
نمایه کاربر
پست: 7119
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9207 بار
سپاس‌های دریافتی: 21250 بار
تماس:

چشمک زن ساده با میکرو ATMEGA8،کدویژن+شبیه ساز

پست توسط sinaset » پنج شنبه 22 مرداد 1394, 10:41 am

با سلام

چشمک زن ساده با میکرو ATMEGA8،کدویژن+شبیه ساز

در این برنامه به کمک میکرو کنترولر اتیمگا 8 و زبان برنامه نویسی کدویژن یک چشمک زن ساده ساخته شده است .


قبل از هر چیز اشنایی خیلی کوتاه با led
 تصویر   که در تصویر بالا پیداست،پایه بزرگ + (مثبت) و پایه کوچک -( منفی) و در شماتیک مداری،سمتی که فلش بر روی ان یک خط عمود خورده. منفی و باید به پایه منفی وصل شود و سمت که پشت فلش قرار دارد،مثبت است و باید به جریان مثبت وصل شود.  برای اشنایی بهتر با LED بهتراست اینتاپیک را مطالعه فرمایید.  ضمن اینکه برای اشنایی به میکروکنترولر هم می توانید اینتاپیک را مطالعه فرمایید.  تصویر
  و سخت افزار های مورد نیاز در پرتئوس شبیه سازی کردیم..  کد برنامه ساده چشمک زن  

کد: انتخاب همه

/*******************************************************
Project :sinaset
Version :v1
Date    : 08/13/2015
Author  :
Company :
Comments:
Chip type         : ATmega8A
AVR Core Clock frequency: 1.000000 MHz
*******************************************************/

#include <mega8.h>   //استفاده از ميکروکنترولر مگا 8
#include <delay.h>   //استفاده از کتابخانه مگا تاخير،براي ايجاد تاخير دلخواه در برنامه نويسي

void main(void)   //تابع اصلي برنامه
{

DDRB=0xff;   //پورت بي را در تابع به عنوان خروجي معرفي مي کنيم
PORTB=0x00;  //پول اپ پورت  را روشن مي کنيم،که نويز يا اشکالات باعث روشن شدن پورت بي نشود

while (1)  //چرخه بي پايان تابع،که با گذاشتن عدد 1 تا هميشه تکرار ميشود
    {
    PORTB=0xFF; //روشن شدن پورت بي
    delay_ms(500); //تاخير 500 ميلي ثانيه براي روشن شدن پورت و ال اي دي وصل شده به پورت بي

    PORTB=0x00; //خاموش شدن پورت بي
    delay_ms(500); // پورت بي به مدت 500 ميلي ثانيه خاموش شود
    }   
}


بیشتر توضیحات در کد نویسی و پرتئوس داده شده ،اما اگر سوالی بود در خدمتون هستم

سورس و شبیه ساز رو از [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] دانلود کنید
همچنین می توانید کد HEXرا از [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]دانلود کنید
برای دیدن ویدئو [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]را کلیک کنید.
باتشکر.
آخرین ويرايش توسط 1 on sinaset, ويرايش شده در 0.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Colonel II
Colonel II
نمایه کاربر
پست: 7119
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9207 بار
سپاس‌های دریافتی: 21250 بار
تماس:

Re: چشمک زن ساده با میکرو ATMEGA8،کدویژن+شبیه ساز

پست توسط sinaset » شنبه 24 مرداد 1394, 9:56 am

با سلام دوباره..

چشمک زدن 8 عدد led هم زمان.

خوب اکنون می خواهیم،کمی چشمک زدن را پیشرفته ترکنیم ... و بجایی یک LED مجموعه از 8 led را به پایه های میکرو وصل کنیم .
نیازی به برنامه نویسی جدید نیست ...! از همان کدهای قبلی استفاده کنید ..چون در کدهای قبلی تمام پایه های PORTB روشن و خاموش میشود ...

 تصویر 
شما فقط باید 7 عدد LED به پایه های PORTB وصل کنید و منفی های ان را با مقاومت 150 اهمی،به میکروکنترولر وصل کنید .. بعد از وصل کردن،به مانند شکل زیر میشود...
 تصویر 

برای دانلود برنامه و شبیه ساز،[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]را کلیک فرمایید.
برای دیدن ویدئو [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]را کلیک فرمایید.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Colonel II
Colonel II
نمایه کاربر
پست: 7119
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9207 بار
سپاس‌های دریافتی: 21250 بار
تماس:

شیفت دادن پورت و حرکت LED ها .

پست توسط sinaset » یک شنبه 25 مرداد 1394, 3:52 pm

با سلام
شیفت دادن پورت و حرکت LED ها .

در ادامه پست قبلی می خواهیم به کمک شیفت دادن یک پورت ،led ها را پشت سر هم روشن کنیم و این مسیر رو به حالت رفت و برگشتم انجام دهیم .
---
حرکت LED به کمک روش شیفت دادن پورت،یک کار جالب و نسبتا ساده هستش.
ما برای این کار ابتدا باید چند نکته را بداینم ..
ما برای دستور دادن به یک پورت،بصورت 8 بیتی بر مبنای هگزا دسیمال یا باینری و هگز عمل می کنیم.به زبان ساده. هر پورت از 8 خروجی تشکیل شده،که هر خروجی یک بیت می باشد. که بصورت باینری اینطور نوشته میشود 0b00000000 (هر صفر بعد از 0b بیت روشن و خاموش کردن یک پورت هستش)
به عنوان مثال اگر ما کد 0b00000001 رو ارسال کنیم،پایه اول PORTB.0 روشن میشود.
حال ما برای شیفت دادن کد ها،ابتدا پایه اول رو روشن می کنیم،سپس کدها رو شیفت میدهیم به شکل زیر
 تصویر 

کد: انتخاب همه

PORTB=0b00000001;

سپس به اندازه 1 حرکت کدها را به سمت چپ حرکت می دهیم

کد: انتخاب همه

PORTB<<=1;

وقتی 1 به اخرین بیت پورت رسید.کل پورت 0 میشود، و باید از راست مقداری دهیش کنیم .

کد: انتخاب همه

PORTB=0b10000000;

سپس به اندازه 1 حرکت کدها را به سمت راست حرکت می دهیم

کد: انتخاب همه

PORTB>>=1;


حال برای حرکت رفت و برگشت LED به صورت شیفت دادن .. یک حلقه تعریف می کنیم ،که هر 250 میلی ثانیه یک درجه به سمت چپ کدها را شیفت دهد (و 8 بار این کار را انجام دهد)

کد: انتخاب همه

     PORTB=0b00000001;  // با اين کار بيت اول را 1 مي کنيم بدين شکل00000001  
     for (i=0; i<8;i++)
     { 
     delay_ms(250); //تاخير 500 ميلي ثانيه براي روشن شدن پورت و ال اي دي وصل شده به پورت بي
     PORTB<<=1;    //شيفت بيت ها به سمت چپ
     }


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

کد: انتخاب همه

     PORTB=0b10000000;  //با اين کار بيت اول را 1 مي کنيم بدين شکل10000000
     for (i=0; i<8;i++)
     { 
     delay_ms(250); //تاخير 500 ميلي ثانيه براي روشن شدن پورت و ال اي دي وصل شده به پورت بي
     PORTB>>=1;    //شيفت بيت ها به سمت راست
     }


کد برنامه بصورت کامل

کد: انتخاب همه

/*******************************************************
Project :sinaset
Version :v1
Date    : 08/13/2015
Author  :
Company :
Comments:
Chip type         : ATmega8A
AVR Core Clock frequency: 1.000000 MHz
*******************************************************/

#include <mega8.h>   //استفاده از ميکروکنترولر مگا 8
#include <delay.h>   //استفاده از کتابخانه مگا تاخير،براي ايجاد تاخير دلخواه در برنامه نويسي

void main(void)   //تابع اصلي برنامه
{

char i=0;

DDRB=0xff;   //پورت بي را در تابع به عنوان خروجي معرفي مي کنيم
PORTB=0x00;  //پول اپ پورت  را روشن مي کنيم،که نويز يا اشکالات باعث روشن شدن پورت بي نشود

while (1)  //چرخه بي پايان تابع،که با گذاشتن عدد 1 تا هميشه تکرار ميشود
    {
    
     PORTB=0b00000001;  // با اين کار بيت اول را 1 مي کنيم بدين شکل00000001 
     for (i=0; i<8;i++)
     { 
     delay_ms(250); //تاخير 500 ميلي ثانيه براي روشن شدن پورت و ال اي دي وصل شده به پورت بي
     PORTB<<=1;    //شيفت بيت ها به سمت چپ
     }
     PORTB=0b10000000;  //با اين کار بيت اول را 1 مي کنيم بدين شکل10000000
     for (i=0; i<8;i++)
     { 
     delay_ms(250); //تاخير 500 ميلي ثانيه براي روشن شدن پورت و ال اي دي وصل شده به پورت بي
     PORTB>>=1;    //شيفت بيت ها به سمت راست
     }

    }
   
}


[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]سورس و شبیه ساز
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] فایل HEX

برای دیدن ویدئو [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]را کلیک کنید.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Colonel II
Colonel II
نمایه کاربر
پست: 7119
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9207 بار
سپاس‌های دریافتی: 21250 بار
تماس:

Re: چشمک زن ساده با میکرو ATMEGA8،کدویژن+شبیه ساز

پست توسط sinaset » چهار شنبه 28 مرداد 1394, 9:46 am

با سلام

خاموش و روشن شدن LED بصورت ماری!

در این روش، led ها یک بعد از دیگر روشن میشوند و در انتها به صورت برعکس خاموش میشوند... یک جورای مثل حرکت کردن یک مار می ماند!

در پرتئوس هیچ تغییر داده نشده،پس در پست فقط کدها رو قرار میدم..

 تصویر 

در این روش ما میام یک متغیر اریه ی تعریف می کنیم که LED ها را به ترتیب روشن کند
به مانند این کدها

کد: انتخاب همه

flash unsigned char led[9] = {0b00000001,0b00000011,0b00000111,0b00001111,0b00011111,0b00111111,0b01111111,0b11111111}; 

همانجور که می ببینید، به ترتیب پورت ها 1 میشوند .
حالا نیاز به یک چرخه داریم که متغیرها رو یکی یکی پشت سر هم بخونه
برای همین از حلقه FOR استفاده می کنیم

کد: انتخاب همه

     for (i=0; i<8;i++)
     {
     PORTB=led[I];
     delay_ms(250); //تاخير 500 ميلي ثانيه براي روشن شدن پورت و ال اي دي وصل شده به پورت بي
     }
[/I]
در حلقه بالا، در مقابل متغیر اریه LED . متغیر I رو قرار دادید،که با هر بار تکرار،یک واحد،افزایش پیدا می کنه،در نتیجه،اریه واحدش افزایش پیدا میکنه و به ترتیب LED ها روشن میشن .

حالا می خوام به صورت برعکس LED ها خاموش بشن ، که شبیه حالت ماری به خودش بگیره.
برای این کار کافیه که علامت ~ را قبل از ارایه led بزارید،با این کار شمارش اریه به صورت معکوس اتفاق می افتد!

کد: انتخاب همه

     for (i=0; i<8;i++)
     {
     PORTB=~led[I]; 
     delay_ms(250); //تاخير 500 ميلي ثانيه براي روشن شدن پورت و ال اي دي وصل شده به پورت بي
     }

[/I]
در پایان کل کدها...

کد: انتخاب همه

/*******************************************************
Project :sinaset
Version :v1
Date    : 08/13/2015
Author  :
Company :
Comments:
Chip type         : ATmega8A
AVR Core Clock frequency: 1.000000 MHz
*******************************************************/
#include <mega8.h>   //استفاده از ميکروکنترولر مگا 8
#include <delay.h>   //استفاده از کتابخانه مگا تاخير،براي ايجاد تاخير دلخواه در برنامه نويسي
flash unsigned char led[9] = {0b00000001,0b00000011,0b00000111,0b00001111,0b00011111,0b00111111,0b01111111,0b11111111};

void main(void)   //تابع اصلي برنامه
{
char i=0;
DDRB=0xff;   //پورت بي را در تابع به عنوان خروجي معرفي مي کنيم
PORTB=0x00;  //پول اپ پورت  را روشن مي کنيم،که نويز يا اشکالات باعث روشن شدن پورت بي نشود
while (1)  //چرخه بي پايان تابع،که با گذاشتن عدد 1 تا هميشه تکرار ميشود
    {
     for (i=0; i<8;i++)
     {
     PORTB=led[I];
     delay_ms(250); //تاخير 500 ميلي ثانيه براي روشن شدن پورت و ال اي دي وصل شده به پورت بي
     }
     for (i=0; i<8;i++)
     {
     PORTB=~led[I]; 
     delay_ms(250); //تاخير 500 ميلي ثانيه براي روشن شدن پورت و ال اي دي وصل شده به پورت بي
     }
    }   
}
[/I][/I]


برای دیدن ویدئو [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] را کلیک کنید.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Colonel II
Colonel II
نمایه کاربر
پست: 7119
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9207 بار
سپاس‌های دریافتی: 21250 بار
تماس:

Re: چشمک زن ساده با میکرو ATMEGA8،کدویژن+شبیه ساز

پست توسط sinaset » چهار شنبه 4 شهریور 1394, 6:23 pm

با سلام
حرکت دو LED بصورت همزمان ..
حرکت دو LED از وسط بصورت همزمان ،افکتی جالب ..
 تصویر  حرکت همزمان دو LED وضعیت پورت ها B را به ترتیب به شکل زیر می کنیم

کد: انتخاب همه

flash unsigned char led[7] = {0b00011000,0b00100100,0b01000010,0b10000001,0b01000010,0b00100100}; 


و حلقه for را با توجه به کم شدن کدها 6 بار تکرار می کنیم..

کد: انتخاب همه

     for (i=0; i<6;i++)
     {
     PORTB=led[I];
     delay_ms(500); //تاخير 500 ميلي ثانيه براي روشن شدن پورت و ال اي دي وصل شده به پورت بي
     }
[/I]

کدها بطور کامل

کد: انتخاب همه

/*******************************************************
Project :sinaset
Version :v1
Date    : 08/13/2015
Author  :
Company :
Comments:
Chip type         : ATmega8A
AVR Core Clock frequency: 1.000000 MHz
*******************************************************/
#include <mega8.h>   //استفاده از ميکروکنترولر مگا 8
#include <delay.h>   //استفاده از کتابخانه مگا تاخير،براي ايجاد تاخير دلخواه در برنامه نويسي
flash unsigned char led[7] = {0b00011000,0b00100100,0b01000010,0b10000001,0b01000010,0b00100100};

void main(void)   //تابع اصلي برنامه
{
char i=0;
DDRB=0xff;   //پورت بي را در تابع به عنوان خروجي معرفي مي کنيم
PORTB=0x00;  //پول اپ پورت  را روشن مي کنيم،که نويز يا اشکالات باعث روشن شدن پورت بي نشود
while (1)  //چرخه بي پايان تابع،که با گذاشتن عدد 1 تا هميشه تکرار ميشود
    {
     for (i=0; i<6;i++)
     {
     PORTB=led[I];
     delay_ms(500); //تاخير 500 ميلي ثانيه براي روشن شدن پورت و ال اي دي وصل شده به پورت بي
     }
    }   
}
[/I]
برای دیدن ویدئو [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]را کلیک کنید.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Colonel II
Colonel II
نمایه کاربر
پست: 7119
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9207 بار
سپاس‌های دریافتی: 21250 بار
تماس:

Re: چشمک زن ساده با میکرو ATMEGA8،کدویژن+شبیه ساز

پست توسط sinaset » یک شنبه 8 شهریور 1394, 3:38 pm

با سلام
حرکت led به صورت Random ..

به کمک کدهای زیر می توانید تا حدودی تصادفی led ها را روشن کنید....

 تصویر  کدها 

کد: انتخاب همه

/*******************************************************
Project :sinaset
Version :random-v1
Date    : 08/13/2015
Chip type         : ATmega8A
AVR Core Clock frequency: 1.000000 MHz
*******************************************************/
#include <mega8.h>   //استفاده از ميکروکنترولر مگا 8
#include <delay.h>   //استفاده از کتابخانه مگا تاخير،براي ايجاد تاخير دلخواه در برنامه نويسي
flash unsigned char led[9] = {0b10000000,0b01000000,0b00100000,0b00010000,0b00001000,0b00000100,0b00000010,0b00000001};
unsigned char x;
interrupt [TIM0_OVF] void timer0_ovf_isr(void) //استفاده از تايمر کانتر 0 ،يک ميلي ثانيه ي
{
TCNT0=0x83;
++x;
if(x==9)x=0;   //چرخه براي ايجاد کد تصادفي
}
void main(void)   //تابع اصلي برنامه
{
// Clock source: System Clock
// Clock value: 125.000 kHz
TCCR0=(0<<CS02) | (1<<CS01) | (0<<CS00); //راه اندازي تايمر 0
TCNT0=0x83;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (1<<TOIE0);
DDRB=0xff;   //پورت بي را در تابع به عنوان خروجي معرفي مي کنيم
PORTB=0x00;  //پول اپ پورت  را روشن مي کنيم،که نويز يا اشکالات باعث روشن شدن پورت بي نشود
#asm("sei")  //وقفه عمومي
while (1)  //چرخه بي پايان تابع،که با گذاشتن عدد 1 تا هميشه تکرار ميشود
    {
     PORTB=led[x];
     delay_ms(233);
    }   
}

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Novice Poster
Novice Poster
نمایه کاربر
پست: 55
تاریخ عضویت: پنج شنبه 26 خرداد 1390, 11:47 am
سپاس‌های ارسالی: 33 بار
سپاس‌های دریافتی: 6 بار

Re: چشمک زن ساده با میکرو ATMEGA8،کدویژن+شبیه ساز

پست توسط mmnir » چهار شنبه 21 تیر 1396, 12:39 am

با سلام در مدار اولی اگر ال ای دی روشن بماند مشکل چیست؟
دنیا در مقابل آخرت مانند نقطه در برابر خط هست .

Colonel II
Colonel II
نمایه کاربر
پست: 7119
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9207 بار
سپاس‌های دریافتی: 21250 بار
تماس:

Re: چشمک زن ساده با میکرو ATMEGA8،کدویژن+شبیه ساز

پست توسط sinaset » چهار شنبه 21 تیر 1396, 7:26 am

سلام بر شما
نباید چنین شود،مدار را بررسی کنید.پایه ریست را نیز بررسی کنید.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Novice Poster
Novice Poster
نمایه کاربر
پست: 55
تاریخ عضویت: پنج شنبه 26 خرداد 1390, 11:47 am
سپاس‌های ارسالی: 33 بار
سپاس‌های دریافتی: 6 بار

Re: چشمک زن ساده با میکرو ATMEGA8،کدویژن+شبیه ساز

پست توسط mmnir » چهار شنبه 21 تیر 1396, 8:30 pm

با سلام ممکن عمل پروگرام انجام نشده باشد ؟؟
دنیا در مقابل آخرت مانند نقطه در برابر خط هست .

Colonel II
Colonel II
نمایه کاربر
پست: 7119
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9207 بار
سپاس‌های دریافتی: 21250 بار
تماس:

Re: چشمک زن ساده با میکرو ATMEGA8،کدویژن+شبیه ساز

پست توسط sinaset » چهار شنبه 21 تیر 1396, 9:41 pm

سلام بر شما.
باید بررسی کنید.ممکن است،برای میکرو مشکلی پیش امده باشد،ممکن است،فیوزبیت ها را اشتباه انجام داده باشید.شاید نیز کدها را خودتان تغییر داده باشید و ..
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Novice Poster
Novice Poster
نمایه کاربر
پست: 55
تاریخ عضویت: پنج شنبه 26 خرداد 1390, 11:47 am
سپاس‌های ارسالی: 33 بار
سپاس‌های دریافتی: 6 بار

Re: چشمک زن ساده با میکرو ATMEGA8،کدویژن+شبیه ساز

پست توسط mmnir » پنج شنبه 22 تیر 1396, 3:28 pm

سلام
بالاخره درست شد ولی بدون اتصال سیم ریست و برق اضافی ....
دوتا از میکروهای mega8 قفل شده چون نرم افزار به این حالت بالا می آمد( ظاهرا فیوز بیتها که گفتید فعال بوده) آیا راهی هست که میکروها قابل استفاده باشد بنده چک مربوط به lock را فعال نکرده بودم
دنیا در مقابل آخرت مانند نقطه در برابر خط هست .

Colonel II
Colonel II
نمایه کاربر
پست: 7119
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9207 بار
سپاس‌های دریافتی: 21250 بار
تماس:

Re: چشمک زن ساده با میکرو ATMEGA8،کدویژن+شبیه ساز

پست توسط sinaset » پنج شنبه 22 تیر 1396, 5:12 pm

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

ارسال پست

بازگشت به “آموزش و مثال‌ها AVR”