Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Tento příspěvek si klade za cíl vysvětlit jednodušší způsob používání Arduino Due (nebo jiné desky 3,3 V) s populárním displejem LCD 16x2 s modulem adaptéru I2C.
Počáteční problém je, že LCD potřebuje 5V, aby jeho podsvícení fungovalo správně, ale piny SCL a SDA by měly pracovat na 3,3V, aby komunikovaly s Arduino Due, aniž by způsobovaly újmu. Abych to vyřešil, našel jsem dvě možnosti:
Nejvíce zmiňovaným řešením je použití obousměrného převodníku logické úrovně, který problém skutečně vyřeší. Ale také přidá další součást do vašeho seznamu a další zapojení kabelů ve vašem obvodu
Další způsob, který jsem našel, je jednoduše odpojit 2 pullup rezistory v „batohu adaptéru I2C“z LCD. Kromě toho, že je mnohem snazší, má další výhody vysvětlené ve srovnání na konci. Tato metoda je hlavním zaměřením tohoto příspěvku
Zásoby
Arduino splatné
LCD 16x2 displej s modulem adaptéru I2C
Páječka
Pájecí čerpadlo nebo pájecí knot
Pinzeta
Krok 1: Původ řešení
Řešení jsem nevymyslel já, viděl jsem docela dobrý návrh a vysvětlení na fóru Arduino v odkazu níže, který budu reprodukovat v tomto příspěvku.
forum.arduino.cc/index.php?topic=553725.0
Odpověď od: david_prentice
Nemohl jsem najít žádný úplný návod na internetu, a protože se jedná o velmi běžný problém, snažím se zde podrobně představit řešení, být svědkem toho, že skutečně funguje, a přidat informace, které by mohly zmírnit skepsi ohledně jeho výsledků.
Krok 2: Vysvětlení
Zařízení
Aby komunikace I2C fungovala, vyžaduje stahovací odpory připojené k pinům SDA a SCL. Důvodem je, že zařízení při komunikaci tyto kolíky pouze LOW. Aby představoval VYSOKOU, musí pouze neposílat NÍZKOU a díky pullupům jde do VYSOKÉ. (toto porozumění bude později velmi důležité)
LCD „batoh I2C“má dva výsuvné odpory 4K7, které splňují požadavky I2C. Ale protože jsou připojeny k Vcc, pokud použijete 5 V, vytáhnou SDA a SCL na 5 V.
Když se podíváte do datasheetu, vidíte, že na rozdíl od jiných desek má Due na svých hlavních pinech SDA, SCL již integrované výsuvné odpory 1K5, které je přitahují na 3,3 V.
Testy
- Displej LCD -> Arduino
- Gnd -> Gnd
- Vcc -> 5V
- SDA -> SDA
- SCL -> SCL
Pokud připojíte pouze LCD na Due (podle výše uvedeného zapojení), pullupy 1k5 (nebo 1k0) Due připojené k 3,3 V a 4K7 LCD pullupy připojené k 5 V budou mít za následek nečinné linky I2C při 3,7 V (3,6 V s 1k0). To není dobré, protože datový list Due stanoví pro jeho I/O linky maximální napětí 3,6 V.
Testováním tohoto scénáře, pouze s LCD, jsem získal 3, 56 V. Přidáním modulu EEPROM ke stejnému SDA a SCL to stouplo až na 3,606 V. V obou případech vše fungovalo normálně, ale ty jsou daleko od ideálního napětí úrovně s ohledem na stanovené maximum 3,6 V.
Takže ano, existuje šance, že to bude fungovat stejně jako moje, aniž by došlo k jakékoli změně. Úroveň napětí je však stále daleko od ideálu a určité nesrovnalosti v nárazu nebo vytažení LCD mohou způsobit, že překročí hranici 3,6 V. (Bylo by vhodné alespoň předem pečlivě vyzkoušet pomocí potenciometru 20K nebo 100K, jaký je nejnižší odpor mezi piny 5 V a SCL/SDA, než se dostanou na 3,6 V, i když zbytek řešení je mnohem bezpečnější a pravděpodobně snadnější)
Řešení
Předloženým řešením je jednoduše vyjmout výsuvné odpory z batohu LCD, které se pokusí vytáhnout linku až na 5 V. Poté zůstanou pouze vestavné výsuvné odpory Due, které vytáhnou linky SCL a SDA na 3,3 V. Fungovalo to perfektně, udržování nečinných kolíků kolem 3,262 V!
Spojení zůstávají stejná:
- LCD displej -> Arduino
- Gnd -> Gnd
- Vcc -> 5V
- SDA -> SDA
- SCL -> SCL
Pokud vás zajímá, zda LCD při komunikaci nevytáhne linku na 5 V, aby představovala VYSOKÝ, pamatujte, že na I2C zařízení vytahují pouze řádky NÍZKÉ, což je signál VYSOKÝ, pokud neruší, což bude 3,3 V od pull-upy na palubě Due.
Také 3,3 V je dostačující na to, aby batoh I2C považoval za VYSOKÝ signál.
Krok 3: Identifikujte a odeberte rezistory
Obrázek výše ukazuje červeně výsuvné odpory, které jsem našel ve svém modulu.
Identifikovat
Protože se batoh adaptéru LCD I2C může lišit, nemusí být odpory ve stejné konfiguraci. K identifikaci vytahovacích odporů můžete použít multimetr s testem spojitosti. Každý pull-up odpor by měl mít jeden konec připojený k pinu SCL nebo SDA a druhý konec k Vcc.
V mém případě byly na desce tři odpory 4K7 (472 v SMD kódu). Pouze dva z nich splnili výše uvedené požadavky a poukázali na to, že jde o shyby, které jsme hledali!
Pro zvláštní opatrnost (pokud z nějakého důvodu nebyly 4K7) jsem také testoval ostatní rezistory a potvrdil jsem, že žádný z nich nesplňuje požadavky na to, že jsou přítahy.
Odstranit
Nyní je stačí pouze odpájet! Je to jednodušší, pokud máte na pomoc pájecí pumpu nebo pájecí knot a pinzetu.
Krok 4: Porovnání řešení
Obousměrný převodník logické úrovně (LLC)
Profesionálové:
Nevyžaduje žádné pájecí zařízení ani schopnosti
Nevýhody:
Inzerujte více kabelů a LLC do seznamu součástí seznamu
Lepší spojení s dalšími součástmi
Mírně dražší
Odpojte výsuvné rezistory LCD
Profesionálové:
Konečný výsledek čističe
Pravděpodobně to můžete udělat hned, aniž byste museli čekat na LLC
Zvláště dobré, pokud chcete omezit rozmanitost komponent a složitost montáže ve složitém projektu nebo které chcete replikovat
Nevýhody:
Změní obvod LCD (Pokud chcete, aby byl „připraven k použití“s Uno, který již má vytažení 4K7, můžete změny vrátit zpět jejich přeformátováním)
Krok 5: Závěrečné úvahy
Doufám, že tento návod osvětlí tento problém s kompatibilitou a některá z jeho možných řešení.
Pokud máte nějaké nápady na vylepšení, lepší vysvětlení, nová řešení nebo jste v příspěvku našli nějakou chybu, sdělte mi to prosím v komentářích!:)