Страница 1 из 1
КТ315, МЕГА8. Как лучше организовать ключевой режим?
Добавлено: Чт янв 22, 2009 12:42:49
Alexeus
КТ315, МЕГА8
Подскажите как КТ315 или другой н-п-н транзистор (просто КТ315 навалом у меня) лучше включить в качестве ключа. Нужно для режима передачи по SPI инвертировать сигнал на вход SS, вобщем по приходу высокого уровня (5в) на базу транзистора, замыкать SS на землю.
Добавлено: Чт янв 22, 2009 16:25:04
pirotehnick
Хмм... Оригинально...
Обычно вывод SS настраивается как выход. Если ты замкнёшь вывод SS на землю без токоограничивающего резистора в этом режиме, то этот вывод да и этот порт больше использовать не сможешь по понятным причинам

.
Наверное ты имел ввиду открывать транзюк выводом SS, т.е. им подавать смещение на базу.
Ну а транзюк включается традиционно по схеме с общим эмиттером.
Добавлено: Чт янв 22, 2009 17:17:12
Alexeus
SS вход. Я думаю, ничего страшного не произойдет если я замкну SS на землю. Я пользую мк в режиме Slave. Именно замыканием на землю активируется прием данных по SPI интерфейсу, а высокий уровень прерывает прием. Читаю иногда даташиты
Просто от стороннего устройства идет инверсный сигнал- когда нужно принимать (данные по шине идут), это устройство дает высокий лог. уровень, а мне нужен в этот момент низкий.
Поправьте если не так: я беру КТ315, к его базе через R1 подпаиваю выход устройства, сигнал которого мне нужно инвертировать. Эмитер сажаю на землю. между коллектором и +5в подпаиваю подтягивающий резистор R2, ну и так, для нагрузки (или не нужно? -в мк вроде уже стоят они), инверсный сигнал снимаю с коллектора транзистора.
1) R1 к базе транзистора, при небольших токах какой брать? я вроде около 12к насчитал.
2) R2 в 1к хватит думаю...
Добавлено: Чт янв 22, 2009 17:33:43
pirotehnick
А, тогда понятно.
Так тоже пойдёт. Хотя при записи в порт я обычно конфигурирую пины на вход и выставляю их в состояние высокого уровня. В этом случае можно напрямую их подрубать к коллектору, но всё же лучше через резюк.
R1 от 4 до 20 КОм
R2 от 0 до 2КОм (если как вход при Rп = 40 КОм)
Добавлено: Вт янв 27, 2009 17:12:31
Alexeus
что то не получается... пользую КТ315Б на базу через резистор 12к идут положительные импульсы, эмитер посажен на землю, коллектор через резистор 1к посажен на "+".
Сажаю вход SS просто на землю- данные с шины считываются, но бывает не с того места начинает читаться и неправильные байты получаются, путает полубайты...
Что бы всегда был байт такой каким его послал мастер, нужно вход SS посадить на синхроимпульс мастера - SS должен сажаться на землю когда мастер начинает передачу байта, затем мастер поднимает SS. Так вот так получилось, что с мастера этот синхроимпульс идет высоким импульсом в момент передачи, я его инвертирую с помощью транзистора. Сажаю SS на коллектор вышеописаной схемы- и тишина, ничего не принимается, если на базу подключить- тоже ничего.
что за ерунда... SS на подчиненном мк пока в высокоомном состоянии, не пробовал с подтяжкой (хотя в высокоомном состоянии резистор в 1к от коллектора является подтяжкой к "+"). схема работает, сигнал инвертирует- проверял светодиодом от коллектора через резистор на "+" -светится.
Добавлено: Вт янв 27, 2009 21:18:52
pirotehnick
Так.... Давай разбираться
Если МК - работает как подчинённый, то его вывод SS конфигурируется ны вход и на нём выставляется высокий уровень.
Данный вывод сажается на коллектор транзистора (можно через резистор 1 КОм). При подаче смещения на базу транзюк открывается и на входе SS (у подчинённого) появлется низкий уровень. Разумеется, вывод SS ведущего ус-ва подключается к базе транзистора.
Так ты сделал?
Ещё причиной таких глюков может быть сам транзюк. КТ315 - транзюки не лучшего качества, хотя подобный принцип у меня работал и с ними.
Попробуй взять импортный, с частотой передачи этак 5000 МГц.
Например 2SC3357 пойдёт.
Добавлено: Вт янв 27, 2009 22:51:45
Alexeus
Я подключаюсь к уже готовому прибору, там два МК, один всегда мастер, второй подчиненный, а я просто сажусь на их шины clk, mosi/miso. Соответственно мне то не нужно менять состояние выхода SS тех мк, пусть они работают как должны, а я снимаю с них данные (сниффер).
Почитал повнимательнее даташит, при замыкании на землю активируется режим SPI, но если подать высокий уровень, то происходит сброс! модуля SPI, а затем снова подается низкий уровень, так и чередуется- может просто модуль не может работать в таком режиме актив/сброс -просто не успевает инициализироваться!?
Как же тогда быть, ведь мне нужно принять байт только когда на время его передачи специально включается низкий/высокий уровень.
а если оперировать включением/выключением режима SPI через регистр SPCR -это не будет перезагрузкой модуля? тогда можно подать этот сигнал начала передачи на другой вход порта и по высокому/низкому уровню включать и выключать модуль spi- тогда он будет включаться и принимать данные как раз по сигналу.
транзистор инвертирует отлично- приложу скриншот.
Добавлено: Вт янв 27, 2009 23:14:24
pirotehnick
Хмм... Если так, можно попробовать провести обманный ход. Если твой принимающий девайс как подчинённый, можно создать исключение, т.е. прицепить линию SS к другому входу твоего МК, а SPI оставить включённым (т.е. на SS принимающего МК низкий уровень) и по приёму данных проводить проверку уровня линии.
Либо через транзюк подключать линию SCK. Сигнала синхронизации не будет и в регистр ни чего не придёт, а SPI модуль останеться включённым.
Добавлено: Вт янв 27, 2009 23:38:35
Alexeus
вот-вот... у меня такая же мысль насчет транзистора появилась, просто не рискнул высказать

