Заработок в интернет постоянно и регулярно платят

Ответы на вопросы о микроконтроллерах MCS-51, Atmel AVR, PIC, Scenix, ST10 и MSP430

Оглавление

Общие вопросы
Q: Какие 8-разрядные микроконтроллеры широко распространены ?

Вопросы по MCS-51
Q: Какие кросс-средства есть для MCS-51 и где их взять?
Q: Какие есть особенности использования I/O выводов в семействе mcs51?
Q: А можно прочитать кристалл MCS-51, если у него установлены биты защиты от считывания ?

Вопросы по AVR
Q: Какие кросс-средства есть для AVR и где их взять?
Q: Какое вpемя нyжно atmega для стабилизации кваpца пpи выходе из power save/power down pежимов или после подачи питания vcc/gnd ?
То же самое - для стабилизации внешнего rtc-кваpца 32khz.
Q: Какие есть глюки у AVR ?

Краткий FAQ по IAR C для Atmel AVR (компилятор версии 1.40c)
Q: Что еще почитать об AVR ?

Вопросы по PIC
Q: Какие кросс-средства есть для PIC и где их взять?
Q: Компилятор HiTech выдает сообщения об ошибках там где он их раньше не выдавал, или там где их явно нет.
Q: Мне не удается повторно запрограммировать кристалл с УФ стиранием. Стираю его так же как и все другие кристаллы, а программатор сообщает что кристалл не чистый
Q: Странно себя ведет RA4 сконфигурированный на выход
Q: PORTA как то странно работает на выход, биты запрограммированные на выдачу лог 1 самопроизвольно переходят в лог 0?
Q: Странно ведет себя бит порта при работе в двунаправленном режиме или при имитации выхода с открытым стоком, при переключении его на выход он выдает не тот сигнал, что я записал в него ранее.
Q: Странно ведет себя бит порта сконфигурированный для работы со спецфункцией в двунаправленном режиме (например в режиме I2C), он самопроизвольно меняет направление (вход/выход) вовсе не в соответствии с алгоритмом работы спецфункции (например вызывает блокировку шины I2C).
Q: Можно ли перепрошить программную память FLASH PICов через интерфейсы RS232, I2C, SPI и др.?
Q: Программа ранее разработанная для OTP PIC16C77 и отлаженная в нем не работает в FLASH версии PIC16F877. Почему, ведь это 100% аналоги, исключая EEPROM у F877.
Q: Как с помощью PicStart+ запрограммировать PIC17C756? Почему не удается это сделать с "фирменным" адаптером для PicStart+ для PLCC68 корпусов?
Q: А можно прочитать PIC, если у него установлены биты защиты ?

Вопросы по SCENIX
Q: Какие кросс-средства есть для SCENIX и где их взять?
Q: Чем запрограммировать SX ?
Q: Что меньше потребляет, PIC, SX, или AVR ?

Вопросы по C166/ST10
Q: Какие кросс-средства есть для C166/ST10 и где их взять?
Q: Что сейчас производится из C166/ST10 и где их купить ?

Вопросы по MSP430
Q: Чем запрограммировать MSP430 ?

Вопросы по Z8
Q: Что такое микроконтроллеры Z8, какие у них особенности и области применения ?
Q: Какие особенности отладки устройств с Z8 существуют? При помощи чего отладить программу для Z8? Как и чем можно запрограммировать Z8 ?
Q: А на чем, собственно, программировать для Z8?

Общие вопросы

>Q: Какие 8-разрядные микроконтроллеры широко распространены ?

A: В журнале Chip News была опубликована хорошая обзорная статья М.Ахметова на эту тему. В первой части http://chipnews.gaw.ru/html.cgi/arhiv/99_09/stat_2.htm краткий обзор RISC семейств - Microchip PICmicro, Atmel AVR, Scenix SX и Xemics CoolRISC, во второй части http://chipnews.gaw.ru/html.cgi/arhiv/00_01/stat-3.htm обсуждаются традиционные CISC семейства - ST6, ST7, ST9 от STM, Motorola 68HC05, 68HC08, 68HC11, National COP8, Fairchild ACE, Zilog Z8, Z8Plus, Texas Instruments TMS370.

Вопросы по MCS-51

>Q: Какие кросс-средства есть для MCS-51 и где их взять?

A: Аскольд Волков
Их очень много, попробовать все жизни не хватит. Из заслуживающих внимания я бы отметил:

1. Franclin ProView. Последняя версия 8.63. Интегрированная среда, Си, ассемблер, линкер, библиотекарь, библиотеки, RTOS, симулятор. С сайта http://www.fsinc.com/ свободно раздается демо-версия с ограничением объема кода 2кб, которая превращается в профессиональную (!) вводом серийного номера. Достоинства: удобная оболочка, хороший help, хороший симулятор, есть версии для win16, win32 и DOS. Hедостатки - много мелких глюков, которые, впрочем, легко вылавливаются с помощью симулятора. Я пользуюсь именно этим пакетом по историческим причинам.

2. IAR 8051 Embedded Workbench. Демо-версия с кучей ограничений раздается с сайта http://www.iar.com/ или http://www.iar.se/. Можно бесплатно заказать на CD. Гуляет множество версий. Есть краки для v.5.21В и 5.31А. Обратите внимание - номер версии надо смотреть в файле EW8051D.TXT, в заставке указывается версия оболочки. Содержит тот же набор, что и Franclin, кроме RTOS. Достоинства: единая среда для целой кучи разных процессоров. Hедостатки: есть глюки, симулятор нормально симулирует только процессорное ядро, периферию можно описывать с помощью макросов, но это трудно.

3. Keil.

A: Андрей Мозжевилов
Пакет берется с http://www.keil.com/. Файл называется ek51.zip. Надо полазить по сайту и поискать по ссылкам. Ограничения, установленные в демо-версии, можно снять, воспользовавшись советами на http://www.chat.ru/~keil_crk.

