Проверить переключатель уровня с помощью Arduino и некоторых данных

Ниже приведена ссылка на двунаправленный преобразователь логического уровня (он же level shifter). Я припаял 12 контактов (по 6 на каждую деталь) к регулятору уровня, чтобы он поместился на макетной плате.

http://www.ebay.com/itm/121868205078?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

Это может показаться тривиальным, но я бы хотел устранить неполадки в переключателе уровней с помощью связи в обоих направлениях (Rx и Tx), чтобы убедиться, что он работает правильно. У меня есть постоянное напряжение 4,85 В (5 В), поступающее на вывод высокого напряжения, и постоянное регулируемое напряжение 3,24 В (3,3 В), поступающее на вывод низкого напряжения, а также заземление на оба вывода GND. Прямо сейчас я использую pin0 (Rx) и pin1 (Tx) на Arduino Mega 2560.

void setup() {
  Serial.begin(9600);
}

void loop() {
  delay(1000);
  Serial.println("Test");
}  

Как я могу протестировать этот переключатель уровней без каких-либо навороченных компонентов? Как я мог бы написать программу для переключения светодиода как на выводах LV1, так и на выводах HV1, изменив приведенную выше программу? Пожалуйста, обратите внимание, что, несмотря на то, что Arduino работает на 5 В, я не использую Arduino в качестве источника питания высокого напряжения.

РЕДАКТИРОВАТЬ (согласно комментарию 3 от @Paul):

Тест:

  • Записать пустой скетч в Arduino
  • Подключите 5 В (Arduino 5 В) к высоковольтному контакту
  • Подключите GND (Arduino GND) к выводу GND на той же стороне, что и вывод HV
  • Подключите 3,3 В к контакту низкого напряжения
  • Подключите GND (от источника питания 3,3 В) к контакту GND на той же стороне, что и контакт LV
  • Подключите вывод Arduino Tx к каналу 1 (HV1)
  • Подключите вывод Arduino Rx к каналу 2 (HV2)
  • Короткое замыкание канала 1 на канал 2 с помощью соединительного провода

Когда все это подключено, и я открываю последовательный монитор в Arduino IDE, все, что я набираю, будет повторять именно то, что я ввел. И когда я отсоединяю одну из этих перемычек, она не отзывается эхом. Так что, похоже, это работает.

, 👍1

Обсуждение

Попробуйте выполнить "тест обратного цикла", просто отправьте символ по линии Tx через конвертер (и обратно через конвертер) в линию Rx. И проверьте, получите ли вы обратно то, что отправили., @Paul

@Paul - я подключил HV1 (канал 1) к контакту 0 (Rx) на Arduino, а HV2 (канал 2) к контакту 1 (Tx) на Arduino. Какой жесткий диск я должен поместить между LV1 и LV2 на стороне низкого напряжения переключателя уровня, чтобы гарантировать возврат символа ASCII?, @MacGyver

