Элементная база для проектов

Ну если речь о чипах пошла, Админ может в курсе может нет, есть сонтроллеры клоны/последователи 51 которые специально заточенны по аналоговые датчики, то есть у них специальные входные аналоговые цепи.

C8051F350 имеет хороший АЦП на 24 бита, но осталные параметры хлипковаты. Памяти мало и цифровых входов/выходов не густо  🙁.

:IMHO Использовать следует только те МК, архитектура которых не принадлежит одному производителю. Ничего лучше 8051 и ARM7 еще не придумали. Silabs проигрывает сейчас ARM очень сильно. Достаточно сравнить F120 и NXP LPC2388  :-[

Господа ! А когда все (кроме Администратора) перейдут к делу ? То есть к созданию  авионики ? А то все только ссылки кидают да советы дает. Мол, возьми то, сюда добавь и все ОК. А самим СЛАБО ?????????  😡 :IMHO
По поводу аналоговых цепей - чаще всего попытки скрестить ужа и ежа ни к чему хорошему не приводят. Т.е. лучше пользоваться отдельно стоящими АЦП.  :IMHO
По поводу семейств - 100% согласен. LPC2388 пожалуй великоват, а вот 2138/2148 - в самый раз будут.
По поводу слабо - вот http://www.reaa.ru/cgi-bin/yabb/YaBB.pl?num=1132350193/6#6 и он-же http://eavionics.ucoz.ru/photo/3-0-4 на аппарате. Не слабо.
Сейчас делаю модуль ПВД с CAN_ом. Цифровик сломался, сфокать пока не могу. 🙁
 
Не хочу вступать в идеологические войны, но удержаться не смог.

Из интересного на мой взгляд сравнения результатов применения языка Си и ассемблера PIC16 характерен вот такй пример -

входные данные:
полубайт (4 бита), содержащий дробную часть градусов температуры, полученную с датчика DS18B20 с ценой деления младшего бита 0.0625 С.

необходимо:
получить код цифрового символа знака после запятой для отображения на LCD дисплее с округлением согласно математических правил.

решение на асме занимает 17 команд из которых выполняется всего 3 - вызов подпрограммы, переход на необходимое количество шагов (согласно регистру W), возврат из программы с W содржащим искомый код символа для дисплея  😎:

обращение - call tabPOINT ; рабочий регистр "W" содержит полубайт дробной части температуры

tabPOINT                                            ;преобразование дробной части температуры в символ для LCD
           addwf      PCL,f  ;переход на кол-во шагов соответствующих индицируемой цифре
           retlw      '0'
           retlw      '1'
           retlw      '1'
           retlw      '2'
           retlw      '3'
           retlw      '3'
           retlw      '4'
           retlw      '4'
           retlw      '5'
           retlw      '6'
           retlw      '6'
           retlw      '7'
           retlw      '8'
           retlw      '8'
           retlw      '9'
           retlw      '9'

как это будет выглядеть на Си Вы можете себе представить  ;D. Си кстати тоже 8 битный и целочисленный  😉.


==========================================
Вы про ядро забудьте
При пользовании нужно читать конкретный даташит на это устройство, хотя всё и очень похоже, но отличия бывают. Си этого не знает т.к. это пишется всё ручками.

Что-то такая конструкция никак не согласуется с утверждением

> Одно неосторожное действие с указателем - и всем п##ц.

Типичное применение указателя. Да еще, если забыл усечь параметр до 4-х бит, то и вовсе возврата не будет.  ;D

> как это будет выглядеть на Си Вы можете себе представить
Легко. Конструкция на "С" выглядит  :IMHO более наглядно.

const char tabPOINT[] = {'0','1','1','2','3','3','4','4','5','6','6','7','8','8','9','9'};
...
result = tabPOINT [fractional & 0x0F];

где fractional - собственно дробная часть,
result - куда помещать результат чудо операции.

Нормальный компилятор для ПИК соорудит в кодах то-же самое. Для других проциков соорудит таблицу значений в памяти и вернет табличное значение.

Про ядро тоже забыть не могу. Более корявого ядра чем в ПИК12/16/18 отыскать практически невозможно.  :IMHO И такое построение таблиц в памяти - это отнюдь не фича ядра, а безысходность. Ради интереса, попробуй соорудить таблицу с 16-ти разрядными значениями.  😱 (Объяснять откуда растут ноги - не надо, я и сам все понимаю, так "исторически сложилось"). Соответственно получаем очень невразумительный ассемблер. Есть люди, которым нравится. Не хочу никого ни за что агитировать, но... Не надо зацикливаться, посмотрите вокруг - как много нынче всякоразных проциков. Всегда можно подобрать оптимальный по любому набору критериев. Иногда в результате лучше применить ПИК, чаще - оптимум не ПИК.

Кстати, ассемблер тоже не знает конкретных особенностей чипа, (как и С). И если писать код не зная архитектуру, получится полный отстой. Как на Асме, так и на С.  :IMHO
 
Господа ! А когда все (кроме Администратора) перейдут к делу ? То есть к созданию  авионики ? А то все только ссылки кидают да советы дает. Мол, возьми то, сюда добавь и все ОК. А самим СЛАБО ?????????  😡 :IMHO
Не слабо.
Сейчас делаю модуль ПВД с CAN_ом. Цифровик сломался, сфокать пока не могу. 🙁
Перемещено сюда.
http://www.reaa.ru/cgi-bin/yabb/YaBB.pl?num=1204111077/0
 
Что-то такая конструкция никак не согласуется с утверждением

> Одно неосторожное действие с указателем - и всем п##ц.

Типичное применение указателя. Да еще, если забыл усечь параметр до 4-х бит, то и вовсе возврата не будет.  

Я этого не писал. Это применяется очень часто и более разумного (понятного и короткого) решения наверное нет (по крайней мере в пике). Усечение до 4 бит делается ещё до обращения к процедуре (входные данные - гарантированно полубайт с нулевым старшим полубайтом).

> как это будет выглядеть на Си Вы можете себе представить
Легко. Конструкция на "С" выглядит   более наглядно.

const char tabPOINT[] = {'0','1','1','2','3','3','4','4','5','6','6','7','8','8','9','9'};
...
result = tabPOINT [fractional & 0x0F];

где fractional - собственно дробная часть,
result - куда помещать результат чудо операции.

Нормальный компилятор для ПИК соорудит в кодах то-же самое. Для других проциков соорудит таблицу значений в памяти и вернет табличное значение.
Вы реально скомпилите 😉, ну и result у Вас память, а не регистр W. Так и будете пихать туда-сюда данные, а их уже на дисплей пора передавать? Си результы всегда пихает в переменные (которых и так не много), а потом достает их оттуда, когда без этого вполне можно обойтись. Сишный код всегда будет длиннее  :IMHO.

Про ядро тоже забыть не могу. Более корявого ядра чем в ПИК12/16/18 отыскать практически невозможно.   И такое построение таблиц в памяти - это отнюдь не фича ядра, а безысходность. Ради интереса, попробуй соорудить таблицу с 16-ти разрядными значениями.   (Объяснять откуда растут ноги - не надо, я и сам все понимаю, так "исторически сложилось").
Ну не знаю, у меня 16 разрядные в eprom и ram валяются и без проблем используются. Конечно гиммор всегда на 8 разрядке работать с большими числами и код "пухнет" от этого в немаой степени. Именно по этой причине перелезаю для более сложных и объемных проектов на dsPIC, да и многое там серьезно лучше выглядит. Сейчас сижу и вкуриваю архитектуру нового для меня девайса. Он только начал у меня дышать (дисплей привинтил). Посмотрю, что из этого выйдет  :🙂.

Соответственно получаем очень невразумительный ассемблер. Есть люди, которым нравится. Не хочу никого ни за что агитировать, но... Не надо зацикливаться, посмотрите вокруг - как много нынче всякоразных проциков. Всегда можно подобрать оптимальный по любому набору критериев. Иногда в результате лучше применить ПИК, чаще - оптимум не ПИК.

Конечно нужно смотреть вокруг, потому и открыл ветку. Интересно всё, что появляется новенькое. Немного загрустил по поводу освоения dsPIC т.к. даташиты там в несколько раз пухлее PIC16 и примеров применения на ассемблере крайне мало  🙁, но это только большие затраты по времени и результат я думаю того стоит.

Кстати, ассемблер тоже не знает конкретных особенностей чипа, (как и С). И если писать код не зная архитектуру, получится полный отстой.

Конечно, но ПРОЩЕ изучить хорошо даташит и освоить ассемблер, чем даташит + ассемблер + Си. Си это верхний уровень, для правильного и искуссного владения которым нужно отлично знать что под ним  :IMHO. Сейчас полно программеров, которые изучили вершки, но не очень понимают в корешках  🙁. Когда я осваивал пики я тоже временно пропустил asm и в результате тот код, который получался был мягко говоря пухлее и корявее, чем можно было написать в асме. Упершись в ресурсы перешел на асм. Писать чуть дольше, но результат нравцца  :~).


