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

VVlad

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

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

  • Посещение

Весь контент VVlad


  1. USB 1.1 for MSP430F2013

    Извините за то, что не ответил сразу, MSP430F5509 не было в продаже. Мы оставили заказ и долго ждали. Но теперь стали счастливыми их обладателями. Спасибо за дельный совет.
  2. Code::Blocks for MSP430F5509 with eZ430

    Здравствуйте, не судите строго, по ошибке прикрепил две картинки, как удалить лишнюю, не могу сообразить. Win XP Prof(2002) SP3 on Pentium 4 CPU 2.8 GHz 2.99 ГБ Замучавшись пробовать IAR и ССS, перешел на Code::Blocks, сконфигурированный согласно любезному кикстарт-мануалу уважаемого shluzzzoid от 25 марта 2013, 17:03 http://we.easyelectronics.ru/msp430/ispolz...-launchpad.html MSP430F2012 прошился через Свисток-eZ430 отлично, а при подключении MSP430F5509 случилось страшное: на приложенных картинках не удалось найти девайса! Простите мою панику, но прошу помочь в понимании - 1) Есть ли способ объяснить программатору Свисток-eZ430, что TI не запрещает ему программировать MSP430F5509? 2) Если есть такой способ, возможно ли реализовать его в наших условиях? 3) Если возможно, то какие ресурсы потребуются и как это сделать? Спасибо за прочтение и заранее за попытки помочь, если такие будут.
  3. Спасибо Shasik за важный вопрос, MSP_killer за верную догадку. В нашей разработке на MSP430F4270 тоже процессы измерения и передачи данных разведены во времени и не пересекаются. Получили новую партию микроконтроллеров с кодом года и месяц 04, из лота С5ВМ с кодом места сборки К. Прошили той же программой, что и прежнюю партию, ни в одном кристалле не вырабатывается референсное напряжение - 1.2 Вольта. Помогите, пожалуйста, определить, бракованная ли партия?
  4. Сэм, спасибо, зацепка помогла понять, зачем в схеме датчика движения Н782100
  5. Хотел создать тему про датчик движения Y782100 китайского производства рассчитанного на max 100W. Но его функция близка к регулировке мощности. Попытка подключить его к люминесцентной лампе мощностью 40 Вт даёт странный эффект. Свет не выключается после выхода из зоны наблюдения. Но если выждать 15 минут, то можно выключить переводом тумблера (1=0=II) в нулевое положение. Изучение похожей схемы с ресурса http://www.micronika.ru/docs/masterkit/ima...home/NM6013.gif привело к вопросу - зачем служит резистор R4? Может он и не даёт срабатывать реле? В инструкции по установке датчика запрещено подключать к нему в качестве нагрузки люминесцентные лампы без параллельного балласта в виде лампы накаливания. В таком качестве я использую лампу на 40 Вт с сопротивлением нити накала в холодном состоянии 62 Ома. Есть гипотеза, что разогретая нить имеет бОльшее сопротивление, но как его померить (и уменьшить?). Сигнал на ключевой транзистор приходит правильный, реле должно отключиться? Почему оно не отключается? Помогите, пожалуйста, понять.
  6. Rockstein, спасибо за попытку помочь. 1) Выходным импедансом датчика точное значение указать трудно. Для различных электродов может различаться от 200 до 900 МОм. 2) Датчик привязан к средней точке виртуальной земли. Питание операционников двуполярное - 5 Вольт и +5 Вольт. Вопрос я возможно не очень ясно изложил. Прошу извинения у важаемой публики. Готовый инструментальный усилитель не годится. Но почему не сделать на четырёхканальном ОУ типа LMC6084AIM? Там входной ток около 40 fА?
  7. Думаю, в составе АЦП может быть либо схема, переключающая каналы и один общий АЦП (например, как в контроллере MSP430F4270), либо Вам следует схему переключения каналов спроектировать снаружи АЦП. Относительно измерения разности - проще всего использовать диффер. усилитель. Есть модели, одновременно измеряющие два канала и вычисляющие их произведение (применение - в электросчётчиках. Например, серия MSP430FE55.
  8. Будьте добры, помогите пожалуйста понять, вот в обратной связи резистор в 1 ГОм стоит. Что значит "на растяжках"? Может ли помочь Ваша находка, Rockstein, в преобразовании сигнала из диапазона (-2.5 вольт до +2.5 вольт, ток от 5 до 200 фА) в диапазон (0 Вольт, 0.48 Вольт, ток от 5 до 20 мкА)? То есть амплитуда уменьшается чуть больше, чем в 10 раз, а среднее значение должно быть смещено из 0 Вольт в +0.24 Вольта. Попытка использовать схему инструментального усилителя не удалась - не понятно, в какую точку подавать напряжение смещения (-2.5 Вольт или -0.24 Вольта)? из компьютерного журнала http://www.compeljournal.ru/enews/2009/1/7 за основу была взята схема (см. приложение), где в точку соединения резисторов Roc2 и R3 подключен выход стабилизатора опорного напряжения LM4040AIM3-2.50, то есть подано -2.5 Вольта. Номинал Rku был выбран 301 кОм, номиналы Roc1 и Roc2 - по 20 кОм, R1 и R3 - по 261 кОм, R2 и R4 - по 13 кОм Вопреки ожиданию, на выходе после подключения источника напряжения LM4040 не произошло смещения сигнала на 0.24 Вольта. В чём может быть ошибка-причина? Есть ли смысл заменять резисторы Roc1 и Roc2 на гигаомные с увеличением номинала Rku в тераомную область? Спасибо.
  9. Искали триаксиальный кабель (используется в профессиональной телевидеоапаратуре). Цена от 1050 руб за метр. Но требуется потоньше и подешевле. http://www.unisound.ru/Detail.aspx?Id=560 только не 8.5 мм, а 5-6 мм диаметром. Если не по теме, прошу извинить.
  10. Могу помочь самодельными компонентами 2012, 2013 и 4270.
  11. x430F4270_channel_interference

    Прошу уважаемую публику помочь с загадочным поведением микроконвертора. На аналоговый дифференциальный вход (D0- D0+) АЦП SD16_A подан сигнал с термодатчика, запитанного с внутреннего источника референсного напряжения. Другой вход (D4- D4+) подключен к источнику переменного напряжения. Изменения напряжения в диапазоне от +400 мВ до -200 мВ не оказывают никакого влияния на результат оцифровки показаний термодатчика, но изменения ниже -200 мВ дублируются в масштабе 1:6, искажая показания температуры на 70-130 градусов. Ниже прилагается текст программы и фрагмент схемы. // MSP430x4270 - SD16_A, Continuous Conversion on a pair of Channels #include <msp430x42x0.h> #include "Types.h" #include "UART.h" #define NUM_AD_CHAN 2 // число каналов AD #define NUM_SUM 64 // Число слагаемых #define NUM_SUM_ORDER 6 // Число битов для сдвига к усреднению по накопленному числу слагаемых = log(2)(NUM_SUM) unsigned short volatile Result[2], Res=0, ndx = 0; // Рез-т и # AD-хода void main( void ) { INT16U i; INT08U ch_nr = 0; unsigned long longAcc = 0; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer SCFI0 |= FN_2 + FLLD_8; // Set DCO operating range SCFQCTL = 24; // (24+1) x 8 x 32768 = 6553600 Hz FLL_CTL0 |= XCAP14PF + DCOPLUS; // DCO+ set so freq = xtal x D x ((N-1)+1) for (i = 0; i < 10000; i++); // Delay for MCLC to stabilize SD16CTL = SD16REFON + SD16SSEL0 + SD16DIV_3 + SD16XDIV_0;// + SD16VMIDON; // до 819200 Hz SD16CCTL0 |= SD16IE + SD16OSR_256; // Enable interrupt, OSR=256, SD16INCTL0 |= SD16INTDLY_0 + SD16INCH_7; // Interrupt on 4th sample, chan 0 P1SEL = 0X00; // Инициализация входов P2SEL = 0x00; P1DIR = 0xFF; P2DIR = 0xFF; UART_Init(); // Настройка последовательного интерфейса _EINT(); // Enable general interrupts while (ndx < NUM_SUM) { SD16CCTL0 |= SD16SC; // Запуск сигма-дельта АЦП _BIS_SR(LPM0_bits); // Enter LPM0 longAcc += Res; // result is ready if ( ndx == NUM_SUM - 1 ) { SD16CCTL0 &= ~SD16SC; // Stop ADC Result[ch_nr] = (unsigned short) (longAcc >> NUM_SUM_ORDER); longAcc = 0; if ( (SD16INCTL0 & 0x0007) == SD16INCH_0 ) //* Переключение входа { SD16INCTL0 &= ~SD16INCH_0; // off chan 0 SD16INCTL0 |= SD16INCH_4; // chan 4 on ch_nr = 1; // Для многоканального режима } else { SD16INCTL0 &= ~SD16INCH_4; // off chan 4 SD16INCTL0 |= SD16INCH_0; // chan 0 on UART_SendPacket ( NUM_AD_CHAN, Result); // Передача данных ch_nr = 0; // Для многоканального режима } ndx = 0; } ndx++; } } #pragma vector=SD16_VECTOR __interrupt void SD16ISR(void) { switch (SD16IV) { case 2: // SD16MEM Overflow break; case 4: // SD16MEM0 IFG Res = SD16MEM0; // Save result (clears IFG) break; } __bic_SR_register_on_exit(CPUOFF); }
  12. Вопрос снимаю. Щелкнув правой мышиной кнопкой название проекта в нижней строке выпавшего меню нашёл Properties, выбрал вкладку C/C++ Build и убрал строку 'c:/CCEssentials/eclipse/workspace/my1stprj' Оставил лишь две строки - "C:\CCEssentials\cgtools\include\lnk_msp430f427.cmd" "rts430.lib" Ошибка can't find input file исчезла, но появилась другая. **** Full rebuild of configuration Debug for project VlduAtt0 **** "c:\CCEssentials\cgtools\bin\gmake.exe" clean all "c:\CCEssentials\utils\rm.exe" -rf fet410_1.obj fet410_1.pp VlduAtt0.out 'Building file: ../fet410_1.c' "c:\CCEssentials\cgtools\bin\cl430.exe" --include_path="c:\CCEssentials\cgtools\include" --symdebug:dwarf ../fet410_1.c 'Finished building: ../fet410_1.c' ' ' 'Building target: VlduAtt0.out' "c:\CCEssentials\cgtools\bin\cl430.exe" -z --rom_model --heap_size=80 --search_path="c:\CCEssentials\cgtools\lib" --search_path="c:\CCEssentials\cgtools\include" --stack_size=80 --warn_sections --output_fileVlduAtt0.out fet410_1.obj -l="C:\CCEssentials\cgtools\include\lnk_msp430f427.cmd" -l="rts430.lib" 1<&2 <Linking> undefined first referenced symbol in file --------- ---------------- P5DIR fet410_1.obj P5OUT fet410_1.obj >> error: symbol referencing errors - 'VlduAtt0.out' not built >> Compilation failure c:\CCEssentials\cgtools\bin\gmake.exe: *** [VlduAtt0.out] Error 1 Build finished for project VlduAtt0. Please check the Problems window for a complete list of compilation errors and warnings. See the window you are reading now for linker errors. Предполагаю, что значения P5DIR и P5OUT, заданные в заголовочном файле, неправильно считываются, подскажите, пожалуйста, как их правильно считать? Привожу текст демо-примера //****************************************************************************** // MSP-FET430P410 Demo - Software Toggle P5.1 // // Description; Toggle P5.1 by xor'ing P5.1 inside of a software loop. // ACLK = n/a, MCLK = SMCLK = default DCO // // MSP430F413 // ----------------- // /|\| XIN|- // | | | // --|RST XOUT|- // | | // | P5.1|-->LED // // M. Buccini // Texas Instruments, Inc // September 2004 // Built with CCE for MSP430 Version: 1.00 //****************************************************************************** #include "msp430x41x.h" void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P5DIR |= 0x02; // Set P5.1 to output direction for (;;) { volatile unsigned int i; P5OUT ^= 0x02; // Toggle P5.1 using exclusive-OR i = 50000; // Delay do (i--); while (i != 0); } }
  13. x430F4270_error

    Уважаемые разработчики! Нами был приобретён набор MSP430 Development Tool MSP-FET430U48 с кристаллом x430F4270 на борту. Установка CCE из дистрибутива CCE_1.0_FET.zip прошла без ошибок в полном соответствии с инструкциями из файла slau157.pdf Осмелюсь попросить помощи. После создания первого проекта, выбора соединения USB, настройки на кристалл x430F4270 и включения в него файла fet410_1.pp (моргания светодиода), подключения библиотечного файла lnk_msp430f427.cmd и попытки компиляции вышел глюк. Не будет ли любезен кто-либо из настоящих профессионалов пояснить способы устранения следующей ошибки- **** Full rebuild of configuration Debug for project my1stprj **** "c:\CCEssentials\cgtools\bin\gmake.exe" clean all "c:\CCEssentials\utils\rm.exe" -rf fet410_1.obj fet410_1.pp my1stprj.out 'Building file: ../fet410_1.c' "c:\CCEssentials\cgtools\bin\cl430.exe" --include_path="c:\CCEssentials\cgtools\include" --symdebug:dwarf ../fet410_1.c 'Finished building: ../fet410_1.c' ' ' 'Building target: my1stprj.out' "c:\CCEssentials\cgtools\bin\cl430.exe" -z --rom_model --heap_size=80 --search_path="c:\CCEssentials\cgtools\lib" --search_path="c:\CCEssentials\cgtools\include" --stack_size=80 --warn_sections --output_filemy1stprj.out fet410_1.obj -l="rts430.lib" -l="c:/CCEssentials/eclipse/workspace/my1stprj" -l="c:\CCEssentials\eclipse\workspace\my1stprj\lnk_msp430f427.cmd" 1<&2 <Linking> >> C:\DOCUME~1\vlad\LOCALS~1\Temp\TI4043, line 17: error: can't find input file 'c:/CCEssentials/eclipse/workspace/my1stprj' >> Compilation failure c:\CCEssentials\cgtools\bin\gmake.exe: *** [my1stprj.out] Error 1 Build finished for project my1stprj. Please check the Problems window for a complete list of compilation errors and warnings. See the window you are reading now for linker errors. Мыслимо ли, папка c:/CCEssentials/eclipse/workspace/my1stprj существует, в ней полно файлов, а ССЕ почему-то их не видит?!
  14. SMA-09, USBB-G, AD795, MSP430F550x

    SMA-09, ПЕРЕХОДНИК SMA ВИЛКА/BNC ГНЕЗ. нужно 3 штуки не дороже 130 руб за штуку новую. Б\у возьму за полцены. USBB-G, ГНЕЗДО USB НА ПЕЧАТЬ TИПА B, нужно 10 штук, не дороже 20 руб. за штуку Операционники AD795 SOIC, полдюжины - десяток. Не дороже 300 руб. за новую штуку. микропроцессоры MSP430F550x в корпусе 48VQFN (MSP430F5504IRGZR) - не дороже 500 руб. за штуку. Нужно 20.
  15. Пробовал по приложенной ссылке, но пока без успеха. bootloader.pdf
  16. укажите, пожалуйста, какой размер нужен.
  17. USB 1.1 for MSP430F2013

    Согласен с Вами, Резидент. Однако, основное требование заказчика - использовать 16-разрядный процессор, а PIC18F14K50-I/SS - 8миразрядный. Спасибо за совет, IH_, СР2103 хорош, но к нему, наверное, нужны панельки, о которых никто не слышал. напрямую запаивать в плату слишком миниатюрные выводы - на макете не удалось. Каков способ монтажа?
  18. USB 1.1 for MSP430F2013

    Порадовали, благодарю м-ра Юрана за конкретные инструкции по переработке, за наложение маски и искусство. Спасибо __3м_ за знакомство с Холтек, поиск дешёвых аналогов привёл к статье http://www.gaw.ru/pdf/Atmel/app/avr/AVR309.pdf откуда можно узнать (стр.5 из 23), что в низкоскоростных юсби размер пакета ограничен одним байтом. Во многих случаях вычислительная мощность микроконтроллеров очень близка к минимальным требованиям, и драйверы пишут на ассемблере. В отличие от UART USB требует синхронизации, что сильно усложняет передачу. Вы меня убедили, что дурь ради искусства ничем не лучше искусства дури.
  19. USB 1.1 for MSP430F2013

    Благодаря любезному ответу Резидента мне стало понятно, что без обработки прерываний, только на процессоре MSP, реализовать USB1.1 невозможно. Если же использовать периферический ТаймерА, тактируя его сигналом SMCLK от DCO, настроенного на 12 МГц, можно успеть обработать пакеты данных? план такой - 1) отключаем сторожевой таймер, настраиваем порты, систему тактирования, регистр захвата-сравнения таймера А 2) в бесконечной петле цикла происходит запуск АЦП, переход в спящий режим с разрешением прерываний, прерывание от АЦП будит процессор, тот запрещает все прерывания, выполняет усреднение и готовит пакет данных для передачи, кодируя его в NRZI c битстаффингом, включает прерывания и передаёт управление на таймер А. По истечении интервала (0.6 мкс) для передачи очередного бита формируется следующий. Задача передачи данных более простая, чем приём. Не требуется искать фронты сигналов, процессор сам решает, когда передавать данные. Готовая последовательность битов из буферного регистра TxData аппаратно сдвигаются на выход P1.1 при помощи регистра CCR0 таймера А. По окончании передачи происходит переход в начало цикла, следующий запуск АЦП и так далее. Нет ли здесь методических ошибок?
  20. USB 1.1 for MSP430F2013

    Признаю, мой грех. Следует читать "AVR" вместо "MSP430". Слишком велико было желание выдать мечту за действительное. "... То есть подаём сигнал на вход UARTа в режиме SPI, а таймером формируем тактовые клоки. Задвинули 8 тактов, прерывание от SPI, складываем в буфер." "...Его можно отловить компаратором. То есть если обе линии в одном состоянии - получаем прерывание от компаратора. Приняли весь пакет - обрабатываем. Декодируем NRZI, выкидываем биты стаффинга и т.д." Извините, М-р Юран, но в кристалле MSP430F2013 нет аппаратного UART и нет компаратора, там только АЦП16. "Хотя можно и исходный алгоритм переработать. Но в этом случае во время обмена контроллер не сможет ни на что отвлекаться. Потому что счёт на такты процессора. То есть все прерывания должны быть запрещены. В принципе, автор как раз и подчёркивает, что для его реализации не нужна никакая периферия, только опрос порта и 100% занятость процессора в момент обмена." После чтения и перевода на русский статьи Старкйохана возникли вопросы и сомнения. Конечный вариант кода - rxbit0: in x1, port;1 цикл на чтение данных из порта ввода\вывода andi x1, mask; 1 цикл на проверку конца пакета передачи SE0 breq end_of_packet; 1 цикл (так как переход по ветви не произошёл) eor x2, x1; 1 цикл на декодирование NRZI – без возврата к нулю инверт ror x2; 1 цикл на приём бита из LSB -> carry ror shift; 1 цикл накопление битов данных cpi shift, 4; 1 цикл на проверку наличия 6-ти последовательных нулей brlo do_unstaff; 1 цикл (так как переход по ветви не произошёл) rxbit1: in x2, port;1 цикл на чтение данных из порта ввода\вывода breq end_of_packet; 1 цикл (так как переход по ветви не произошёл) eor x1, x2; 1 цикл на декодирование NRZI – без возврата к нулю инверт ror x1; 1 цикл на приём бита из LSB -> carry ror shift; 1 цикл накопление битов данных cpi shift, 4; 1 цикл на проверку наличия 6-ти последовательных нулей brlo do_unstaff; 1 цикл (так как переход по ветви не произошёл) mov x2, x1; 1 цикл (сохранение ввода для следующего цикла) итого 16 циклов Удаление набитого незначащего приткнутого бита. С первого взгляда разрушение одного бита должно быть простым. Только прикиньтесь манекеном – сделайте чтение и ожидание: do_unstuff0: ; 1 цикл (переход из точки ветвления по условию) in x1, port;1 цикл на чтение данных из порта ввода\вывода andi x1, mask; 1 цикл на проверку конца пакета передачи SE0 breq end_of_packet; 1 цикл (так как переход по ветви не произошёл) nop ;1 цикл на отсутствие операции – пустая команда nop ;1 цикл на отсутствие операции – пустая команда rjmp rxbit1;2 цикла (переход из точки ветвления по условию) итого 8 циклов Впервые у нас два свободных цикла! Делаем необходимые копирование и запись и заменяем проверки конца пакета для управления переходом по петле и готово. Но постойте! Что произойдёт, если за всунутым незначащим битом следует такой же? Наш сдвиговый регистр содержит сохранённые данные и в нём окажется 7 нулей подряд. Следующий бит будет поэтому проигнорирован, хотя вставка незначащего бита была только что отработана. Программная ошибка! На этот раз всё действительно серьёзно. Нам надо исключить ситуацию, когда в сдвиговом регистре более 5 старших нулей подряд, но в нём данные, которые нам нужны. И мы не можем и не должны их менять. Можно сделать копию регистра и использовать её для обнаружения битстаффинга. Но где взять свободные циклы, чтобы позаботиться о копии. И в конце концов, хранение обширных данных не может быть эффективным. В чём мы действительно нуждаемся, так это в другой Хорошей Идее. Если решение существует, он должно состоять в изменении содержимого регистра сдвига. Это единственный способ плотно упаковать код для чтения битов, чтобы выжить без изменения. Отлично. Итак, мы должны установить по меньшей мере самый старший значащий бит в сдвиге в ходе do_unstuff. Но как нам тогда восстановить полученный байт? Ключ к решению – в том, что мы знаем, что мы модифицируем. Мы устанавливаем в «1» бит, про который известно, что его значение - «0». И мы знаем, где они будут приземляться, поскольку петля цикла развёрнута и фиксировано количество операций сдвига, следующих до момента сохранения данных. Мы просто собираем биты, которые мы изменили, в отдельном регистре и возвращаем их назад сразу перед сохранением. К счастью, у нас оставалось два свободных цикла в do_unstuff: do_unstuff0: ; 1 цикл (переход из точки ветвления по условию) in x1, port;1 цикл на чтение данных из порта ввода\вывода andi x1, mask; 1 цикл на проверку конца пакета передачи SE0 breq end_of_packet; 1 цикл (так как переход по ветви не произошёл) ori shift, 0xfc;1 цикл маскировка 6ти свежих бит подряд andi x3, 0xfe;1 цикл спрятанные нами биты сдвинуты вправо на 7 rjmp rxbit1;2 цикла (переход из точки ветвления по условию) Попытался реализовать в IAR Embedded Workbench IDE 4.21.8. ;******************************************************************************* ; MSP430F20xx Demo - USB 1.1 Echo, 12MHz SMCLK ; ; Description: Use data latch ; to implement USB function @ 1500000 baud. Software directly reads and ; writes to RX and TX pins, all software activity is stopped besides CPU. ; No interrupt is available. ; After a character has been received, CPU forces echo's back the received character. ; MCLK = SMCLK = DCO = 12 MHz ; ; ; MSP430F20xx ; ----------------- ; /|\| XIN|- ; | | | ; --|RST XOUT|- ; | | ; | CCI0B/TXD/P1.5|--------> ; | | 1500000 8N1 ; | CCI0A/RXD/P1.1|<-------- ; ; April 2010 ; Built with IAR Embedded Workbench Version: 4.21.8 ;******************************************************************************* RXD EQU 002h ; RXD on P1.1 TXD EQU 020h ; TXD on P1.5 ; ; CPU Registers Used #define Rx1 R4 #define Rx2 R5 #define Rx3 R6 ; ; Conditions for 150000 Baud SW USB1.1, SMCLK = 12000000 Bitime_5 EQU 04 ; ~0.5 bit length Bitime EQU 08 ; 667ns bit length ~ 1.5 Mbaud #include "msp430x20x3.h" ;------------------------------------------------------------------------------- ORG 0F800h ; Program Reset ;------------------------------------------------------------------------------- RESET mov.w #0280h,SP ; Initialize stackpointer StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL; Stop Watchdog Timer SetupBCS mov.w #CALBC1_12MHZ,&BCSCTL1 ; SMCLK, 12MHz SetupDC0 mov.w #CALBC0_12MHZ,&DCOCTL ; DCO = 12MHz SetupP1 bis.b #TXD+RXD,&P1SEL ; bis.b #TXD,&P1DIR ; SetupX3 mov.w 0xff,Rx3 ; Rxbit0 mov.w &020h,Rx1 ; read data from I\O port cmp.b msk,RX1 ; check for SE0 jne End_of_Packet ; xor.b Rx2,Rx1 ; NRZI decoding rrc.b Rx2 ; Data bit -> carry rrc.b shift ; collect data bits cmp.w shift,4 ; check for 6 consecutieve 0 bits jnz do_unstuff0; ; Stuffed bit? Will be ignored! Rxbit1 mov.w &020h,Rx2 ; read data from I\O port cmp.b msk,RX2 ; check for SE0 jne End_of_Packet ; xor.b Rx1,Rx2 ; NRZI decoding rrc.b Rx1 ; Data bit -> carry rrc.b shift ; collect data bits cmp.w shift,4 ; check for 6 consecutieve 0 bits jnz do_unstuff1; ; Stuffed bit? Will be ignored! do_unstuff0 mov.w &020h,Rx1 ; read data from I\O port cmp.b msk,RX1 ; check for SE0 jne End_of_Packet ; xor.b shift,0xfc ; mask out 6 recently received bits cmp.b Rx3,0xfe ; shift masked bits right 7 jnz rxbit1; ; do_unstuff1 mov.w &020h,Rx2 ; read data from I\O port cmp.b msk,RX2 ; check for SE0 jne End_of_Packet ; xor.b shift,0xfc ; mask out 6 recently received bits cmp.b Rx3,0xfe ; shift masked bits right 7 jnz rxbit0; ; End_of_Packet nop ;------------------------------------------------------------------------------- ; Interrupt Vectors ;------------------------------------------------------------------------------- ORG 0FFFEh ; MSP430 RESET Vector DW RESET ; ORG 0FFF2h ; Timer_A0 Vector DW TA0_ISR ; END При попытке компиляции выскакивает ошибка Error [431] Accessing SFR using incorrect size. На строку SetupBCS. Помогите, пожалуйста, понять, что не так?
  21. USB 1.1 for MSP430F2013

    за дружелюбный ответ спасибо. Правильно ли я понял, что, взявшись за реализацию USB 1.1 на МСП, я займу таймер, оставив проц свободным для обслуживания нечастых прерываний с АЦП, и если тактирования на проц будет не от DCO, могут быть конфликты в случае одновременной работы приёма или передачи по USB и АЦП или процессора? Режим SPI - Service Provider Interface? или речь идёт о SPIP (Serial Peripheral Interface Protocol)? Догадался ли я о Вашем намёке, М-р Юран, на мысль немного подправить программную реализацию USART, уже основанную на работе таймера?. Выкладываю свой неуклюжий перевод Старкйохана в концептуальной его части "Являясь процессором RISC, MSP430 выполняет большинство инструкций за один цикл тактирования. Поэтому будет справедливой необходимость упаковать в 8 инструкций-команд следующие действия, необходимые для обработки каждого бита – 1) кодирование «1» при отсутствии изменений на входных линиях, «0» при измене 2) кодирование может быть инвертированием операции исключающего или между текущим статусом и статусом 8 циклами ранее 3) Кодирование битстаффинга – для сохранения синхронизации после каждых 6 «1» вставляется незначащий «0», он должен быть удалён после приёма 4) Распознавание конца пакета, обозначаемого состоянием «SE0». Это означает, что обе линии данных (обычно инвертированные друг относительно друга) установлены на уровень логического нуля на удвоенное время передачи одного бит 5) Полученный бит должен быть сохранён с проверкой буфера переполнения каждые 8 бит данных."
  22. USB 1.1 for MSP430F2013

    Уважаемые форумчане, друзья, братья по увлечению! В 3-мартовском номере журнала РАДИО за 2010 год на с.25-28 С.Суров из Нижнего Новгорода опубликовал описание демонстрационного USB HID устройства на микроконтроллере ATmega88-20DPI с обменом данными по шине USB 1.1 Меня заинтересовала возможность подключения микроконвертора MSP430А2013 аналогичным образом. Преимущества - упрощение конструкции (не нужен будет мост USB-COM и драйверы виртуального порта), повышение надёжности. Препятствия - 1) ограничение по частоте. В режиме LS (low speed) скорость 1.5 Мбит/с означает время передачи одного бита - не более 667 нс. В описании к MSP430 декларирована максимальная тактовая частота 16 МГц (62.5 нс), но это для процессора. С интерфейсом работает таймер_А, который можно тактировать от SMCLK. Сигнал тактирования SMCLK можно получить от источника с цифровым управлением (DCO). На обработку одного бита данных будет приходится 667/62.5=10 тактов. Хватит ли их? В статье Кристиана Старкйогана http://www.obdev.at/developers/articles/00003.html убедительно показано, что для AVR контроллера можно обойтись и восемью тактами. 2) переносимость клиентского кода. В среде визуального программирования С++ Builder 6 можно подключить созданный Робертом Мартином Марквардом компонент TJvHidDeviceController. Есть ли подобные компоненты для среды Delphi? 3) Процессор ATmega88-20DPI существенно и глубоко восьмибитен, преимущественно ли бороться за 16-битность, пытаясь перейти к MSP430? Буду благодарен за информацию, есть ли 16-разрядные процессоры с небольшим количеством терминалов (16-24 pins) с реализованной функцией интерфейса по USB 1.1 типа HID?
  23. Признателен за честный и профессиональный ответ. Действительно, во-время замены электрода входы "висят в воздухе" и могут быть повреждены статикой. В связи с этим давно ищу коаксиальный разъём (типа BNC, но хотелось бы размером поменьше), чтобы при подключении штекера- "папы" происходило отключение короткозамкнутого контакта (типа как на разъёмах питания при переходе от батарейного на сетевое). Подскажите, пожалуйста, Herz, есть ли такие в природе и как называются? По поводу входных токов, смещения и дрейфа основываюсь на "Хоровиц, Хилл. Искусство схемотехники" Издание 5-е Москва мир 1998. Там на стр. 452 указано, что входной импеданс измерительного усилителя AMP-05 1 ТОм, а у INA110B - достигает 5 ТОм. ТераОмы- это же 10^15 Ом. Но цены кусаются сильно. AD795 стоит около 300 руб. штука. (по 1 руб. за каждые 10^13 Ом). Не поделитесь ли секретом, есть ли более выгодные варианты по параметру цена/входное сопротивление.
  24. Спасибо, библиотеку удалось найти по ссылке http://www2.altium.com/forms/libraries/des...d06.asp#results там скачал файл AD%20Power%20Mgt%20Charge%20Pump.IntLib(AD%20Power%20Mgt%20Charge%20Pump.rar). Попытался его подкорректировать, использовать в своей схеме. Пока не удалось. Есть ли способ поменять единицы сетки с дюймовых милей на мм? AD_Power_Mgt_Charge_Pump.rar
  25. Владимир, простите за поспешность, я начал работать в Алтиуме неделю назад. Помогите, пожалуйста, понять. Вот для питания хочу использовать биполяризатор напряжения ADM8660. В даташите от назван CMOS Switched-Capacitor Voltage Converters (а в поиске Power Charge Pump - этоо одно и то же?). Из хороших соображений униполярным напряжением +5 В питаясь, сия микросхема вырабатывает дополнительно -5 Вольт. Есть ли на этот компонент к Альтиуму (схема и контактные площадки для корпуса PDIP8?), или самому рисовать, поделитесь, пожалуйста, кто может.
×
×
  • Создать...