آموزش راه اندازی led چشمک زن با AVR + پروژه

سلام حالتون چطوره؟ امیدوارم که خوب باشید. اگه یادتون باشه، در جلسه ی آموزش مقدماتی نرم افزار  Codevision AVR بطور مفصل ورودی و خروجی کردن پورت ها و سایر تنظیمات بخش کدویزارد را به شما توضیح دادم. پس حتما قبل از شروع جلسه امروز، حتما این آموزش رو بخوانید، زیرا مطالعه این آموزش، راه اندازی پروژه های عملی همچون راه اندازی led چشمک زن با AVR را برای شما ساده ترمیکند.

قطعات مورد نیاز
ماژول رله ۴ کاناله
1 عدد

وسایل مورد نیاز در آموزش راه اندازی led چشمک زن با AVR :

[icon name=”check-circle” class=”” unprefixed_class=””]   led

 [icon name=”check-circle” class=”” unprefixed_class=””] یک میکروکنترلر (که ما در اینجا از ATMEGA16) استفاده کرده ایم.

[icon name=”star-half-alt” style=”solid” class=”” unprefixed_class=””] در بعضی پروژه ها برای تنوع از ATMEGA32 استفاده کردیم، تا شما هم ببینید که ATMEGA32 و ATMEGA16 تفاوت چندانی با هم ندارند.

[icon name=”check-circle” class=”” unprefixed_class=””] یک برد برد (bred board )

[icon name=”check-circle” class=”” unprefixed_class=””] تعدادی  سیم برد برد

[icon name=”check-circle” class=”” unprefixed_class=””] یک مقاومت 330 اهم

[icon name=”check-circle” class=”” unprefixed_class=””] رگلاتور7805

نحوه اتصالات در  proteus:

خب حالا بریم ‍♀️ سراغ وسایلی که در  راه اندازی led چشمک زن با AVR  کاربرد دارند تا بیشتر با هاشون آشنا شیم .

led [icon name=”circle” class=”” unprefixed_class=””]

.از خانواده دیود (یکسو کننده ی جریان) است. که دارای پایه های +/-است [icon name=”lightbulb-o” class=”” unprefixed_class=””] Led

همانطور که در تصویر بالا میبینید پایه (+) از پایه (-) بلند تر است .اما در اکثر موارد بهتر است به ورق داخل led که در سمت (-) بزرگتر است نگاه کنیم.

پایه منفی به GND و پایه مثبت به پین مدنظر ما (در اینجا به پایه B7) متصل میشود.

 Atmega16 [icon name=”circle” class=”” unprefixed_class=””]

یک میکرو کنترلر است که 40 پین دارد . و دارای 4 پورت A,B,C,D  است.

ما در اینجا با پین های GND,VCC و پورت B(پین های B0تاB7) کار داریم.

در تصویر پایین Atmega16 را می بینیم، پایه های این IC دقیقا مشابه Atmega32 است !

 7805 [icon name=”circle” class=”” unprefixed_class=””]

یک رگولاتور است که برای DC (مستقیم) کردن جریان از آن استفاده میکنیم.

7805 ورودی را به ولتاژ  5v تبدیل می کند.

[icon name=”star-half-alt” style=”solid” class=”” unprefixed_class=””] سقف ولتاژی که 7805 تحمل تا 10v است.

پایه  input برای ولتاژ ورودی است و پایه  output  خروجی است که به میکرو میرود.

در بالا با 7805 , Atmega 32, Atmega 16, led آشنا شدیم. حال در جدول پایین به نحوه اتصالات در مدار می پردازیم.

اتصال پین های میکرو

[su_table responsive=”yes”]]

پایه سمت پیچ GND
پایه وسط VEE
پایه دیگر VCC

[/su_table]

[icon name=”star-half-o” class=”” unprefixed_class=””] حالا که با نحوه بستن رگلاتور آشنا شدیم. در ادامه پروژه ها رو بدون رگولاتور انجام دادیم تا شما ببینید که هر دو ممکن هستند.

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

ابتدا یک پروژه در کدویژن می سازیم. که در آموزش قبل بطور مفصل به شرح آن پرداختیم.

[icon name=”thumb-tack” class=”” unprefixed_class=””] دستورات:

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

#include <atmega16.h>

با این دستور کتابخانه (جایی که توابع میکروکنترلر در آن هستند) میکرو کنترلر استفاده شده در پروژه مان را به برنامه فرا می خوانیم.

#include <mega16.h>
//اسم ميکرو کنترلري است که بر روي آن برنامه را کامپایل می کنیم

[icon name=”circle-o” class=”” unprefixed_class=””]دستور:

#include <delay.h>

 با این کار تابع تاخیر را به برنامه فرا می خوانیم که وظیفه اش ایجاد وقفه زمانی است .مثلا در اینجا باعث چشمک زدن led میشه.

