Да, вполне получилось, оперировать выводом в программе, набрался смелости и попробовал прошить, только подал вначале низкий уровень (дабы не сжечь чего нибудь): Спойлер
Код:
while (PD_IDR_bit.IDR2 == 0) //Пока PD2=0 выполняем цикл... { PD_DDR_bit.DDR2 = 1; // Ножка PD2 конфигурируется на вывод (переключение бита ввода на вывод) PD_CR1_bit.C12 = 1; // Выход типа Push-pull PD_CR2_bit.C22 = 1; // Скорость переключения - до 10 МГц.
PD_ODR_bit.ODR2 = 0; //Подтянем пин к земле (работает!) PC_ODR_bit.ODR7 = 0; //Подтянем пин к земле - светодиод горит PC_ODR_bit.ODR4 = 0; //Подтянем пин к земле - светодиод горит DelayLong(); // ждем 3 секунды
PD_DDR_bit.DDR2 = 0; // Ножка PD2 конфигурируется на ввод (переключение бита вывода на ввод) PD_CR1_bit.C12 = 0; // Выход плавающий - установлен подтягивающий резистор PD_CR2_bit.C22 = 1; // Прерывание ВКЛючено EXTI_CR1_bit.PDIS = 0; //Прерывание по спаду напряжения (задний фронт)
DelayShort(); // ждем 1,5 секунды }
Спасибо всем за советы. P.S. При изучении мануала по STM8S возник еще вопрос по прерываниям, конкретно интересует, возможно ли программно выставить приоритет по отдельным пинам порта? Т.е. в STM8L это сделать можно, для STM8S, как я понял, приоритет можно выставить только для всего порта? Например "средний приоритет" для порта D будет выглядеть так?: Спойлер
Код:
ITC_SPR2_bit.VECT6SPR = 0; //средний приоритет порт D
методика поиска: идем в датшит к мк (в моем случае STM8S103F2P6), смотрим таблицу: "Interrupt vector mapping" 6 | EXTI3 | Port D external interrupts стр.42 далее идем в RM0016: "Software priority register x (ITC_SPRx)" стр.68 вектору 6 соответствует: ITC_SPR2 VECT6SPR[1:0] правильно ли я понял методику нахождения бита?
Здравствуйте. Подскажите что это может быть? Какие есть варианты? Работаю с STM8L. И столкнулся со следующим: В основном цикле ждём события, событие происходит, программа проходит все положенные функции и, дойдя до последней функции в основном цикле, выполняет её и сбрасывается. То есть начинается полностью с нуля. При этом в отладке ни каких ошибок не возникает. Из-за чего программа может сбрасываться?
Начал разбираться с шиной I2C. На STM8S105C6 выполнено Slave устройство. Инициализацию шины прописал с использованием бита АСК(регистр I2C_CR2), но при аппаратной отладке ST-Linkoм видно, что бит АСК не устнавливается при записи I2C_CR2, а остаётся = 0. Сответственно, после приёма адреса вместо АСК мастер получает в ответ NACK и отваливается. Прикол в том, что при отладке в симуляторе всё работает. Сталкивался кто-нибудь с проблемой не записи бита АСК?
Дополню. Попытался вывести отладочную информацию через UART - не выдаётся. Инициализацию UART взял из рабочего проекта. Фигня какая-то. Или контроллер битый или компилятор глючный (IAR 1.40.1).
Итак, по моему предыдущему посту: 1. Проблема с UART - не правильно настроил порт. 2. Бит АСК устанавливается ТОЛЬКО ПОСЛЕ ВКЛЮЧЕНИЯ ИНТЕРФЕЙСА I2C БИТОМ РЕ !!!. В общем интерфейс заработал, но пока есть проблемы с обработкой состояния RESTART. Продолжаю разбираться.
Никто не в курсе, STM8L-DISCOVERY может использоваться для программирования/отладки пятивольтовых STM8S ? Если запитываю STM8S103F3 от 3.3в, то все зашибись, если от 5в, то шьет через раз. Несколько разных экземпляров попробовал на макетках, все без толку. Это мне так повезло или я странного хочу?
Ну так в чем дело? Вперед! А вообще там скорей всего уровни не согласованы. Хотите - помудрите с преобразователями уровней. А может лучше предусмотреть лишний пин в разъеме для подачи стороннего напряжения 3,3в и джампер для переключения между напряжениями.
Внешнее 3.3в питание не очень вписывается в схему, где STM8S103F3 является лишь ее частью. Хочется отладки в боевых условиях. Пробовал простейший преобразователь уровней на полевиках по линиям reset и swim, но по неизвестной причине дискавери так и не увидел МК. Осциллографом видно, что они пытаются общаться и согласование уровней похоже, что работает, только софт все время пишет об ошибке.
Может велика задержка сигнала, реализованная таким способом? Программатор начинает общаться с контроллером слишком рано, пока сигнал сброса на контроллере не достиг нужного уровня.
Да вроде нечему там задержку вносить. Полевики, в моем случае 2n7002, по частотам вроде неплохой диапазон имеют. Временные характеристики конвертера посмотреть нечем, т.к. кроме старенького осцилла из оборудования более ничего.
Попутный вопрос: как относится дискавери к длине проводов на swim-е? У меня кабель сантиметров тридцать.
По частотам у него диапазон неплохой только если в затвор пол ампера вкачивать, емкость затвора ведь не нулевая, потом емкость монтажа на выходе а подпирающий резистор конечного сопротивления - к нулю прижать можно быстро, а обратно напряжение будет расти куда медленней.
Господь с вами, емкость затвора у него 30пф, откуда пол-амперы ? Да и схема включения, по сути, с общим затвором: Неоткуда бы частотным потерям браться.
Емкость затвора и резистор в 4.7кОм образует RC-цепочку которая является НЧ-фильтром фактически. Можно в принципе оценить время заряда в таких условиях, найти формулу расчета... вобщем при таких характеристиках цепи 63% напряжения на выходе такого фильтра появится спустя 0.14мкс а 95% через 0.4мкс - уже задержка... На выходе, 10кОм и наверняка практически такая же емкость... еще одна задержка. Критична ли? или нет? черт его знает... Попробуй осцилографом измерить фактичесую задержку подав прямоугольник на вход.
Стоп-стоп-стоп.. Это резистивный делитель на 3.3в. Затвор туда жестко приколочен и никакой динамики не ожидается. Параллельно затвору на землю можно хоть 1000мкф емкость вешать, ничего не изменится. Выходная емкость тут тоже никаким боком.
Потому что эта емкость исток-затвор. Именно туда и приходит твой сигнал. Если взять идеальные условия, на входе прямоугольник - он через эту емкость просадит твое опорное напряжение до тех пор пока затвор не зарядится. И еще неизвестно как транзистор отнесется к отрицательному напряжению на затворе относительно истока. И кстати, при каком напряжении на входе транзистор начнет открываться, а при каком откроется полностью? Может он у тебя еле-еле открывается и выход не дотягивает? Не помню какое там напряжение отпирания у 2N7000... Очень было бы интересно глянуть на двухканальном осциллографе вход и выход с этой схемы.
Емкость исток-затвор в таком включении будет проходной по отношению к пути следования сигнала. 30пф в худшем случае уголки фронтов чуть призакруглит. Насчет напряжения отпирания, тут да, стоит озадачиться. Был бы двухканальный осцилл, можно было бы поразглядывать в подробностях.
Что за модель полевика используется? Я в протезе покрутил 2n7002, так он вполне нормальный меандр рисует. Вот если делитель вниз подвигать, то где-то в районе 2.5в начинается похожая фигня. Но тут как раз с отпиранием наверное проблемы.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения