посоветуйте микроконтроллер

Тема в разделе "WASM.ELECTRONICS", создана пользователем cupuyc, 14 дек 2009.

  1. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    сейчас именно так и сделано - табличка + линейная интерполяция. мега один фиг не тянет. вобщем приходится извращённый код писать в ущерб системности, читаемости и пр.
     
  2. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    точность особо не важна. имхо, выглядеть будет коряво. черезжопный код получится и что-то в нём поменять - нужно всё переделать.
     
  3. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    cupuyc
    а? что вас затрудняет?
     
  4. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    cupuyc
    height_to_polar_angle - в этой функции всё, кроме height, есть константы, поэтому эту функцию вполне можно заменить небольшой табличкой.

    calc_servo_angle:
    x = paw_lever_width * sin(psi) + paw_lever_height * sin(theta) * cos(psi) -
    paw_opt_2 * cos(theta) * cos(psi) - paw_opt_1 * cos(psi) - paw_opt_3;
    Для синуса и косинуса делаем небольшие таблички, в которых храним числа с фиксированной точкой в формате 8.8. Для вычисления этого выражения потребуется 6*4 команды умножения, примерно столько же команд сложения, и еще столько же команд загрузки/копирования/сохранения, то есть всего менее 100 команд.
    Для вычисления y,z тоже не требуется большего числа комнд.
    Чтобы вычислить a и b, можно включить 2.0 * servo_lever во все константы, которые использовались для вычисления x и y. А можно и не включать, поскольку в итоговом выражении нам важно соотношение a, b и с, а не их абсолютные значения, то есть эти константы можно учесть при вычислении c.
    А вот дальше уже потребуется использовать операцию деления. И по отношению a*a/(a*a+b*b) если его значение меньше 1/2 (или по отношению b*b/(a*a+b*b) если больше) извлечь из таблицы значение asin(a/sqrt(a*a+b*b)), а по отношению с*с/(a*a+b*b) (или по отношению (a*a+b*b-c*c)/(a*a+b*b)) извлечь значение другого угла. Ну а дальше останется только сложить их или вычесть.
    В общем по моим прикидкам для вычисления этой функции с точностью 8 бит потребуется не более 500 команд, и думаю что они вряд ли займут более 1000 тактов, правда это справедливо для ассемблера, а как сишному компилятору объяснить что такое вычисления с фиксированной точкой я не знаю.
     
  5. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Быстрый синус/косинус: 1, 2.
     
  6. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    cupuyc
    Ну, в АРМе, даже не имеющем ФПУ, операции можно выполнять быстрее за счёт совмещения арифметики и сдвигов, а также за счёт возможности условного выполнения инструкций (резко снижается количество переходов). Так что, возможно, удастся уложиться и без всяких извратов.
     
  7. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    cupuyc
    Пайка мелких ножек это дело небольшой привычки и правильного инструмента:
    - паяльник с тонким жалом - мне больше всего нравится жало заточенное лопаточкой;
    - линза на стоечке с держателями для платы - "третья рука" называется;
    весь этот инстремент в радиомагазинах свободно и по цене доступен.

    Если дружишь с CorelDraw и в городе есть рекламные агенства оказывающие услугу "нарезка плёнки Oracal на плоттере" (плоттер должен быть хороший - возможно придётся проехать несколько агентств пока найдёшь подходящее) то есть отличный способ травления макеток:
    В нарисованной плате превращаешь все линии в контурные полигоны, объединяешь их в общую фигуру с общим сложным контуром, добавляешь центровочные метки (если плата двухсторонняя) и сдаёшь заказ на нарезку. Лучше всего получается на матовой белой плёнке.
    Стандартная монтажная плёнка для мелких деталей не годится - вместо неё нужен обычный скотч (самый дешёвый - у него клей слабенький - как раз то что нужно) - наклеиваешь его на рисунок, отрываешь бумагу, приклеиваешь к плате (от центра и аккуратно выгоняешь все пузыри к краям), сверлишь центровочные отверстия пропускаешь в них иголки и по ним приклеиваешь вторую сторону. Отрываешь скотч, отрываешь лишнюю часть плёнки (на первый взгляд страшно сложно и кропотливо ;), но на деле гораздо проще - немного приспособишся и всё получается само собой - подцепил иголкой где нужно, потянул и готово ;))
    Всё плата готова к травлению.
    С армами я не игрался, а 44 ногие Меги в TQFP на двухсторонних платах с мелкой обвеской получаются отлично. Для серийных девайсов конечно платы лучше заказывать, а для пробника-макетки очень даже неплохой метод.
     
  8. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    имхо, лучше заказывать. и разводку и распайку. в конечном итоге и дешевле и лучше будет. есть конторы специализирующиеся на штучных заказах. да и крупные за небольшие доп деньги от 1-3 штук слепят (опытная/пробная партия)
     
  9. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    У АРМов ног куда больше, чем у АТмег. По крайней мере, 200+ -- это рядовое количество.
     
  10. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    вот цены по одному из многих таких контор. цены не самые выгодные
    http://etal.ua/ru/price/
     
  11. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    разводка дороже чем готовая демо плата.
     
  12. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    cupuyc
    какая разводка? пкад/оркад? а почем вы демоплату взяли? может и я там возьму.
    кстати, может вы не поняли, цены на платы и пайку там в гривнах. $1 = ~8 - 8.5грн
     
  13. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    18,78 * 8 = 150$. я плату купил за 48$ http://www.terraelectronica.ru/catalog.php?ID=966&Search=1&Text=at91sam7s256&Gde=2&PageS=1
     
  14. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    блин, туплю. (39,90 + 18,78) / 8 = 7,33$. я просто где-то видел 1300р за первую + 150р за каждую последующую.
     
  15. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    а эта за $25
    http://www.evodbg.com/index.php?option=com_content&task=view&id=19&Itemid=46
    кстати там еще на сайте интересные экземпляры есть.

    и цены за плату + распайку там не самые дешевые. и вы когда цены смотрите, не забывайте, что с таким шагом и количеством ног, вам надо двустороннесть + паяльная маска. без маски вам шаг 0.5 мм никто не распаяет
     
  16. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    не баксов, а евро. в рублях получается примерно также, как и моя.
     
  17. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    вы, что звонили им? там написано "уе". "уе" были всегда $
     
  18. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    были доллары, стали евро. а вообще кто что понимает под уе - одному торвальдсу линусу, тьфу, блин, богу известно.
     
  19. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    LPCXpresso - ARM Cortex-M3 или M0 c JTAG адаптером в комплекте за $30/?20.
     
  20. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    сравнил время вычисления синуса для меги и арма (atmega32 и at91sam7s256) - почти не различаются. авр вычисляет ~ за 1600 циклов, арм ~ за 1100. я думал различия будут более чущественны. по крайней мере, увеличение разрядности должно играть свою роль?