#include <delay.h>
void main(void)
{

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

DDRB=oxff;

.را خروجی می کنیم B با این دستور پورت

DDRB.0=1;
// را خروجی کنB اين يعني اينکه بيت صفرم پورت

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

      while(1) {

دستور while یک حلقه تکرار پذیر .

while (1)
      {

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

;PORTB.7=1

با این دستور بیت 7 پورت B را روشن می کنیم.

PORTB.0=1;
//اين يعني بيت صفرم پورت B را روشن کن

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

delay_ms(500);

.با این دستور 500 میلی تاخیر ایجاد می کنیم

delay_ms(500);
//ميزان تاخير زماني مورد نياز براي چشمک زدن

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

; PORTB.7=0

با این دستور بیت 7 پورت B را خاموش میکنیم.

PORTB.0=0;
//اين يعني بيت صفرم پورت B را خاموش کن
delay_ms(500); 
	   
      }
}

1.پروژه راه اندازی led آبشاری :

همان راه اندازی led  است فقط تعداد led ها بیشتر است و میکروکنترلر ما  Atmega32  است.

در این پروژه ما قصد داریم یکسری، led را بصورت نواری روشن کنیم.

در این پروژه هم مانند توضیحات فوق همان دستورات را می نویسیم و تنها در یک تعریف و کد داخل حلقه while متفاوت اند و قبل این کار پورت A رامانند مثال1 خروجی میکنیم.

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

char z=0;

با این دستور متغیر z  را تعریف کردیم (از این دستور برای نوشتن کد های داخل حلقه است )

وبه صورت پیش فرض مقدار آن را مساوی 0 قرار میدیم تا ازبیت صفرم شروع کنه.

char  z=0;
//با اين دستور متغير z  را تعريف کرديم (از اين دستور براي نوشتن کد هاي داخل حلقه است )
// مقدار اوليه صفر است تا از بيت صفرم شروع کند
void main(void)
{
DDRA=1;
while (1)
      {

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

PORTA=z;

با این دستور مقدار z را در پورت A میریزیم.

PORTA=z;
//ميريزيدAرادرzمقدار
delay_ms(200);     
//200ميلي ثانيه تاخيرميديم

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

z<<=1;

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

z<<=1;
//zرايدونه يدونه شيفت ميديم دوباره ميريزيم توz

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

if (z==0){

این دستور یک شرط است که میگوید هرگاه مقدار zبرابر0شد کد زیر را اجرا کن

if (z==0){
 //شرط ما

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

z=1;

این دستور در صورت درست بود شرط اجرا میشود.

if (z==0){
      //شرط ما
      z=1;
      //اگه شرط برقراربود z=1        
      }
      }
}

 [icon name=”star-half-o” class=”” unprefixed_class=””] برای پروژه  یکی درمیون کافیه در  ( z<<=1) بجای 2 یک بزاریم!!

source کامل پروژه:

#include <mega32.h>
#include <delay.h>
char  z=0;
//با اين دستور متغير z  را تعريف کرديم (از اين دستور براي نوشتن کد هاي داخل حلقه است )
// مقدار اوليه صفر است تا از بيت صفرم شروع کند
void main(void)
{
  
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=(0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<TOIE0);

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);

// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);

// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
   DDRA=1;
while (1)
      {   
      PORTA=z;
      //ميريزيد Aرا درzمقدار       
      delay_ms(200);     
      // 200ميلي ثانيه تاخيرميديم
      z<<=1;
      // z  رايدونه يدونه شيفت ميديم دوباره ميريزيم توz 
             
      if (z==0){
      //شرط ما
      z=1;
      //اگه شرط برقراربود z=1        
      }
      }
}

 

2.پروژه سری چشمک زن :

در این پروژه از مجموعه آموزش راه اندازیled چشمک زن باAVR ،هم مانند توضیحات فوق همان دستورات را می نویسیم (دیگر نمیخواهد در بالای main  متغییر zرا تعریف کنیم ) وتنها در کد داخل حلقه while متفاوت اند.وقبل این کار پورت A رامانند مثال1 خروجی میکنیم:

while (1)
      {

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

PORTA=0xff;

با این دستور تمام پورت A را روشن میکنیم.

    PORTA=0xff;
      delay_ms(500);      // Place your code here
      PORTA=0x00;
      delay_ms(500);
      }
      
}

source کامل پروژه:

#include <mega32.h>
#include <delay.h>

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out 
DDRA=(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (1<<DDA3) | (1<<DDA2) | (1<<DDA1) | (1<<DDA0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0 
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

while (1)
      {
         
      PORTA=0xff;
      delay_ms(500);      // Place your code here
      PORTA=0x00;
      delay_ms(500);
      }
      
}

3.پروژه راه اندازی led آبشاری مدل 2:

نحوه روشن شدن led ها :

دراین پروژه ی آموزش AVR ، به صورت زیر Lcd ها روشن میشنوند ودوباره از اخر به اول روشن میشنوند.

 [icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””] [icon name=”lightbulb-o” class=”” unprefixed_class=””]

[icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””]

[icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””]

[icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””] [icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””][icon name=”lightbulb-o” class=”” unprefixed_class=””]

نحوه اتصالات این پروژه و دو پروژه قبلی در پروتئوس به این صورت است:

کد به این صورت است:

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

unsigned char d[4]={0X81,0x42,0x24,0X18} ;

با این دستور نوع روشن شدن ledهارو مشخص میکنیم.

unsigned char d[4]={0X81,0x42,0x24,0X18};

[icon name=”star-half-o” class=”” unprefixed_class=””] دستورات بالابه ترتیب به نحوه روشن شدن ledها از بالا به پایین اشاره میکند.

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

unsigned char i=0,S=0;

unsigned char i=0,s=0;
//d[i ]= {i=0,i=1,i=2,i=3} بايد بصورت پيش فرض 0 باشد.
//رفت و برگشت را کنترل ميکنيمsبا

با این دو متغییر تعریف میکنیم :

 برای تغییر رفت و برگشت s [icon name=”check-circle” class=”” unprefixed_class=””]

 برای جابجایی بین خونه ها i  [icon name=”check-circle” class=”” unprefixed_class=””]

void main(void)
{
DDRA=0xff;
while (1)
      {

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

if (s==0) {

این دستور یک شرط است که درصورت برقرار بودن کد های زیرش اجرا میشوند.

if(s==0){
//اگر مقدار اس برابر صفر بود.کد هاي زير رو اجراکن

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

PORTA=d[i];

 را به ترتیب داخل پورت  قرار میدهد  i این دستور مقادیر

PORTA=d[i]; 
      //مقدار دي اي ام را در پورت آ بريز
      delay_ms(100);
      i++;
      //هربار آي رايک واحد اضافه کن
      if(i==3)
      //اگر آي برابر3 بود شرط زير را اجراکن 
      s=1;
      }

[icon name=”circle-o” class=”” unprefixed_class=””] دستور:

      else {

این دستور زمانی اجرا میشود که شرط if برقرار نباشد. در این صورت کد های داخل else  اجرا میشوند.

else{
      //اگه شرط بالا برقرار نبود کد هاي زير را اجراکن
      PORTA=d[i];
      delay_ms(100);
      i--;
      //هربار آي را يک واحد کم کن
      if(i==0){
      s=0;}
             
      }}}

source کامل پروژه:

/*******************************************************
barnameyi ke 2ta led (yki sar yeki tah)roshan shan biyan vasat
@OOOOOO@
O@OOOO@O
OO@OO@OO
OOO@@OOO                   
va bel ax
*******************************************************/

#include <mega32.h>
#include <delay.h>
unsigned char d[4]={0X81,0x42,0x24,0X18};
unsigned char i=0,s=0;
//d[i ]= {i=0,i=1,i=2,i=3} بايد بصورت پيش فرض 0 باشد.
//رفت و برگشت را کنترل ميکنيمsبا


void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out 
DDRA=(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (1<<DDA3) | (1<<DDA2) | (1<<DDA1) | (1<<DDA0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0 
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
MCUCSR=(0<<ISC2);

// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);

// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
DDRA=0xff;
while (1)
      {if(s==0){
      //اگر مقدار اس برابر صفر بود.کد هاي زير رو اجراکن
      PORTA=d[i]; 
      //مقدار دي اي ام را در پورت آ بريز
      delay_ms(100);
      i++;
      //هربار آي رايک واحد اضافه کن
      if(i==3)
      //اگر آي برابر3 بود شرط زير را اجراکن 
      s=1;
      }
      else{
      //اگه شرط بالا برقرار نبود کد هاي زير را اجراکن
      PORTA=d[i];
      delay_ms(100);
      i--;
      //هربار آي را يک واحد کم کن
      if(i==0){
      s=0;}
             
      }}}

خب اینم از آموزش امروز امیدوارم که لذت برده باشید و شما هم پروژه  ها رو بسازید و فیلمشو روی صفحه اینستگرام خودتون بزارید .

اگه می خواهید از ما کپن تخفیف بگیرید، یادتون نره که مارو هم تگ کنید.

[icon name=”asterisk” class=”” unprefixed_class=””] حجم فایل : زیر 1 مگابایت – رمز فایل : robotafzar.com

[sdfile url=”https://school.robotafzar.com/wp-content/uploads/2019/07/led-avr.rar”]

 

 

اگر می‌خواهید از آخرین و محبوب‌ترین مقالات ما در ایمیل خود مطلع شوید، همین الان ایمیل و شماره موبایل خود را در کادر زیر وارد کنید:
تعداد علاقه مندانی که تاکنون عضو خبرنامه ما شده اند: 0 نفر
دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *