AVR1 - 05 program - késleltetés

2008-02-12

 

Az ötödik program abszolút egyszerű. Megpróbálom szem elött tartani a kezdeti célkitűzésemet, hogy kis áttekinthető programokon keresztül ismerkedjünk meg az AVR chip-pekkel. Ebben a programban LED1-et villogtatjuk, 1 sec periódus idővel. Ebben éppen az az érdekes, hogy időnként szükségünk van pontos hosszúságú impulzusokra, időzítésekre. Ezt alapvetően úgy lehet megoldani, hogy írunk egy olyan hosszú ciklust, amivel a processzort a kívánt ideig lefoglaljuk. Eegy ilyen sima while, vagy for ciklusnak több hibája van. Az egyik, hogy a furmányos fordítóprogram észreveszi, hogy valójában nem csinálunk semmit, és simán kioptimalizálja (kivágja a kódból). Ki kell kísérleteznünk, hogy milyen hosszú legyen a ciklus, hogy elérjük a kívánt késleltetést. Ha megváltoztatjuk az órajelet, kezdhetjük előlről. A VinAVR készítői szerencsére erre készítettek egy jó megoldást. Részben egy macro, részben egy assembly betét (ha fontos mennyi idő alatt fut le a program... ). Az alábbi programban ennek felhasználásával 0,5 sec-ként ki/be kapcsolgatjuk LED1-et.



/*******************************************************************************
*   Author       -  3 BYTE MI                                                  *
*                   http://haromb.freeweb.hu                                   *
*   Date         -  2009.01.03.                                                *
*   Chip         -  Atmel ATtiny2313                                           *
*   Hardware     -  AVR1 tesztpanel                                            *
*   Compiler     -  avr-gcc (WinAVR 20080610) 4.3.0                            *
*                                                                              *
*   LED1 es LED2 labakat kimenetre allitja.                                    *
*   LED1-t kikapcsolja, LED2-t bekapcsolja alaphelyzetben.                     *
*   0.5 sec periodussal villogtatja LED1-t.                                    *
*                                                                              *
********************************************************************************
*   PonyProg Configuration and Security Bits (bepipalva):                      *
*   Belso 4MHz-es osszc.:     SUT0, CKSEL3, CKSEL2, CKSEL0                     *
*   Kulso keramia rezonator:  SUT0                                             *
*                                                                              *
*******************************************************************************/
#ifndef F_CPU
#define F_CPU                4MHz
#endif


#include "attiny2313_3bmi.h"
#include 


// PORTD bitjei
#define LED1                 3
#define LED2                 4


// LED-ek vezerlese
#define LED1_ON              PORTD BC( LED1)
#define LED1_OFF             PORTD BS( LED1)
#define LED2_ON              PORTD BC( LED2)
#define LED2_OFF             PORTD BS( LED2)




int main( void)
{
   DDRD BS( LED1);                               // szukseges labak kimenetre allitasa
   DDRD BS( LED2);
   LED1_OFF;
   LED2_ON;
   while( 1)                                     // maga a program hurok
   {
      LED1_ON;
      _delay_ms( 500);
      LED1_OFF;
      _delay_ms( 500);
   }
   return 0;
}

Itt a vége, fuss el véle, legytek az én vendégeim, innen letölthetitek a hozzávalókat összecsomagolva.