Обсуждаем контроллеры компании Atmel.
Ответить

простой генератор на avr

Вс сен 02, 2012 15:09:38

помогите разобраться-
Код:
#include <90s2343.h>
#include <delay.h>
void main(void)
{
unsigned char pause;

DDRB.4 =0xFF;

pause = 1;

while (1)
{
PORTB.4 =0xFF;
delay_ms(pause);
PORTB.4 =0x00;
delay_ms(pause);
}
}

как сделать что бы при нажатии кнопки 1 увеличивалось значение переменной pause а при нажатии кнопки 2 уменьшалось

Re: простой генератор на avr

Вс сен 02, 2012 15:16:07

Возможно внешнее прерывание и в прерывании указать +1 или -1.

Re: простой генератор на avr

Вс сен 02, 2012 15:36:01

просто КОТ писал(а):Возможно внешнее прерывание и в прерывании указать +1 или -1.

мне бы это ввиде кода

Re: простой генератор на avr

Вс сен 02, 2012 16:51:36

По идее, что-то типа:
Код:
#include <tiny13.h>

    interrupt[2] void ExtInt1(void)
        { if (PORTB.3=1)
            {pause=X+1
             X=pause};
           if (PORTB.4=1)
            {pause=X-1
             X=pause}           
    void main(void)
    {
    unsigned char X;
    unsigned char pause;
    pause=X
    DDRB=0b11101;
    PORTB=0b00010;
    MCUCR=0b00000010
    GTCCR=0b10000000
    #asm("sei")
    while (1)
    {
    PORTB.4 =0xFF;
    delay_ms(pause);
    PORTB.4 =0x00;
    delay_ms(pause);
    }
    }


Вот это для Тини13. Для своего переделать сможешь?!
(Надо покопаться в ДатаШите и подобрать выводы!)

Хм, я вот тут подумал, надо же ещё как-то запускать прерывание. . . Скоро дополню!

Re: простой генератор на avr

Вс сен 02, 2012 16:56:32

Да, кстати -- Частоты будут: 1кГц, 500Гц, 333Гц, 250Гц, 200Гц, 166Гц, 143Гц, 125Гц, 111Гц, 100Гц.

Re: простой генератор на avr

Вс сен 02, 2012 17:43:46

просто КОТ писал(а):Да, кстати -- Частоты будут: 1кГц, 500Гц, 333Гц, 250Гц, 200Гц, 166Гц, 143Гц, 125Гц, 111Гц, 100Гц.

а почему? а если мне надо от 1 гц до 10 кгц?

Re: простой генератор на avr

Вс сен 02, 2012 19:25:49

Ну, если у тебя мин. задержка 1мс и импульс 1мс, то максимальная частота 500Гц. Так что 1кГц это я ошибся. От 500Гц и ниже!


(Тут надо не через ДЭЛЭЙ, а по другому как-то. Таймером например!)

Re: простой генератор на avr

Вс сен 02, 2012 19:34:42

а если задача немного другая- регулировать задержку с частотой от 1 герца до 1 кгц, записывать последние установленные значения в епром?

Re: простой генератор на avr

Вс сен 02, 2012 21:55:59

В смысле регулировать задержку?! Можно поподробнее -- чего ты хочешь сделать?!

Re: простой генератор на avr

Вт сен 04, 2012 17:18:37

delay_ms(pause); однозначно убирай. Придется использовать таймер. Обработку нажатий на кнопки лучше всего через прерывания (можно и без прерываний). Не забыть про дребезг контактов! В принципе этого более, чем достаточно для истязания Гугла.

AVR таймер

avr кнопки дребезг

avr прерывания

Re: простой генератор на avr

Чт сен 06, 2012 20:09:19

delay_ms(pause); однозначно убирай.


Да. В _delay_ms() запрещено использовать переменные.

"... delay time must be an expression that is a known constant at compile-time. If these requirements are not met, the resulting delay will be much longer (and basically unpredictable) ..."
Ответить