реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Согласование уровней 3.3V -> 5V при работе с SPI, проблема на ATMEGA16
kernel
сообщение Feb 14 2010, 18:55
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 13-07-08
Пользователь №: 38 908



Доброго времени суток, уважаемые!

Уже вторую неделю борюсь с проблемой соединения 3.3Vop и 5Vop девайсов по 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) вместе с DATAout SD флэшки - к MISO ATMEGA16:
Прикрепленное изображение

Но вот беда - не работает зараза sad.gif Первое, что приходит в голову - 5В с выхода 74HCT08N не нравятся пину DATAout флэшки SD (хотя, полагаю, внутри SD на DATAout должен быть диодик). Далее делаю по другому: на входы двух разных элементов 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.

Заранее благодарю всех за помощь.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 14 2010, 19:02
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(kernel @ Feb 14 2010, 21:55) *
Что я делаю не так?

Соединяете выходы вместе. Естественно, что так ничего работать не будет.
Go to the top of the page
 
+Quote Post
rezident
сообщение Feb 14 2010, 21:39
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Поставьте от выходов 5В-ой меги логику из серии 74LVC, запитав ее от 3,3В или тем же напряжением, что питается ваша SD card. Например, широко распространенные 74LVC125. У этой серии входы толерантны к входным 5В-ым сигналам.
А для управления входами 5В-ой меги поставьте что-то из серии 74HCT или 74AHCT, запитав ее как и положено от 5В.
Если как-то "жмут" размеры корпусов, то используйте одногейтовую логику. Типа 74LVC1G125 и 74HCT1G08.
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Feb 14 2010, 23:21
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



То, что выходы HCT08 так собирать нельзя, уже сказали. Можно пробовать подать на разные входы "И" подать сигналы от разных девайсов.
Ещё стОит обратить внимание на подтяжку входов HCT08 (или что другое будет), потому как обычно SO имеют 3-е состояние пока нет CS.


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
_3m
сообщение Feb 15 2010, 07:28
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(kernel @ Feb 14 2010, 21:55) *
Уже вторую неделю борюсь с проблемой соединения 3.3Vop и 5Vop девайсов по SPI.
...
Но вот беда - не работает зараза sad.gif
...
Что я делаю не так?

Вы ВСЕ делаете не так.
У 74XXX08 выходы не имеют Z состояния а вы подключаете параллельно этому выходу что-то еще. Если хотите соединять выходы - используйте HCT125 и подключайте входы enabe на cs ваших чипов.
Или пустите SO ENC28J60 на вход 1A HCT08 а выход SO SD карты - на вход 1B. Выход HCT08 пускаете на вход MISO атмеги, больше к этой цепи ничего не подключать!
Входы 1A и 1B HCT08 в такой схеме нужно подтянуть к +3,3V.

вариант с HCT125 предпочтительнее, так как возможно у вас с SD карты снимается питание и без питания на карте линия MISO занулится.
Go to the top of the page
 
+Quote Post
serge71
сообщение Feb 15 2010, 07:37
Сообщение #6


Участник
*

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



А что мешает использовать резисторный делитель?
Go to the top of the page
 
+Quote Post
_3m
сообщение Feb 15 2010, 11:43
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(serge71 @ Feb 15 2010, 10:37) *
А что мешает использовать резисторный делитель?

у афтора проблемы с передачей сигнала "вверх" - SO с уровнем "1" 2,6V ему надо подключить ко входу MISO 5-вольтовой атмеги.
Go to the top of the page
 
+Quote Post
kernel
сообщение Feb 15 2010, 14:36
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 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 Меги и другими девайсами резистор? Если да, то посоветуйте, пожалуйста, примерный номинал rolleyes.gif
Go to the top of the page
 
+Quote Post
_3m
сообщение Feb 15 2010, 14:58
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 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 Меги и другими девайсами резистор? Если да, то посоветуйте, пожалуйста, примерный номинал rolleyes.gif

На скоростях атмеги резистор можно не ставить. А можно и поставить 10-20 Ом чисто ради эстетики. Толку от его наличия или отсутствия никакого.
Go to the top of the page
 
+Quote Post
kernel
сообщение Feb 15 2010, 15:34
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 13-07-08
Пользователь №: 38 908



Мммм.. не совсем понял я. Вот есть, например, на входе А одно устройство, на входе В - другое. Устройство на входе А, например, что-то передает, на В - не передает. Т.е., как я понимаю (но, видимо, не правильно), А=1(в какие-то моменты), а В=0(всегда, пока устройство молчит), т.е. A=L|H, B=L, Y=L? blink.gif

Сообщение отредактировал kernel - Feb 15 2010, 15:41
Go to the top of the page
 
+Quote Post
_3m
сообщение Feb 15 2010, 18:32
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(kernel @ Feb 15 2010, 18:34) *
...Вот есть, например, на входе А одно устройство, на входе В - другое. Устройство на входе А, например, что-то передает, на В - не передает. Т.е., как я понимаю (но, видимо, не правильно), А=1(в какие-то моменты), а В=0(всегда, пока устройство молчит), т.е. A=L|H, B=L, Y=L? blink.gif

Да, вы правильно написали. Если на одном из входов L то на выходе тоже L.
Поэтому для того чтобы схема работала обязательно нужна подтяжка обоих линий SO на VDD. Когда устройство не выбрано у него CS=1 и линия SO в Z состоянии, за счет подтяжки на ней получится H уровень который позволит работать другому устройству.
Go to the top of the page
 
+Quote Post
kernel
сообщение Feb 16 2010, 03:00
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 13-07-08
Пользователь №: 38 908



Спасибо! Теперь все понял.
Go to the top of the page
 
+Quote Post
serge71
сообщение Feb 17 2010, 07:48
Сообщение #13


Участник
*

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



Если низковольтное устройство толерантно к 5 вольтовому уровню, то делитель на вход SO не нужен, и достаточно подтяжки меги, соответственно управляя CS низковольных устройств, а выбор им необходим, переводим неактивное устройство в z-состояние. Кстати поиск avr + sd или avr + siemens дает много ответов
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016