AVR1 - 06 program - beep

2008-02-13

 

Az hatodik programban megszólaltatjuk a hangszórót. Ez a program lényegében ugyan azt csinálja mint az előző, de nem LED-et vilogtatunk, hanem a hagszórót kapcsolgatjuk ki/be, valamivel gyorsabban. Ez a beep rutin jól használható sok programban. Ki lehet próbálni, ha hoszabbra/rövidebbre vesszük (n), vagy hangmagasságot változtatjuk meg (delay), sőt azt is ki lehet próbálni, hogy milyen lesz, ha nem szimmetrikus a kimenőjel kitöltése (a két delay érték eltérő). Hogy egy kis érdekesség is legyen, az egyik gombra egyet csipog, a másik gombra pedig hármat.



/*******************************************************************************
*   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                            *
*                                                                              *
*   LED2-t bekapcsolja.                                                        *
*   SW1 lenyomasara egyet csipog.                                              *
*   SW2 lenyomasara harmat csipog.                                             *
*                                                                              *
********************************************************************************
*   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 SPEAKER              2
#define LED1                 3
#define LED2                 4
#define SW1                  5
#define SW2                  6

#define LED2_ON              BC( PORTD, LED2)
#define SPEAKER_ON           BC( PORTD, SPEAKER)
#define SPEAKER_OFF          BS( PORTD, SPEAKER)
#define SW1_ON               BTC( PIND, SW1)     // SW1 lenyomva?
#define SW2_ON               BTC( PIND, SW2)     // SW2 lenyomva?




void beep( void);                                 // 120 ms, 1000 HZ-es csippantas




int main( void)
{
   UC n;
   LED2_ON;                                      // inicializalas
   BS( DDRD, LED2);
   SPEAKER_OFF;
   BS( DDRD, SPEAKER);

   while( 1)                                     // maga a program hurok
   {
      if( SW1_ON) beep();                        // 1. gombra - 1 beep
      if( SW2_ON)                                // 2. gombra - 3 beep
      {
         n= 3;
      	 while( n--)
      	 {
      	    beep();
      	    _delay_ms( 120);
      	 }
      }
   }
   return 0;
}




void beep( void)                                 // 120 ms, 1000 HZ-es csippantas
{
   UC n= 120;
   while( n--)
   {
      SPEAKER_ON;
      _delay_us( 500);
      SPEAKER_OFF;
      _delay_us( 500);
   }
}

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