
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.45.170] |
![]() |
|
Сообщ.
#1
,
|
|
|
собственно задание вроде нетрудное, но навыков нет, поэтому ступор.
сформировать 3 импульсных сигнала с изменяющейся частотой, смещенных по фазе относительно друг друга(диапазон частот 1кгц-3кгц длит импульса = 1/3 периода, фазовый сдвиг = длит импульса ) в результате должно быть что то вроде трехступенчатой лесенки(рисунок не прикрепляется). помогите кто чем может. да, язык си, микроконтроллер msp430 |
Сообщ.
#2
,
|
|
|
Цитата andr92 @ собственно задание вроде нетрудное, но навыков нет, поэтому ступор. сформировать 3 импульсных сигнала с изменяющейся частотой, смещенных по фазе относительно друг друга(диапазон частот 1кгц-3кгц длит импульса = 1/3 периода, фазовый сдвиг = длит импульса ) в результате должно быть что то вроде трехступенчатой лесенки(рисунок не прикрепляется). помогите кто чем может. да, язык си, микроконтроллер msp430 Есть неплохой сайт http://www.shelezyakin.ru/ с уроками по MSP430, почитай. |
Сообщ.
#3
,
|
|
|
Какая модель по-точнее?
Подозреваю что таймер есть. Тогда делать через прерывание. настраиваем таймер на нужную частоту. Могу подсказать "на глаз". Внимание - код ниже написан по памяти для компилятора CCS C. Автор не несет ответственности за изложенное ниже ![]() Если компилятор позволяет выводить сигнал на каждую ногу по отдельности, можно сделать вот так: ![]() ![]() { // Обработчик прерывания таймера static byte counter; switch(counter) { case 0: output_high(PIN_A0); // включаем первую output_low(PIN_A2); // гасим предудыщую break; case 1: output_high(PIN_A1); // включаем вторую output_low(PIN_A0); // гасим предудыщую break; case 2: output_high(PIN_A2); // включаем третью output_low(PIN_A1); // гасим предудыщую break; } if(counter=2) counter=0; else counter++; } Если компилятор допускает только выводить по-байтово на весь порт, то надо так: ![]() ![]() { // Обработчик прерывания таймера static byte value, value2; value = input_A(); value2 = value && 0x11111000; if(value && 0x00000100) value = 0x1; else value <<= 1; // то же, что и value = value << 1; value = value || value2; output_A(value); } |
Сообщ.
#4
,
|
|
|
Видимо нужно или можно сделать двухбитный R-2R ЦАП (ступеньки же), и по таймеру выводить эти два бита.
отсутствие постановки вопроса удивляет вообще |
Сообщ.
#5
,
|
|
|
Цитата MeG @ Видимо нужно или можно сделать двухбитный R-2R ЦАП Думаю, можно ШИМом : сначала шим 25%(к примеру), затем 50% и, далее 75%. Каждый длиной в ступеньку. |
Сообщ.
#6
,
|
|
|
Есть msp430 и с аппаратными DAC-ами вообще без внешних детальек получается.
|
Сообщ.
#7
,
|
|
|
Цитата MeG @ без внешних детальек получается Так и тут, при достаточно высокой шим и большой емкости монтажа. ![]() |
Сообщ.
#8
,
|
|
|
Ну какой он там высокочастотный, восьмибитный шим при тактовой частоте 20 МГц, получается частота шима чуть ниже 80 кГц. Более 100 пФ на ножку вряд ли удастся насобирать емкости монтажа, всяко интегрировать нужно. Хотя от задачи, конечно, зависит.
|
Сообщ.
#9
,
|
|
|
Я так понял автору нужно такая форма:
Прикреплённая картинка
Хотя хорошо было бы если б он сам обьяснил. |
Сообщ.
#10
,
|
|
|
одноразовый автор какой-то...
|