SeregaB
Очень интересно по Вашму проекту  😎, только эта ветка для обсуждения элементной базы, на которой интересно строить устройства. Конкретные девайсы размещайте в отдельнй теме (можно/нужно создать свою, по своему устройству и там обсуждать именно его. В противном случае будет "каша").

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

Неужели кто-то наконец занялся делом  :🙂  :~) ....
 
Что-то такая конструкция никак не согласуется с утверждением
> Одно неосторожное действие с указателем - и всем п##ц.
Я этого не писал.
Прошу прощения. Это писАл Commodore .
const char tabPOINT[] = {'0','1','1','2','3','3','4','4','5','6','6','7','8','8','9','9'};
...
result = tabPOINT [fractional & 0x0F];
Вы реально скомпилите 😉, ну и result у Вас память, а не регистр W. Так и будете пихать туда-сюда данные
Си результы всегда пихает в переменные (которых и так не много), а потом достает их оттуда, когда без этого вполне можно обойтись. Сишный код всегда будет длиннее  :IMHO.
Мы, вроде, на ты были?
Попробовал. Только у меня для ПИКов нет компилятора. Работал с ними давно уже. Тогда и компилеров не было.
Вот для АВР. Оказался свободным R8, туда компилер даже без подсказки и оптимизации засунул. Или я мог явно указать "register".

