реклама на сайте
подробности

 
 
> Генератор, меандры, точность, опрос...и т.д., непонятно с ходом программы...
MakFatum
сообщение Mar 24 2006, 16:19
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 7-12-05
Пользователь №: 11 912



Здравствуйте!...

приведу кусочек и спрошу потом

Все инициализировал...
дальше сам кучочек программы:

Код
if (!PIND.1) {              //PD0  420Hz
  do {    
       OCR2=0x94;  
         }
  while ((PIND>>1)&0);

                     };


Ну так всё и повторяется дальше для различных частот.
Вопрос 1. Всю программу с вышеприведенным куском эмулировал в протеусе (принтскрин ниже)
Дословно код переводится ведь так???: если на PIND.1 НЛУ, то заносить в регистр сравнения OCR2 число соответствующее частоте до тех пор пока выполняется условие (есть НЛУ на PIND.1 ).
В протеусе почему-то еще не успев нажать кнопку уже выдается частота 420 (хотя следуя программе она должна появиться только при нажатии И удержании кнопки (т.е. НЛУ) на пине), а при отпускании пропасть (этого тоже кстати не происходит). Т.е. ситуация такая: вместо кнопок должны быть переключатели, и пока есть НЛУ - есть соответствующая частота, а когда нет НЛУ - ничего нет.
А у меня просто при кратковременном нажатии она появляется и так не пропадает при отпускании. Где собака...?
Вопрос 2. Дискретность установки частоты у 8-разрядного таймера оставляет желать лучшего даже при 1/8 кдел., т.е. получается допустим 420+-2Гц (иногда и больше) (многовато, нужно хотя бы +- 1Гц). Формула нахождения частоты : fOCn=fclk_/2*N(1+OCRn) почему-то не работает, нахожу не по ней...Как улучшить показатели? 16-разрядный для модулирующих у меня...
Вопрос 3. Самое интересное и самое непонятное пока для меня: Как мне вывести программно в какой-нибудь пин порта модуляцию 2-х частот (то бишь перемножить) логическое "И"???
В лоб не получается... Теории об этом не нашел...



Сообщение отредактировал MakFatum - Mar 24 2006, 16:24
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MakFatum
сообщение Mar 27 2006, 15:09
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 54
Регистрация: 7-12-05
Пользователь №: 11 912



Спасибо за помощь!...
Опрос портов делаю по переполнению таймера T0 в прерывании...примерно раз в 0,2 сек.
Вроде все вышло...но столкнулся с проблемой...
1.Следуя нижеприведенному коду при замкнутом ключе (НЛУ на пине) программа заносит в таймер значение константы, а при размыкании частота так и остается,
если я добавляю
Код
else  {
        TCCR2=0x00;
      };

после if для 8-разрядного таймера,
Код
else  {
        TCCR1A=0x00;
        TCCR1B=0x00;
      };

или после if для 16-р таймера (т.е. останавливаю таймеры), то получается какая-то околесица..
частоты не те и самое интересное, когда ставлю первое else после первого if (!PINB.5) на него реагирует и if (!PINB.4), т.е. при размыкании ключа на PINB.4 тоже пропадает сигнал, этого ведь не должно быть...
То же самое когда ставлю это else после "420", на него все остальные реагируют...

Код
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xff;
if (!PINB.5) {                     //PD0  8Hz
        TCCR1A=0b01000000;
        TCCR1B=0b00001101;  
        OCR1AH=0x00;
        OCR1AL=0x3C;  
                     }
                  
if (!PINB.4) {                      //PD0  12Hz
        TCCR1A=0b01000000;
        TCCR1B=0b00001101;  
        OCR1AH=0x00;
        OCR1AL=0x28;  
                     }                  
                                                                  
        if (!PIND.1) {              //PD0  420Hz
        TCCR2=0b00011010;  
        OCR2=0x94;  
                     }
                    
        if (!PIND.2) {              //PD0  480Hz
        TCCR2=0b00011010;    
        OCR2=0x81;  
                     }
                
        if (!PIND.3) {              //PD0  580Hz
        TCCR2=0b00011010;
        OCR2=0x6B;  
                      }
                                                  
        if (!PIND.0) {              //PD0  720Hz
        TCCR2=0b00011010;
        OCR2=0x56;  
                      }
              
        if (!PIND.6) {              //PD0  780Hz
        TCCR2=0b00011010;
        OCR2=0x4F;  
                      }
                                          


}



2. При размыкании того же ключа мне нужно вывести в PB1/OC1A - НЛУ, я пишу
Код
else  {
        PORTB.1=0
        TCCR1A=0x00;
        TCCR1B=0x00;
      };


НО не работает!!! почему?...Сбрасывать в 0 битом FOCn в TCCRn?

3. Не пойму до конца функции FOCn в TCCRn? Написано: ПРинудительное изменение состояния вывода OCn (режимы Normal, CTC). Если я записываю туда 0, то просто не будет генерироваться прерывание и происходить сброс таймера, а программирование COMn1:COMn0 будет доступно? (управление выводом ОСn???)

Спасибо...

Сообщение отредактировал MakFatum - Mar 27 2006, 15:10
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MakFatum   Генератор, меандры, точность, опрос...и т.д.   Mar 24 2006, 16:19
- - vet   1) Будучи единожды настроен, таймер будет работать...   Mar 24 2006, 19:24
- - MakFatum   Насчет прерываний - спасибо, попробую... Вообщем ч...   Mar 26 2006, 12:27
- - WHALE   обьедини свои кнопки через диоды и заведи на вход ...   Mar 26 2006, 16:11
- - MakFatum   Насчет умножения частот-модуляции попробовал в про...   Mar 26 2006, 16:29
- - WHALE   не понял,чем тебя прерывание по нажатию не устроив...   Mar 26 2006, 16:48
- - MakFatum   Может где в синтаксисе ошибка?... пробовал после р...   Mar 28 2006, 08:17
- - MakFatum   собрал значит, ключи зацепил, частоты генерит, но ...   Apr 1 2006, 16:51
|- - defunct   Цитата(MakFatum @ Apr 1 2006, 18:51) собр...   Apr 1 2006, 23:49
- - MakFatum   Нашел ошибку... по невнимательности порта А (на ко...   Apr 2 2006, 09:33
- - WHALE   У тебя-же эти выходы натроены на выход,соответстве...   Apr 2 2006, 09:58
|- - MakFatum   Цитата(WHALE @ Apr 2 2006, 15:58) У тебя-...   Apr 2 2006, 11:03
- - MakFatum   а протеусе почему все тогда путем?... или лучше ем...   Apr 2 2006, 10:08
- - WHALE   А 100% полагаться ни на какой симулятор нельзя Пр...   Apr 2 2006, 10:59


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 05:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016