logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak dodać obsługę przycisków do Atmega8, by generować sygnały +5V?

rafmed 23 Paź 2006 12:54 867 0
REKLAMA
  • #1 3144851
    rafmed
    Poziom 11  
    Posty: 44
    Pomógł: 1
    Ocena: 8
    Witam serdecznie- ponizej przedstawiam program (przerobiony z jednej ze znanych stron), prosze podpowiedziec jak i gdzie napisac aby o przycisniecie przyciskow podlaczonych do atmegi8 uzyskac odpowiednio sygnaly na wyjciach (+5V) w momencie nacisniecia przelacznika.


    #include <avr/io.h>

    /******************************************************

    Definicje stałych

    *******************************************************/

    #define F_CPU 1000000 /* 1MHz zegar procesora */

    #define CYCLES_PER_US ((F_CPU+500000)/1000000) /* cpu cycles per microsecond */

    /**************************************************************

    Koniec definicji stałych

    **************************************************************/
    // Piszemy procedury opóźnienia czasowego

    void delay(unsigned int us)

    {

    unsigned int delay_loops;

    register unsigned int i;

    delay_loops = (us+3)/5*CYCLES_PER_US; // +3 for rounding up (dirty)

    for (i=0; i < delay_loops; i++) {};

    }

    void delayms(unsigned int ms)

    {

    unsigned int i;

    for (i=0;i<ms;i++)

    {

    delay(999);

    asm volatile (

    "WDR"::);

    }

    }

    /* wytwarzanie dźwięków
    implementacja funkcji beep(częstotliwość,czas trwania)
    */



    void beep(unsigned int freq,unsigned int duration)
    {
    unsigned int d=0;
    unsigned int f=0;
    for(d=0;d<duration;d++)
    {
    #define LED_ON sbi(DDRB,PB1);sbi(PORTB,PB1)
    #define LED_OFF sbi(DDRB,PB1);cbi(PORTB,PB1)

    // wyjścia sterujące głośniczkiem
    // najpierw pin do którego podłączamy pierwszy kabelek od głośniczka
    #define speaker_pinA_port PORTC
    #define speaker_pinA_pin PC4
    #define speaker_pinA_DDR DDRC
    // teraz pin do którego podłączamy drugi kabelek od głośniczka
    #define speaker_pinB_port PORTC
    #define speaker_pinB_pin PC5
    #define speaker_pinB_DDR DDRC

    //Prototypy funkcji i procedur
    void delay(unsigned int us);
    void delayms(unsigned int ms);
    void beep(unsigned int freq,unsigned int duration);

    // generujemy dodatnią połówkę przebiegu
    sbi(speaker_pinA_DDR,speaker_pinA_pin);sbi(speaker_pinA_port,speaker_pinA_pin);
    sbi(speaker_pinB_DDR,speaker_pinB_pin);cbi(speaker_pinB_port,speaker_pinB_pin);
    // teraz czekamy przez połówkę okresu "sinusoidy"
    for(f=0;f<freq;f++)
    {
    delay(1);
    }
    // generujemy ujemną połówkę przebiegu
    sbi(speaker_pinA_DDR,speaker_pinA_pin);cbi(speaker_pinA_port,speaker_pinA_pin);
    sbi(speaker_pinB_DDR,speaker_pinB_pin);sbi(speaker_pinB_port,speaker_pinB_pin);
    // znowu czekamy przez połówkę okresu "sinusoidy"
    for(f=0;f<freq;f++)
    {
    delay(1);
    }
    }
    // na koniec wyłączamy przepływ prądu przez głośniczek
    cbi(speaker_pinA_DDR,speaker_pinA_pin);cbi(speaker_pinA_port,speaker_pinA_pin);
    cbi(speaker_pinB_DDR,speaker_pinB_pin);cbi(speaker_pinB_port,speaker_pinB_pin);
    }


    int main (void)
    {
    for (;;)
    {
    LED_ON;
    beep(20,100);
    beep(2,1000);
    delayms(1000);
    LED_OFF;
    beep(30,70);
    delayms(1000);
    }
    return (0);



    //definiujemy stany portu sterującego diodą LED

    #define LED_ON sbi(DDRB,PB1);sbi(PORTB,PB1)

    #define LED_OFF sbi(DDRB,PB1);cbi(PORTB,PB1)

    // Piszemy procedury opóźnienia czasowego






    int main (void)





    {

    LED_ON;

    delayms(1000);


    delayms(10);

    LED_OFF;

    delayms(500);
    LED_ON;

    delayms(500);

    LED_OFF;

    delayms(500);

    LED_ON;

    delayms(100);

    LED_OFF;

    delayms(100);

    LED_ON;

    delayms(10);

    LED_OFF;

    delayms(10);

    }



    return (0);

    }
  • REKLAMA
REKLAMA