//   31 __flash char tabPOINT[16] = {'0','1','1','2','3','3','4','4','5','6','6','7','8','8','9','9'};
tabPOINT:
       DB 48, 49, 49, 50, 51, 51, 52, 52, 53, 54, 54, 55, 56, 56, 57, 57
...
//   85 Temp = tabPOINT[Temp];
       LDI     R30, LOW(tabPOINT)
       LDI     R31, (tabPOINT) >> 8
       CLR     R9
       ADD     R30, R8
       ADC     R31, R9
       LPM     R8, Z
А с оптимизацией он вообще этот кусок выкидывает, поскольку, реально, переменная больше нигде не используется.
Реально -  размер кода процентов на 10..15 побольше. Но результат того стоит.

Про ядро тоже забыть не могу. Более корявого ядра чем в ПИК12/16/18 отыскать практически невозможно.   И такое построение таблиц в памяти - это отнюдь не фича ядра, а безысходность. Ради интереса, попробуй соорудить таблицу с 16-ти разрядными значениями.
Ну не знаю, у меня 16 разрядные в eprom и ram валяются и без проблем используются.
Речь шла про таблицу 16-ти разрядных констант в _памяти_ процика. Попробуй...
Конечно, но ПРОЩЕ изучить хорошо даташит и освоить ассемблер, чем даташит + ассемблер + Си. Си это верхний уровень, для правильного и искуссного владения которым нужно отлично знать что под ним  :IMHO. Когда я осваивал пики я тоже временно пропустил asm и в результате тот код, который получался был мягко говоря пухлее и корявее, чем можно было написать в асме. Упершись в ресурсы перешел на асм. Писать чуть дольше, но результат нравцца  :~).
Скорее нужно знать не ассемблер, а архитектуру собственного процика и тогда все будет хорошо. Кроме, собственно, более долгого писания еще, ИМХО, очень тяжело сопровождать. Несколько раз было так, что просят внести небольшие изменения в прогу, написанную некоторое время назад на АСМе - а я смотрю, как баран на новые ворота, на свою собственную программу... А начинаешь патчить - вылезают такие глюки, которых раньше не было. Просто забыл/непрочитал в комментариях какие-нибудь ньюансы... На ЯВУ сопровождение проще.
Где-то выше, я писал, что не хочу ввязываться в религиозные споры C vs ASM. И не буду.
Ваше устройство очень интересно, давайте обсудим, что оно должно делать и какую инфу давать по CAN. Отпишите подробности по нему и как двигается проект.
Вечером, там http://www.reaa.ru/cgi-bin/yabb/YaBB.pl?num=1204111077 напишу.
 
