Воскресенье, 28.04.2024, 13:30
| RSS
[SEARCH_TITLE]
[SEARCH_FORM]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Архив - только для чтения
Форум » Программирование » Программирование на языке С, Бейсик и Асемблер » время задержки (немогу разобраться с заднржкой)
время задержки
ornadov1Дата: Воскресенье, 22.03.2009, 14:55 | Сообщение # 1








Зарегистрирован 25.02.2009
Группа: Новички
Сообщений: 7
Город: Куликиград
Статус: Offline
мк мега16, кварц 8, winavr
немогу разобраться как сделать так чтобы на порт генерировались импульсы к примеру 96кгц, удается менять частоту по десяткам (20кгц, 30кгц, 40кгц, и тд), а вот еденици никак. если кто может привести примеры кода или хотяб ссылочку, буду рад. заранее спасибо.
 
DoniakДата: Воскресенье, 22.03.2009, 15:03 | Сообщение # 2








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
Quote
удается менять частоту по десяткам (20кгц, 30кгц, 40кгц, и тд),

что для этого делаеш?

 
ornadov1Дата: Понедельник, 23.03.2009, 19:34 | Сообщение # 3








Зарегистрирован 25.02.2009
Группа: Новички
Сообщений: 7
Город: Куликиград
Статус: Offline
Меняю время задержки (в ms), например если выбрать время задержки 0.017 или 0.016 или 0.015 то это частота 30кгц, а 0.014 это уже 40кгц. На изменения десятых тысячных нереагирует
 
DoniakДата: Понедельник, 23.03.2009, 19:38 | Сообщение # 4








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
используй таймер как его использовать, настраивать хорошо описано тут http://radiokot.ru/start/mcu_fpga/avr/11/
 
ornadov1Дата: Вторник, 24.03.2009, 11:28 | Сообщение # 5








Зарегистрирован 25.02.2009
Группа: Новички
Сообщений: 7
Город: Куликиград
Статус: Offline
Действительно описанно все хорошо, только еслиб это былобы на С...
С асемблером я неочень дружу
 
DoniakДата: Вторник, 24.03.2009, 11:33 | Сообщение # 6








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
регистры одинаковы для всех языков.

вот кусок кода таймера который портом генерировал импульсы 36 кГц

Code
TIMSK=0b01000000;       // разрешить прерывание компроматора таймера 1
TCCR1B=0b00001010;     // СК=8 и обнулять  OCR1Aпри каждом прерывание
OCR1AH=0x00;                
OCR1AL=0x0E;         // значение подобрано для сробативание в 2 раза больше чем 36кГц
#asm("sei")     // разрешить прерывания

interrupt [TIM1_COMPA] void timer1 (void)
{
if (PINB.4==1) {           //  если ИК диод горит, погасить ево  
   PORTB.4=0;    
            }
else                       // иначе засветить ИК диод
            {       
   PORTB.4=1;};
}
 
ornadov1Дата: Вторник, 24.03.2009, 13:46 | Сообщение # 7








Зарегистрирован 25.02.2009
Группа: Новички
Сообщений: 7
Город: Куликиград
Статус: Offline
С регистрами коекак разобрался. В примере, я так понял, импулься на порт идут непрерывно, а если мне нужно чтоб они шли только при срабатывании датчика или в какойнибуть другой момент, как сделать? Да и кроме одних импульсов мне еще нужно 3мя двигалелями управлять.
 
DoniakДата: Вторник, 24.03.2009, 14:30 | Сообщение # 8








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
Quote
при срабатывании датчика или в какойнибуть другой момент, как сделать?

запускай\останавлюй таймер
 
ornadov1Дата: Вторник, 24.03.2009, 14:48 | Сообщение # 9








Зарегистрирован 25.02.2009
Группа: Новички
Сообщений: 7
Город: Куликиград
Статус: Offline
Глупый вопрос:
Каким образом?
 
DoniakДата: Вторник, 24.03.2009, 16:05 | Сообщение # 10








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
TIMSK=0b01000000; // разрешить прерывание компроматора таймера 1

сталобыть если вместо 1 вписать 0 таймер работать не будит.

 
ornadov1Дата: Вторник, 24.03.2009, 16:25 | Сообщение # 11








Зарегистрирован 25.02.2009
Группа: Новички
Сообщений: 7
Город: Куликиград
Статус: Offline
Это что, каждый раз нужно писать тот кусок кода целиком, а в конец дописывать TIMSK=0b00000000?
 
DoniakДата: Вторник, 24.03.2009, 19:13 | Сообщение # 12








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
то что я тебе сверху дал (кусок кода) пишется 1 раз когда настраиваешь регистры. + там функция обработки прерывания по таймеру. Когда тебе нужно чтоб он генерировал сигнал пишешь TIMSK=0b01000000; когда ненадо TIMSK=0b00000000;
 
ornadov1Дата: Суббота, 28.03.2009, 13:59 | Сообщение # 13








Зарегистрирован 25.02.2009
Группа: Новички
Сообщений: 7
Город: Куликиград
Статус: Offline
никак неполучается у меня сделать help
импульсов просто нет, вроде все правильно, компилятор ошибок невадает. вожможно чегото нехватает или еще чтото нетак

Quote (Doniak)
вот кусок кода таймера

былобы неплохо весь код посмотреть, с куском все понятно, только вот чтото я плохо себе представляю как все это целиком работает senile

 
DoniakДата: Суббота, 28.03.2009, 17:06 | Сообщение # 14








Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
Quote
былобы неплохо весь код посмотреть

остальное єто управление движками вперёд, назад думаю тебе єто не надо.

Quote
импульсов просто нет, вроде все правильно, компилятор ошибок невадает. вожможно чегото нехватает или еще чтото нетак

в протєусе проверяй
 
Форум » Программирование » Программирование на языке С, Бейсик и Асемблер » время задержки (немогу разобраться с заднржкой)
  • Страница 1 из 1
  • 1
Поиск: