|
|
  |
Согласование уровней 3.3V -> 5V при работе с SPI, проблема на ATMEGA16 |
|
|
|
Feb 14 2010, 18:55
|
Частый гость
 
Группа: Участник
Сообщений: 146
Регистрация: 13-07-08
Пользователь №: 38 908

|
Доброго времени суток, уважаемые! Уже вторую неделю борюсь с проблемой соединения 3.3V op и 5V op девайсов по SPI. Есть ATMEGA16, которая работает на частоте 16 MHz и питается 5В. К ней я пытаюсь по SPI законнектить SD флэшку, которая работает на 3.3В, и сетевой контроллер (ENC28J60), который питается от 3.3В, но на выходе DATAoutput (SO) дает 2.6В (что является недостаточным для восприятия Мегой). Для согласования уровней использую 74HCT08N "Quad 2-input AND gate". Вроде бы все просто - нужно лишь заставить съесть 74HCT08N на двух входах элемента "И" логическую единицу (>2В должно хватать) и выплюнуть на выходе 5V уровень. Первое, что я сделал, это прицепил на входы одного из элементов 74HCT08N (A&B) выход SO сетевого контроллера, а выход элемента 74HCT08N (Y) вместе с DATA out SD флэшки - к MISO ATMEGA16:
Но вот беда - не работает зараза  Первое, что приходит в голову - 5В с выхода 74HCT08N не нравятся пину DATA out флэшки SD (хотя, полагаю, внутри SD на DATA out должен быть диодик). Далее делаю по другому: на входы двух разных элементов 74HCT08N цепляю выходы SD и сетевого контроллера, а выходы элементов 74HCT08N соединяю вместе и веду к MISO Меги:
Опять не работает. Что я делаю не так? Проблем с софтом нет, в местах, где нужно преобразовывать 5В->3.3В стоят делители - с этим тоже нет проблем. Вместо 74HCT08N пробовал напрямую цеплять SD & ENC к ATMEGA - работает, но сеть не стабильно (видно, все же маловато 2.6В). В разводке платы проблем вроде тоже не должно быть - частоты не высокие, петель дорожек нет, острых углов на поворотах дорожек нет, вокруг в пустых местах везде земля. Флэшка с делителями находятся на отдельной плате и соединены с родительской платой шлейфом ~10 см, на питании всех девайсов стоят C=0.1uF, около флэшки еще 47uF (хотя этот конденсатор поставлен не для флэшки, но на питание последней тоже попадает), на общем питании 5В 10uF + 0.1uF (временно, вместо 10uF на конечной плате планируется 100uF lowESR), на 3.3В пока только 0.1uF. Заранее благодарю всех за помощь.
|
|
|
|
|
Feb 14 2010, 21:39
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Поставьте от выходов 5В-ой меги логику из серии 74 LVC, запитав ее от 3,3В или тем же напряжением, что питается ваша SD card. Например, широко распространенные 74LVC125. У этой серии входы толерантны к входным 5В-ым сигналам. А для управления входами 5В-ой меги поставьте что-то из серии 74 HCT или 74 AHCT, запитав ее как и положено от 5В. Если как-то "жмут" размеры корпусов, то используйте одногейтовую логику. Типа 74LVC1G125 и 74HCT1G08.
|
|
|
|
|
Feb 15 2010, 07:28
|
Знающий
   
Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960

|
Цитата(kernel @ Feb 14 2010, 21:55)  Уже вторую неделю борюсь с проблемой соединения 3.3V op и 5V op девайсов по SPI. ... Но вот беда - не работает зараза  ... Что я делаю не так? Вы ВСЕ делаете не так. У 74XXX08 выходы не имеют Z состояния а вы подключаете параллельно этому выходу что-то еще. Если хотите соединять выходы - используйте HCT125 и подключайте входы enabe на cs ваших чипов. Или пустите SO ENC28J60 на вход 1A HCT08 а выход SO SD карты - на вход 1B. Выход HCT08 пускаете на вход MISO атмеги, больше к этой цепи ничего не подключать! Входы 1A и 1B HCT08 в такой схеме нужно подтянуть к +3,3V. вариант с HCT125 предпочтительнее, так как возможно у вас с SD карты снимается питание и без питания на карте линия MISO занулится.
|
|
|
|
|
Feb 15 2010, 07:37
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 19-11-08
Из: Moscow region
Пользователь №: 41 766

|
А что мешает использовать резисторный делитель?
|
|
|
|
|
Feb 15 2010, 14:36
|
Частый гость
 
