Как видите коэффициент деления равен единице, тоесть таймер работает на частоте ЦП(3.6864MHz)
Попробуй теперь сделать как я писал, чтобы длительность 0 и 1 была разной. В твоем симуляторе есть чтото типа осцилографа, чтобы ты мог видеть какой сигнал формируеться на пине?
Анатолий.
PS: Всетаки используй sei(); вместо SREG SET_B(7); это красивее и понятние всем.
aesok писал(а):В твоем симуляторе есть чтото типа осцилографа, чтобы ты мог видеть какой сигнал формируеться на пине?
Да, оссцилограф есть, но я им пока не пользуюсь т.к в симуляторе показывается градус поворота сервы с точностью - 2 зтака после запятой я по ним и настраиваю задержки что-б тютелька в тютельку было
aesok писал(а):Всетаки используй sei(); вместо SREG SET_B(7); это красивее и понятние всем.
А что тут непонятного? SREG - регистр SET_B(x) - установить бит(номер x) Вместо SREG можно PORTD поставить например, так что тоже очень универсально. Тем более я ф-ции эти с сайта avr123.nm.ru взял, так что все претензии к автору. :D :D
Последний раз редактировалось Lirzman 14 авг 2006, 22:38, всего редактировалось 1 раз.
Возникла проблема требующая нетривиального решения.
Как известно на серву сначала надо подать управляющий импульс а потом импульс длительностью 20мс. Насколько я знаю 20мс импульс нужен для того что-бы отделять умравляющие импульсы друг от друга.
После строчки timer1_init(angle); я это сделать не могу т.к к этому моменту таймер еще не успеет отсчитать свои 1.5мс.
А в функцию прерывания вставлять задержку - смерти подобно, получится бесконечный цикл.
Существует ли такая ф-ция которая бы ПЕРЕХВАТЫВАЛА прерывание и выполняла код сразу ПОСЛЕ него??? Знаю что на компе есть такая штука, зовется она CATCH(какое нибудь событие). На счет МК - с таким зверем я еще не сталкивался.
aesok писал(а):В твоем симуляторе есть чтото типа осцилографа, чтобы ты мог видеть какой сигнал формируеться на пине?
Да, оссцилограф есть, но я им пока не пользуюсь т.к в симуляторе показывается градус поворота сервы с точностью - 2 зтака после запятой я по ним и настраиваю задержки что-б тютелька в тютельку было
aesok писал(а):Всетаки используй sei(); вместо SREG SET_B(7); это красивее и понятние всем.
А что тут непонятного? SREG - регистр SET_B(x) - установить бит(номер x) Вместо SREG можно PORTD поставить например, так что тоже очень универсально. Тем более я ф-ции эти с сайта avr123.nm.ru взял, так что все претенции к автору. :D :D
Так пишет только 123. Не учись плохому. В С принято "чему присваиваеш" "=" "что присваиваеш", или МАКРО(1параметр, 2, ...). А два макроса без разделителей не принято. Тебя за это будут сильно пинать. Из avr-libc выкинули даже более Сишные макросы outp(port, val) и sbi(port, bit). Если очень хочется используй лучше их.
Если тебя интерисует мое мнение: мне это очень, очень не нравиться. Пиши как принято в С.
Lirzman писал(а):Возникла проблема требующая нетривиального решения.
Как известно на серву сначала надо подать управляющий импульс а потом импульс длительностью 20мс. Насколько я знаю 20мс импульс нужен для того что-бы отделять умравляющие импульсы друг от друга.
После строчки timer1_init(angle); я это сделать не могу т.к к этому моменту таймер еще не успеет отсчитать свои 1.5мс.
А в функцию прерывания вставлять задержку - смерти подобно, получится бесконечный цикл.
Существует ли такая ф-ция которая бы ПЕРЕХВАТЫВАЛА прерывание и выполняла код сразу ПОСЛЕ него??? Знаю что на компе есть такая штука, зовется она CATCH(какое нибудь событие). На счет МК - с таким зверем я еще не сталкивался.
Может я что-то путаю???
Я же тебе уже писал алгоритм, посмотри на предыдущей странице.
Анатолий.
Последний раз редактировалось aesok 14 авг 2006, 23:15, всего редактировалось 1 раз.
Да ладно ребят выяснять что правильно а что нет) Ну хотябы по личке обсудилибы, а то помойму оффтопите. Лирзман сам поймет как ему лучше прописывать и потом поймет как нада правильно писать. Вы лучшеб помогли человеку код сделать, он всетаки просит помочь.
Тут все зависит от того как кого учили, поэтому спор бессмысленный.
Я научился пользоваться оссцилографом!!! При подаче управляющего сигнала возникает фронт :D
2aesok: Я сделал все как вы сказали но эффекта - 0 Странно, по идее после первого-же управляющего сигнала, линию(сигнал) на осциллографе должно страшно колбасить с периодом в 20мс. Хммм... Ладно, утро вечера мудренее, завтра закончу.