Использовать UVW51E никто не принуждает, это всего лишь редактор с функциями организации проекта. Можно использовать любой редактор, позволяющий встраивать запуск внешних программ. Это зачастую гораздо удобнее. Ассемблер, Си и линкер запускаются из командной строки.

В пакете фирмы Keil по сравнению с другими очень хорошая оптимизация, не сопровождаемая различными баго-фичами компилятора, которые часто присущи другим пакетам. Franklin в этом смысле сильно проигрывает.

>Q: Какие есть особенности использования I/O выводов в семействе mcs51?

A: Александр Редчук
1) Семейство mcs51 имеет 'квазидвунаправленные' выводы портов. Т.е. вниз они тянут более-менее прилично, а вверх тянет несильный pull-up. Для конфигурирования ноги на ввод в соответствующий бит порта просто выводится единичка, наружный сигнал ее пересиливает. Hо на этом ровном месте разложены аккуратненькие грабельки.

Pull-up на самом деле состоит из трех частей (см. например doc0499.pdf с сайта Atmel). Самый слабый транзистор Q2 обеспечивает ток 8...10 мкА. Транзистор Q3 (ток до 0.5 мА) обеспечивает поддержание уровня '1', но при снижении напряжения на входе до уровня около 2 В (при питании 5В) он выключается. И, наконец, самый мощный транзистор Q1 (единицы мА) включается на 2 периода кварцевого генератора при переходе бита в регистре порта из '0' в '1', обеспечивая хорошее нарастание сигнала. Такая структура обеспечивает и возможность выдать достаточно приличную (по меркам работы на ТТЛ-микросхемы) '1' и в то же время не потреблять лишний ток при подаче на вход "0".

Hо:

a) если нога была притянута к земле внешним сигналом с открытым коллектором, то к питанию ее поначалу будет тянуть только ток 10 мкА, нарастание будет очень медленным. Из-за этого, например, может плохо работать обмен по I2C.

b) если нога работает через резистор на базу NPN транзистора, да еще и тока захотелось в базу дать побольше :-), то иногда даже наводка может дотянуть вывод вниз до выключения транзистора Q3. После этого тока транзистора Q2 может не хватать для того, чтобы вывести напряжение на нагружающем резисторе в зону включения Q3, выход защелкивается в '0'

2) Кроме этого, транзисторы Q1 в порту P2 при выводе адреса и обычно выключенный pull-up в порту P0 при выводе адреса и данных в лог. '1' включены все время. Падение напряжения на этих транзисторах около 0.5 В при токе 4...5 мА т.е. могут создать вполне приличные 'КМОП-уровни' на нагрузке 1К. В то же время в 'обычном' состоянии резистор 4.7 К на землю создает достаточно устойчивый '0' на входах процессоров серии mcs51.

Следствия:

a) Если даже в вашей системе используются внешние ОЗУ/ПЗУ, но есть также и внутреннее ПЗУ, то вы можете использовать линии порта P2 как входы, подключив входные сигналы через последовательные резисторы 2К...3К и опрашивая их подпрограммой, находящейся во внутренней памяти кода

b) Если внешнего ПЗУ нет, то можно расширить порты микроконтроллера не занимая выводов для стробирования следующим образом. Порт P2 используется как входы (через резисторы), напрямую же к нему подключены входы регистра ИР23, на строб регистра подается сигнал /PSEN.

Последовательность команд

   mov  DPH,somedata
   movc a,@a+DPTR
запишет в регистр значение somedata.

>Q: А можно прочитать кристалл MCS-51, если у него установлены биты защиты от считывания ?

A:
Можно. Помогут продукты от ChipExpert, http://www.chipexpert.com, RD51 для Intel'овских или AT51 для Atmel'овских кристаллов.


Вопросы по AVR

>Q: Какие кросс-средства есть для AVR и где их взять?

A: Аскольд Волков
Тут все проще:

1. От Atmel: бесплатный ассемблер - отстой IMHO; симулятор AVRSTUDIO - единственный симулятор, поддерживающий периферию процессоров. [пусть напишут те, кто пользуются]

2. Бесплатный ассемблер от IAR - это просто часть полного пакета.

3. IAR AVR Embedded Workbench. Демо-версия с кучей ограничений раздается с сайта http://www.iar.com/ или http://www.iar.se/. Можно бесплатно заказать на CD. Есть краки для v.1.30A и 1.40C. Более новые версии полностью не ломаются - не генерят нормальных выходных форматов. Правда через @#% ими воспользоваться все же можно с помощью макроса для симулятора, но это неудобно и я предпочитаю работать с V1.40C. Обратите внимание - номер версии надо смотреть в файле EWA90D.TXT, в заставке указывается версия оболочки. Hайти старые версии и краки к ним можно на http://avr.boom.ru/

Содержит интегрированную среду, Си, ассемблер, линкер, библиотекарь, библиотеки, симулятор.

О достоинствах и недостатках писать бестолку, т.к. это единственный достойный пакет для AVR, сравнивать не с чем. Глюки есть, но не фатальные. Симулятор симулирует только процессорное ядро, периферию можно описывать с помощью макросов, но это трудно.

A: Татьяна Кривченко
Поэтому удобно С-программы, подготовленные в IAR AVR Embedded Workbench, отлаживать в AVRSTUDIO, который умеет читать исходный текст на языке С и одновременно симулирует периферию процессора.