Группа: Участник
Сообщений: 146
Регистрация: 13-07-08
Пользователь №: 38 908

|
ОГРОМНОЕ всем спасибо за помощь! Теперь просьба пояснить, почему сработал этот вариант с HCT08: Цитата(_3m @ Feb 15 2010, 14:28)  Вы ВСЕ делаете не так. У 74XXX08 выходы не имеют Z состояния а вы подключаете параллельно этому выходу что-то еще. Если хотите соединять выходы - используйте HCT125 и подключайте входы enabe на cs ваших чипов. Или пустите SO ENC28J60 на вход 1A HCT08 а выход SO SD карты - на вход 1B. Выход HCT08 пускаете на вход MISO атмеги, больше к этой цепи ничего не подключать! Входы 1A и 1B HCT08 в такой схеме нужно подтянуть к +3,3V.
вариант с HCT125 предпочтительнее, так как возможно у вас с SD карты снимается питание и без питания на карте линия MISO занулится. Ведь судя по даташиту HCT08 выплевывает "1" на Y только тогда, когда и на A, и на B есть "1". Т.е. получается сигнал должен идти и от флэшки, и от ENC28J60, чтобы MISO получал в нужный момент "1"? Где ошибка в моем понимании? Кстати, а есть ли смысл ставить дополнительно между MISO Меги и другими девайсами резистор? Если да, то посоветуйте, пожалуйста, примерный номинал
|
|
|
|
|
Feb 15 2010, 14:58
|
Знающий
   
Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960

|
Цитата(kernel @ Feb 15 2010, 17:36)  ... Ведь судя по даташиту HCT08 выплевывает "1" на Y только тогда, когда и на A, и на B есть "1". Т.е. получается сигнал должен идти и от флэшки, и от ENC28J60, чтобы MISO получал в нужный момент "1"? Где ошибка в моем понимании? Ваша ошибка в том что вы учитываете только "1" которая вас интересует а HC08 вам выдает еще и "0" про который вы забыли. Посмотрите таблицу истинности: Код FUNCTION TABLE INPUT OUTPUT nA nB nY L L L L H L H L L H H H Логический ноль это не значит "отсутствие 1", это значит что выход замкнут на общий. Цитата Кстати, а есть ли смысл ставить дополнительно между MISO Меги и другими девайсами резистор? Если да, то посоветуйте, пожалуйста, примерный номинал  На скоростях атмеги резистор можно не ставить. А можно и поставить 10-20 Ом чисто ради эстетики. Толку от его наличия или отсутствия никакого.
|
|
|
|
|
Feb 15 2010, 15:34
|
Частый гость
 
Группа: Участник
Сообщений: 146
Регистрация: 13-07-08
Пользователь №: 38 908

|
Мммм.. не совсем понял я. Вот есть, например, на входе А одно устройство, на входе В - другое. Устройство на входе А, например, что-то передает, на В - не передает. Т.е., как я понимаю (но, видимо, не правильно), А=1(в какие-то моменты), а В=0(всегда, пока устройство молчит), т.е. A=L|H, B=L, Y= L?
Сообщение отредактировал kernel - Feb 15 2010, 15:41
|
|
|
|
|
Feb 15 2010, 18:32
|
Знающий
   
Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960

|
Цитата(kernel @ Feb 15 2010, 18:34)  ...Вот есть, например, на входе А одно устройство, на входе В - другое. Устройство на входе А, например, что-то передает, на В - не передает. Т.е., как я понимаю (но, видимо, не правильно), А=1(в какие-то моменты), а В=0(всегда, пока устройство молчит), т.е. A=L|H, B=L, Y= L?  Да, вы правильно написали. Если на одном из входов L то на выходе тоже L. Поэтому для того чтобы схема работала обязательно нужна подтяжка обоих линий SO на VDD. Когда устройство не выбрано у него CS=1 и линия SO в Z состоянии, за счет подтяжки на ней получится H уровень который позволит работать другому устройству.
|
|
|
|
|
Feb 17 2010, 07:48
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 19-11-08
Из: Moscow region
Пользователь №: 41 766

|
Если низковольтное устройство толерантно к 5 вольтовому уровню, то делитель на вход SO не нужен, и достаточно подтяжки меги, соответственно управляя CS низковольных устройств, а выбор им необходим, переводим неактивное устройство в z-состояние. Кстати поиск avr + sd или avr + siemens дает много ответов
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|