Перейти к содержанию
    

ddd-ekb

Участник
  • Постов

    23
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о ddd-ekb

  • Звание
    Участник
    Участник

Посетители профиля

883 просмотра профиля
  1. у меня почему то при этом всегда только первый байт записывается, а остальные в никуда если анализировать EEIF бит, то тогда работает нормально может это как то связано с написанием программы просто в виде тхт-файла в виндос-блокноте без всяких библиотек и прочих сред разработки? тут то ведь ни одной лишней команды компилятор не додумывает по сути как бы и фиг с ним, работает и ладно но косяк с битом EECON1|WR точно есть, как и косяк с битом занятости UART а вот потеря прерывания как то уже перебор ... ладно тут это залечилось доп. программным флагом, а если лезть в еепром, например, то там без временного запрета прерываний не обойтись по прерыванию, кстати, не нашел никаких аппнот дополнительных, очень хотелось бы почитать причем если GIE бит не сбрасывать\восстанавливать самому, а его блокирует обработчик до выполнения RETFIE, то факт события нормально запоминается и обрабатывается
  2. 4й косяк вспомнил при отправке потока данных через UART, бит занятости устанавливается с задержкой на 1 команду, так что его нельзя контролировать прямо сразу, надо хотя бы 1 NOP воткнуть
  3. Косяки PIC-контроллеров

    здравствуйте! после очередного долгого отлаживания крайне простого куска программы решил поделиться, вдруг кому поможет чем то за время работы с пиками выявил 3 особенности их работы 1 работа с еепром, бит EECON1|WR WR: Write Control bit 1 = Initiates a write cycle (The bit is cleared by hardware once write is complete. The WR bit can only be set, not cleared, in software.) 0 = Write cycle to the data EEPROM is complete описано предельно ясно, но по факту если использовать контроль этого бита для начала записи следующего байта данных, то они не запишутся проверено на разных пиках, результат одинаков при контроле аналогичного бита прерывания в INTCON всё работает корректно 2 обработка прерывания по внешнему сигналу на RB0/INT если при выполнении программы присутствует участок кода с запретом прерываний, ограниченный командами "bcf INTCON|GIE .......... bsf INTCON|GIE", то событие возникшее в этом месте будет пропущено, хотя в даташите указано, что оно запоминается и флаг прерывания надо будет сбрасывать программно, по факту флаг либо не устанавливается, либо сам сбрасывается (именно с этим копался на днях, обработчик прерывания вычислял и заносил в память 2 переменных, поэтому при их считывании для рассчетов приходилось на всего 3 команды запрещать прерывание, но этого хватало для хаотичных пропусков и кипения мозга откуда идёт ошибка в данных, решилось введением доп. программного флага в обработчик) 3 выполнение перехода по таблице, типа ADDWF PCL,F GOTO m1 GOTOm2 ... команда сложения в этом случае занимает 2 такта, а не 1 описание данной особенности может где то и есть, специально не искал, всё логично и возникает из-за сбоя конвеера, но в даташите это не отмечено (тоже довольно долго искалась ошибка в куске кода, точно рассчитанному по времени) вот как-то так ...
  4. вобщем распаял рядом точно также LIS344 с аналоговым выходом все глюки как рукой сняло сейчас осталось только фильтрацию отстроить, чтоб вибрации всякие отсеивать
  5. в принципе интересно, может я чото явно накосячил у меня сейчас так 1F,21,22,24,25,26,2E,30,32,33,38,3A,3B,3C,3D - 00H 20 - 97H 1250Гц, все 3 оси разрешены 23 - 08H диапазон +\-2G частоту менял на 50 и 400, никаких изменений
  6. пока перепаял другой точно такой же (покупал 2 сразу), очень аккуратно и очень быстро, точно не перегрел абсолютно ничего не изменилось вариант кривой пайки явно отпал
  7. уже взял другой с аналоговым выходом, может проще будет через ацп за ним следить
  8. сам, на макетке вроде не перегревал, в касание паял, сначала приклеил контактами вверх, мазнул флюса и по 1 волоску припая от контактов на макетку, а уж с макетки распаял на пик и питание конечно вариант, хотя вроде больше 30 лет паяю почти ежедневно сейчас ещё подумалось что может постоянное обращение по шине к кристаллу даёт помеху, надо попробовать настроить опрос по прерыванию готовности данных, а не постоянно проверять статус главное потвердили что микросхемы принципиально не косячные, буду дальше экспериментировать
  9. насчёт функций не знаю, программа написана чисто на асме в виндосовском блокноте, никакой среды разработки или чегото похожего нет, регистры инициализированы все, просто выписан список регистров по адресам из даташита, проставлены значения и все туда прописываются потом делается 256 замеров, все суммируются и младший байт отбрасывается, в итоге получается среднее арифмитическое режим задан без внутренних фильтров, полный диапазон +\-2G пока обрабатываю только одну ось Х, непрерывно проверяется флаг обновления даннных, они считываются-суммируются, так 256 раз после этого проверяется результат по модулю и соответственно зажигается или не зажигается светодиод затем снова полная переинициализация всего и по новой для светодиода проверяется только старший байт результата, он имеет диапазон +\-127, проверяется по модулю при значении проверки 10 светодиод горит вообще постоянно, при 15 уже почти нормально, но наклон платы примерно на 20 градусов и загорается, при проверке на 30 уже без всяких ложных сработок батарейка литий 2032 на 3в, стоит керамика 10мкф и тантал 100мкф в параллель отсюда же запитан PIC12F675, работает на внутреннем 4МГц генераторе а где можно посмотреть исходник примера? может что то прояснится
  10. пытаюсь сделать датчик перемещения объекта, просто чтоб была коробочка на нём закреплённая и реагировала на любое его перемещение задачи отследить уж совсем аккуратные действия нет, но чтоб на перекладывание рукой на 10см вбок реагировал всякие ик и прочие не подходят, должно работать в полной темноте и внутри закрытой коробки вот купил самый дешманский акселерометр LIS3DH и решил попробовать фиксировать ускорение а теперь непонятность: постоянно присутствует шумовая помеха на уровне примерно 20% от полной шкалы, никак не могу её отфильтровать попытка замерить среднее арифметическое по 256 замерам позволяет снизить ну до 15%, но неустойчиво, ложные сработки вылазят при этом ещё и наклон датчика влияет на уровень помехи вобщем при отсечке примерно на 30% от полной шкалы всё становится хорошо, никаких ложных сработок и влияния наклона, но при этом реагирует только на довольно резкие толчки, спокойная перестановка рукой не вызывает сработки вопрос: это надо купить какой то более правильный и дорогой датчик? или что то не так с обработкой сигнала? ну не должно же быть такой сильной помехи, мне кажется с питанием точно всё в порядке, оно от батарейки, точно без пульсаций и помех, схема примитивнейшая, датчик, пик12 и светодиод сталкивался кто-нить с акселерометрами? подскажите куда копать
  11. Вобщем пока решил попробовать usbula.com, под мою задачу кажется самое простое из готового решения. Заказал пики, придут - буду тестить. Всем спасибо, тема пока закрыта. Вроде бы.
  12. Тут речь о том, что сам контроллер сбора и подготовки данных в память я напишу на асме, но вот взаимодействие с флэшкой уже не сумею. Поэтому мне нужен какой то дополнительный контроллер сразу запрограммированный на единственное действие - при втыкании флэшки переписать туда всю 2464 и обозвать "файл.тхт". Чтоб мне не надо было отрабатывать какое то с ним взаимодействие, АТ-команды и тд и тп
  13. вопрос по PIC + USB флэшка

    Извиняюсь если не в тот раздел пишу. Сам пишу исключительно на асме и с высокоуровнемы вещами типа USB незнаком абсолютно. Сейчас прорабатывается небольшой контроллер, который будет месяц-два копить статистику с некоторого количества датчиков и складывать её в еепром типа 2464 в виде простово текстового файла. Необходим дополнительный контроллер, по сути безразлично на чём сделаный, лишь бы это было недорого и легко покупаемо, который будет тоже подключен к этому еепрому и к USB-разъёму типа "мама". Также к нему должна быть подключена либо кнопка его активации, либо он должен сам при вставлении флэшки просыпаться. Проснувшись выставить сигнал доступа к 2464 и через секунду (контроллер сбора данных за это время точно его заметит и отключит свой порт от еепрома ) скопировать из неё всё, записав данные без какой-либо обработки в виде файла "file.txt" длинной 8192 байт. Вопрос в принципе с кем то пообщаться на тему реализации этой задачи, ибо сам я ниасилю. Спасибо.
  14. ура, всё, раскурил до конца PCLATH не при делах, как и программная память проблема как и было в итоге определено в неверном сохранении обработчиком номера страницы регистров причина в том, что у 73\74 нет общеадресуемой памяти, в отличии от 76\77, а даташит общий вот и не отразил сходу этот момент усё, спасибо за попинывание и всякие мысли, тему закрыть, автора в бан :santa2:
  15. на сейчас окончательно утряс причину возникновения повторного прерывания сразу при выходе из обработчика несанкционированных входов нет :) в основной программе есть периодическая инициализация регистра PIE1 MOVLW 1 MOVWF PIE1 на всякий случай, вместе с остальными TRISами и ADCONами вдруг чего сбойнёт от помех и некому будет питание передёрнуть, а вачдог не сработает, т.к. программа то бегает по кругу, просто периферия переинициализировалась неверно из-за таджика-сварщика :) раз уж методом тыка установлено влияние страниц, то логично предположить что обработчик и правда не восстанавливает страницу, тогда получается что при попадании момента прерывания между выбором страницы 1 и записью 1 в PIE, эта 1 отправляется в зеркальный относительно PIE регистр PIR и устанавливает этот самый флаг, который сразу же опять и вызывает прерывание абсолютно понятно и логично, ура :) теперь осталось понять в каком месте обработчика портится страница, т.е. бит 5 регистра статуса movwf buf1 movf STATUS,w movwf buf2 clrf STATUS ....... movf buf2,w movwf STATUS movf buf1,w retfie единственная портящая статус команда тут MOVF, и портит она только бит 2 да и в принципе, если эта команда портит биты выбора страниц, то как ей пользоваться на ненулевых страницах? на всякий случай повторюсь, buf1 и 2 имеют адреса 70Н и 71Н для однозначной адресации независимо от текущей страницы так что половина непонимания остаётся пока три тысячи чертей, они опять упрыгали на 2 минуты вперёд, с новым обработчиком прямо скопипастеным с даташита, со всеми этими SWAPами вобщем точно выходит что обработчик не восстанавливает обратно 1 страницу, а оставляет 0 на которой сам работал угу, абсолютно точно так, набил 50 нопов между выбором 1 страницы и записью в PIE1 (чтоб расширить окно ошибки), так прямо на глазах по 2 минуты плюсует
×
×
  • Создать...