попробую так сделать,
1.по управляющему сигналу sck подключать/отключать.
2. можно наверное подать управляющий сигнал на pinb.0 а ss посадить на землю. и делать проверку, если на pinb.0 низкий уровень, то переходим к циклу приема по SPI.
..................
сделал по второму варианту- все равно лезут сдвиги как и было раньше, наверное связано с аппаратным SPI- после инициализации он начинает сразу работать, реагировать на sck и принимать данные, а программно по биту "0" в порту мы только выбираем момент когда считать, но в регистр до этого момента уже пришел неверный байт...
позже попробую первый вариант... а как, кстати включить транзистор что бы первый вариант сделать- это, похоже, уже пару транзисторов нужно?
Добавлено: Ср янв 28, 2009 23:17:38
pirotehnick
наверное связано с аппаратным SPI- после инициализации он начинает сразу работать, реагировать на sck и принимать данные
Странно, я кога работал с картой MMC, всё было нормально, при этом модуль SPI был постоянно включен, да и если посмотреть на временную диаграмму SPI, то же ни каких проблем возникнуть не должно.
Кстати сигнал на SCK при котором девайс должен переходить в ожидание, должен быть противоположен сигналу, при котором SPI запихивает данные в свой регистр. А там есть 2 возможных варианта - по нарастающему и по падающему фронту. Т.е. если сигнал тактирования по падающему фронту, то на время ожидания на SCK должен быть высокий уровень!
Если использовать первый вариант могут возникнуть проблемы, связанные с заполнением регистра не нужными битами. Т.е. на момент исключения, в регистр возможно заноситься часть данных, затем устройство говорит что оно готово и данные начинают передаваться, но в регистре уже сидят не нужные биты и, возможно из-за этого возникает такая фигня. Т.е. сразу же после обнарухения сигнала, надо както сбросить регист.
кстати включить транзистор что бы первый вариант сделать- это, похоже, уже пару транзисторов нужно?
Да вроде бы и одного должно хватить
А вообще на какой скорости ты юзаешь SPI?
Добавлено: Чт янв 29, 2009 12:38:29
Alexeus
ща картинку приложу
Странно, почему вход SS, подключенный напрямую к коллектору транзистора не включал spi, ведь транзистор нормально инвертировал...
-Второй раз попробовал с транзистором, отключил подтягивающий резистор на "+", на коллектор SS повесил- и заработало. Вроде нормально синхронизирует и получает нормальные байты (сравнивал с графической диаграммой шины данных) Хотя не думаю что в подтяжке дело было...