4. В последнее время появилось еще много чего (см. http://avr.boom.ru/), но IMHO это все несерьезно.

A: Дмитрий Тимченко
На ftp://belichi.kiev.ua/pub/avra-0.5/ можно взять ассемблер AVRA, аналогичный AVRASM-у, но поддерживающий директивы условной компиляции.

>Q: Какое вpемя нyжно atmega для стабилизации кваpца пpи выходе из power save/power down pежимов или после подачи питания vcc/gnd ? То же самое - для стабилизации внешнего rtc-кваpца 32khz.

A: Анатолий Бабицын
По поводу времени запуска кварцевого генератора: время запуска (точнее выход на максимальную амплитуду генерации) практически определяется формулой:

tзап.=Q/f,
где Q добротность резонатора, f - генерируемая частота (Гц)

Добротность низкочастототных кварцев составляет от 30000 до 2000000, конкретно часового кварца добротность может состовлять примерно от 30000 до 300000, откуда следует, что генератор на часовом кварце будет выходить на режим от 1 до 10 секунд. Для высокочастотных кварцев добротность состовляет от 30000 до 800000, конкретно для РК169 и частоты 4 МГц добротность составляет 100000, откуда время запуска - 25 мс.

Время запуска можно значиельно снизить уменьшив добротность кварца шунтированием последнего резистором, например 5.1 МОм, однако это снижает стабильность работы кварцевого генератора (хотя этим снижением во многих случаях можно пренебречь). Аналогичного эффекта можно добиться применив керамические резонаторы (которые сами по себе имеют низкую добротность).

А теперь вернемся к AVR-кам: В AVR существует регистр SUT, который отвечает за задержку сигнала сброса, необходимую для полного выхода генератора на рабочий режим. Это время должно быть примерно в два раза больше (для запаса с учетом климатики, рабочего напряжения и т.д.). Оно выбирается в регистре SUT двумя битами:

      00 - 5 циклов генератора
      01 - от 0.4 до 0.6 мс
      10 - от 3.2 до 4.8 мс
      11 - от 128 до 192 мс
Этими же битами делается задержка на запуск процессора и при выходе из режима PowerSave (в этом режиме тактовый генератор выключен для достижения низкого потребления - только так AVR можно заставить мало потреблять - в рекордно короткое время побольше сделать за счет большой вычислительной мощности, а потом спать, спать, спать! :)

>Q: Какие есть глюки у AVR ?

A: Владимир Василевский
При плавном понижении питания при выключении AVRы без brown-out detector-а имеют свойство иногда чего-то писать в EEPROM. Это трудно воспроизвести - эффект случайный и непонятным образом зависящий от устройства программы. Hа 100% лечится внешним супервизором, например, ADM705.

Hасчет слетания Flash: если сигналы, используемые для внутрисхемного программирования, болтаются в воздухе, или при активном ресете на них подается что попало, то с ненулевой вероятностью возможен вход в режим програмирования со всеми вытекающими последствиями. Притяжка SCK к земле через резистор решает эту проблему.

>Краткий FAQ по IAR C для Atmel AVR (компилятор версии 1.40c)
(c) Владимир Полетаев

>Q: Я установил IAR Embedded Workbench 2.20 DEMO и кряк к нему. Что дальше?

A: Лучше всего - полностью прочитать весь help. Это значительно упростит дальнейшее освоение. Печатная документация на компилятор практически один-в-один повторяет help.

Если же читать совсем лень - то по крайней мере прочти разделы Overview и Tutorial в AT90S Windows Workbench Help.

Далее нужно скачать с http://www.atmel.com/atmel/products/prod200.htm последнюю редакцию даташита и еррата на выбранный микроконтроллер.

Там же, в http://www.atmel.com/atmel/products/prod201.htm лежат примеры AVR 8-Bit RISC - Application Notes. Из них особенно рекомендую следующие:

http://www.atmel.com/atmel/acrobat/doc1483.pdf AVR030: Getting Started With C for AVR (11 pages, updated 9/99)

Как раз - "С чего начать". В принципе, повторение начальных разделов документации по EWA90.

http://www.atmel.com/atmel/acrobat/doc1079.pdf AVR032: Linker Command Files for the IAR ICCA90 Compiler (12 pages, updated 10/98)

Описывается написание командных файлов компоновщика (.XCL). Тоже повторение документации от IAR.

http://www.atmel.com/atmel/acrobat/doc1234.pdf AVR034: Mixing C and Assembly Code with IAR Embedded Workbench for AVR (8 pages, updated 12/98)

Как связать ассемблерную подпрограмму с программой на Си. Тоже повторение документации.

http://www.atmel.com/atmel/acrobat/doc1497.pdf AVR035: Efficient C Coding for AVR (15 pages, updated 11/99)

Очень толковый документ. Рекомендую к внимательному прочтению, особенно когда программа занимает памяти больше, чем есть в кристалле.

Кроме того, в http://www.atmel.com/atmel/products/prod203.htm (раздел Software) рекомендую взять: ftp://www.atmel.com/pub/atmel/io_def.zip Там находится архив с символическими описаниями регистров ввода/вывода и битов в них для всех AVR микроконтроллеров. Файлы .h из этого архива следует положить в C:\IAR\EW22DEMO\A90\INC\ вместо старых.

>Q: Отличается ли IAR C от стандартного ANSI C?

A: Да. В IAR C входят различные расширения, связанные с реализацией компилятора для микропроцессора с Гарвардской архитектурой (два адресных пространства - для кода и данных) и для более эффективной работы в ограниченных условиях микроконтроллеров. Подробнее - смотри AT90S C Compiler Programming Help, раздел Language extensions.

В исполняющей системе (библиотеке) отсутствуют функции, связанные с вызовами операционной системы (операции с файлами и пр.)

>Q: Можно ли разместить таблицы (строки и т.д.) в ПЗУ?

A: Можно. Для этого существует расширение языка - зарезервированное слово flash. Переменная, описанная с применением данного слова размещается в адресном пространстве кода и доступна только по чтению.

flash char aaa[] = "aaa";
flash char bbb[] = "bbb";
flash char ccc[] = "ccc";
flash char flash *xxx[]  = {aaa, bbb, ccc, 0};
Если используется более чем один уровень вложенности, как в вышеприведенном примере (массив указателей на строки), то flash должен стоять для каждого уровня.

>Q: Как передать строку char flash * в функцию? Прямое написание строки в параметрах функции не проходит: printf_P("Строка\n");

A: Только одним способом. Описать ее отдельно:

{
  static flash char str[] = "Строка\n";
  printf_P(str);
}
Рекомендую обратить внимание, что не обязательно выносить описание строки в начало функции. Можно сделать локальный блок и описать переменную в нем, как в примере.

>Q: Как преобразовать указатель char * в char flash *?

A: Воспользоваться промежуточным int:

char *s;
char flash *p;
p = (char flash *)((int)s);

>Q: Где размещаются переменные типа const?

A: В ОЗУ. Слово const не является синонимом слова flash. Переменные, описанные как const, размещаются в ОЗУ. Таково требование стандарта ANSI.

A: Аскольд Волков Точнее сказать в адресном пространстве данных. При включенном ключике "Writable constants and strings" они действительно окажутся в ОЗУ и будут инициализированы при startup-е, а при выключенном размещаются в отдельном сегменте CONST, котроый должен быть размещен в энергонезависимой памяти данных. Такой памяти на кристалле AVR нет, поэтому этот режим может использоваться только при наличии в схеме внешней памяти данных.

>Q: Как работать с битами в регистрах внешних устройств?

A: Для начала описать полезный макрос:

#define Bit(n) (1 << (n))
    Для установки бита n в порту p:
p |= Bit(n);
    Для сброса бита:
p &= ~Bit(n);
    Для проверки бита:
if ((p & Bit(n)) != 0) ...
    и так далее.

Полный перечень всех битов доступен на сайте атмела в разделе software, файл io_def.zip. Следует поместить эти .h файлы из этого архива в каталог C: \IAR\EW22DEMO\A90\INC\ вместо существующих.

>Q: У меня не работает printf. Что делать?

A: Во-первых, включить в свою программу отдельную функцию putchar:

int putchar(int c)
{
  while ((USR & (1 << UDRE)) == 0);
  UDR = c;
  return c;
}
Стандартный putchar в библиотеке скомпилирован под несуществующий 8414.

Для доступа к именованным названиям битов регистров следует взять правильный .h-файл из io_def.zip.

Эту функцию следует включать только при компиляции под target=release, иначе под отладчиком может отказаться работать окно Terminal I/O.

Во-вторых, следует проверить процедуру установки скорости обмена последовательного порта.

В-третьих, надо правильно выбрать вариант функции printf. Подробности - смотри AT90S C Compiler Programming Help, Configuration, Input and output.

Стандартная функция printf требует для своей работы минимум 134 байта ОЗУ в стеке. Это страшное расточительство, поэтому есть сокращенные версии printf, которые обладают значительно меньшими возможностями форматирования (в частности, не поддерживают задание поля ширины вывода), но зато не требуют для работы так много ОЗУ. Я бы порекомендовал использовать C:\IAR\EW22DEMO\A90\ETC\intwri.c с небольшими исправлениями - заменить

    static const char hex[] = "0123456789ABCDEF";
на
    static flash char hex[] = "0123456789ABCDEF";
и перейти от printf к printf_P заменой:
    int printf (const char *format, ...)
на
    int printf_P (const char flash *format, ...)

Кроме того, я бы рекомендовал вообще отказаться от printf и перейти к printf_P.

>Q: Мне не хватает ОЗУ. Что делать?

A: Прочитать AVR035: Efficient C Coding for AVR и внедрить приведенные там рекомендации.

Если кратко: По возможности использовать байтовые (char) переменные. Hе перегружать стек локальными переменными большого размера. Стараться делать функции большого (в меру!) размера - так компилятор разложит максимум переменных по регистрам. Об эффективности лучше судить по листингу. Передавать в функции лучше не более 2 входных переменных - так они лягут в регистры. Размещать константы в ПЗУ, с ключевым словом flash.

Внимательно изучить используемый .xcl-файл - он приведен в поставке только для примера и кое-где неэффективен. Поставить нижнюю границу всех DATA сегментов (RSTACK, CSTACK, IDATA1, UDATA1, ECSTR) в 60 - так будет достигнуто полное, без дырок, использование ОЗУ. Уточнить размеры аппаратного (RSTACK) и программного (CSTACK) стеков.

>Q: У меня не работает порт A. Почему?

A: Порт A используется как шина адреса-данных при работе с внешним ОЗУ. Если оно не используется, то в .xcl-файле следует закомментировать строку: -e?RSTACK_IN_EXTERNAL_RAM=?C_STARTUP

>Q: Можно ли создать выходной файл в двоичном виде?

A: Да. Для этого следует указать в качестве выходного формата mpds. Полученный файл с расширением .tsk и будет образом ПЗУ.

>Q: Как заменить библиотечный модуль на свой?

A: Проще всего - просто поместить исходный файл с ним в свой рабочий каталог проекта и подключить его к файлу проекта. Дальше оболочка сама разберется с его типом (.c или .s90) и позаботится о его пристыковке раньше библиотечного.

>Q: Как лучше отлаживать программу?

A: Если нужно отладить алгоритм, не зависимый от работы периферии, то тогда можно воспользоваться C-SPY. Преимущества - отладка на уровне исходного текста, недостатки - периферия практически отсутствует.

Если работа со стандартной периферией, то можно создать .hex-файл и загрузить его в Astudio. Преимущества - достаточно достоверная эмуляция кристалла, недостатки - приходится работать только с дизассемблерным текстом. Адреса подпрограмм и переменных приходится выяснять из map-файла.

Такие сложности возникают из-за того, что в демо-версии EWA90 формат внутренних файлов отличается от рабочей версии и этот формат не понимается другими программами.

ВHИМАHИЕ! IAR адресует память программ побайтно, в то время как Atmel - пословно. Поэтому, если в map-файле от компоновщика подпрограмма имеет адрес 1234h, то в astudio надо указывать адрес 1234h/2=091Ah.

>Q: EWA90 работает только под Windows?

A: Оболочка - да. Однако есть command-line версии компилятора, ассемблера и компоновщика, которые прекрасно работают из-под MS-DOS, используя встроенный DOS Extender от Phar Lap Software, Inc.

Основная сложность при работе с ними - огромное количество ключей. Рекомендую для начала поработать в виндовой оболочке, а затем взять список ключей из шапки листинга и поместить его в make - файл.

Лично я пользуюсь maker.exe из состава Borland C 3.1 (просто потому, что она у меня уже была).

>Q: Периодически при компиляции совершенно правильного файла мне выдается системная ошибка. Что делать?

A: Повторить компиляцию. Это какая-то ошибка в компиляторе, которая иногда возникает.

>Q: Что еще почитать об AVR ?

На российском сайте Atmel есть подборка практических рекомендаций - почитать можно на http://www.atmel.ru/AVR/AVR.htm и на http://www.atmel.ru/Spec/Spec.htm.

Ответы на вопросы по AVR, задаваемые посетителями сайта ATMEL, можно найти на http://www.atmel.ru/FAQ/FAQ.htm.

Вопросы по PIC

>Q: Какие кросс-средства есть для PIC и где их взять?

[еще не написано]

>Q: Компилятор HiTech выдает сообщения об ошибках там где он их раньше не выдавал, или там где их явно нет.

A: Михаил Евстафьев
Первое - истек срок работы демо версии. Второе - компилятору нужно максимум свободной памяти в ДОС. Hесколько килобайт могут радикально улучшить его работу. Поэтому никогда не запускайте его из ДОС оболочек типа NC, VC и т.п. Лучше всего вызывайте его из Windows напрямую.

>Q: Мне не удается повторно запрограммировать кристалл с УФ стиранием. Стираю его так же как и все другие кристаллы, а программатор сообщает что кристалл не чистый

A: Михаил Евстафьев
Случайно или преднамеренно был установлен бит защиты...

>Q: Странно себя ведет RA4 сконфигурированный на выход

A: Михаил Евстафьев
Этот бит порта A имеет выходной буфер с открытым стоком...

>Q: PORTA как то странно работает на выход, биты запрограммированные на выдачу лог 1 самопроизвольно переходят в лог 0?

A: Михаил Евстафьев
Eсли Вы работаете с кристаллом имеющим встроенный АЦП, то скорее всего Вы не проинициализировали регистр ADCON, и PORTA (и PORTE там где он есть) остались сконфигурированы в режиме аналоговых входов.

>Q: Странно ведет себя бит порта при работе в двунаправленном режиме или при имитации выхода с открытым стоком, при переключении его на выход он выдает не тот сигнал, что я записал в него ранее.

A: Михаил Евстафьев
Это из-за особенностей схемотехники портов PICов... См. примечание на стр..

>Q: Странно ведет себя бит порта сконфигурированный для работы со спецфункцией в двунаправленном режиме (например в режиме I2C), он самопроизвольно меняет направление (вход/выход) вовсе не в соответствии с алгоритмом работы спецфункции (например вызывает блокировку шины I2C).

A: Михаил Евстафьев
Это из-за особенностей схемотехники портов PICов... См. примечание на стр...

>Q: Можно ли перепрошить программную память FLASH PICов через интерфейсы RS232, I2C, SPI и др.?

A: Михаил Евстафьев
Да ...

>Q: Программа ранее разработанная для OTP PIC16C77 и отлаженная в нем не работает в FLASH версии PIC16F877. Почему, ведь это 100% аналоги, исключая EEPROM у F877.

A: Михаил Евстафьев
Включен режим низковольтного внутрисхемного программирования (LVP) в байте конфигурации кристалла.

>Q: Как с помощью PicStart+ запрограммировать PIC17C756? Почему не удается это сделать с "фирменным" адаптером для PicStart+ для PLCC68 корпусов?

A: Михаил Евстафьев
Hужно изготовить адаптер по схеме...

>Q: А можно прочитать PIC, если у него установлены биты защиты ?

A: Алексей Владимиров
По-разному для разных кристаллов.

Для PIC16C5X/PIC12C5XX адреса 000-03F можно считать (и допрограммировать) и после установки бита защиты. Ссылка на эту особенность есть в фирменной документации.

Для PIC16C8X существует метод взлома, опубликованный Давидом Тайтом на http://www.brouhaha.com/~eric/pic/84security.html. Аналогичный метод для PIC16C8X/PIC16F8X используется в программаторе PICPROG фирмы Телесистемы http://www.telesys.ru/english/picprog.htm. Можно воспользоваться и сервисом, предлагаемым на http://u1.chat.ru/hack84.htm. Возможно, эти методы применимы и к новым PIC16F8xx.

Для PIC16C61/71 существует метод взлома, описанный Дежаном Калевичем (ссылка перестала работать)

Для других PIC пока ничего, кроме физических методов считывания (электронный микроскоп и т.п.), мне не встречалось. Еесли возникает задача считывания, можно обратиться, например, на http://www.mts.net/~tgrand/index.html


Вопросы по SCENIX

>Q: Какие кросс-средства есть для SCENIX и где их взять?

A: Алексей Владимиров
Подборку ссылок на кросс-средства для Scenix можно найти на http://www.svtehs.com/ru/scenix.htm#Development software.

Бесплатных ассемблеров по сути два - SASM, http://www.scenix.com/tools/index.html от Scenix и MPASM, http://www.microchip.com/10/Tools/pTools/MPASM/index.htm от Microchip, к которому нужно добавить макроопределения команд Scenix, http://www.svtehs.com/sxdefs.inc

Приличный программный симулятор один - SxSim, http://www.brouhaha.com/~eric/scenix/sxsim/. Поддерживает только SX18/28, для SX48/52 есть только внутрисхемные эмуляторы, о которых речь пойдет чуть ниже.

Основных компиляторов C для SX два, оба вполне работоспособны и в бесплатном режиме. C ftp://ftp.htsoft.com/hitech/demo/picdemo.zip можно скачивать триальную версию Hitech PIC C, которая работает 21 день, а потом придется скачать заново. А с http://www.geocities.com/SiliconValley/Station/7733/ можно скачать бесплатный AS2SX - дополнение Hitech PIC C для работы с SX. Второй компилятор С и C++ - С2С, http://www.geocities.com/SiliconValley/Network/3656/c2c/c.html Слегка ограниченная версия бесплатна, полная стоит $45. Здесь же есть неплохое сравнение эффективности компиляторов C для PIC и SX.

Для приверженцев PASCAL есть и его компилятор - P2C, http://www.geocities.com/SiliconValley/Network/3656/p2c/p.html, урезанная версия бесплатна.

Интегрированных оболочек три: SX-DEV, SX-KEY и MPLAB.

SX-DEV, http://www.svtehs.com/ru/sxdev.htm представляет собой оболочку, объединяющую программатор/внутрисхемный эмулятор SX-DEV, внешний ассемблер MPASM или SXASM, внешний симулятор SXSIM и встроенный софт для обеспечения всех режимов эмуляции. Стоит $150, в комплект входит собственно программатор/внутрисхемный эмулятор, модуль реального времени и софт.

SX-KEY, http://www.sxtech.com/developmenttools.asp - это софт программатора/внутрисхемного эмулятора SX-KEY. Полностью "вещь в себе" - никаких внешних программ подключить нельзя, аппаратура не позволяет отлаживать кристаллы при низком напряжении. Однако пользоваться можно. $149.

В качестве интегрированной оболочки можно использовать и MPLAB, добавив к MPASM файл макроопределений SX, компилятор Hitech PIC C интегрируется туда штатным образом, компиляторы C2C++/C2C и P2C интегрируются в MPLAB при помощи C2C++/C2C/P2C Rocket, http://www.geocities.com/SiliconValley/Network/3656/rocket/index.html. Однако встроенным в MPLAB симулятором и программатором PICSTART для работы с SX воспользоваться не удастся.

>Q: Чем запрограммировать SX ?

A: Алексей Владимиров
Лучше всего воспользоваться программатором SX-TIPS, http://www.svtehs.com/ru/sxtip.htm, его можно купить там же, где и сами кристаллы. Можно собрать программатор самому - например, по документации от Sсenix, http://www.scenix.com/virtual/download/isp.html или, например Fluffy, http://www.codepuppies.com/~ben/sens/pic/sx/ или заапгрейдить COMPIC-1, http://www.geocities.com/SiliconValley/Station/7733/, переведя его на внешнее питание, добавив транзисторный ключ и заменив софт.

>Q: Что меньше потребляет, PIC, SX, или AVR ?

A: Алексей Владимиров
Вот сравнение при одинаковой производительности (то есть тактовая PIC в 4 раза больше, чем для SX и AVR) следующих похожих по параметрам 28-выводных микроконтроллеров с флеш:
PIC16F872, http://www.microchip.com/Download/Lit/PICmicro/16F87X/30221a.pdf (2Kx14 флеш, 128 байт ОЗУ, 5 входов АЦП, 1 ШИМ, 3 таймера, 28 выводов)
AT90S4433, http://www.atmel.com/atmel/acrobat/doc1042.pdf (4Kx8 флеш, 128 байт ОЗУ, 6 входов АЦП, 2 таймера, 2 ШИМ, 1 UART, 1 компаратор, 28 выводов)
SX28, http://www.scenix.com/products/datasheets/sx28_1_19.PDF (2Kx12 флеш, 136 байт ОЗУ, 1 таймер, 1 компаратор, 28 выводов)

Сравниваются типовые значения тока потребления, указанные в даташитах, при нормальной температуре c кварцевым резонатором при минимальном питании для данной частоты.

Потребление 28-выводных флеш микроконтроллеров
Условия PIC AVR SX
PIC, AVR и SX в power down 2.5В, WDT включен ~10 мкА ~10 мкА ~10 мкА
PIC на 32 кГц 2В, AVR и SX на 32 кГц 2.5В ~15 мкА - ~100 мкА
PIC на 4 МГц 2В, AVR и SX на 1 МГц 2.5В ~0.7 мА ~1 мА ~1 мА
PIC на 10 МГц 3В, AVR и SX на 2.5 МГц 3В ~2.5 мА ~2 мА ~2 мА
PIC на 20 МГц 4В, AVR и SX на 5 МГц 3В ~6 мA ~4 мА ~4 мА
PIC на 48 МГц, AVR и SX на 12 МГц 3В не работает ~8 мА ~10 мА
PIC на 60 МГц, AVR на 15 МГц 5 В, SX на 15 МГц 3В не работает ~24 mA ~15 мА
PIC на 200 МГц, AVR на 50 МГц, SX на 50 МГц 3В не работает не работает ~37 мА
PIC на 300 МГц, AVR на 75 МГц, SX на 75 МГц 5В не работает не работает ~100 мА


Вопросы по C166/ST10

>Q: Какие кросс-средства есть для C166/ST10 и где их взять?

A: Сергей Борщ
На http://www.keil.com/ можно скачать демо uVISION2.

>Q: Что сейчас производится из C166/ST10 и где их купить ?

A: Сергей Борщ
Сайт Infineon http://www.infineon.com/products/micro/micro.htm

Я получил такую справку в Интехе, они представляют Infineon Technologies AG, так теперь Сименс-полупроводник называется, в Москве их тел (095)451-86-08,451-97-37, а мне на вопросы мылом отвечал Владимир: Vlad mailto:vc-intec@aha.ru

Сейчас из кристаллов с FLASH-памятью производятся SAB-C163-16FF,
SAB-C163-16F25F, SAK-C167CS-32FM и в ближайшее время выйдут
SAK-C161CS-16FF, SAF-C163T-16FF, вслед за ними выйдет SAK-C164CH-8FM.
Все кристаллы работают на 25 мГц и имеют 5 В FLASH различного объема.
Так, поясняю. SAB - 0+70, SAF - -40+80, SAK -40+100 (+125). Размер FLASH памяти 2 в степени х (цифра перед F) килобайт. 161 серия на сайте обозначена как 16МГц (8MIPS). 163 - без АЦП и CAPCOM, остальные имеют их, плюс CAN.

Цены на SAB-C165-LM - $24.06, SAB80C166 - $32.94, SAB-C167-LM - $29.80 штучно в Макро Тим, SAK-C167CS-32FM - 120 DM в Интехе, его аналог ST10F168 в Платане за 4 недели, цена ~$75.

ST10C172 аналога у Siemens не имеет. Hо учесть надо то, что у него флешки нету, а значит, фактическое быстродействие не превышает 1.5*Tcycle внешней памяти (считаем 50% команд - "длинные", это нормально). При 45нс флешке реально выжать 70нс Tcycle со всеми временами предустановок, удержаний и фактическую производительность 10MIPS, что примерно соответствует фактической производительности F168, поскольку длинные команды из внутренней 32-bit флешки выполняются за то же время, что и короткие. ST10C172 есть смысл использовать с быстрым SRAM в качестве программной памяти.


Вопросы по MSP430

>Q: Чем запрограммировать MSP430 ?

A: Сергей Борщ
Ввиду закрытости алгоритма программирования через JTAG, только фирменными программаторами от TI. Есть, правда, еще вариант купить внутрисхемный JTAG эмулятор (кто их делает - можно найти на сервере Texas Instruments http://www.ti.com/).

Встречный вопрос: какой именно кристалл ? Если интересуют однократные или отладочные (EEPROM-версии), то они программируются программатором MSP-430PRG, описание работы с ним, его схема (не очень сложная, но по-моему уж больно навороченая - куча транзисторов там, где можно без них) находится в файле SLAU026.PDF MSP430 family programing adapter manual. Файл лежит на сервере TI по адресу http://www.ti.com/sc/docs/products/micro/msp430/docs.htm Программное обеспечение последней (3.02) версии лежит по адресу http://www.ti.com/sc/docs/tools/controllers/msp430freetools.html под вывеской Parallel Programmer. Готовый программатор у дистрибуторов стоит около $250

Если есть желание запрограммировать флеш (на данный момент существуют в природе только PMS430F110, PMS430F112, PMS430F1101, PMS430F1121), то ПО программатора для них встроено в С-SPY пакета от кита MSP-FET430x110. Полная версия пакета, с документацией, схемой самого кита (74HC244, 2 транзистора, стабилизатор) и IAR-овским (ver 2.31) С (ограничение 2К кода), ассемблером (без ограничений), линкером (ограничение 4К кода), симулятором и внутрисхемным JTAG-эмулятором лежит на той же страничке http://www.ti.com/sc/docs/tools/controllers/msp430freetools.html под вывеской Kickstart, full version. Весь Kickstart (в комплекте 2 кристалла PMS430F1121) стоит у дистрибуторов около $70.

В настоящий момент существует 2 версии кристаллов:

1) PMS430F11xx всех партий программироваться через загрузчик, видимо, не могут.
MSP430F1121IDW партий 03AJX4T, 03AK16T, 05ACR4T, 05ACV2T, 05AD2LT, 05AD2XT, 05ADY4T, 05ADY5T лечению тоже не поддаются и отличаются от предыдущих тем, что в них исправленна ошибка FLASH12 (см. errata). Во всяком случае, в errata сказано Bootstraploader: Not functional
2) MSP430F1121 партий 05C24NT, 05C24RT, 05C24TT и MSP430F1121IPW 'почти работают'. В них также исправлены все известные ошибки Flash-модуля и компаратора. Что касается загрузчика, то Software patch required. Программируются ли кристаллы из первой группы с помощью этого patch - пока неизвестно. Проведу эксперимент, о результатах сообщу.
!! Hа данный момент в errata других партий не указано. Возможно, что следующие партии окажутся с полностью рабочим загрузчиком.

