Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Dit bericht is bedoeld om een eenvoudigere manier uit te leggen om de Arduino Due (of een ander 3.3V-bord) te gebruiken met het populaire LCD 16x2-scherm met de I2C-adaptermodule.
Het eerste probleem is dat het LCD-scherm 5V nodig heeft om de achtergrondverlichting goed te laten werken, maar de SCL- en SDA-pinnen zouden op 3,3 V moeten werken om met de Arduino Due te communiceren zonder schade aan te richten. Om dit op te lossen heb ik twee opties gevonden:
De meest genoemde oplossing is om een Bi-Directional Logic Level Converter te gebruiken, die het probleem inderdaad oplost. Maar het voegt ook een ander onderdeel toe aan uw lijst en extra bedradingsverbindingen op uw circuit
De andere manier die ik heb gevonden, is om eenvoudig 2 pullup-weerstanden in de "I2C-adapterrugzak" van het LCD-scherm te desolderen. Behalve dat het veel gemakkelijker is, heeft het nog andere voordelen die in de vergelijking aan het einde worden uitgelegd. Deze methode staat centraal in dit bericht
Benodigdheden
Arduino Due
LCD 16x2 Display met de I2C-adaptermodule
Soldeerbout
Soldeerpomp of soldeerlont
Pincet
Stap 1: Oorsprong van de oplossing
De oplossing is niet door mij uitgevonden, ik zag een redelijk goede suggestie en uitleg op het Arduino-forum in de onderstaande link, die ik in dit bericht zal reproduceren.
forum.arduino.cc/index.php?topic=553725.0
Antwoord van: david_prentice
Ik kon geen volledige tutorial op internet vinden en aangezien het een veel voorkomend probleem is, probeer ik de oplossing hier in detail te presenteren, te zien dat het echt werkt en informatie toe te voegen die enige scepsis over de resultaten zou kunnen verminderen.
Stap 2: Uitleg
Apparaten
Om de I2C-communicatie te laten werken, zijn pullup-weerstanden nodig die zijn aangesloten op de SDA- en SCL-pinnen. Dat komt omdat de apparaten deze pinnen alleen LAAG draaien tijdens het communiceren. Om een HIGH te vertegenwoordigen, hoeft het alleen geen LOW te sturen, en dankzij de pullups gaat het naar HIGH. (dit begrip zal later behoorlijk belangrijk zijn)
De LCD "I2C-rugzak" heeft twee 4K7 pull-up weerstanden die voldoen aan de I2C-vereiste. Maar aangezien ze verbonden zijn met Vcc, zullen ze, als je 5 V gebruikt, SDA en SCL naar 5 V trekken.
Als je naar de datasheet kijkt, kun je zien dat de Due, in tegenstelling tot andere boards, al ingebouwde 1K5 pull-up-weerstanden heeft op de belangrijkste SDA-, SCL-pinnen, die ze naar 3,3 V trekken.
Testen
- LCD-scherm -> Arduino
- Gnd -> Gnd
- Vcc -> 5V
- SDA -> SDA
- SCL -> SCL
Als u gewoon het LCD-scherm op de Due aansluit (volgens de bovenstaande bedrading), zullen de 1k5 (of 1k0) Due-pullups aangesloten op 3,3 V en de 4K7 LCD-pullups aangesloten op de 5 V resulteren in inactieve I2C-lijnen op 3,7 V (3,6 V met 1k0). Dat is niet goed, aangezien de Due-datasheet een maximale spanning van 3,6 V voorschrijft voor zijn I/O-lijnen.
Door dit scenario te testen, met alleen het LCD-scherm, kreeg ik 3, 56 V. Door een EEPROM-module toe te voegen aan dezelfde SDA en SCL, ging deze omhoog naar 3,606 V. In beide gevallen werkte alles normaal, maar dat zijn verre van ideale spanning niveaus rekening houdend met het voorgeschreven maximum van 3,6 V.
Dus ja, er is een kans dat het net zo zal werken als de mijne, zonder enige wijziging aan te brengen. Maar het spanningsniveau is nog verre van ideaal en enige discrepantie in de Due of LCD pullup kan ertoe leiden dat deze boven de 3,6 V-limiet komt. (Het zou raadzaam zijn om eerst zorgvuldig te testen met een 20K of 100K potentiometer wat de laagste weerstand is tussen 5 V en SCL/SDA-pinnen voordat ze 3,6 V bereiken, hoewel de rest van de oplossing veel veiliger en waarschijnlijk gemakkelijker is)
Oplossing
De gepresenteerde oplossing is om eenvoudig de pull-up-weerstanden van de LCD-rugzak te verwijderen, die proberen de lijn tot 5 V te trekken. Dan blijven alleen de Due onboard pull-up-weerstanden over, die de SCL- en SDA-lijnen naar 3,3 V trekken.. Het werkte perfect en hield de stationaire pinnen op ongeveer 3.262 V!
De aansluitingen blijven hetzelfde:
- LCD-scherm -> Arduino
- Gnd -> Gnd
- Vcc -> 5V
- SDA -> SDA
- SCL -> SCL
Als je je afvraagt of het LCD-scherm de lijn niet naar 5 V trekt om een HOOG te vertegenwoordigen tijdens het communiceren, onthoud dan dat op I2C de apparaten alleen de lijnen LAAG trekken, zijnde het HOOG-signaal dat wordt weergegeven als het niet interfereert, wat de 3,3 V is van de pull-ups aan boord van de Due.
Ook is de 3,3 V voldoende om de I2C-rugzak als een HOOG signaal te beschouwen.
Stap 3: Identificeer en verwijder de weerstanden
De afbeelding hierboven toont in rood de pullup-weerstanden die ik in mijn module heb gevonden.
Identificeren
Omdat de LCD I2C-adapterrugzak kan variëren, zijn de weerstanden mogelijk niet in dezelfde configuratie. Om de pullup-weerstanden te identificeren, kunt u een multimeter met een continuïteitstest gebruiken. Elke pull-up-weerstand moet een uiteinde hebben aangesloten op de SCL- of SDA-pin en het andere uiteinde op Vcc.
In mijn geval waren er drie van de 4K7 (472 in SMD-code) weerstanden op het bord. Slechts twee van hen voldeden aan de bovenstaande vereisten, wat erop wijst dat dit de pullups zijn waarnaar we op zoek waren!
Voor extra voorzorg (als ze om de een of andere reden geen 4K7 waren), heb ik ook de andere weerstanden getest en bevestigde dat geen van hen voldeed aan de vereisten om pull-ups te zijn.
Verwijderen
Nu hoef je ze alleen nog maar te desolderen! Het is gemakkelijker als je een soldeerpomp of soldeerlont en een pincet hebt om te helpen.
Stap 4: Vergelijking tussen oplossingen
Bidirectionele logische niveau-omzetter (LLC)
Voordelen:
Vereist geen soldeerapparatuur of vermogen
nadelen:
Voegt meer kabels en de LLC toe aan je lijst met componenten
Slordigere verbindingen met de extra componenten
Iets duurder
Desolder de LCD pull-up weerstanden
Voordelen:
Schoner eindresultaat
U kunt het waarschijnlijk meteen doen, zonder te hoeven wachten op de LLC
Vooral goed als u de verscheidenheid aan componenten en de assemblagecomplexiteit in een complex project wilt verminderen of dat u wilt repliceren
nadelen:
Verandert het LCD-circuit (als u het "klaar voor gebruik" wilt hebben met de Uno, die al de 4K7-pullups heeft, kunt u de wijzigingen ongedaan maken door ze opnieuw te solderen)
Stap 5: Laatste overwegingen
Ik hoop dat deze tutorial enig licht werpt op dit compatibiliteitsprobleem en enkele van de mogelijke oplossingen.
Als je verbeterideeën, betere uitleg, nieuwe oplossingen of een fout in het bericht hebt gevonden, laat het me dan weten in de reacties!:)