roboforum.ru

Технический форум по робототехнике.
Текущее время: 05 ноя 2024, 10:24

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 2149 ]  На страницу Пред.  1 ... 54, 55, 56, 57, 58, 59, 60 ... 144  След.
Автор Сообщение
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 09 фев 2009, 20:04 
Не в сети
Аватара пользователя

Зарегистрирован: 03 авг 2007, 19:43
Сообщения: 1437
Откуда: Екатеринбург
прог. языки: Си, асм со словарем
расшифровать чтоли.
если операция побитовое И (&) перемножаю по битно получаю
Код:
0b10000000
0b10000010
---------------
0b10000000


если операция побитовое или (|) складываю по битно получаю
Код:
0b10000000
0b10000010
---------------
0b10000010

примерно так


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 09 фев 2009, 20:19 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2008, 14:41
Сообщения: 997
Откуда: СПб
прог. языки: C,Python
Странная штука-
в Лебедеве нашёл формулу расчёта периода пререполнения таймера
LaTeX: T0=n(Nm-N0)/F
где T0-период переполнения
n - предделитель
Nm - максимальное значение таймера+1такт на сброс ФФ->0
N0 - начальное значение
F - тактовая частота
считаю делитель 1 тактовая частота 7.3728МГц Nm-65536 N0-59715 и период получается 789 мкС задаю
TCNT1H=E9;
TCNT1L=43;
А период получается 35 мС В чём ошибка ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 09 фев 2009, 20:42 
Не в сети
Аватара пользователя

Зарегистрирован: 03 авг 2007, 19:43
Сообщения: 1437
Откуда: Екатеринбург
прог. языки: Си, асм со словарем
очевидно в программе


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 09 фев 2009, 20:57 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2008, 14:41
Сообщения: 997
Откуда: СПб
прог. языки: C,Python
Код:
TCCR1A=0x00;
TCCR1B=0x01;
TCNT1H=0xE9;
TCNT1L=0x43;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
while(1)
{
while(!(TIFR&1<<2));
      TIFR&=1<<2;
      PORTD.7++;
      while(!(TIFR&1<<2));
      TIFR&=1<<2;
};

Вот часть кода период переключения 35.2мС вместо 1.578 мС разница 20 раз HELP


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 09 фев 2009, 21:25 
Не в сети
Аватара пользователя

Зарегистрирован: 03 авг 2007, 19:43
Сообщения: 1437
Откуда: Екатеринбург
прог. языки: Си, асм со словарем
может воспользоваться мастером кода, ктож его поймет что надо. если используется тамер то зачем while? пользуем прерываения
кодевижен посоветовал так для меги 32й
Код:
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0xE9;
TCNT1L=0x43;
// Place your code here
PORTD.7++;   // дергаем ногой по переполнению таймера
}

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0xE9;
TCNT1L=0x43;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;


Добавлено спустя 5 минут 13 секунд:
ALHIMIK писал(а):
while(1)
while(1)
{
while(!(TIFR&1<<2));
      TIFR&=1<<2;
      PORTD.7++;
      while(!(TIFR&1<<2));
      TIFR&=1<<2;
};


что хотел получить то , чет не пойму.

Добавлено спустя 1 минуту 24 секунды:
админы, добавьте уже подсказку как язык тэгу коде указать, я опять все забыл. по подобию URL


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 09 фев 2009, 21:29 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2008, 14:41
Сообщения: 997
Откуда: СПб
прог. языки: C,Python
НЕ здесь именно задержка нужна прерывание по таймеру уже есть да ёще прерывания скорей всего будят :roll:
а использовать nop не хочется это как то не спортивно :)

Добавлено спустя 3 минуты 45 секунд:
Выкладываю полный фаил а то у вас больно бурная фантазия :oops:


Вложения:
Комментарий к файлу: Исходник и проекты
dalnometr on TSOP 1738.rar [49.29 КиБ]
Скачиваний: 6
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 09 фев 2009, 22:21 
Не в сети
Аватара пользователя

Зарегистрирован: 03 авг 2007, 19:43
Сообщения: 1437
Откуда: Екатеринбург
прог. языки: Си, асм со словарем
Bit 2 – TOV1: Timer/Counter1, Overflow Flag
если я правильно понял то этот бит переполнения таймера