По адресу http://www.ti.com/sc/docs/psheets/abstract/apps/slaa096.htm лежит документ Application of Bootstrap Loader in MSP430F11x - Hardware/Software Proposal размером 389К, а также 37К архив с примером программы на РС (Visual C++, консольное приложение) для программирования MSP430F11x используя именно bootstraploader. Приведен один из вариантов схемы программатора (HC14, стабилизатор 3В, компаратор, резисторы, можно сильно упростить). По сравнению с предыдущим описанием изменен формат пакета и некоторые команды. В документе утверждается, что в настоящее время прошивка загрузчика исправлена. Для старых кристаллов с полудохлым загрузчиком в том же архиве предлагается patch, который грузится в ОЗУ контроллера силами полуживого загрузчика и берет управление на себя. Кстати, такой же промах у них и в новом кристалле MSP430F149IPM (во всяком случае, в существующих данный момент партиях 04DVLLT, 06CF0NT и 06CF10T).

Сравнение datasheet от января 2000г (slas241b) и от июня 2000г (slas241c) показало, что адрес начала сегмента Flash Data ИЗМЕHЕH с 0xEF00 на 0x1000, а сегмента BootRom с 0x0800 на 0x0C00. Теперь адреса этих сегментов в кристаллах F11x1 совпадают с адресам этих же сегментов в F14x, F13x. Hачиная с какой партии введено это изменение, как всегда, не указано.


