Общие вопросы
>Q: Какие 8-разрядные микроконтроллеры широко распространены ?
A: В журнале Chip News была опубликована хорошая обзорная статья М.Ахметова на эту тему. В первой части http://chipnews.gaw.ru/html.cgi/arhiv/99_09/stat_2.htm
краткий обзор RISC семейств - Microchip PICmicro, Atmel AVR, Ubicom 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.
Вопросы по AVR
Q: Какие кросс-средства есть для AVR и где их взять?
Q: Какое вpемя нyжно atmega для стабилизации кваpца пpи выходе из power save/power down pежимов или после подачи питания vcc/gnd ? То же самое - для стабилизации внешнего rtc-кваpца 32khz.
Q: Какие есть глюки у AVR ?
Q: Как определить причину сброса в AT90S2313 ?
Краткий FAQ по IAR C для Atmel AVR (компилятор версии 1.40c)
Q: Что еще почитать об AVR ?
Для высокочастотных кварцев добротность состовляет от 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 к земле через резистор решает эту проблему. >Как определить причину сброса AT90S2313 ?
Андрей Черниченко Штатно - никак.
Когда мне это было актуально, я вешал на свободную ногу параллельную RC цепь типа 1 МОм + 0.1 мкФ; после инициализации программы выставлял на эту ногу "1", а непосредственно в начале программы анализировал уровень на этой ноге. Если только что включили питание, то будет "0". Если был сброс по WDT или от супервизора, то прочитается "1" (при условии, что от момента сброса прошло не более ~1.2 постоянных времени RC цепи, точную цифру лень считать - U=Ucc*exp(-T/RC) ). Второй путь, более сложный, но и более эффективный. Периодически подсчитывать контрольную сумму критичных регистров (адресов ОЗУ) с сохранением результата подсчета, а по старту проверять соответствие пересчитанной контрольной суммы тому значению, которое было сохранено. При использовании CRC-16 мне не удалось добиться ни "ложного срабатывания", ни "пропуска". Эффективность восстановления фазы работы просто великолепная! Видимо, с точки зрения простоты реализации более правильно использовать CRC-8 (я не проверял). Еще некоторые используют контрольные байты (фиксированные значения), равномерно распределенные в ОЗУ. Hо это таки на любителя острых ощущений, IMHO. Для AVR cброс (по WDT либо по reset') есть сброс в любом режиме, в том числе и в режиме Power Down. Соответственно, выполнение программы начинается с вектора reset', т.е. с самого начала в том числе и при срабатывании WDT в режиме Power Down. >Краткий 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.
Что сейчас производится из
Q: Какие кросс-средства есть для C166/ST10 и где их взять?
Q: Что сейчас производится из 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 в качестве программной памяти.
у него установлены биты защиты
Q: Какие кросс-средства есть для MCS-51 и где их взять?
Q: Какие есть особенности использования I/O выводов в семействе mcs51?
Q: А можно прочитать кристалл MCS-51, если у него установлены биты защиты от считывания ?
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. Притяните выводы к питанию резистором 3К...10К b) если нога работает через резистор на базу NPN транзистора, да еще и тока захотелось в базу дать побольше :-), то иногда даже наводка может дотянуть вывод вниз до выключения транзистора Q3. После этого тока транзистора Q2 может не хватать для того, чтобы вывести напряжение на нагружающем резисторе в зону включения Q3, выход защелкивается в '0' ставьте резистор с базы не на вывод порта, а на питание и пусть порт коротит базу на землю. Hедостаток - лишний потребляемый ток в состоянии 'транзистор закрыт' если это возможно, ставьте PNP транзисторы и используйте ток '0' ставьте составные транзисторы (или ULN2003 aka К1109КТ23), падения напряжения на двух переходах даже при малом токе достаточно для нормальной работы. 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,mailto:info@chipexpert.com, предлагавшая продукты RD51 для Intel'овских и AT51 для Atmel'овских кристаллов.
Что такое микроконтроллеры 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-файлом, созданным компилятором. Дополнения, пожелания присылайте Алексею Владимирову, avlad@mailbox.riga.lv
Ввиду закрытости алгоритма программирования через
>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/slaa096a.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ачиная с какой партии введено это изменение, как всегда, не указано.
Вопросы по PIC
Q: Какие кросс-средства есть для PIC и где их взять?
Q: Компилятор HiTech выдает сообщения об ошибках там где он их раньше не выдавал, или там где их явно нет.
Q: Мне не удается повторно запрограммировать кристалл с УФ стиранием. Стираю его так же как и все другие кристаллы, а программатор сообщает что кристалл не чистый
Q: Странно себя ведет RA4 сконфигурированный на выход
Q: Каковы особенности внутренней работы PIC'ов с данными ?
Q: PORTA (и PORTE) в PIC'е с АЦП как-то странно работает ?
Q: Странно ведет себя бит порта сконфигурированный для работы со спецфункцией в двунаправленном режиме (например в режиме I2C), он самопроизвольно меняет направление (вход/выход) вовсе не в соответствии с алгоритмом работы спецфункции (например вызывает блокировку шины I2C).
Q: Можно ли перепрошить программную память FLASH PICов через интерфейсы RS232, I2C, SPI и др.?
Q: Программа ранее разработанная для OTP PIC16C77 и отлаженная в нем не работает в FLASH версии PIC16F877. Почему, ведь это 100% аналоги, исключая EEPROM у F877.
Q: Как с помощью PicStart+ запрограммировать PIC17C756? Почему не удается это сделать с "фирменным" адаптером для PicStart+ для PLCC68 корпусов?
Q: А можно прочитать PIC, если у него установлены биты защиты ?
А реализацию процессора это существенно упрощает. Hо иногда RMW приводит к некоторым неочевидным эффектам. Так, например, команда "tstf XXX" (которая на самом деле "movf XXX,f", то есть "пересылка из XXX в XXX") действительно выполнит запись в XXX. Конечно, в большинстве случаев это ни на чем не отражается, но для некоторых регистров бывает важен сам факт записи. Таковы, например, TMR0 и PCL. Иногда к неочевидным последствиям может привести не запись, а чтение данных. Похоже, что именно это (чтение в неподходящий момент, сам _факт_ чтения) является первопричиной некоторых ошибок, отраженных в errata. При работе с портами важен не факт чтения, а само прочитанное значение в сочетании с последующей записью. Это может давать отмеченый в документации побочный эффект (возможное изменение содержимого бита регистра данных порта, если соответствующий вывод настроен как вход). При чтении документации этот момент кажется очевидным и не всегда запоминается как источник возможной ошибки. А источник коварный. Ситуации "тут работаем с одним битом порта, а десятью строками выше (или ниже) - с другим, причем забыв о RMW" отслеживаются легко. Hо то же самое может произойти и при обработке прерывания, если оно использует [другие] биты того же порта. Hапример, такой участок кода (команды переключения страниц опущены): clrf TRISB bcf PORTB,0 ; выход, состояние '0' (важно что _известное_) Part1: ... ; что-то делаем, но RB0 не трогаем bsf TRISB,0 ; RB0 в hi-Z, но его буфер по-прежнему '0' Part2: ... ; здесь нет обращений к PORTB bcf TRISB,0 ; надеемся получить на RB0 уровень '0' Если во время исполнения фрагмента Part2 произойдет прерывание, изменяющее какой-либо бит в PORTB (кроме нашего RB0, разумеется), то после "bcf TRISB,0" сигнал на выводе RB0 вполне может оказаться '1' (зависит от внешних цепей). В частности, фрагмент Part2 может быть и пустым (непосредственно за bsf следует bcf), что создает ничем не обоснованную иллюзию, что между bsf и bcf "ну вообще нет никаких обращений к PORTB".
Да, такая необходимость переключать вывод из hi-Z непосредственно в _требуемое_ состояние возникает не очень часто (обычно при эмуляции открытого коллектора при реализации I2C master), но иногда это бывает нужно. Очевидно, что для обеспечения невмешательства потусторонних сил достаточно просто запретить прерывания на время от установки требуемого значения в регистре данных порта до переключения этого разряда порта в режим выхода. Cходный побочный эффект от RMW при работе с портами описан и в следующем вопросе. >Q: PORTA (и порт E) в PIC'е с АЦП как-то странно работает ? A: Владимир Клочко
В документации на PIC описано, что выводы, сконфигурированные как аналоговые (регистр ADCON1), перестают работать как цифровые входы. Это связано с тем, что при конфигурировании вывода как аналогового запрещается работа его [цифрового] входного буфера, чтобы подача промежуточных значений напряжения не приводила к протеканию сквозных токов в этом буфере. Такие входы читаются как '0'. Однако работа выходного буфера не запрещается и он по-прежнему управляется соответствующими битами регистров TRISA (TRISE) и PORTA (PORTE). Поэтому естественно, что для реального использования вывода как аналогового следует перевести его выходной буфер в hi-Z. Если же это не так, и выходной буфер активизирован (TRIS=0, предполагается отсутствие конфликта с внешними цепями, подключенными к этому выводу), то это никак не повлияет на работу модуля АЦП, и при выборе этого канала он будет добросовестно преобразовывать напряжение на этом выводе (а уж осмысленность этого останется на совести разработчика). Из вышеизложенного следует, что выводы, сконфигурированные как аналоговые, при необходимости (а выводы, как и любые другие ресурсы, чаще в дефиците, чем в избытке) вполне можно задействовать как цифровые выходы. Однако работать с ними (и другими цифровыми выходами портов A и E, если таковые имеются) придется аккуратнее, чем обычно. "Опасность" представляют циклы "чтение-модификация-запись", то есть арифметические и логические операции с портом, а также установка и сброс битов.
В отличие от этого, команды "movwf" или "clrf" никак не используют старое значение и не могут иметь побочного эффекта. Hо команда "tstf" - имеет (см.вопрос о внутренней работе с данными). Пусть, например, в ADCON1 часть выводов (или все) включены как аналоговые, но 0-й бит регистра TRISA сброшен (то есть RA0 - выход) и RA0=1 (на RA0 высокий уровень). Тогда ничем не примечательная команда "bsf PORTA,4" приведет (помимо желаемого результата) также и к сбросу RA0, так как в этот разряд регистра данных порта запишется '0', прочитанный из-за того, что цифровой входной буфер на RA0 при этом выключен. Другой пример. Пусть в системе на pic16c74 (77, etc.) требуются 6 аналоговых входов и 2 цифровых выхода. Очевидно, что придется выбрать как аналоговые все 8 входов (регистр ADCON1), но 2 из них использовать как цифровые выходы. Если это будут 2 вывода _одного_ порта (A или E), то _независимо_ манипулировать ими при помощи команд bsf и bcf не удастся. Следует также помнить, что после сброса ADCON1=0, то есть все аналоговые входы включены именно как аналоговые. И это вполне логично, так как уровни на них могут оказаться отнюдь не цифровые. Так что даже если в конкретной системе АЦП вообще не используется, то все равно придется "работать с АЦП": модифицировать регистр ADCON1, чтобы переключить выводы в цифровой режим. >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
Вопросы по UBICOM
Q: Какие кросс-средства есть для UBICOM и где их взять?
Q: Чем запрограммировать SX ?
Q: Что меньше потребляет, PIC, SX, или AVR ?
Однако пользоваться можно. $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/products/scenix.htm, его можно купить там же, где и сами кристаллы. Можно собрать программатор самому - например, по документации от Ubicom, http://www.ubicom.com/techdocs/appnotes/index.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/10/lit/pline/picmicro/families/16f87x/datasheet/30221\index.htm (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.ubicom.com/pdf_files/techdocs/sx28.pdf (2Kx12 флеш, 136 байт ОЗУ, 1 таймер, 1 компаратор, 28 выводов) Сравниваются типовые значения тока потребления, указанные в даташитах, при нормальной температуре c кварцевым резонатором при минимальном питании для данной частоты.
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 мА |
Что такое микроконтроллеры Z8, какие
Q: Что такое микроконтроллеры Z8, какие у них особенности и области применения ?
Q: Какие особенности отладки устройств с Z8 существуют? При помощи чего отладить программу для Z8? Как и чем можно запрограммировать Z8 ?
Q: А на чем, собственно, программировать для Z8?