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

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Сообщения: 512
Зарегистрирован: Вс фев 13, 2011 20:51:21
Откуда: Спб

Сообщение witia03 »

помогите разобраться-

Код: Выделить всё

#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 уменьшалось
Реклама
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Возможно внешнее прерывание и в прерывании указать +1 или -1.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Реклама
Вымогатель припоя
Сообщения: 512
Зарегистрирован: Вс фев 13, 2011 20:51:21
Откуда: Спб

Сообщение witia03 »

просто КОТ писал(а):Возможно внешнее прерывание и в прерывании указать +1 или -1.
мне бы это ввиде кода
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

По идее, что-то типа:

Код: Выделить всё

#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. Для своего переделать сможешь?!
(Надо покопаться в ДатаШите и подобрать выводы!)

Хм, я вот тут подумал, надо же ещё как-то запускать прерывание. . . Скоро дополню!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Да, кстати -- Частоты будут: 1кГц, 500Гц, 333Гц, 250Гц, 200Гц, 166Гц, 143Гц, 125Гц, 111Гц, 100Гц.
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Реклама
Вымогатель припоя
Сообщения: 512
Зарегистрирован: Вс фев 13, 2011 20:51:21
Откуда: Спб

Сообщение witia03 »

просто КОТ писал(а):Да, кстати -- Частоты будут: 1кГц, 500Гц, 333Гц, 250Гц, 200Гц, 166Гц, 143Гц, 125Гц, 111Гц, 100Гц.
а почему? а если мне надо от 1 гц до 10 кгц?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

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


(Тут надо не через ДЭЛЭЙ, а по другому как-то. Таймером например!)
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Вымогатель припоя
Сообщения: 512
Зарегистрирован: Вс фев 13, 2011 20:51:21
Откуда: Спб

Сообщение witia03 »

а если задача немного другая- регулировать задержку с частотой от 1 герца до 1 кгц, записывать последние установленные значения в епром?
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

В смысле регулировать задержку?! Можно поподробнее -- чего ты хочешь сделать?!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 451
Зарегистрирован: Сб фев 26, 2011 14:38:42
Откуда: Новочеркасск

Сообщение Reloader »

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

AVR таймер

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

avr прерывания
Выпрямите спину и уберите левую руку от лица.
Мой Youtube канал
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

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) ..."
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Ответить

Вернуться в «AVR»