Вопросы по микроконтроллерам Zilog Z8

>Q: Что такое микроконтроллеры Z8, какие у них особенности и области применения ?

A: Андрей Мозжевилов
Микроконтроллеры Z8 - это 8-ми разрядные СISC-контроллеры. На борту от 124 до 220 регистров общего назначения, которые могут адресоваться непосредственно по адресу или как регистр в текущем банке регистров. 4 младших байта в регистровом файле отведено под порты ввода-вывода. Старшая область в 16 байт отведена для регистров специальных функций. Архитектура не содержит аккумулятора как такового. В качестве приемника результата может выступать любой регистр, что уменьшает количество пересылок и сокращает объем кода программы.

Определенные модели МК Z8 позволяют подключать внешюю память данных и/или программ. Стек может находится как во внутреннем, так и во внешнем ОЗУ. Архитектура предусматривает только 6 прерываний. Обычно - 4 от внешних сигналов, и 2 от таймеров. Если добавляется источник прерывания (например UART) то его прерывания садятся уже на существующие вектора, как следствие - нужно анализировать дополнительно источник прерывания программно. Более подробно об архитектуре Z8 прочитать на http://www.zilog.com/

Облаcти применениия практически любые, не требующие очень высокого быстродействия. По приведенным параметрам потребления можно сказать, что Z8 вполне можно применять в устройствах с батарейным питанием. Напимер для Z86E04 заявлено потребление 80uA при 3.2V и 32kHz в активном режиме и 1uA в режиме останова. Но поскольку я не сталкивался с подобными задачами применительно к Z8, то и утверждать здесь ничего не буду.

> Q: Какие особенности отладки устройств с Z8 существуют? При помощи чего отладить программу для Z8? Как и чем можно запрограммировать Z8 ?

A: Андрей Мозжевилов
Микроконтроллеры Z8 в своем большинстве выпускаются только с масочным или однократно программируемым ПЗУ. Выпускаются несколько типов Z8 с УФ-EPROM, но цена на них очень высока по сравнению с OTP, и они подходят, разве что для проверки устройства на конечном объекте, когда невозможно применение эмулятора.

Большинство устройств с Z8 (особенно младших моделей Z86E02-08, которые не поддерживают внешнее ПЗУ) можно отладить только при помощи эмулятора. Политика Zilog в области ценообразования на эмуляторы очень дружественна именно для разработчиков. Эмуляторы продаются по довольно смешным ценам, если сравнивать их с ценами на эмуляторы для других семейств МК (PIC, AVR...). По моим сведениям цена на эмулятор, поддерживающий МК от Z86E02 до Z86E40 составляет менее $100.

Эмулятор является и программатором в одном флаконе. Эмулятор поддерживают 2 оболочки - ZDS и ICEBOX (возможно есть и другие сторонних фирм). О ZDS будет сказано подробнее ниже. ICEBOX - достаточно примитивная оболочка. Особого сервиса не замечено, но для несложных проектов ее вполне достаточно.