Речь шла про таблицу 16-ти разрядных констант в _памяти_ процика. Попробуй...

Делаем 2 шт. 8 битных таблицы (как в примере выше) и поочередно берем данные из одной и из другой. В чём проблема? Старший байт отдельно + младший байт отдельно. Это же 8 разрядная машина и всё у неё 8 разрядное  :'(. Селяви  🙁. Из eeprom досавать ещё проще младший или старший бит говорит о младшем или старшем байте 16 разрядных данных и всё получается нормально.

ЗЫ. Любой исходник должен быть очень богато приправлен камментами иначе через год и в Си разобатся нереально без горбылей  ;D. Я стараюсь разные варианты софта генерить по ходу написания сразу и потом только #define применяешь или ремарку ставишь и уже совсем другой софт  😉. Ну и конечно при переделке через продлжительное время нужно опять вкуривать архитектуру этого софта по полной. Без этого никуда к сожалению  🙁. Иногда проще по новой написать чем переделать софт без ремарок....

Где-то выше, я писал, что не хочу ввязываться в религиозные споры C vs ASM. И не буду.

Согласен, это больше религия. Я просто начинал программить именно с ассемблеров разных и они мне по духу ближе. На Си писал да и на многом другом, но душа не лежит и этим всё сказано.
Чужому дяде за деньги писал бы на Си, а для себя пишу на асме. То есть пользуюсь плугом вместо трактора, но контролю каждый шаг. Хорошо, что поле не очень большое  ;D
 
Речь шла про таблицу 16-ти разрядных констант в _памяти_ процика. Попробуй...
Делаем 2 шт. 8 битных таблицы (как в примере выше) и поочередно берем данные из одной и из другой. В чём проблема?
Проблем нет. Только выглядеть эта конструкция будет...  😱
ЗЫ. Любой исходник должен быть очень богато приправлен камментами иначе через год и в Си разобатся нереально без горбылей  ;D.
...
Иногда проще по новой написать чем переделать софт без ремарок....
Здесь согласен на все 100%

Где-то выше, я писал, что не хочу ввязываться в религиозные споры C vs ASM. И не буду.
Согласен, это больше религия. Я просто начинал программить именно с ассемблеров разных и они мне по духу ближе. На Си писал да и на многом другом, но душа не лежит и этим всё сказано.
Чужому дяде за деньги писал бы на Си, а для себя пишу на асме. То есть пользуюсь плугом вместо трактора, но контролю каждый шаг. Хорошо, что поле не очень большое  ;D
Я тоже начинал и долго писал на ассемблерах. Попробовав вкусности ЯВУ и учитывая, что 10..15% программной памяти нынче не стоят ничего, мне больше нравится С. При этом, в местах, где трактору развернуться тяжело пользуюсь плугом (в основном в местах сильно критичных по времени).

PS. С Днем Рождения! Удачи, счастья и здоровья!
 
Проблем нет. Только выглядеть эта конструкция будет...  😱
А как ещё в 8 битном девайсе может выглядеть 16 разрядное число? Разницы нет НИКАКОЙ положить два байта один за одним или в двух соседних таблицах. Да, проверять такую таблицу и набивать её гиморнее, но готовая таблица смотрится нормально как мне кажется. Нас обычные люди тоже не очень понимают. Нафига мы вычисляем в двоичной, шестнадцатеричной и иногда даже в восьмеричной системе счисления  ;D, но мы то знаем что только так в конкретных случаях УДОБНЕЕ  😉.
 
А как ещё в 8 битном девайсе может выглядеть 16 разрядное число?

ASM

tabPOINT:
      DW 1234h, 5678h,  etc.

C

__flash int tabPOINT[] = {0x1234, 32767, etc};

А как это чудо вынимать оттуда? Адрес двигаем влево и берем младший байт, а потом прибавляем единицу и берем старший. Корявенько и длина таблицы всего 127 байт  🙁, хотя можно и так.

