Перейти к содержанию
    

IC7K

Участник*
  • Постов

    9
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о IC7K

  • День рождения 5 февраля

Информация

  • Город
    Array
  1. небольшая русификация к VMLab http://altezza-club.su/f/RUSPatch_VMLAB_IC7K.rar
  2. помогла программа VLAB код заработал :rolleyes:
  3. большое спасибо всем за ответы, буду пытаться искать решение. понятно уже что все не так просто..
  4. блин я уже пожалел что применил умное слово скважность :rolleyes: Вы напрасно пытаетесь объяснить автору топика принцип измерения. Я не поленился, в гугле посмотрел его вопрос на других форумах. Там на аналогичное моему замечание про 0 частоту, он подтверждает: "да, частота может быть нулевой - когда вал остановлен". Автор явно абсолютно не понимает о чем говорит, и ведь будет пытаться измерять такую частоту. пятерка гуглу за оперативность :bb-offtopic: любой частотомер же показывает 0, значит есть такая частота! будем спорить? спасибо он явно не для начинающих у меня алгоритм такой: прыгаем по таймеру, в обработчике инкрементируем счетчик сработок таймера, тем самым меряем длину импульса при перепаде с 0-1 или 1-0 включаем задержку, одновременно вычисляем задержку следующего импульса одновременно считаем новый импульс и все это не работает почемуто...
  5. что еще непонятного? если кому то мой вопрос неясен это скорее каша у него! можно, но нужно сделать на atmega8 программно
  6. можно вынести в отдельную ветку и там выяснить что же такое скважность :laughing: выразимся подругому еще раз: длина импульса равна длине паузы а что можете сказать по теме ветки? p/s/ основная масса программеров я смотрю еще не проснулась, у нас то +7 к москве
  7. В основной программе непрерывно измеряете период входного сигнала и соответствующим образом корректируете период таймера а как его измерить? частота 16МГц, а таймер занят. а ведь считать то его нужно в единицах таймера получается я по таймеру 16МГц/256=62500 считал длину импулься и тут же параллельно выдавал, и как бы получается так что все сдвигается и накладывается на входной, вобщем запутало меня все это. вопрос о фазе не стоит. вот мой код - скажите где трабл :wassat: //==========START TIMER PROCESS===================== Timer: CLI //заносим и выделяем бит скорости из порта С IN PortCVal, PINC ; ANDI PortCVal, 1<<InPortSyg //выделяем предыдущее состояние бита из порта С MOV temp1, Flags ; ANDI temp1, 1<<InSygFlag //копируем бит из порта С для проверки изменился ли он MOV temp3, PortCVal EOR temp3, temp1 ; проверяем изменился ли бит //если изменился то пытаемся его продлить BRNE DecDelay ;1x1=0(Z) 0x0=0(Z) 1x0=1 0x1=1 //после задержки инвертируем флаг сигнала LDI temp3,1<<InSygFlag ; EOR Flags, temp3 //вычисляем длительность нового импульса DelL_Next DelH_Next CalNewDel: MOV dd16uL, CtrL MOV dd16uH, CtrH //для упрощения задаем фиксированную задержку LDI DelL_Next, $10 LDI DelH_Next, $00 //прибавляем к длительности импульса ADD DelL_Next, CtrL ADC DelH_Next, CtrH //начнем подсчет заново CLR CtrL CLR CtrH //ПРОДОЛЖИМ ВЫДАЧУ ИМПУЛЬСА DecDelay: DEC DelL_Cur BRNE FollowCount TST DelH_Cur BRNE DecDelayH //Задержка ЗАКОНЧИЛАСЬ, загружаем НОВУЮ MOV DelL_Cur, DelL_Next MOV DelH_Cur, DelH_Next RJMP ActuateSyg DecDelayH: DEC DelH_Cur RJMP FollowCount //АКТУАЛИЗАЦИЯ ТОЛЬКО ПОСЛЕ ЗАДЕРЖКИ!!!!! ActuateSyg: //выделяем предыдущее состояние OutSyg из флага MOV PortCVal, Flags LDI temp3,1<<OutSygFlag ; AND PortCVal, temp3 EOR PortCVal, temp3 ; EOR Flags, temp3 //актуализация сигнала (изменение на обратный) OUT PORTC, PortCVal //выдача импульса FollowCount: INC CtrL ; и увеличиваем общий счетчик импульсов BRNE SetTimer INC CtrH BRNE SetTimer //ограничиваем длину входного импульса SER CtrL SER CtrH ;Counter=$FFFF SetTimer: //предустановка периода таймера на 1 тик LDI temp1, $FF ;загружаем старший байт OUT TCNT1H, temp1 ; Старший байт пошел! LDI temp1, $FE ;загружаем младший байт OUT TCNT1L, temp1 ; Младший байт пошел! RETI
  8. Скважность 1 это пауза равна импульсу по длительности (сорри если ошибся :) K задается вручную путем подбора и всегда постоянно, т.е. это % от длины импулься получается Т.е. удлинять надо и импульс и паузу одновременно. Пока вы удлиняете импульс, вы пропустите спадающий фронт и как же тогда вы удлините паузу ? верно, но в том то все и дело :smile3046: как то надо обойти эту проблему стоит нарисовать на бумажке малоли какие есть механизмы у контроллера, я же не спец. может этот вопрос давно решен другим макаром.
  9. голову сломал но сделать не могу никак маленький опыт программирования очевидно. есть задача: поступают прямоугольные испульсы с частотой от 0 до 150 Гц и скважностью 1. необходимо выдать подобные импульсы но с "плавной" регулировкой частоты (длительности) импульса/паузы и такой же скважностью в сторону увеличения длительности (уменьшения частоты). т.е. допустим поступил импульс/пауза длительностью L, а выдать нужно L+L/K, где K - коэф-т удлиннения импульса/паузы. пробовал таймером вызывать цикл счетчика и одновременно выдачи импульса в разных вариациях, но чтото никак может есть какая идея простая? буду благодарен за помощь!
×
×
  • Создать...