При использовании эмулятора нужно иметь ввиду некоторые особенности портов ввода/вывода эмулируемого МК и того чипа, который используется в эмуляторе. Например, стоит обратить внимание на тип входа, который в МК может не иметь триггера Шмитта, а в эмуляторе иметь.

> Q: А на чем, собственно, программировать для Z8?

A: Андрей Мозжевилов
Ответ на этот вопрос, возможно, не является всеобъемлющим. Я попытаюсь немного осветить только те средства, с которыми я пытался работать или работал. Их не так и много.

1.Пакет ZDS (Zilog Development Studio). Свободно лежит на http://www.zilog.com/ в разделе Development Tools для Z8. Это интегрированная среда разработки, которая включает в себя ассемблер, отладчик и много разных фенечек по организации и отладке проекта. Поддерживает все виды эмуляторов и соответственно отладку на уровне исходных текстов и прочие прелести. Я с ней не работал, поэтому ничего конкретного сказать не могу. И почему же я с ней не работал, если она такая вкусная то? Ах да :-), ну конечно, а где собственно Си? А Си затерялся в недрах могучей корпорации Zilog. Немного подробнее на эту тему.

Внимание!!!, информация на август 2000 г. На сайте Zilog есть ссылка на компилятор, который является компонентом ZDS. В базовую (бесплатную) версию ZDS он не входит, потому как за него хотят денег, иначе с чего бы ссылка отправляла за компилятором к дистрибьюторам? Письмо в Zilog подтвердило, что компилятор доступен через представительства, но как выяснилось, в Выборгской Гамме, которая и является таким представителем в России, возможности приобрести компилятор нет (пока). Отсюда у меня возникает цепочка логических выводов - ах, еще нельзя ? - а, ну это значит его только выпустили - да,да, и версия небось 0.00 бета - глюкодром, наверняка, полнейший - а нафига мне это надо, да еще за деньги? Может такие выводы где-то и несправедливы, но я для себя так решил :-) Если бы проект был простой и хватило бы ассемблера, и было бы время и желание этот ассемблер досконально изучать, то тогда без вопросов ZDS.