Давайте вернемся к основной теме ветки. А именно, какие девайсы считаешь интересными для использования в проектах???
 
ASM
tabPOINT:
      DW 1234h, 5678h,  etc.
C
__flash int tabPOINT[] = {0x1234, 32767, etc};
А как это чудо вынимать оттуда? Адрес двигаем влево и берем младший байт, а потом прибавляем единицу и берем старший. Корявенько и длина таблицы всего 127 байт  🙁, хотя можно и так.
ASM
LPM R1, Z+
LPM R2, Z+
предварительно загрузив в Z адрес таблицы с правильным смещением. (про это см.выше)
Красиво 😎. Мне нравится. Нет гимора с размером и местоположением таблицы.

Давайте вернемся к основной теме ветки. А именно, какие девайсы считаешь интересными для использования в проектах???
Корявенько и длина таблицы всего 127 байт
Вот тут как раз и подходим, плавненько, к теме основной ветки.  😉 Ограничения на длину сегмента, трудности с полноценными указателями, заточенность на работу через аккумулятор, не позволяют мне считать интересным старые семейства ПИКов для использования в проектах. :IMHO
Мне больше всего нравятся АРМы, всякоразные, особенно NXP_шные.  Но, как всегда, есть ложка/стакан/ведро дегдя в бочке меда. Маленькие LPC2103 и небольшие с CAN LPC2119 - требуют отдельного питания ядра 1,8В,  идеально подходит LPC2364, но корпус великоват, LPC2138/2148 - CAN отсутствует.
Одна из многочисленных вкусностей - возможность внутрисхемной отладки через JTAG. Это просто супер!!! 😎 Причем требуется, в минимале, переходничек LPT-JTAG за 10$. Скорости, при необходимости, - бешенные (60/72 МГц). В АРМ режиме на 60 МГц можно такого наворотить.  ;D

Очень нравятся MSP430. Можно среди этого зоопарка подобрать нужную модель. Хорошие АЦП/ЦАП. Особенно хороши при жестких требованиях по микропотреблению. Там  Standby меньше микроАмпера. Работа на 32 кГц - в районе 5 мкА. Опять-же встроенный JTAG отладчик. Особенно будет приятен людям, общавшимся с PDP-11. Практически ДВК в одном кристалле, с потреблением в еденицы мА.  😎
AVR тоже неплохи. 😉
В общем, под конкретную задачу (семейство задач) контроллер (семейство) лучше подбирать индивидуально.
PS. Использование "С" позволяет без особых усилий и терзаний переползать с одного семейства на другое. При этом многие куски кода (например верхний уровень обработчика RS-232) , переползают без изменений. Важно только грамотно вкурить особенности конкретного семейства.
 
LPM R1, Z+
LPM R2, Z+
предварительно загрузив в Z адрес таблицы с правильным смещением. (про это см.выше)
Красиво . Мне нравится. Нет гимора с размером и местоположением таблицы.

Это из другого ассемблера  🙁 в PIC16 такого нету  :-[.

Ну не знаю, я в терзаниях по поводу Си  :-[.
Причем требуется, в минимале, переходничек LPT-JTAG за 10$. Скорости, при необходимости, - бешенные (60/72 МГц). В АРМ режиме на 60 МГц можно такого наворотить.

Осталось только найти на свалке ноутбук с LPT разъемом. У меня только в древних компах они есть. Сейчас всё шью через Тритоновский программатор, через USB. Он ещё хорош тем, что позволяет сохранять в нём готовые проекты и перешивать изделия в полевых условиях без компа  😎. Удобно очень для апгрейда. Приехал, снял с разъема фишку, воткнл переходник с программатора иобновл софт. Мечта разработчика.
 
LPM R1, Z+
LPM R2, Z+
предварительно загрузив в Z адрес таблицы с правильным смещением. (про это см.выше)
Красиво . Мне нравится. Нет гимора с размером и местоположением таблицы.
Это из другого ассемблера  🙁 в PIC16 такого нету  :-[.
Это АВР. Вот она, безаккумуляторность!!!  😎 Даже тебя проняло.  🙂 И регистровые пары для указателей, да еще с автоинкрементом. А уж 32-х разрядный регистр в АРМе и непрерывное адресное пространство для всего (ОЗУ, ПЗУ, регистры периферии)- это песня.
Ну не знаю, я в терзаниях по поводу Си  :-[.
А ты не терзайся, попробуй. Для старых ПИКов смысла особого нет, а в dsPIC Мелкочип должен был придумать архитектуру посвежее, ведь над ними не довлеет совместимость с ранними версиями кристаллов.
Причем требуется, в минимале, переходничек LPT-JTAG за 10$. Скорости, при необходимости, - бешенные (60/72 МГц). В АРМ режиме на 60 МГц можно такого наворотить.
Осталось только найти на свалке ноутбук с LPT разъемом. У меня только в древних компах они есть.
Я же написАл - "в минимале". (http://www.chipdip.ru/product0/446211127.aspx). Сам я пользуюсь клоном вот такого девайса http://www.chipdip.ru/product0/11688589.aspx
Сейчас всё шью через Тритоновский программатор, через USB. Он ещё хорош тем, что позволяет сохранять в нём готовые проекты и перешивать изделия в полевых условиях без компа  😎. Удобно очень для апгрейда. Приехал, снял с разъема фишку, воткнл переходник с программатора иобновл софт. Мечта разработчика.
АРМ и Атмеловские 51-е шью через СОМ порт. Есть у них возможность запускать теневой загрузчик, который работает через _ШТАТНЫЙ_ СОМ порт!!!
АВР легко шьется по SPI.
MSP430, в основном, через JTAG (так исторически сложилось, что небыло необходимости работать по-другому), но там тоже есть возможность прикрутить внутрисхемный загрузчик.
Посему, программатором не пользовался давно.  🙂 Пользуйтесь правильными процессорами, и будет все удобно и приятно.  😎
Про принтеровский порт. Только его наличие не позволяет выкинуть/заменить мой старенький бук. Для полноценной разработки он уже слабоват, а вот в качестве программатора и для того чтобы слегка подправить программу в поле - еще годится. И не очень напрягает кинуть его на заднее сидение. Для автомобиля непринципиально, везти программатор или бук. А в комплекте с таким http://www.chipdip.ru/product0/970671712.aspx девайсом мы, с моим буком, можем уже практически все, в отрыве от базы.  😎
 
Иногда и на другой континент нужно ехать, чтобы что-нибудь в софте подправить. Таскать ноут тяжело  🙁. У меня и COM порта в новом буке нету  :-[ :'(. Даже мелкого дисковода не поставили, зато камеры-шмамеры голубые зубы и вай фаи всякоразные, а о программерах не подумали, всё для ламеров  ;D. Хорошо хоть для USB теперь всё есть  :🙂.....

Это АВР. Вот она, безаккумуляторность!!!   Даже тебя проняло.   И регистровые пары для указателей, да еще с автоинкрементом. А уж 32-х разрядный регистр в АРМе и непрерывное адресное пространство для всего (ОЗУ, ПЗУ, регистры периферии)- это песня.

В dsPIC это всё есть и ещё полно всего. В 33 версии есть и DMA до кучи  😎. Причем 30 от 33 программно прктически не отличаются.

Микрочиповцы молодцы. Хорошую вещь сделали  😎.
 
А интересно ли кому-нибудь, как выбиралась элементная база для этого http://www.reaa.ru/cgi-bin/yabb/YaBB.pl?num=1204111077 девайса? Если да, то вкратце могу расписать.
 
Вот на что закладываться нужно - NMEA2000. Особенно обратить внимание тем, кто в соседней ветке обсуждал управление по проводам.
 

Вложения

  • 1_003.gif
    1_003.gif
    157,6 КБ · Просмотры: 189
Видимая граница дисплея не конфликтует с кнопками и энкодером, но по внутрянке не могу точно сказать, ощущение такое, что будет на кишки наезжать. У меня под руками сйчас нет разобранного прибора чтобы посмотреть. Дисплей двухстрочный стандартный влезает с запасом 0.5 мм только по плате. Всё там очень в притык.
Посмотри мануал на 2-х строчный дисплей, который я тебе присылал и его внешние габариты по высоте будут максимальным размером.
 
Назад
Вверх