время задержки
|
|
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
| никак неполучается у меня сделать импульсов просто нет, вроде все правильно, компилятор ошибок невадает. вожможно чегото нехватает или еще чтото нетак Quote (Doniak) вот кусок кода таймера былобы неплохо весь код посмотреть, с куском все понятно, только вот чтото я плохо себе представляю как все это целиком работает
|
|
| |
Doniak | Дата: Суббота, 28.03.2009, 17:06 | Сообщение # 14 |
Язык программированя: CodeVisionAVR Си
Зарегистрирован 19.03.2008
Группа: Модераторы
Сообщений: 584
Город: Кривой Рог (Днепропетровск)
Статус: Offline
| Quote былобы неплохо весь код посмотреть остальное єто управление движками вперёд, назад думаю тебе єто не надо. Quote импульсов просто нет, вроде все правильно, компилятор ошибок невадает. вожможно чегото нехватает или еще чтото нетак в протєусе проверяй
|
|
| |