2.На сайте Zilog предлагается еще один пакет для разработки. Вот выдержка из readme "ZiLOG Z8/Z8Plus Tool Set Release 4.05". Файл назывался z8cc405p.exe и занимал около 2.8M В пакет входит компилятор Си, ассемблер, линкер, библиотекарь, документация в pdf. Никакой IDE нет. Все работает из командной строки. С этим компилятором мной был реализован проект средней сложности с объемом бинарного кода около 4К.

По результатам можно сказать следующее:
а) Компилятор в некоторых случаях создает неправильный код. В процессе написания программы было поймано 2 такие ситуации на отметке 265 байт бинарного кода. Глюки были устранены отключением оптимизации. При дальнейшей работе с отключенной оптимизацией глюки не отмечены.
б) Оптимизации, можно сказать нет. При отключении оптимизации при объеме кода в 265 байт, увеличение лишь на 4 байта. Поэтому и включать ее не особенно и нужно.
в) Код получается неплохой. Заметны места, где можно сделать лучше, но в общем все довольно не плохо.
г) В пакет включены исходники библиотечных функций, большинство на Си.
д) Линкер имеет кучу команд, позволяющих линковать, как душе угодно.

Как отлаживаться? Здесь все хуже. Отладки на уровне исходных тесктов добиться не удалось. Оболочка для поддержки эмулятора ICEBOX в принципе имеет возможность отладки на уровне исходника, но создать нужные для этого форматы файлов не получилось. Ответ от Zilog на письмо по этому поводу подтвердил это. Так что пришлось загружать hex-файл. При отладке функции ее адрес можно найти в map-файле и поставить точку останова в нужном месте, сравнивая дизассемблированный текст в окне отладчика с lst-файлом, созданным компилятором.



Заработок в интернет постоянно и регулярно платят