Innehållsförteckning:
- Tillbehör
- Steg 1: Lösningens ursprung
- Steg 2: Förklaring
- Steg 3: Identifiera och ta bort resistorerna
- Steg 4: Jämförelse mellan lösningar
- Steg 5: Slutliga överväganden
Video: 5V LCD -skärm med Arduino Due 3.3V I2C: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:37
Det här inlägget syftar till att förklara ett enklare sätt att använda Arduino Due (eller annat 3.3V -kort) med den populära LCD 16x2 -skärmen med I2C -adaptermodulen.
Det första problemet är att LCD -skärmen behöver 5V för att bakgrundsbelysningen ska fungera korrekt, men SCL- och SDA -stiften bör fungera vid 3.3V för att kommunicera med Arduino Due utan att orsaka skada. För att lösa detta har jag hittat två alternativ:
Den mest nämnda lösningen är att använda en dubbelriktad logisk nivåomvandlare, som verkligen löser problemet. Men det lägger också till en annan komponent i din lista och ytterligare kabeldragningar på din krets
Det andra sättet jag har hittat är att helt enkelt avlösa 2 pullup -motstånd i "I2C -adapterryggsäcken" från LCD -skärmen. Förutom att det är mycket lättare har det andra fördelar som förklaras i jämförelsen i slutet. Denna metod är huvudfokus för detta inlägg
Tillbehör
Arduino Due
LCD 16x2 Display med I2C -adaptermodul
Lödkolv
Lödpump eller lödveke
Pincett
Steg 1: Lösningens ursprung
Lösningen uppfanns inte av mig, jag såg ett ganska bra förslag och förklaring på Arduino Forum i länken nedan, som jag kommer att återge i detta inlägg.
forum.arduino.cc/index.php?topic=553725.0
Svar från: david_prentice
Jag kunde inte hitta någon fullständig handledning på internet och eftersom det är ett mycket vanligt problem försöker jag presentera lösningen här i detalj, bevittna att det faktiskt fungerar och lägga till information som kan mildra viss skepsis om dess resultat.
Steg 2: Förklaring
Enheter
För att I2C -kommunikationen ska fungera krävs pullup -motstånd anslutna till SDA- och SCL -stiften. Det beror på att enheterna bara vrider dessa stift LÅGT medan de kommunicerar. För att representera en HIGH måste den bara inte skicka en LOW, och tack vare pulsen går den till HIGH. (denna förståelse kommer att vara ganska viktig senare)
LCD "I2C-ryggsäcken" har två 4K7-dragmotstånd som uppfyller I2C-kravet. Men eftersom de är anslutna till Vcc, om du använder 5 V, kommer de att dra SDA och SCL till 5 V.
Om du tittar på databladet kan du se att Due, till skillnad från andra kort, redan har inbyggda 1K5-dragmotstånd på sina huvudsakliga SDA, SCL-stift, som drar dem till 3,3 V.
Tester
- Display LCD -> Arduino
- Gnd -> Gnd
- Vcc -> 5V
- SDA -> SDA
- SCL -> SCL
Om du bara ansluter LCD -skärmen på Due (enligt ledningarna ovan) kommer 1k5 (eller 1k0) Due pullups anslutna till 3,3V och 4K7 LCD pullups anslutna till 5 V resultera i lediga I2C -linjer vid 3,7 V (3,6 V med 1k0). Det är inte bra, eftersom Due -databladet anger en maximal spänning på 3,6 V för sina I/O -ledningar.
Genom att testa detta scenario, med bara LCD -skärmen, fick jag 3, 56 V. Genom att lägga till en EEPROM -modul till samma SDA och SCL gick det upp till 3.606 V. I båda fallen fungerade allt normalt, men de är långt ifrån idealspänning nivåer med tanke på det 3,6 V angivna maxvärdet.
Så ja, det finns en chans att det kommer att fungera precis som mitt utan att göra några ändringar. Men spänningsnivån är fortfarande långt ifrån idealisk och en viss avvikelse på Due eller LCD -pullup kan göra att den går över 3,6 V -gränsen. (Det vore lämpligt att åtminstone testa noggrant med en 20K eller 100K potentiometer noggrant vad som är det lägsta motståndet mellan 5 V och SCL/SDA -stift innan de når 3,6 V, även om resten av lösningen är mycket säkrare och förmodligen lättare)
Lösning
Lösningen som presenteras är att helt enkelt ta bort pull-up-motstånden från LCD-ryggsäcken, som försöker dra linan upp till 5 V. Sedan återstår bara Due-ombord-pull-up-motstånden, vilket drar SCL- och SDA-linjerna till 3,3V. Det fungerade perfekt och höll tomgångsstiften på cirka 3,262 V!
Anslutningarna förblir desamma:
- LCD -skärm -> Arduino
- Gnd -> Gnd
- Vcc -> 5V
- SDA -> SDA
- SCL -> SCL
Om du undrar om LCD -skärmen inte drar linan till 5 V för att representera en HIGH när du kommunicerar, kom ihåg att på I2C drar enheterna bara linjerna LOW, vilket är HIGH -signalen som representeras när den inte stör, vilket kommer att vara 3,3 V från Due är inbyggda pull-ups.
3,3 V är också tillräckligt för I2C -ryggsäcken att betrakta som en HÖG signal.
Steg 3: Identifiera och ta bort resistorerna
Bilden ovan visar rött pullup -motstånden jag har hittat i min modul.
Identifiera
Eftersom ryggsäcken för LCD I2C -adaptern kan variera kan det hända att motstånden inte är i samma konfiguration. För att identifiera pullup -motstånden kan du använda en multimeter med ett kontinuitetstest. Varje uppdragningsmotstånd bör ha ena änden ansluten till SCL- eller SDA-stiftet och den andra änden till Vcc.
I mitt fall fanns tre av motstånden på 4K7 (472 i SMD -kod) på kortet. Endast två av dem uppfyllde kraven ovan och påpekade att dessa är de pullups vi letade efter!
För extra försiktighet (om de av någon anledning inte var 4K7) testade jag också de andra motstånden och bekräftade att ingen av dem uppfyllde kraven för att vara pull-ups.
Avlägsna
Allt du behöver göra är att avlöda dem! Det är lättare om du har en lödpump eller lödpinne och pincett som hjälp.
Steg 4: Jämförelse mellan lösningar
Bi-directional Logic Level Converter (LLC)
Fördelar:
Kräver ingen lödutrustning eller förmåga
Nackdelar:
Annonsera fler kablar och LLC till din listkomponentlista
Messigare anslutningar med de extra komponenterna
Lite dyrare
Avlödda LCD-pull-up-motstånden
Fördelar:
Renare slutresultat
Du kan förmodligen göra det direkt, utan att behöva vänta på LLC
Speciellt bra om du vill minska mångfalden av komponenter och monteringskomplexitet i ett komplext projekt eller som du vill replikera
Nackdelar:
Ändrar LCD -kretsen (Om du vill ha den "klar att använda" med Uno, som redan har 4K7 -pullups, kan du ångra ändringarna som löser dem)
Steg 5: Slutliga överväganden
Jag hoppas att denna handledning belyser detta kompatibilitetsproblem och några av dess möjliga lösningar.
Om du har några förbättringsidéer, bättre förklaringar, nya lösningar eller har hittat något fel i inlägget, berätta det i kommentarerna!:)
Rekommenderad:
Arduino I2C 16*2 LCD -skärmanslutning med utsource: 10 steg
Arduino I2C 16*2 LCD-skärmanslutning med utsource: I²C (Inter-Integrated Circuit), uttalad I-squared-C, är en multi-master, multi-slave, paketomkopplad, single-ended, seriell datorbuss som uppfanns av Philips Semiconductor (nu NXP Semiconductors)
HX1 -DM - Upcycled Arduino DUE Powered DIY Drum Machine (made with a Dead Maschine MK2): 4 steg
HX1 -DM - Upcycled Arduino DUE Powered DIY Drum Machine (made with a Dead Maschine MK2): Spec. Hybrid Midi controller / trumma: Arduino DUE driven! 16 hastighetsavkännande kuddar med mycket låg latens 1 > ms 8 knoppar användare som kan tilldelas alla Midi #CC-kommandon 16ch Inbyggd sequencer (ingen dator behövs !!) MIDI in/ut/genom funktioner
3 -fas sinusgenerator baserad på Arduino Due: 5 steg
3-fas sinusvågsgenerator baserad på Arduino Due: syftet med denna aktie är att hjälpa någon som försöker utnyttja Due större prestanda + brist på referens + icke-användbart datablad. Detta projekt kan generera upp till trefas sinusvåg @ 256 prover / cykel vid låg frekvens (< 1 kHz) och 16 s
Character LCD I2c Adapter (I2c Connection Exempel): 12 steg (med bilder)
Character LCD I2c Adapter (I2c Connection Exempel): Jag gör ett anslutningsschema för en teckenvisning i2c -adapter. Kontrollera uppdateringarna på min webbplats. Nu lägger jag till olso ett kopplingsschema för att använda originalbiblioteket inte mitt forked.LiquidCrystal Arduino -bibliotek för karaktärens LCD -skärmar, gaffelprojekt
Lägga till en 24LC256 EEPROM till Arduino Due: 3 steg
Lägga till en 24LC256 EEPROM till Arduino Due: Arduino due saknar en eeprom. Denna instruerbara lägger till en och låter dig lagra värden i icke -flyktigt minne som överlever en arduino -firmwareuppdatering