Код:
while(!(TIFR&1<<2));  // ждем когда бит 2 станет единицей, тоесть переполнение TIFR&0b00000100
      TIFR&=1<<2;        // обнуляем все кроме 2 бита потому что см выше. хотя по идее надо обнулить только 2й бит
      PORTD.7++;         // инверсия ноги
      while(!(TIFR&1<<2));   // ждем переполнения таймера а с чего ему переполняться? он не запущен
      TIFR&=1<<2;             // обнуляем все кроме 2 бита

сброс ноги это так
TIFR=TIFR&(~(1<<2))
  (1<<2) =>0b00000100
~(1<<2) =>0b11111011
TIFR&0b11111011 => обнулим 2й бит. както так.


и ваще я б скобок понаставлял, а то непонятно с какая операция приоритетней сдвиг или логическое &

тяжело это курить даташит 8) . ваще лучше на курс сходить, там это разжевано.

Добавлено спустя 2 минуты 48 секунд:
ну все, я устал :o


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 09 фев 2009, 22:28 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2008, 14:41
Сообщения: 997
Откуда: СПб
прог. языки: C,Python
Чтобы обнулить этот бит нужно записать в него еденицу Батенька :Bravo:
Регистр TIFR содержит в себе ТОЛЬКО ФЛАГИ ПРЕРЫВАНИЙ а запись while(!(TIFR&1<<2)) в TIFR не чего не записывает
Чтобы запустить таймер нужно изменить биты Cksel которые находятся в TCCR1B :P
А здесь я сбрасывал ФЛАГ записывая в него 1

Добавлено спустя 2 минуты 29 секунд:
А операция сдвига и меет большей приоритет чем & и =


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 09 фев 2009, 23:02 
Не в сети
Аватара пользователя

Зарегистрирован: 03 авг 2007, 19:43
Сообщения: 1437
Откуда: Екатеринбург
прог. языки: Си, асм со словарем
ну вот сам все умеешь, что тогда притворяешься?
хотя едеиничку яб записывал так
Код:
TIFR= TIFR|(1<<2);

пришлось Евстигнеева читать, казалось бы зачем ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 10 фев 2009, 12:05 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2008, 14:41
Сообщения: 997
Откуда: СПб
прог. языки: C,Python
ещё учусь до умея далеко НО не работает как надо :shock:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 10 фев 2009, 14:51 
Может кто знает как обращаться к битам какойто перееменной в CV, не используя конструкцию здвига ---(...N<<6...)--- (например как обращаемся к регистрам контроллера PORTA.1=0;...):

Чтобы было как то так (это конечно не работает):
bit Z, X;
u.c. value=0xff;
Z=value.1; // т.е. битовой переменной присвоить значение бита №1 переменной value.
X=value.2; // т.е. битовой переменной присвоить значение бита №2 переменной value.

Может есть какойто оператор типа : Z=znachenie_bita_#1_peremenoi.VALUE_....
В хелпе КВ не нашел...


Вернуться к началу
  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 10 фев 2009, 14:53 
Не в сети
Аватара пользователя

Зарегистрирован: 03 авг 2007, 19:43
Сообщения: 1437
Откуда: Екатеринбург
прог. языки: Си, асм со словарем
кстати таймер инициализировать после каждого цикла ни кто не отменял. В прерывание это автоматом подставляется, а ежели сам то сам должен задать начало отсчета иначе по кругу с нуля считать будет.
Код:
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer 1 value
TCNT1H=0xE9;   <- вот об этом
TCNT1L=0x43;   <- вот об этом
// Place your code here
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 10 фев 2009, 14:59 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
slavaslx писал(а):
Может кто знает как обращаться к битам какойто перееменной в CV, не используя конструкцию здвига ---(...N<<6...)--- (например как обращаемся к регистрам контроллера PORTA.1=0;...):

Конечяно знает и написал даже для разных компиляторов и универсальную форму:
http://avr123.nm.ru/z1.htm

Кстати на 1 странице этого топика !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 10 фев 2009, 15:35 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2008, 14:41
Сообщения: 997
Откуда: СПб
прог. языки: C,Python
Чудеса 2 rig СПАСИБО заработало


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: МикроКонтроллеры начинающим - общие вопросы
СообщениеДобавлено: 10 фев 2009, 15:43 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
ALHIMIK писал(а):
Чудеса 2 rig СПАСИБО заработало

Интересно как вы "это чудо" в задачах 1 и 6 про тамеры не увидели ???


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2149 ]  На страницу Пред.  1 ... 54, 55, 56, 57, 58, 59, 60 ... 144  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO