Робот на контроллере PIC от SWG

Камрад SWG решил тоже побаловаться самобеглыми тачанками. И достал с антресоли давнюю разработку.

SWG:
Глядя на вашу бурную активность, я тоже решил шевельнуть ластами. Достал со шкафа сделанную еще в 2006г простенькую тележку (к коробке от CD-ROMа прикручены 2 самодельных колеса, 2 движка ДПМ-25-Н1-7Т с редукторами (27v, но неплохо тянут уже при 12, надо будет больше — сделаю преобразователь 12->27), и самодельный поворотный узел с роликом (третье колесо).

Потребление от 12v: 33 мА при выкл. двигателях, при макс. скорости без нагрузки (колеса не касаются пола) = 103 мА вперед, 115 мА назад. При одном заклиненном колесе — 300 мА, при обоих заклиненных колесах = 500 мА.
L293DN чуть теплая. Будет греться — приклею радиатор. Да, частоту ШИМ взял пока 500 Гц. (период 2 мс). Померяю скорость нарастания тока в двигателях — определю более оптимальную (За самый короткий импульс ток в двигателе должен успеть достигнуть максимума).
Максимальная скорость движения по полу сейчас 15-20 см/сек. Больше мне пока ни к чему, слишком быстро будет комнату пробегать. Диаметр колес = 80мм (резиновые “бублики” вроде от какой-то сантехники, полно на базаре).

Честно говоря, я был сильно удивлен когда нагуглил характеристики движка ДПМ. Почти все они, несмотря на весьма брутальную конструкцию, жрут довольно мало. Так что даже L293 их спокойно тянет. При этом они отличаются вполне сносным моментом и оборотами.
SWG:
А также сделанную в том же году плату контроллера привода, которая в дальнейшем должна будет управляться уже от центрального контроллера, сама же имеет микроконтроллер PIC16F873 с двумя ШИМ; L293DN; MAX232 для RS232; стабилизатор LM2931(5v) для питания микросхем; маленькую пищалку; а также разьемы для подключения двигателей (и довольно сложные фильтры для них); разьем, на который выведен порт B, земля и +5v, для подключения датчиков и приемника радиоуправления; разьем RS232 (Для связи с компьютером и выдачи отладочной информации); разьем с шинами I2C и SPI (для связи в будущем с центральным контроллером и прочей периферией).

Мыслим похоже, даже более чем. У меня сходная архитектура. Только я SPI не выводил. UART да i2c и преобразовние на RS232 повесил на кабель. А так почти то же самое, только контроллер AVR, а не PIC


Схема
Схема
Снизу
Снизу
Сверху
Сверху

SWG:
Еще на этой платке (50×85×15мм) есть делитель напряжения батареи с подстроечником, подключенный к одному из каналов АЦП PIC16F873, для контроля напряжения аккумулятора (12v 1,3 А/ч, 95×40×50мм).
Ну и, конечно, разьем для подключения этой батареи. Для ускорения “оживления”, а также чтобы пощупать, что реально получилось, решил попробовать МикроПаскаль. На днях набросал несколько строк программки для инициализации ШИМ, UART, и простенький главный цикл, в котором проверяется состояние линий порта B, кнопки на которых пока задают команды “Вперед”, “Назад”, “Разворот на месте влево”, “Разворот на месте вправо”, “Скорость больше”, “Скорость меньше”. Отсутствие команд переводит в состояние “Стоп”.
При изменении коэффициента ШИМ в канал RS232 выдаю “#” и два байта — коэффициенты левого и правого ШИМ. Пока для начала оба меняю одинаково. Для того, чтобы задавать одним байтом значение ШИМ, ограничился интервалом 0-255. Подумывал даже сделать всего 16 ступенек, тогда бы одним байтом можно было бы хранить значения обоих ШИМ (в младшей и старшей тетрадах), но решил, что пока экономить рано.

При проверке кнопок сделал защиту от дребезга по 1мсек. Для замедления работы главного цикла ввел в него задержку 50 мсек. В дальнейшем эти процедуры опроса линий порта B и управление ШИМом посажу на многозадачное прерывание от таймера, которое будет обслуживать часы, календарь, и с десяток программных таймеров от милисекунд до секунд.
Еще один таймер, имеющий выход на С0, заведен у меня на пищалку, через сьемную перемычку, конденсатор и ограничительный резистор.

Сегодня зашил программку в микросхему, собрал все в кучку, включил — все работает, как и должно. (Естественно, только то, что уже написано в программе). Движки по командам крутятся вперед, назад, в разные стороны, ускоряют и замедляют вращение.При изменении параметров ШИМ вижу новые значения в компьютере (через “Гипертерминал”, на 9600 бод). Просмотрел все сигналы осциллографом — все, как и должно быть.
Даже не интересно. Нет, чтобы помучаться, понастраивать… К сожалению, уже лет 20 лишен такого удовольствия. Обычно все работает сразу. Сказывается наличие опыта… Ничего, когда понавешаю датчиков, всех тех заморочек, что запланировал, вот тогда и начнется настоящая работа над машинным интеллектом. Будет труднее, но интересней.

Я вот сейчас тоже хочу заказать парочку сонаров. Потом разведу плату датчиков и будет веселуха :) Ну и попутно отладочный модуль делаю.

SWG:
Немножко технических данных. Кварц пока поставил 4,0 Мгц. Это 1.000.000 команд/сек, для ровного счета. Будет мало — поставлю 8, 16 или 20. Микросхемы PIC16F873A и PIC16F876A на 20Мгц у меня есть, кварцы тоже.
Программа, хоть и на Паскале, заняла пока 583 байта (14%) ПЗУ, и 32 байта (18%) Озу. Если поставить вместо 873 -> 876, у него памяти в 2 раза больше, остальное то же самое. Листинг программы, (не считая комментариев) = 110 строк. Скомпилированный в ассемблерный — раз в 5 больше. (с комментариями асс. листинг = 930 строк, Паскалевский — 180). HEX — код на эмуляторе (PIC Simulator IDE v6.65) пролетел без проблем.

Исходник прошивки на паскале.

Начало положено, продолжение следует…



В нашем полку терминаторов прибыло? ;)

60 thoughts on “Робот на контроллере PIC от SWG”

  1. Отладил функцию измерения напряжения батареи с выдачей результата в RS232, запуск по «0» на B3. Обнаружилась ошибка, сделанная при распределении линий порта A в схеме. Не обратил внимания, что на A4 нет аналогового входа (может использоваться как вход таймера 0). Пришлось использовать соседний, А5, просто запараллелив их на плате каплей припоя. Оба сконфигурированы как входы, так что проблем нет. Входное сопротивление цифрового входа намного превышает сопротивление аналогового, так что даже на точность не влияет. Да мне 10 разрядов и не к чему, использую только 8 (255 значений за глаза,чтобы определить, пора ли заряжать батарею). Даже если случится маловероятное — работа А4 и A5 как выходов, да еще и с разными знаками, — PIC, в отличие от AVR, довольно легко переносят такой режим. Выходные токи как 0, так и 1, ограничены на уровне 25-30 ма, и при нагреве выходных полевиков уменьшаются. A5 у меня был выведен на разьем и предназначался для интерфейса SPI («Выбор микросхемы» в режиме ведомого). Поскольку я в основном для внутренней шины буду использовать I2C, потеря невелика.
    В общем, понемногу «кирпичики» в программу добавляются. Сегодня потратил полдня, снимая всякие китайские видеокамеры, а также движки ДПМ с редукторами, и прочие любопытные вещи, не спеша, со штатива, с автоспуском и подсветкой. Когда же перегнал в компьютер, оказалось, что я забыл переключить обьектив на «Макро» для дистанции 20 см, и снимал в обычном режиме, для которого минимум — 60… естественно, все расплылось. А там были и камера с радиоканалом, и 4х канальная аппаратура радиоуправления (Брелок и приемник с полспичечного коробка, дальность до 500 м, хочу поставить на робота). Снова снимать — опять полдня терять, и батарейки в аппарате сели… А я и свои колеса снимал, хотел похвастаться…

    1. Привет , SWG , слушай , бьюсь третий день с протаколом I2C , похоже у паскаля глюки , ни 24с02 ни 24с08 даже модуль стандартный RTClock у меня незапустился , виснет контроллер на команде I2C_Write(); , может руки корявые у мя , сам лучше проверь а то будут глюки , проверял на пиках 16f877a 18f242 18f452 , ни как тест делал на ME-EASY PIC5 , ответь на мыло оно есть у DI HALT.

  2. Я на вашем месте поставил бы на работа еще ДУ приёмни, чтобы с пульта ДУ команды подавать. Какой нибудь TSOP стоит копейки, и работать с ним легко…

    1. А я так и собираюсь. Поскольку все равно будут ИК бамперы на TSOP, хочу, чтобы они заодним и коды принимаемых команд стандарта RC 5 центральному процу слали, а уж ему решать, что с ними делать. ИК бамперы думаю делать на TINY 12 или PIC12F629, их на это хватит, и их у меня полно, и DIP, и SOIC 8. Еще у меня есть интересные штуки — преобразователи освещенность — частота. (TSL230R)c офигенным диапазоном измеряемой освещенности — от темноты до солнечного света. Хочу, чтобы помимо измерения и контроля освещенности, с ними завязать CD подсветку для видеокамеры, чтобы держать оптимальное качество картинки в самых темных углах.
      Еще собираюсь выдавать различную телеметрию с робота на компьютер по ИК и радиоканалам. А в видеокамере уже есть встроенный канал на примерно 1125 МГц, гонит цветное изображение и звук на приемник, подключаемый к компу или телевизору, на 70 — 150м. В конечном итоге думаю, сидя за компом, управлять им дистанционно, гояя по комнатам, а потом и по двору, видить все, что «Видит» он, а также он должен иметь определенную автономность, выполняя определенные задания, например, пропылесосить углы комнаты, или собрать мелкие, притягиваемые магнитом предметы (иголки, булавки, мелкие гвоздики, крепеж) с определенной площади. Естественно, по мере усложнения возможностей будут и создаваться новые, более сложные шасси, а пока, чтобы отработать азы, просто прикрутил движки с редукторами и колесами к крышке — коробке от CD — ROM, в которую пока все влазит. Сейчас марокую, как бы поаккуратней выполнить бамперы с контактными и ИК датчиками препятствий, и губкой — амортизатором на случай столкновений с ножками стульев, пока все будет отлаживаться. На колеса надо поставить оптопары и наклеить диски со штрихами для определения пройденного пути. есть еще задумка использовать микросхему от оптической мыши для непосредственного измерения пройденного пути в координатах X,Y, независимо от проскользывания колес. Надо только приспособить более длиннофокусный обьектив, чтобы не цеплять за пол и пороги. Продумываю варианты крепления камеры с механизмом наведения в 2х плоскостях. С камерой хочу также связать прожектор подсветки на светодиодах (штук 20 белых на одной или двух панелях для равномерной подсветки, с управляемой схемой питания), а также головку от лазерной указки для «Целеуказания». Надо глянуть на барахолке зеленые указки, вроде уже должны быть. Красных — то полно, уже неинтересно.
      Дом у меня 2х этажный, точнее, полдома, но 3 комнаты внизу и 3 — на верху. Есть пара лестниц, одна из них — с люком, обычно открытым. Поэтому одна из главных задач — контролировать наличие пола спереди и сзади при движении, дабы не брякнулся. В общем, начинается самое интересное. Чем дальше в лес, тем толще партизаны…

        1. А иначе не интересно. Незря на форумах по мобильным роботам, где года три назад кипели страсти, побаловавшись однотипными конструкциями максимум с ИК бампером, случайным выбором направления движения и обходом препятствий, быстро все заглохло. Простое быстро надоело, усложнить — побоялись, вот и клонируют до сих пор «Победителя» на 2313.
          Чем сложнее, тем интересней, и больше возможностей приложить руки и голову. Иначе через неделю надоест. Когда в 84г. я собрал свой первый компьютер, первым вопросом, что задавали знакомые, узнав об этом, было: «А что ты будешь на нем считать?» И было довольно сложно обьяснить им, что комп не только считать может. Так и с роботами. Ну, побегала по комнате тележка день — другой, и интерес пропал. А напихай в него побольше, заставь будить тебя по утрам, подавать подогретые тапочки, комментировать некоторые ситуации голосом, например; Что-то холодновато стало, не пора ли включить камин? Или, при отсутствии признаков активности в комнате спросить типа: «Хозяин, ты что, спишь? Свет выключить?» и при отсутствии реакции в течении некоторого времени вырубить свет. Сейчас для этого в продаже полно выключателей с инфракоасным или радиоуправлением. Дальше-больше, и получится уже нечто вроде машинного интеллекта, чем больше возможностей — тем проще их наращивать. Особенно при ступенчатой иерархии: Периферийные контроллеры (ИК локаторы, сонары, датчики пола и т.д.), более функционально законченные (ходовой контроллер, контроллеры управления видеокамерой, манипулятором, и т.д.), над ними — центральный процессор, обьединяющий все и принимающий решения, а также обеспечивающий поиск и автоматическое подключение зарядного устройства по мере надобности, обеспечивающий некоторую автономность при отсутствии связи с компьютером и общение с ним при ее наличии. А над этим — нормальный домащний комп, через который будет происходить общение с роботом на достаточно высоком уровне, удобном для хозяина, через удобный экранный интерфейс.

      1. «Поэтому одна из главных задач — контролировать наличие пола спереди и сзади при движении, дабы не брякнулся.»
        Самая главная — и самая примитивная задача :)

        1. Примитивная, но жизненно важная. Если железяка пролетит, кувыркаясь, три метра по почти вертикальной лестнице, все остальные проблемы отпадут автоматически…

          1. Либо «глупая» оптопара на отражение (ИК-светодиод + фототранзистор), либо более умная связка «ИК-светодиод + TSOP» решат эту проблему раз и навсегда :)

            1. Я примерно так и планирую, (если наподобие «усов» — могут цепляться и ломаться о пороги). Только вот отражающая способность у пола разная, — краска, линолеум, ковровые дорожки, но в то же время частично может отражаться от лестницы и краев люка, так что надо пробовать. У TSOP офигенная чувствительность, да еще мощная внутренняя АРУ впридачу. Скорее всего, на пол буду глядеть фототранзисторами, а для исключения внешних влияний — использовать модулированную подсветку, с выделением и интегрированием только переменной составляющей сигнала, возможно, с фильтрацией по частоте, если на постоянке — сигнал с фототранзистора может сильно плавать, замаешься уровни выставлять. И люминисцентных ламп у меня в доме полно. Так что появится операционник, напрямую на порт не подашь.
              Есть еще одна идейка — сделать типа дальномера. Есть у меня микросхемки TSL201R-LF (линейка из 64 фотоячеек в прозрачном DIP 8, с последовательным считыванием). Если светить лазером под углом к полу и проецировать отраженное пятно на эту линейку, в зависимости от расстояния до пола пятно будет перемещаться. Еще лучше поставить 2 лазера, чтобы светили навстречу друг другу (также под углом к полу).
              Получим 2 пятна, по расстоянию между которыми легко определить дистанцию. Чтобы упростить оптику (обойтись одной линзой), пятна должны быть вытянуты поперек линейки. Или простейщий случай этого способа — также лазер светит под углом, а фототранзистор имеет ограниченное поле зрения. Не видит пятна — значит, пола нет. А лазер дает очень контрастное пятно на любой поверхности. Включать его можно кратковременно, например, на 1 мс. Можно вместо лазера использовать, например, ИК светодиоды АЛ106, у них луч всего 5-10 градусов, ток до 100мА. Их у меня штук 20 завалялось. Им и оптика не нужна, а на фототранзистор — трубочку — тубус. Кстати, АЛ106 и как ФД неплохо работали. В считывателе перфоленты телеграфного аппарата РТА-80 их и как излучатели, и как приемники использовали.

              1. Хотя да, для «ловли» отраженного от _черного_ пола света фототранзистор не пойдет, а «офигенная чувствительность» TSOP окажется нелишней. И регулировать ее, кстати, можно, смещая частоту модуляции светодиода.

                1. Я боюсь, что из за большого диапазона встроенной АРУ TSOP, подьехав к дыре, задерет усиление так, что поймает отражение от верхней ступеньки лестницы (такое возможно, если подьедет вдоль стены), и посчитает, что пол нормальный. В этом случае у фототранзистора можно более точно подобрать уровень, чтобы от ступеньки не срабатывал. А еше лучше, если косой луч подсветки на расстоянии больше, например, 5 см оказывался за пределами «Видимости» ФТ. Это значительно упрощает проблему. А TSOP, например, видит команду пульта, даже когда «Светишь» пультом под стол, за спину, и даже в соседнюю комнату. ИК лучи прекрасно от всего отражаются, а внутренняя АРУ позволяет работать в огромном диапазоне яркостей. Для «Бамперов» можно подобрать минимальную мощность подсветки, если даже будет обходить предметы не за 10, а 30см, не очень критично. И широкий угол полезен. А вот с полом сложнее. До верхней ступеньки у меня 26 см… Еще сейчас пришел в голову один вариант. Наоборот, сделать луч подсветки пола очень широким. Тогда отраженный свет, попадающий на ФТ, будет быстро слабеть с расстоянием. (По идее, в 2 квадрата расстояния). Квадрат — за счет увеличения площади пятна, удвоенный — потому что луч идет туда и обратно, путь луча удваивается. В общем, надо пробовать. Сегодня целый день таскал уголь, сейчас топлю баню, завтра отдыхаю… Вот и попробую несколько вариантов, чего гадать — то…

                  1. Да, ты ниже упоминал, что решил делать ИК локаторы на TSOP а как ты будешь бороться с их дискретностью? Он же тебе за километр найдет стену по отраженному сигналу. С его то чувствительностью? Получается, что его сигнал это не «Есть что то впереди, примерно там то…». А совершенно бесполезный «Впереди что то есть!»

                    1. ИК локаторы у меня будут в основном обнаруживать препятствия в ближней зоне, чтобы избежать касания. Думаю, если настроить по гладкой стене на 20-30 см, то сантиметров с 5 ножку стула разглядит. Настраивать думаю в первую очередь током через излучатели, если окажется недостаточно, то еще и небольшой расстройкой частоты излучающих диодов относительно стандартной частоты приемника. В пультах, похоже, импульсы милиампер по 100 гонят, вот их и видно за счет многократных отражений аж из другой комнаты. Но когда дохнет батарейка, пульт уже надо направлять на телевизор, а иногда и приближать метра на два, если батарейки лет по 5 не менять, как у меня обычно бывает…
                      Можно, конечно, переключать ток, или частоту, чтобы примерно определять расстояние, но все равно будет большая зависимость от размеров, формы и отражающей способности предметов, так что я не собираюсь точно определять расстояния этим ИК локатором, достаточно фиксировать наличие чего-то в определенной зоне. А для точного измерения больше подходит способ, используемый давно в дальномерах кораблей, а потом и фотоаппаратов: через полупрозрачное зеркало наблюдаем обьект, и совмещаем с ним изображение, создаваемое поворотным зеркалом, расположенным несколько сбоку. Зная расстояние между зеркалами и угол поворота второго из них, получаем знакомую задачку про тркугольник, у которого известна одна сторона и два прилегающих к ней угла (один из них прямой), и легко вычисляем все остальное. Если в качестве обьекта для совмещения использовать зайчик от лазерной указки, задача сильно упрощается. Также можно обойтись одним неподвижным зеркалом, а для отсчетов использовать линейку фотоэлементов или телекамеру.

    1. У вояк в списанной аппаратуре их полно, особенно в мощных радиостанциях. Ресурс у них офигенный, годами вертятся — и хоть бы что. Попутно с ними попадается много шестеренок, подшипников. В хозяйстве все сгодится. У нас на барахолке они дешевые. А если заказывать с завода новый — тогда, конечно…
      Еще у них по сравнению с дешевыми китайскими — плавный ход, надежный коллектор, низкий шум, очень мало помех от искрения. Техника военная, и в космосе они тоже поработали. Не игрушки. Правда, у них очень тугой прижим щеток, из за этого повышенный ток без нагрузки и почти нет выбега после отключения. Но может, так и лучше. Еще надо смотреть на маркировку. Они выпускаются трех диаметров — 20, 25, 30 м, но напряжения могут быть от 6 до 27в, и обороты в рабочем режиме — от 1500 до 9000об/мин. Не каждый подойдет, куда надо. Хотя у меня 27 вольтовые с планетарным редуктором тянут и при 12в неплохо. Да еще вольт — полтора падает на драйвере (L293DN). Возможно, со временем сделаю вольтодобавку до 27в, будет включаться автоматически при необходимости.

        1. У нас мелкие коммерсанты, торгующие запчастями, наладили с ними контакты, и теперь в продаже постоянно есть движки, редукторы, мощные лампы, катушки и конденсаторы для радиолюбителей — коротковолновиков. Вроде раскупается. Попробуй своим торгашам подкинуть эту идею, а уж они и найдут, и договорятся. Обычно почти возле каждого города есть какая — нибудь воинская часть, а в ней — разная аппаратура, которую время от времени списывают. Да и у летунов тоже всяких движков в аппаратуре навалом. Только у них часто на 400Гц попадаются, с ними мало что cделаешь.

    1. В начале августа решил попробовать МикроПаскаль (V 8.0.0.1), раньше пробовал Паскали и Си для микроконтроллеров других фирм — не нравилось, или слишком примитивно, или наоборот, слишком замороченно, проще на ассемблере писать. Отладочными платами не пользуюсь, предпочитаю сразу на родном железе, для которого пишется программа. В критических точках программы на время отладки делаю контрольный вывод нужной информации куда-нибудь: на дисплей, в RS232, или еще куда. В 80х годах на работе в качестве консоли для разрабатываемых контроллеров использовал телеграфный аппарат (50, 100, 200 бод, код мтк-5),- работал в лаборатории телеграфа, а принтеры и компьютеры в то время были редкостью…
      Из симуляторов мне очень нравится PIC Simulator IDE — v6.65, c http://www.oshonsoft.com, очень удобная штука, особенно если плата еще не готова, а програмка уже пишется.
      Из контроллеров чаще использую PIC, хотя и AVR тоже. В 80х годах использовал КР1816ВЕЗ5, КР1816ВЕ48, (MCS48), начал изучать MCS 51, да перестройка все спаскудила… Последние 10-12лет занимаюсь электроникой только дома, для души, на работе — только программист.

  3. Побаловался сегодня с двумя типами оптопар на отражение. У одной (~ 2 х 3 мм) фокус оказался на расстоянии примерно 2 мм и низкая чувствительность — при 5 мА через CD приемлемо реагировала только на лист белой бумаги, причем за пределами фокуса чувствительность резко падала.
    Другая, покрупнее, 5 х 6 х 6 мм, имела фокусное расстояние около 10 мм, и чувствительность получше (В районе фокуса ловила всякие крашенные деревяшки). За пределами фокуса чувствительность тоже резко падала. Первая реагировала на прямое освещение красной лазерной указкой с нескольких сантиметров, вторая ее в упор не замечала. В общем, на одометры пойдут, а вот на датчики пола придется еще что-то поискать.
    Добавил в программу прерывания по TMR_0 через 1 мс, воткнул в нее пару своих любимых программных таймеров, — один однобайтовый, пока просто постоянно инкрементируется, другой, двухбайтовый, уже ближе к реальности, декрементируется, пока не дойдет до нуля. Обычно я в программах кидаю в них какое — то значение, и время от времени проверяю на нуль. Один байт дает в данном случае 256 мсек, два — 65,535сек. В общем, до минуты. Подобным образом я также встраивал в прерывание часы и календарь. За миллисекунду PIC16F873 делает при кварце 4 МГц ~ 1000 команд, при 20 МГЦ ~ 5000 (~ — из за того, что команды с переходами выполняются за 2 цикла). Если многозадачное прерывание таймера сожрет из них даже полсотни — беда невелика. Остальная часть программы работает асинхронно, по флажкам. Очень удобно отмерять разные временные интервалы, не шибко заморачиваясь. Попутно сформировал звук для пищалки, — в прерывании таймера постоянно инвертирую ногу C0, на которой сидит пищалка, (всего две команды ассемблера — MOVLW 1 и XORWF PORTC, 1, и звук 500 Гц готов. Потеря всего 2мкс), а программе только остается переключить С0 на ввод (нет звука), или на вывод (пищит). Привязал пока для проверки к B2. Замкнешь В2 кнопкой на «0» — пищит, отпустишь — перестанет. На всяк случай глянул в эмуляторе — работает. Зашил в контроллер, включил — все пашет, как надо.
    Теперь дело за датчиками, а пока можно уже писать программу по — нормальному, так, как она будет работать уже в реальной обстановке. Остался непроверенным еще один кусок — интерфейс I2C, даже не столько он сам, сколько надежность его работы во взаимодействии с другими модулями программы и прерываниями. Но тут много вариантов. Во — первых, сами сообщения желательно делать покороче, чтобы задача обслуживания I2C, занимая монопольно какое — то время, не сильно мешала другим задачам, во вторых — сообщения можно дублировать или возвращать «эхо» для подтверждения, на крайняк — использовать другие варианты, менее критичные по времени и имеющие аппаратные буфера, например, использовать для межмодульного обмена RS232, точнее, многопользовательскую шину на его основе (RS485). Это с самого начала планировалось как запасной вариант. Вытаскиваешь из панельки MAX232, ставишь в нее или подключаешь кабелем простенький модуль — переходник на RS485, или ИК (или радио) приемник с передатчиком, и пользуйся… А с RS232 я уже больше 30 лет работаю. Он хотя бы тем хорош, что один байт спокойно может лежать в буфере, пока следующий принимается или передается, а промежутки между байтами могут быть какими угодно.

      1. Аппаратный I2C в 870-877 естественно есть, просто я стараюсь заранее предусмотреть разные критические ситуации, чтобы не переделывать все в последний момент. Я пока с I2C реально не работал, хотя почитывать про нее начал примерно лет 10 назад, еще в применении к телевизионным микросхемам PHILIPS. Сам протокол — то знаю неплохо, не знаю только, каким боком это может вылезти в конкретной реализации. Сегодня начал чистить печки к зиме, и между делом прикидывал варианты. Если взять стандартную частоту шины I2C = 100 кгц, это даст время передачи одного байта порядка 100 мксек. При частоте кварца 4 мгц проц успеет выполнить за это время около 100 одноцикловых команд. Это соизмеримо с обработкой многозадачного прерывания от таймера, которое со временем будет постепенно усложняться. Думаю поставить кварц на 16 МГц, заодним и заменив PIC16F873 на 876. Они у меня все на 20 мгц, да и памяти всех видов в них вдвое больше, чем у 873, цена практически одинаковая, остальное все тоже. Тогда за время приема или передачи одного байта по шине проц успеет выполнить до 400 команд, а от тика до тика таймера (1мсек) — до 4000. Тогда я, не шибко напрягаясь, смогу обрабатывать и I2C, и все остальное. В предделителе таймера коэффициент деления будет не 4, как сейчас, а 16.
        Задирать частоту I2c до 400 или 1000 КГц (контроллер позволяет) мне нет смысла (не вижу необходимых для этого обьемов данных или команд, да и время обмена не критично). Так что резервы есть. Использовать 20 МГц неудобно по той причине, что тогда в таймер надо будет подгружать коэффициент пересчета, из за чего может накапливаться некоторая долговременная погрешность, которую придется корректировать. При частоте же кварца 4 или 16 таймер постоянно вертится на своем кольце 0-255 без перезагрузок, обеспечивая идеальную синхронность с кварцем. В зависимости от частоты меняется только коэффициент предделителя (4 или 16), что тоже вполне приемлемо. У ШИМов емкости счетчиков должно хватить, да и частоту ШИМ может еще подниму, все руки не доходят померять скорость нарастания тока в двигателях. Будет мала — подниму напряжение до 24-27в, заодним и ток через драйвер упадет, и моща движков увеличится. (Раза в 4). Сейчас большую ее часть трение щеток и редуктора сьедают. Проще всего сделать емкостное удвоение, при таких напряжениях КПД должен быть достаточный. Хотя можно и однотактный или двухтактный преобразователь. (Придется мотать катушки, зато работать мягче будет, меньше помех). Но в первую очередь надо сделать датчики пола, препятствий, одометры на колеса. Тогда можно будет функционально завершить ходовую часть и перейти к более высоким материям. Недавно пришли кое — какие идейки по наделению робота некоторыми охранно-сигнальными функциями, во время, когда я буду на работе. В основном психологического порядка. Опять же, эффект неожиданности…

        1. Так аппаратный и2с он тот же уарт — пнул байт в регистр и он улетел, без каких либо телодвижений. Также по прерываниям его пинаешь и не надо заморачиваться на скорость.

          1. Послать — не проблема, сложней не потерять на приеме. Как в том старом анекдоте про неграмотного чукчу, пожелавшему стать членом Союза Писателей: «А зачем грамота? Чукча не читатель, Чукча — Писатеь!»
            Конечно, в протоколе заложено, что приемник может задержать отправку передатчиком следующего байта, но я пока не знаю, насколько это хорошо реализовано конкретно в тех контроллерах, которые использую. Поработаю — узнаю. Но поскольку привык по возможности учитывать возможные и невозможные пакости заранее, стелю соломку… Не пригодится, — ну и черт с ней, зато если уж упадешь — так не больно. Тем более что делаю для себя, ради интереса, и ничем особо не ограничен в выборе вариантов. И вообще мне больше удовольствия доставляет сам процесс обсасывания разработки, поскольку результат, в общем — то, предсказуем: обычно все, за что я брался, так или иначе получалось. А за заведомо невыполнимые задачи, я, как правило, не берусь, хотя начальство это и не любит. Им главное — прокукарекать, а солнце может и не вставать…

            1. Ну дык снижай скорость до минимума и все тут. Куда тебе торопится то? Пару байтов же передать обычно. А если гнать поток то принимающая сторона должна его обработать в любом случае. Тем более если приемник зажмет SDA то передатчик не сможет отправить следующий байт как не пыжься.

              Я тоже тащусь по реализации и продумыванию всего, а уже конечный результат не столь важен.

              1. Одна из проблем в PICах младших семейств — одноуровневость прерываний. Т.е. заходишь в прерывание, и если у тебя они разрешены более, чем одному устройству, сначала по флажкам надо определить, кто же тебя прервал. Во время обработки прерывания вызов прерывания запрещен, но флажки устройств, запрашивающих в это время также прерывание, выставляются, и при выходе из прерывания, если есть еще несброшенные флажки устройств, прерывание возникнет снова. В обработчике надо сбрасывать эти флажки самому. Дурацкая система. Когда я работал с комплектом I8080, там в контроллере прерываний 8059 была очень разнообразная и гибкая система приоритетов, программно настраиваемая при инициализации или в любой момент. В дальнейшем, при работе с другими микроконтроллерами, мне этого так нехватало… К хорошему быстро привыкаешь… Так я бы раскидал по степени срочности прерывания от таймеров, USART, I2C, и прочей периферии, и пусть бы младшие из них обрабатывали свои векторы хоть по полчаса, — если появится что — то более срочное, их прервут. А архитектура младших моделей PIC вынуждает использовать прерывания по минимуму, чтобы не морочить потом голову с разборками между ними.
                Правда, в моделях постарше, 18 и выше, уже и пространство памяти линейное, без банков, и стек с нормальным доступом, и с прерываниями, наверно, тоже разобрались. Но я пока ими еще не занимался, — дорогие, напихано в них дофига, а главное — мелкие корпуса с кучей ног, а это мне уже не по глазам… Лет бы на 20-30 раньше… Да и задач особо сложных пока не возникало, а возникнут — проще их переложить на нормальный комп.

                1. Бгыгыгы представил что бы было на AVR с такой системой прерываний. Порядка полутора десятка векторов прерываний. Прерывания есть на каждый чих. Приоритетов как таковых нет. Действует принцип кто первый встал того и тапки — т.е. обработчик прерывания аппаратно запрещает все остальные, но ты можешь программно их разрешить если этот обработчик не сильно важен.

                  1. Сейчас глянул в доку — у PIC16F87x тоже 14 источников прерываний. В общем, и у PIC, и у AVR — те же яйца, только вид сбоку. Та же одноранговая система. Никакой приоритетности.
                    Заменил кварц, поставил на 16 МГц, поменял в программе коэфф. предделителя TMR_0, чтобы сохранить интервал прерываний 1 мсек, указал в проекте PIC16F876, на 16МГц, перекомрилировал. Компилятор ругнулся, что при такой тактовой у TMR_2 недостаточно коэф.деления, чтобы обеспечить частоту ШИМ 500 Гц.
                    Поменял на 1000 Гц, компильнул заново, — без проблем. Зашил 876, воткнул — все работает, как и работало, звук также 500 Гц, — значит, прерывания также через 1 мсек. Глянул ШИМы — теперь 1 КГц. Даже неинтересно. Программа закрутилась в 4 раза быстрее, памятей стало вдвое больше, а внешне как все крутилось, так и крутится. Теперь вся программа занимает 811 байт (9%) ROM, 41 байт (11%) RAM. Буду городить дальше…

                    1. В меге хоть у каждого прерывания свой вектор. А вот приоритетов нет, это да.

  4. Сейчас морочу голову бамперами (передним и задним). Хочется иметь больше информации, только во что это выливается… 4 датчика пола по углам — это уже решено, остановился на фоторезисторах диаметром миллиметров 6, с офигенной чувствительностью, и белых ярких диодах, включаемых кратковременно; ИК локаторы — решил сминимизировать до 2 TSOP (один спереди, другой — сзади), и по два ИК светодиода спереди и сзади, которые будут светить прямо и немного в бок.
    Датчики столкновения на бамперах хотелось бы иметь на смещение бампера как вдоль тележки, так и поперек, но это будет 4+4=8штук… Многовато будет. Думаю, лучше сделать так, чтобы один датчик воспринимал толчок соответствующего конца бампера как по продольной оси, так и сбоку. Программе достаточно знать, каким углом ткнулись. Все равно концов набегает много, контроллер поставлю PIC16F873A в DIP 28 или SOI 28 (есть и те, и те), пока еще не решил, какие. Естественно, 1 контроллер будет обрабатывать оба бампера. Набегает куча постоянных и переменных резисторов. Хоть на SMD переходи… Хотя места на плате вроде достаточно, (длина 210 мм, ширина из соображений прочности — не менее 10-15 мм, внешний край лучше сделать в виде дуги или трапеции. Кроме того, часть платы бампера, до 140х20мм, можно поместить внутри корпуса). К плате бампера снизу или сверху будет приклеена пластина черного поролона, для дополнительного смягчения ударов и чтобы не царапвть мебель, все это будет закреплено на качающейся подпружиненной подвеске с ходом 2-3мм как в продольном, так и поперечном направлении. Датчики столкновения будут срабатывать от пластин или шторок, закрепленных внутри корпуса, под углом 45градусов, чтобы реагировали и на боковой толчок.
    Для передачи информации хотел использовать I2C, но думаю, лучше все-таки использовать линию B0, на которой есть внешнее прерывание. При наличии препятствия контроллер бампера даст на время «0» по ней, ходовой контроллер в ответ тоже по ней, или по В1, также ответит нуликом, типа «Чего надо?», на что тот одним или двумя байтами по простейшему последовательному протоколу передаст состояние датчиков в обобщенном (4 бита — по одному на каждый угол), или более конкретно — 4 бита на пол, 4 — ИК локаторы, 4 — датчики столкновения. Одну из линий, например, B1, при этом можно использовать для стробирования. Более подробный вариант можно выдавать по повторному запросу или по I2C, чтобы ее мог видеть и центральный процессор в будущем. Так же в любой момент ходовой контроллер или центральный процессор могут по I2C (а ходовой — еще и по B0) запросить данные от контроллера буферов об окружающей обстановке, и просто чтобы убедиться в его исправности, или перед началом движения.
    Вот, в общих чертах, что вырисовывается. Нарисовал схему, оптимизирую ее, группируя светодиоды и датчики по — разному, параллельно прикидываю программную реализацию.
    В программе ходового контроллера почистил листинг, убрал лишнее, пересадил обработчики с кнопок на флажки. Кнопки эти флажки теперь лишь выставляют, в дальнейшем это уже будет делать сама программа. Завязал уже с прерыванием таймера декрементные счетчики работы двигателей. Программа кидает туда нужное значение и смотрит, если там больше 0 — соответствующий движок включен, а таймер их постепенно сгоняет до 0. Добавил также флажки реверса двигателей, разделив включение двигателей и направление их вращения. Таким образом, постепенно вырисовывается будущая нормальная многозадачная программа, работа которой определяется флажками в слове состояния программы, выставляемыми и сбрасываемыми модулями программы в зависимости как от работы самой програмы, так и изменений внешних условий или поступающих извне команд. Главный цикл при этом крутится непрерывно на достаточно большой скорости, просматривая флажки и пиная нужные модули по мере необходимости. Соответствующий модуль, выполнив частично или целиком свою функцию, меняет соответствующие флажки и возвращает управление главному циклу. Ни один из программных модулей не должен занимать процессор дольше заранее определенного критического времени, не приводящего к нарущению работы других модулей. Если задача выполнена частично, главный цикл на следующем проходе снова пнет соответствующий модуль, и он продолжит работу. Способ простой и эффективный, я отработал его еще в своих контроллерах, разработанных 12-25 лет назад, и прекрасно работавших с несколькими телеграфными каналами или оборудованием в реальном времени.
    Сейчас размер программы (по-прежнему на МикроПаскале) уже 1013 байт (12%) ROM, 48 байт (13%) RAM.

    1. Чето не совсем понял мысль. У тебя в твоей многозадачности логика какая? Все экшены дают прерывания, а те ставят флажки? Или главная программа попутно еще опрашивает кучу датчиков и сама ставит флажки, а потом, согласно этим же флажкам, действует дальше.

      1. Сейчас, когда программа еще не закончена, обьяснить логику работы в целом, но коротко, довольно сложно. В основе программы — главный цикл, который постоянно вертится с максимально возможной скоростью. Он постоянно отслеживает основные флажки — «Слово состояния программы». Их немного, байта два-три. Кроме того, в качестве флажков могут использоваться программные таймеры, декрементируемые в многозадачном прерывании таймера через разные интервалы времени. К примеру, один — раз в 1мс, другой — раз в 1 сек, или 10мс… При холодном старте в них заносятся «0». В начале главного цикла, например, проверяем таймер интервала контроля батарей. Если = 0, вызываем модуль (подпрограмму) АЦП, которая меряет напряжение, и если оно меньше минимально допустимого, ставит в «1» флаг «Батарея разряжена». Если нет — заносит в свой таймер значение интервала между измерениями и делает возврат в главный цикл. Он проверяет далее флажок «Батарея разряжена». Если «1», он выставляет флаг «Аварийный останов» и, к примеру, включает пищалку, или сигнальный мигающий светодиод. Остальую часть главного цикла при этом можно игнорировать, вернувшись в начало (все равно батарея села, ездить нельзя), или, если сделать несколько уровней контроля, запретить, например, при 11v — работу двигателей, но следить за приемником радиоканала и отвечать на сообщения по нему.
        Если напряжение в норме, проверяем возможные источники команд: клавиатуру, приемник радиоканала, интерфейсы RS232, I2C, и т.д. В случае поступления команды она дешифрируется, если надо, изменяет некоторые флажки, или выпоняет непосредственно какое-либо действие, например, измерить и выдать куда — нибудь напряжение батареи, занести значения в таймеры длительности работы двигателей, или изменить флажки реверса левого или правого двигателя, и так далее. Затем проверяем флаг наличия препятствий. При его установке — запускаем модуль поиска обхода, который может изменить флаги, управляющие работой двигателя, выставив, в свою очередь, флаг «Обход препятствия». Если препятствия нет — (его флаг выставляется по прерыванию от контроллера бамперов), смотрим флаги, управляющие работой двигателей, и соответственно включаем или выключаем их, если, например, закончилось время работы, заложенное в их таймеры, или пройдено заданное расстояние. Ну и так далее.
        Пока у меня в программе главный цикл минимальный, и искуственно приторможенный задержками, и набор флажков не совсем тот, что будет в дальнейшем, чтобы нормально могло функционировать то, что уже есть, не дожидаясь остального.
        Но от кнопок уже все работает нормально, а подключив вместо кнопок китайский приемничек на 430 МГц (есть у меня маленький, на 4 команды), я могу уже гонять его по комнате командами «Вперед», «Назад», «Влево», «Вправо». Если прицепить на USART радио или ИК приемник и передатчик, а также и к COM порту компьютера, и написав модуль обработки принимаемых команд, можно будет уже управлять и с компа. Но пока для меня главное — бамперы, затем — одометры, а программу буду усложнять по мере добавления железа.

  5. На всякий случай послал вам обновленные файлики своего проекта, — доработанная программа ходового контроллера (исходник на Паскале, скомпилированные им ассемблерный листинг и HEX — код, а также дизассемблерный листинг, полученный из HEX-кода программой программатора IC-Prog, которой я прошиваю PIC16F876). Кроме того, еще прикидочный вариант схемы буферов. Пока еще не окончательный, но так удобнее и нагляднее планировать распределение портов, питание и контроль датчиков и т.д.
    Оперативную связь с ходовым контроллером планирую с использованием в обоих контроллерах линий портов B0, B1, с задействованием внешнего прерывания по B0. Кроме того, у контроллера буферов будет также выход на межмодульную шину I2C, для связи с центральным процессором, а иногда и с ходовым контроллером, (для несрочных операций, типа уточнения местоположения препятствия, диагностики исправности датчиков и т.д.) На всякий случай вывожу на разьем также неиспользуемые линии портов, в т.ч. и USART (на всякий случай, в первую очередь для отладки). В качестве датчиков столкновений пока нарисовал микрики, но ставить скорее всего буду все же оптопары, что лучше будет отрабатывать толчки с разных направлений, но потребует дополнительных резисторов для CD подсветки, и желательно управление ей. Свободные линии портов для этого еще есть. На всякий случай (для отладки, а также наглядности работы буфера, и облегчения настройки локаторов), на A4 хочу поставить сигнальный светодиод. (при подачи тока на него он светится разными цветами, переключая их по очереди). Будет светить вверх при срабатывании какого — либо из датчиков.

    1. Что-то редактирование глючит. Поменял «буфера» на «бамперы», сохраняю — а он говорит, что у меня нет прав на изменение этого текста. Мог бы сразу сказать.
      Попутно еще думаю, как лучше сделать одометры, ставить ли на них свой контроллер, или обрабатывать ходовым контроллером, или прицепить контроллер старой мыши с интерфейсом PS2 или даже СОM, раз уж он уже есть в ходовом контроллере, да и в бамперном тоже. У COMомской мыши протокол вообще простейший — при изменении состояния передает 2 байта на 9600 бод, в первом по 4 бита — приращение X и Y, второй байт — состояние кнопок. Даже инициализации не требует, в отличие от PS2. Вроде так, (лет 15 в мышиный протокол не заглядывал). Выпаять из мыши микросхему да оптопары, поставить на оси колес диски с прорезями… Хотя мне больше нравится вариант с оптопарами на отражение и черными полосками на внутренней стороне колесных дисков.

      1. Странно. Может не залогинен был? Я так не замечал проблем пока что. Хотя тестил неоднократно и под гостем и под случайным юзером.

      2. С отражением жди косяков. Не очень надежный метод. А вот про мышиный контроллер любопытно. Не знал, что там все так просто. Он приращение в дырках шлет или в чем?

        1. Обычно в дырках (Указывалось как разрешение, например, 400 точек на дюйм). А в компе уже драйвер пересчитывает в перемещение по экрану.
          Раз уж у меня на ходовом контроллере есть нормальный (с MAX232) COM порт, заманчиво использовать его для одометра на мыше. Всего 3 проводка, 1 микросхемка, конденсатор, пара резисторов, оптопары — вот и вся мышь, то бишь ОДОМЕТР! А старых мышей у меня как COM, так и PS2 — куча, насобирал, когда на работе выбрасывали. Всем оптику подавай… И никакой инициализации для COMовской не требуется, подал напряжение, и работай. С PS2 сложнее, зато достаточно 5v, и готовые библиотеки тоже есть.

          1. Оперативно отвечаешь, а на комменты, как я погляжу, не подписан. Неужто каждые 5 минут обновление смотришь? ;)

            1. Да я постоянно ночами на этих страничках пасусь, больше времени на писанину уходит. Написал, сохранил, страничка обновилась — посмотрел, что добавилось, опять ответил. Только вот у нас уже четвертый час, а в полседьмого на работу вставать, собираться. Отпуск еще в четверг кончился…

              1. Маньяк. Здоровье то не гробил бы :) Мне то пофигу я один хрен не работаю :) Сплю скока влезет. Кстати у меня тоже 4й час. Мы же в одном часовом поясе.

    2. Вместо микриков потом же можно те же оптопары сунуть. Только обработка будет другой. Я так вообще хочу всю дальномерную оптику вынести в периферийные контроллеры. Что то вроде ATtiny12/ATTiny13 восьминогое.

      1. Я тоже хотел на 8-ногое, ( у меня из мелких есть: PIC — 629, 675, 508, 509, 672, АТМЕЛ — AT90S2343, ATTiny12, ATTiny15L, некоторые — и в SOI8), но когда прикинул, чего надо навешать, получилось только на 28 ногой. Не ставить же на пару бамперов 4 контроллера. Замучаешься потом взаимодействие отрабатывать. Ну, и страховка: 3 типа датчиков (пола, столкновения, ИК локаторы), что-нибудь да сработает…
        Вот сонар — тот уже сам по себе, но он уже будет работать напрямик только с центральным процессором, ходовому контроллеру он не нужен. У него минимальное расстояние слишком большое {глушит сам себя, и кристаллы звенят}. Да и в продаже у нас в Алма-ате малогабаритных излучателей и приемников на 40КГц пока нет. Есть готовые дальномеры со встроенным калькулятором, сразу по трем замерам вычисляют прощадь и обьем помещения, но у них один излучатель, работает также и на прием, поэтому минимальное расстояние чуть ли не метр.
        Да и крупноваты они для робота, хоть в кармане и помещаются. Я купил один баксов за 20, побаловаться.

          1. Часто в интернете пишут, что лучше использовать раздельные излучатели и приемники ультразвука. У резонансного (не широкополосного) кристалла большая добротность, после излучения пачки импульсов и переключения на прием кристалл долго «Звенит», из за чего невозможно заметить эхо на малом расстоянии. А у широкополосных — мала эффективность. Указанное расстояние в 15 см — пожалуй, уже на пределе возможностей, и наверняка только от гладкой стены. А вот с ножками стульев будет проблема… ИК радары тоже их часто не видят, так что без контактного датчика столкновения — никак…

  6. Посмотрел в Интернете протоколы COM мышей, — за прошедшие годы они изменились, хоть и не сильно. В основном они теперь посылают 3, а то и 5 байт, и битики перепутаны… Но все равно проще, чем PS2, и можно работать без инициализации, правда, по умолчанию — 1200 бод. Подробности отправил по почте.

  7. Пока довожу до ума схему и готовлю разводку контроллера бамперов, начал писать программу для него. Инициализация и работа с датчиками (4 датчика пола, 4 концевика на столкновения, 2 TSOP ИК локаторов с 4 направлениями подсветки), практически готовы, заняли всего 296 байт (3%) ПЗУ и 32 байта (8%) ОЗУ, зато 14линий портов + еще 2 для связи с ходовым контроллером Остались еще свободными 6 линий порта C, среди них и USART, и I2C. На всякий случай. Выведу на разьем, вдруг пригодятся. Контроллер — PIC16F873 на 4МГц. (у меня их много, и DIP 28, и SOI 28).
    Фактически осталось написать взаимодействие с ходовым контроллером, пока изготовлю и закреплю платы бамперов, наверно, уже программу закончу полностью.
    Сейчас при отладке (можно без платы) нужно будет уточнить константу задержки в цикле формирования импульсов подсветки для TSOP, пока выставил приблизительно, микросекунды на 2-3 меньше (нужно около 28мкс, чтобы получилось 36КГц).
    Когда будут готовы платы бамперов, останется в основном отрегулировать чувствительность датчиков, и отладить взаимодействие между контроллерами в реальной обстановке. Днем может кину по почте схемку и программку.

  8. Сижу и пускаю слюни , как всё гладко пишите , у мя времени даже нет вечером просто за компом посидеть , а хотя детей пока нет , но в процессе .
    Большая просьба дальше развивать тему на паскале :-) под пики.

    1. Попробуйте компиляторы от Микроэлектроники. У них есть и МикроПаскаль, и МикроСи, и МикроБэйсик как для PIC, так и для AVR, и некоторых других контроллеров. Сэкономите кучу времени. Ничего удобнее мне пока не попадалось, хотя перепробовал компиляторы многих фирм. Вот их сайт: http://www.mikroe.com.
      Все компиляторы бесплатно. Без регистрации размер кода ограничен 2 кб, но на первое время и этого за глаза. Кроме того, кто мешает откомпилировать программу несколькими кусками, а потом ассемблерные листинги собрать в кучу и откомпилировать любым другим компилятора Ассемблера? Я тоже пока ковырялся в ассемблере, постоянно то времени не хватало, то лень было. А теперь на МикроПаскале делаю все быстро и без проблем. Кроме того, в комментах к теме об Си и Асме я приводил примеры, насколько компактным получается код по сравнению с компиляторами других фирм. В том же роботе я в 1 кбайт кода уже столько всякого насовал… А главное — очень удобная оболочка компиляторов.

  9. SWG — у мя на команде I2C_Wr(EE_adr); по протаколу I2C на пике 16F877А всё виснет .
    Вопрос:
    нужны ли подтягивающие резисторы 10к на дата линии ?
    может ты сталкивался с такой проблемой ?
    и если надо на паскаль крек у мя есть на последний 8,0,0,1 для ME-EASY PIC5 .

    1. У меня пока еще до I2C руки не дошли, хочется поскорее с бамперами закончить, тогда уже дальше двигаться. Хотел сегодня платы травануть, да отвлекся, а теперь уже лень и время позднее, неохота с текстолитом возиться, устал за день…
      С 24с08 я вживую не работал, хоть и просматривал конструкции с ними. По моему, там не чистый I2C, а что-то похожее, но не совсем, чтобы обойти лицензию и не платить за него. Таких несколько разновидностей. Попробуй PIC Simulator IDE с http://www.oshonsoft.com/, там есть примеры работы с энергонезависимой памятью. Если на Бэйсике, их можно откомпилировать, и посмотреть, что он делает на уровне ассемблера. Можно также нужные ассемблерные куски вставить потом в любую программу, хоть в Паскаль (он разрешает ассемблерные вставки).

        1. Извините, прозевал, не заметил вовремя.
          Схемы рисую в CircuitMaker 2000, разводку — в TraxMaker 2000. Скачать можно на их сайте (www.circuitmaker.com), кряков для регистрации в Интернете полно. Если в библиотеке нет нужного элемента, рисую и добавляю сам, это просто. Когда — то пробовал ORCAD, PCAD и другие, но эти понравились больше. Оптимальное сочетание простоты и функциональности.
          Трассировку делаю вручную, но контролирую по NetList соединений. (На автомате трассирует паршиво, много переходов). Готовую разводку печатаю прямо из TraxMaker на лазерном принтере и — утюжком…

  10. PIC Simulator IDE да , видел , классная штука уже скачал , ковыряюсь с ним уже второй день ,я задал вопрос в terraelectronica.ru , пока жду , буду SPI интерфейс мучить, а конкретней 25LC1024-I/P память на SPI интерфейсе ,как дойдут руки до I2C у тя пиши , буду тоже смотреть что делать а пока займусь изучение PIC Simulator IDE.

    1. Я на PIC Simulator IDE гонял вольтметр на PIC16F873 с выводом на 7сегментные индикаторы, контроллер для тестирования шаговых двигателей, программы для своего робота, кучу других программ, а на ихнем же симуляторе для Атмел — осциллограф на Меге 32 и графическом индикаторе 128х64, — совпадение с реально изготовленной конструкцией 100%. Загружаешь прямо HEX сод, встроенным дизассемблером видишь листинг программы, настраиваешь подключение ног к периферии, запускаешь, и все работает. Можно и осцилограммки просмотреть, и индикаторы разные, даже шаговики среди периферии есть. Все предельно просто и наглядно. У них уже и для PIC 10 симулятор есть, и для PIC18, очень много примеров работы с разными устройствами, откуда можно использовать готовые куски, а также готовые конструкции — программаторы, зарядные устройства, отладочная плата.
      При эмуляции можно вносить изменения в программу и сразу перекомпилировать код встроенным или внешним компилятором. Я обычно использую с ним Микрочиповский MPASM под WINDOWS. Хорошо стыкуется, запускается автоматом, нормально компилит.
      Бэйсик в нем тоже очень мощный, но сейчас я на компиляторы от Микроэлектроники здорово подсел.

Добавить комментарий

Ваш e-mail не будет опубликован.

Перед отправкой формы:
Human test by Not Captcha