резистор 0 Ом ;) В основном все, что является проводящим, предпочтительно провод. Затем биты будут перемещаться `из выходного Tx -> HV1 (high) -> переключатель LV1 (в низкий) -> провод -> переключатель LV2 (в высокий) -> HV2 -> входной Rx". если это удастся, вы можете с уверенностью предположить, что он работает для UART и что это bi-направленный., @Paul

Ха-ха! Я думаю, поговорка гласит: "Будь проще, Стив" .. или это последнее слово неверно?, @MacGyver

Резистор 0 Ом - это резистор, который не имеет "никакого сопротивления". Который в основном представляет собой (короткий) провод. Проверьте этот "учебник" (http://www.instructables.com/id/Loopback-Test-For-Arduino-Uno/?ALLSTEPS ), @Paul

Здесь одно замечание. Я использую Arduino, а не UART (как в комментарии @Paul). Надеюсь, ваш комментарий справедлив при использовании Arduino. Являются ли Arduino и UART обоими 5V, которые будут подключаться таким же образом к высоковольтному контакту на переключателе уровня?, @MacGyver

Извините, UART или USART - это "низкоуровневое оборудование", стоящее за аппаратным последовательным портом (контакты Rx и Tx). Так что да, мы на одной линии (:, @Paul

@Paul - замыкание канала 1 на канал 2 сработало! Вам кажется, что мой "Тест" в моей ПРАВКЕ точен?, @MacGyver

если сигнал идет от Tx к HV1, к LV1, к перемычке, к LV2, к HV2, к rx, вы можете с уверенностью предположить, что компонент работает. Возможно, вы захотите проверить напряжения, если они действительно составляют около 5 В и около 3,3 В. Но да, вы протестировали / доказали, что этот компонент будет работать для последовательной связи., @Paul

Так что, да, мне это кажется правильным. Вы закорачиваете канал 1 LV и канал 2 LV? Судя по вашим заметкам, это также может быть HV. Но, тем не менее, и то, и другое должно работать., @Paul

Да, я фактически сделал короткое замыкание с уровня 1 на уровень 2 с помощью короткого соединительного провода / кабеля на моей макетной плате. Я набрал "Привет", и последовательный монитор повторил "Привет". Когда я снял короткое сообщение, оно не отозвалось эхом на "Привет"., @MacGyver


2 ответа


Лучший ответ:

2

Вам не нужно писать какую-либо программу.

Во-первых, обратите внимание, что это (или, по крайней мере, претендует на то, чтобы быть) переключателем уровня I2C. Это означает, что он ничего активно не подтягивает; он только активно тянет вниз. Предполагается, что вы должны выполнять подтягивания где-то в своем круге.

Чтобы проверить это, подтяните HV1 и LV1 резисторами 10 Ком до HV и LV соответственно; измерьте напряжение с обеих сторон, чтобы убедиться, что вы тянете до ~ 5 В и ~ 3,3 В соответственно.

Заземление HV1, убедитесь, что уровень LV1 низкий.

Заземление LV1, проверьте, что HV1 низкий.

Та-ак!

,

Подтягивания уже на плате, насколько я могу видеть. Хотя я не совсем уверен, можете ли вы использовать переключатель уровня I2C для UART., @Gerben

@Gerben резисторы используются для (двунаправленного) преобразования напряжения. У меня есть похожая плата (https://www.sparkfun.com/products/12009 ), который работает для uart, logic и spi (не пробовал I2C, но все должно быть в порядке)., @Paul

@JayEye - Когда вы говорите "подтяните HV1 и LV1 с помощью резисторов 10K", я помещаю резистор 10K Ом между выводом HV1 и чем-то еще, и еще один резистор 10K Ом между выводом LV1 и чем-то еще? Нужно ли мне "что-то еще" или я просто измеряю падение напряжения там, где "что-то еще" находится на стороне низкого напряжения и на стороне высокого напряжения канала 1?, @MacGyver

В дополнение к проверке напряжения, я также хотел бы убедиться, что данные передаются туда и обратно. Это, в конечном счете, то, к чему я здесь стремлюсь. Я обновил название вопроса, чтобы отразить это., @MacGyver

@MacGyver отредактировал ответ, чтобы прояснить это, @JayEye

если вы хотите использовать это для чего-либо другого, кроме i2c, приобретите подходящий преобразователь уровня., @JayEye

почему бы ему не передавать данные? если вы убедитесь, что максимум и минимум с обеих сторон приводят к соответствующему сигналу, все в порядке., @JayEye

Для каких приложений следует использовать i2c? Что является лучшим переключателем уровней для других приложений, для которых это не сработало бы? Два дня назад я не знал, что такое сдвиг уровня. :-), @MacGyver

рискуя разозлить модераторов, я укажу на реальные продукты: https://www.adafruit.com/products/1875 для общего смещения куколки и https://www.adafruit.com/products/757 для сдвига уровня I2C. Прочтите документацию, которую они предоставляют, они объяснят все, что вам нужно знать. Я не связан с Adafruit; Я просто нахожу их удобными, так как мы оба находимся в Нью-Йорке, и даже самая дешевая доставка приводит к двухдневной доставке!!, @JayEye

@JayEye - означает ли "подтягивание" переход от низкого напряжения к высокому, а "опускание" означает переход от высокого напряжения к низкому?, @MacGyver

Нет, "подтянуть" означает, что он подключен через резистор к "положительному", так что, если ни одно устройство не разряжает его, по умолчанию он будет установлен в положение "положительный". Возможно, вы захотите ознакомиться с некоторыми руководствами по этому вопросу. Но это не требуется для связи с линиями Rx / Tx., @Paul


1

@paul я кое-что сделал, но когда я подключаю канал1 к каналу2 через перемычку, arduino перестает работать, и текст перестает появляться на последовательном мониторе.

,