Да, вполне получилось, оперировать выводом в программе, набрался смелости и попробовал прошить, только подал вначале низкий уровень (дабы не сжечь чего нибудь): Спойлер
Код:
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в начинается похожая фигня. Но тут как раз с отпиранием наверное проблемы.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения