- Megérkezett a Google Pixel 7 és 7 Pro
- Hivatalosan is bemutatta a Google a Pixel 6a-t
- Samsung Galaxy Watch6 Classic - tekerd!
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Samsung Galaxy Watch7 - kötelező kör
- Iskolakezdésre készül a második elit Snapdragon
- Profi stratégiára vált a Galaxy S26
- Samsung Galaxy S25 - végre van kicsi!
- Újabb magyar banknál elérhető a Xiaomi Pay
- Xiaomi 13 - felnőni nehéz
Hirdetés
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!
-
Mobilarena
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
Sziasztok,
adott egy ILI9341 2,8-as kijelző, ESP32_S3, 3.3v tápfeszültséggel, opto-reléket vezérelve többek között. 20cm-es kábellel minden ok, de ha a végleges 50cm-esre váltok (23AWG, CAT6 utp kábel, 0,5mm réz, szálanként duplán használva) időnként meghal (fehér lesz minden). Mi tudok tenni, hogy ne halljon meg? Felhúzó ellenállás (mekkora, melyik lábakra?)?
-
ekkold
Topikgazda
1, Több nyomógomb kezelése esetén is probléma mentes a GND -re húzás. Viszont az egyes áramkörök VDD feszültsége (logkai H szintje) lehet különböző (1,8V - 3,3V - 5V - 12V), ami hibás csatlakoztatás, ill. a gombok elcserélése esetén komoly problémát okozhat, ha a gombok H szintre kapcsolnának. Viszont a GND az mindig 0V...
2, A mikrokontrollerek bemenetén többnyire van szoftveresen bekapcsolható felhúzó ellenállás, így esetleg megspórolható egy külső alkatrész. Lehúzó ellenállás viszont nem minden mikrovezérlőben van, így ha a gombok H szintre kapcsolnak, ahhoz a legtöbb esetben kell külső ellenállás is. (de pl. STM procikban van választható felhúzó vagy lehúzó ellenállás is)
-
válasz
JulianSinulf #22919 üzenetére
De ott van a sütőelektronika, ahol a reléket ugyanígy kapcsolják. A 9V vagy épp 24 V a relé egyik lábán, majd egy illesztő IC segítségével a uC kapcsolja a földet a másikra
Na ezt pont tudom miért van. Ez a low side switch, [link]
A mikrokontroller általában 3-5V-ot képes kapcsolni, high side esetében viszont a fet teljes nyitásához a gate-et táp feszültségre kéne kapcsolni (9-24V) ami csak egy másik fet segítségével lenne lehetséges.Azt hiszem high side vezérlést csak az autókban használnak, valamiért ott az a biztonságos. /Fixme
szerk.:
Megkérdeztem a ChatGPT-t erről a témáról, ezt írta:A nyomógombbal történő vezérlésnél az egyik legelterjedtebb megoldás az, hogy a bemenetet egy felhúzó (pull-up) ellenállással a magas jelszintre húzzák, és a gomb megnyomásával a bemenetet a földre kapcsolják. Ennek a megoldásnak több gyakorlati oka van:
Zajkezelés és stabilitás: A földre húzás (pull-down) kevésbé hatékony a zajokkal szemben, mert a digitális bemenetek érzékenyebbek a zavarokra magas jelszint esetén. A földre húzott bemenet jobban ki van téve a zajoknak és elektromos zavaroknak, amelyek véletlenül "magas" állapotba hozhatják. Egy felhúzott bemenet viszont stabilan magas jelszinten marad, és a földre kapcsolás kevésbé hajlamos véletlen átváltásra, mivel a logikai "0" (föld) egy határozottan alacsony feszültségszintet jelent.
Bemeneti ellenállás és áramfelvétel: A CMOS és TTL áramkörök bemeneti áramfelvétele jellemzően alacsonyabb, amikor a bemenet földre van kapcsolva. Ha a bemenetet a tápfeszültségre zárnánk (pull-down ellenállás), akkor nagyobb áram folyhatna át a bemeneten a táp és a föld között, ami növelné az áramfelvételt.
Egyszerűbb felépítés: Számos digitális eszközbe beépített felhúzó (pull-up) ellenállás található, ami megkönnyíti a tervezést, mivel nem kell külső ellenállásokat alkalmazni. Ezek az ellenállások már elő vannak készítve a bemenet stabil magas szinten tartására.
Mechanikai stabilitás: A kapcsolók, nyomógombok és egyéb mechanikai eszközök gyakran bizonytalanok a zárás pillanatában, és visszapattanás (bounce) léphet fel. A földre kapcsolás esetén ez kevésbé okoz hibás jelzéseket, mert a bemenet egyszerűen nullára kapcsol, és a digitális rendszer könnyebben kezelheti a visszapattanás okozta zajokat.
Összességében tehát a földre kapcsolásos megoldás azért terjedt el, mert zaj- és mechanikai szempontból stabilabb, egyszerűbb és kevesebb áramot fogyaszt, különösen a CMOS technológiájú áramkörök esetében.
-
-
válasz
kemcso #22784 üzenetére
vmi exception-kezelés létezik?
Létezik, de azt nem tudom, hogy hardveres i2c esetében is lehet-e az exceptiont kezelni.
Ha opto-s relé modul, akkor valószínűleg a diódát se spórolták le róla.
Típust nem tudok mondani, egy 10μF/16V elektrolit kondi szerintem megteszi (a dióda 1N581x), de lehet tényleg csak az i2c lesz ott a gond. Az i2c vonalon mekkora felhúzó ellenállást használsz/van a szenzor modulon? 4,7kΩ a szabvány, esetleg lehetne próbálkozni kicsit alacsonyabb értékkel.
-
JozsBiker
aktív tag
Oopsz, valóban nincs felhúzó ellenállás. Vagyis lehúzó, mert magas az aktív szintje. De a SETUP 5. sorában lehúzatom LOW -ba, tehát túl sokat nem tud lebegni. De köszi az észrevételt.
Statikus behatás érhette végülis. Eddig még nem tapasztaltam hogy az Arduino -k érzékenyek lennének rá, de ettől nyilván nincs kizárva, igazából ez eddig a legvalószínűbb sajnos.
-
#78522999
törölt tag
-
JulianSinulf
őstag
válasz
#78522999 #22107 üzenetére
Szerintem a két 5V ugyanannak a stab-nak a lábára van kötve. Mivel mind a kettő 5V, elvileg nem szabad gondnak lennie.
Biztos, ami biztos, tápold csak az USB-ről, a gépről csak a GND legyen rákötve, akkor biztos, hogy nem lesz gond. Így egyszerűbb, mert nem kell USB kábelt babrálnod.A multival a felhúzó ellenállásokat lehetne megkeresni (4,7k-10k körüli érték), mert a túloldalukon már ki tudod vele mérni, hogy mire vannak felhúzva. Ha meg nincsenek, akkor azt is lehet csinálni, mint amit Aryes írt.
@Aryes: Ha a CPU kártyán vannak felhúzó ellenállások (5V-ra), akkor azokat először le kellene forrasztani, hogy 3,3V-ra fel tudja húzni. Vagy tévedek?
-
JulianSinulf
őstag
válasz
#78522999 #22103 üzenetére
A CPU kártyáról nem találtam kapcsolási rajzot. Az általad linkelt oldalon ajánlják az általad is linkelt I2C vezérlő kártyát.
Azt írja, hogy az I2C kártya egyik ilyen csatijának a jelét rá kell kötni a BFG9060 JP2 csatlakozására.
Mivel az I2C kártyán 5V-ra vannak felhúzva az I2C jelek, így feltételezem, hogy a BFG9060-ason is 5V-on lesznek jelek.Esetleg megpróbálhatod kimérni, hogy mi van az SDA-SCL vonalon. Vagy megkeresheted a felhúzó ellenállásokat (ha vannak) és ott kimérni.
Szerk.:
"Monitorozni egy LTC2990-el lehetne elméletileg a cpu vcore/temp értéket."
Akkor ez rajta van? Én azt hittem, hogy ezt akarod rákötni.
Ezért veszett el a fonal.Szerk2.: Látom. Elvileg közvetlen a JP2 csati mellett.
-
-
Ton-ton
tag
válasz
Gergosz2 #20749 üzenetére
Egy közönséges termosztátot dugdostam össze (10k ntc, 10k felhúzó ellenállás)
Fél celsius kilengése volt.
Ez mondjuk alapból még elfogadható lett volna az adott alkalmazáshoz -ventillátorvezérlés-, azonban a továbbiakhoz már semmiképp nem lett volna jó.Amit szerettem volna, azt most megcsináltam egy Arduino nano-val.
(Még nincs teljesen készen, de ameddig lehet eljutottam vele, a feszültségosztó is egész stabil) -
Tomika86
senior tag
Sziasztok!
Készítettem egy panelt, amin egy ATMEGA88PA foglal helyet. Kivezettem az ISP csatlakozóit tüskesorra(5V, GND, SCK, MISO,MOSI, RESET), van külső kvarc 16Mhz-es, illetve reset felhúzó ellenállás is. Az IC használt, nem tudom miből való!
Összekötöttem egy Arduino UNO-val, 10,11,12,13 pineken illetve a tápot.
(Arduino-ra feltettem az ISP példaprogit)
Átállítottam az ATMEG88-ra, beállítottam hogy legyen Bootloader, megnyitva a feltöltendő kód. Programfeltöltés programozóval, de nem tudja feltenni rá.
Hiba alulTudom bárhogyan ellenőrizni, hogy egyáltalán életképes-e az ATMEGA88?
Hibaüzenet:
avrdude error: Yikes! Invalid device signature.
avrdude error: expected signature for ATmega88P is 1E 93 0F
Double check connections and try again, or use -F to override
this check.
a kiválasztott soros port
nem létezik vagy az alaplap nincs csatlakoztatvaKöszönöm!
-
válasz
lanszelot #20287 üzenetére
A kolléga nagyon szépen leírta helyettem a problémát és a megoldást is
A 3 és 4 lábat csak abban az esetben használhatod, ha nem tervezel semmilyen usb jellegű felhasználást (pl keyboard emuláció stb) és azok a lábak csak akkor fognak rendesen működni, ha a cucc nem adatportba van dugva, mivel a számítógép folyamatosan kommunikál azokon. Ezen kívül a 3as porton van egy 1,5k felhúzó ellenállás, amit nem tudsz kikapcsolni, ez általában nem zavar, mert amúgyis szokás felhúzni olvasáskor, de engem már tréfált meg, hogy nem vettem figyelembe:
Azért írtam, hogy használd csak az első 3 lábat (0-2):
- a 0-ra kösd a két LED-et,
- a 2 legyen a CLK, mert arra van külső interrupt,
- a DT meg legyen az 1. -
lanszelot
addikt
Ennél miért rak mindent static-ba?
Értem mi a static, csak azt nem itt miért használja.
17, 36, 38 sorokMásik kérdés: 4-es sor
Azt írja, hogy kell egy felhúzó ellenállás. De a bekötési rajzán az nam szerepel.
Hova kellhet az az ellenállás?
Én a pozitív és az érzékelő pozitív lába közé tenném. /de egyáltalán nem vagyok biztos benne/ -
ekkold
Topikgazda
Pergésmentesítésre sokféle megoldás van.
- Hardveres megoldás: külső felhúzó ellenállás a gombon, majd RC szűrő
- Megszakításból: állapotváltásra le kell tiltani a további megszakítást kb. 1...2msec-re, amíg a prellezés lezajlik.
- 0.1...1ms-os timer megszakításból: azt kell figyelni, hogy a gomb állapota néhány megszakításon át változatlan-e, ha igen akkor van vége a prellezésnek, és felhasználható az új állapot.
- loop()-ban: az állapotváltás időpontját menteni kell (millis() vagy micros() függvény), ha az utolsó változás óta eltelt több mint 1...2msec, akkor már nem prelleg, felhasználható az aktuális állapot.Én a legutóbbit haszánlom leggyakrabban, mert ehhez nem kell megszakítás, és ha a loop() nem katasztrofálisan lassú akkor stabil és jó megoldás. (még enkóder is kezelhető így, gyakorlatilag hibamentesen). Arra pedig mindíg érdemes törekedni, hogy a loop a lehető leggyorsabb legyen, (azaz pl. amennyire csak lehet kerüljük a delay()-t, és az egyéb lassú függvényeket).
-
válasz
lanszelot #20064 üzenetére
Az ellenállás nélkül, de úgy raktam be
Tehát nem úgy.
Tudom, hogy sok információ, de:
1. A prellmentesítést/debouncing-ot nem hardveresen szokás megoldani, mivel szoftverből jól kezelhető a probléma.
2. Ha mégis hardverből szeretnéd, akkor az ellenállás és a kondenzátor értéke együtt fogja neked kiadni a debounce idejét. A beépített ellenállás 30kΩ-50kΩ közti random érték, amivel nem igazán lehet számolni
3. Ha szoftverből csinálod, nem kell külső felhúzó ellenállás, a beépített pont elég, hogy a lebegést megszüntesse, hiszen erre kell az ellenállás.
4. Felejtsd el a kalkulátort, csináld szoftverből, hiszen ez a bevett, kipróbált módszer.
5. A 80ms debounce és a 270ms mérési késleltetés egymástól teljesen független. Ha a fenti kódot beteszed a programba, észre fogod venni, hogy egyik nem befolyásolja a másikat. A működése egyébként az, hogy amikor prellez a gomb érintkezője, az utolsó alacsony szint után vár 80ms-ot, és csak utána reagál. Ha 80ms előtt új impulzus érkezik, akkor nem reagál rá.szerk.: Most jöttem rá, hogy rossz a kód, ez interrupt esetén nem fog működni... Ez lesz a jó:
void gombotnyom(){
if (millis() - debounce > 80){ /* eltelt 80 msec ? */
gombNyomas ++; /* növeljük 1-el a gombnyomások számát */
if (gombNyomas >3) gombNyomas = 1;
debounce = millis();
}
} -
válasz
lanszelot #20029 üzenetére
Hogy kell egy function-t elindítani, de nem a loop-ban? Mert csak indulásnál kell lefusson.
A setup()-ba tedd be.
ugyanez a bekötés működik digispak -al, ott a videó a #19986 -ban
Ezért gondolom, hogy a program lesz a gond.Értsd meg, hogy a Digispark lapon van egy csomó kiegészítő elektronika néhány lábon (1,3,4). Tehát nem ugyanez a bekötés.
Írták az INPUT helyett az INPUT_PULLUP beépített felhúzó ellenállás használatát, valamint a gomb állapota beolvasásánál ne a HIGH legyen a gombnyomás, hanem a LOW (a gomb a +5V helyett a GND-re zárja a pin-t), és nem kell kiegészítő ellenállás (a prell-t ez nem szünteti meg), ezt már megfogadtad?
-
válasz
lanszelot #20016 üzenetére
A programmal lesz gond, nem a kapcsolóval, ez tuti.
A gond az, hogy nemigen fogadod meg, amit az itteniek sok év tapasztalattal állítanak.
Valamint olyan dolgokra kérdezel rá, amit egyébként 2 perc guglizással egyedül is ki tudnál deríteni (pl felhúzó ellenállás, prell). (Az angol nyelvű leírások, fórumok tudtommal nem jelentenek akadályt) -
válasz
lanszelot #19986 üzenetére
File -> preferences -> URL -hez lehetséges vlahogy több linket becsatolni?
A pirossal bekarikázott gombra nyomva új sorként tudsz betenni új linket, vagy a szövegmezőbe ;-vel elválasztva, de előbbi átláthatóbb.A hozzászólás második részét próbálom értelmezni, de nem nagyon megy.
A gomb felső részére egy piros vezeték van kötve, aminek nem látom, hogy hová vezet a másik vége, vagyis nem tudom, hogy a gombbal mit kötsz mire.Írtam, hogy a PB3, PB4 lábak kettős funkciót töltenek be, egyrészt tudod őket vezérelni, másrészt az USB csatlakozó D+, D- lábaival vannak összekötve. Ezért gyárilag van egy 1k felhúzó (ha jól emlékszem?) ellenállás és egy Zener dióda a GND irányába, mindkét lábon. Ez azt jelenti, hogy 3,3V feszültség van rajtuk akkor is, ha amúgy nem kéne neki. Ez okozhat nem várt viselkedést, például ha LED-et kötsz rá, az mindkét irányban világítani fog. Szerintem ebben rejlik a válasz a kérdésedre. Hogy az onboard LED miért alszik ki? Szerintem rövidzárlatot csináltál a gombbal.
-
válasz
lanszelot #19923 üzenetére
Na, az derék. Azon igazából csak 3 lábat fogsz tudni használni saját célra, ha az USB-t is használni szeretnéd, mert összesen 5 GPIO van, amiből 2-t az USB foglal. Ha nem, akkor tudj róla, hogy azon a két lábon (asszen 4+5) van 1-1 zener dióda, és 1-1 felhúzó ellenállás, ami nem minden esetben, de néha tud váratlan dolgokat művelni.
-
válasz
#68216320 #19199 üzenetére
Így van.
A nyákon lehet látni, hogy az sda/scl sávja mindig egy ellenálláshoz fut először. Az ellenállás másik vége meg a tápra (5V/3,3V).
A belső felhúzó 10k-30k közti érték, éppen meg lehet próbálni, ha csak 1-2 cm lesz a vezérlő és a szenzor közt, de nem tudom, hogy a wire library nem kapcsolja-e le mikor elkezd forgalmazni. Sebességproblémák is lehetnek miatta.
-
válasz
ViZion #19195 üzenetére
Pull-up azért kell, hogy a digitális 0-1 ne legyen "bizonytalan"
Általában igen, I2C-nél viszont azért kell a felhúzó ellenállás, mert a vonalak mindkét vége open collector-os, a master és a slave is, felhúzó ellenállás nélkül nem működik a busz mert mindig alacsony szinten lenne.
És azért 4,7k, mert az I2C szabványban ez az érték szerepel hivatalosan.Ettől magasabb érték sebesség problémát okoz, alacsonyabb pedig túlzott energiafogyasztást/melegedést/nagy vörös lángoszlopokat.
-
ViZion
félisten
válasz
Wolfram #19189 üzenetére
Vázlatosan a lényeg: az ellenállásoknak van egy névleges értéke (ez itt a 4,7 kiloohm) és van egy tűrése ennek az értéknek, mittomén +-5%. Ezek az alap típusok. Minél pontosabb az ellenállás értéke, az ára annál magasabb. Pull-up azért kell, hogy a digitális 0-1 ne legyen "bizonytalan", az alap esetben magas GPIO mindenképp a magas tartományba essen. Nem tudom a pontos értékeket hirtelen, de mittomén 1,7 V felett high, alatta alacsony. Ezt állítja be az ellenállás, így mindegy, h 1,8V vagy 2 V lesz a pull-up-al az értéke, az már High. A belső felhúzó ellenállások még nagyobbak, 10 k-sok, de én is külső 10k ellenállásokat pakoltam a legtöbb helyre.
-
And
veterán
("Több eszköz esetén azért nem jelent problémát, mert tudtommal eszközönként kellene egy-egy 4,7k ellenállás (/fixme)."
Nem így van, egyébként magad is leírtad, hogy miért. A komplett busz két vezetékére kell összesen egy-egy felhúzó. Ha minden slave-hez tennénk, azok párhuzamosan kapcsolódnának, és mivel egy időpillanatban csak egy eszköz lehet aktív - hiszen a busz közös, egyszerre csak egyvalaki 'beszélhet' rá az adatvonalra -, annak a buszmeghajtó tranzisztora károsodhatna. Bár utóbbi elég extrém eset, csak rengeteg slave és eleve alacsony egyenkénti felhúzó mellett volna realitása, egyébként is feleslegesen nagyra adódna a felhúzóáram. Az is igaz, hogy az I2C a gyakorlatban viszonylag igénytelen, nem kíván pontos értékű felhúzókat, erre elég széles ellenállástartomány szóba jöhet. De - ahogy arra utaltál - a nagyobb sebességű átvitelhez a uC-k belső portfelhúzója /sokszor 10 kΩ nagyságrend/ általában túl nagy, azokkal a busz jellemzőitől /hossz, vonali kapacitás, slave-ek darabszáma/ függően nem feltétlenül tud kialakulni a megfelelő meredekségű négyszögjel a buszon. Szoftveres I2C-hez, maximum néhányszor 10 kHz-es busz-órajelhez még talán elmegy, de az SSD/SH oled-ek 400 kHz-es buszsebességet tudnak és akad olyan slave is, ami bőven 1 MHz feletti I2C-órajel mellett is képes kommunikálni.) -
válasz
#70211840 #18650 üzenetére
Több eszköz esetén azért nem jelent problémát, mert tudtommal eszközönként kellene egy-egy 4,7k ellenállás (/fixme). Ha véletlenül kettő párhuzamosan lesz kötve, a 2,3k még mindig nem túl alacsony. A túl magas érték okozhat problémát, mégpedig sebességcsökkenést, illetve a túl alacsony okozhat megnövekedett fogyasztást, illetve nyilván bizonyos határ fölött leégnek a portok.
Nem tudom, mi az igazság, én azt gondoltam, hogy csak azokon a kijelzőkön van gyárilag felhúzó, amik shield-ek, tehát egyszerűen összedugva a lappal működnie kell, de lehet, hogy ezen is van, nem tudom, ki kéne mérni.
Az is lehet, hogy az ESP az i²c buszra alapból bekapcsolja a beépített felhúzó ellenállást (ami egyébként magas, 10-30kΩ). -
#70211840
törölt tag
Hát nem tudom... Biztosan kellenek ezek a pull-up ellenállások?
And fórumtárs itt éppen azt említi, hogy nem szükséges, mivel ezek gyárilag rajta vannak a kijelzőn, illetve több eszköz esetén jelenthet problémát is.Gyorsan összedobtam a Wemos D1 Mini-t, direktben rákötöttem a kijelző SDA/SCK lábait a D2/D1 lábakra és 3.3V-ról hajtva azonnal működött.
ESP-01 esetében sem használtam felhúzó ellenállásokat. Kellene? Több darab is így üzemel már egy ideje.
-
#70211840
törölt tag
válasz
Wolfram #18627 üzenetére
Írják is, hogy 10k ellenállás az SDA-3.3V és SCL-3.3V közé.
Nekem ugyan nem Wemos D1 Mini, hanem ESP-01 van (ESP8266EX chip mindkető), de sem felhúzó ellenállás, sem 5V nem kellett.
(Amúgy az ESP-01 + SSD1306 nálam ~80mA-t fogyaszt együtt. Nem tudom ebből mennyi az OLED, de kizártnak tartom, hogy a Wemos D1 3.3V-ja ne bírná el.)Itt sincs felhúzó ellenállás és itt sincs. Szerintem nem kellene hozzá.
-
ekkold
Topikgazda
válasz
#70211840 #18173 üzenetére
>Ez csak STM32 esetében igaz
>vagy jellemző már az összes hasonló eszközre?
A legtöbb hasonló MCU-ra jellemző, csak van amelyik nem minden lábán tudja, és sok olyan van, amiben csak felhúzó ellenállást lehet bekapcsolni, lehúzó ellenállást nem tud.>Tehát elég csak bekötnöm egy gombot egy pin-gnd közé?
>Ennyire egyszerű volna?
Igen.A pergésmentesítés szoftveres, vagy hardveres is lehet. Ha a szoftverben elfér (tehát nincs kicentizve az MCU kapacitása) akkor az a jó megoldás. Ha viszont az MCU tárhelye, ideje, kapacitása korlátait feszegetjük, akkor a hardveres megoldás is szóba jön.
Amikor pedig olyan környezetben működik majd az MCU, ahol sok zavarforrás is van, akkor előfordul, hogy a hardveres és szoftveres megoldás is dolgozik együtt. -
#70211840
törölt tag
"Nincs szükség ellenállásra, a belső felhúzó ellenállás önmagában is elég magas."
Ez csak STM32 esetében igaz vagy jellemző már az összes hasonló eszközre?
Azért kérdem, mert példákat nézve látni ilyen-olyan megoldásokat.
Ezen az oldalon például használnak ellenállást a nyomógombhoz.
Tehát elég csak bekötnöm egy gombot egy pin-gnd közé? Ennyire egyszerű volna?"... lehet készen is kapni ellenállás létrát"
Ez nagyon jó tipp és helytakarékos is. Ki fogom próbálni mindenképpen."... én szoftveres debouncingra gondoltam, ..."
Ezen a lehetőségen átsiklottam. Természetesen ha kényelmesen megoldható, akkor az lesz a megfelelő nekem. Ennek a lehetőségnek még akkor utánna kell olvasnom.
Köszönöm a tippeket, a segítséget.
-- off begin --
Más:
Jelenleg igen komoly szoftveres problémával küzdök a fejlesztőkörnyezettel.
Az első és talán legfontosabb dolog, hogy STM32 használathoz az eddig ArduinoIDE-hez használt STM32 Board Core nem megfelelő. A Roger Clark helyett az STM32duino Core-t kell használnom. Egyszerűen azért, mert több Library-ba is belefutok, amelyek nem fordulnak a másik core-al.
Úgy tűnik az kevésbé van optimalizálva STM32-höz, mint a másik.Példa:
TFT_eSPI Library : [link]1. http://dan.drown.org/stm32duino/package_STM32duino_index.json
Ezzel nem fordul a könyvtár.2. https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
Ezzel minden probléma nélkül.Csak kiragadva egy lényeges momentumot:
STM32-n szépen beállítható az SPI1 és SPI2 sebessége. Ez a könyvtár használja is STM32 esetében ezt. Azonban az első Core SPI moduljából hiányzik a setSpeed lehetőség, míg a másodikban megvan. Az első fix 8MHz-ez használ (gondolom Arduino örökség lehet)
Egy SPI kijelző esetében látványos a különbség.Van viszont egy komoly probléma ezzel a maggal.
1. Windows - ArduinoIDE
Iszonyatosan lassan fordít!!! Ez azt jelenti, hogy egy üres setup()+loop() percekig tart neki.
Egy képernyőre kiírt "hello world" 3-8perc. Minden módosításnál az egészet újrafordítja.
Neten kutakodva más is ezzel küzd.2. Windows - SloeberIDE
Hibába fut, nem fordul semmi. Nem egyedi gondom van ezzel, másnál is ez van. A probléma egyelőre feloldhatatlan.3. Linux - ArduinoIDE
Itt nincs gond. Gyorsan fordít és apróbb kódot is csinál, mint a másik core.4. Linux - SloeberIDE
Nem tudom elindítani. Érthetetlen, hogy miért nem indul, miközben JDK11 mellett más Eclipse alapú cucc simán fut.A probléma viszont az, hogy nekem a Sloeber kellne, mert az ArduinoIDE nagyon hiányos a fejlesztési funkciókkal.
-- off end --
-
válasz
#70211840 #18171 üzenetére
egy belső felhúzó ellenállást HIGH értékre állítja az adott PIN-t. Én a nyomógombbal egy külső ellenálláson GND-re zárom
Nincs szükség ellenállásra, a belső felhúzó ellenállás önmagában is elég magas.
az analóg bemenetet használva nem lehet olyat csinálni, hogy a különböző gombok más-más ellenállás értékkel zárnak és a kapott feszültség értéket kiolvasva meg tudom mondani melyik volt az? Esetleg több gomb lenyomását is?
Minden további nélkül, de mivel - ha szeretnéd úgy megépíteni, hogy több gomb egyszerre lenyomását is ki tudd olvasni belőle - az ellenállásokat (illetve analóg bemenet esetén az egyes gombokhoz tartozó feszültség értékeket) a 2 hatványai szerint kell választani, 8-9 gombnál többet nem nagyon tudsz így bekötni. Példa kapcsolás ellenállás létrával (érdemes az azonos értékű ellenállásokból álló kapcsolást megépíteni, könnyebb összeválogatni az értékeket, illetve lehet készen is kapni ellenállás létrát).
A kis kondira gondolsz
Nem, én szoftveres debouncingra gondoltam, van egyszerűbb és elegánsabb megoldás, persze meg lehet oldani kondival is, de felesleges hely és alkatrész pazarlás, mert szoftverből teljesen jól meg lehet oldani. Ha mégis hardveresen szeretnéd megoldani, akkor a felhúzó ellenállás értékéből kell számolni a kívánt időállandójú (40-100ms közt szokás kapcsolótól és felhasználástól függően) RC tagot és ahhoz választani a kondit.
-
#70211840
törölt tag
válasz
ekkold #18168 üzenetére
ekkold, Aryes: Köszönöm a választ.
ekkold:
Ha jól értem akkor mondjuk beállítva egy belső felhúzó ellenállást HIGH értékre állítja az adott PIN-t. Én a nyomógombbal egy külső ellenálláson GND-re zárom és ezt az állapotot tudom lehérdezni és eredményként LOW állapotot kapok?Ezek az ellenállások milyen értéküek legyenek egy gomb esetében? Az STM32 úgy tudom a pin-eken 3.3V feszültséget ad.
A mátrix több gomb esetén jó lehet. Illetve csak ötletelek (persze biztos butaság), de az analóg bemenetet használva nem lehet olyat csinálni, hogy a különböző gombok más-más ellenállás értékkel zárnak és a kapott feszültség értéket kiolvasva meg tudom mondani melyik volt az? Esetleg több gomb lenyomását is?
Aryes:
A kis kondira gondolsz? Igen, sejtettem, hogy ilyesmire szükség lesz. Milyen értékűek legyenek ezek? -
ekkold
Topikgazda
válasz
#70211840 #18167 üzenetére
Általában bekapcsolható "felhúzóellenállás" van a lábakon a legtöbb MCU-ban, de az STM32 esetében lehet a GND felé (lehúzó) vagy a +3V3 felé (felhúzó) ellenállás is, te határozod meg a szoftverben.
Több gomb kezelése sokféleképpen megoldható, kevés I/O láb felhasználásával, lehet pl. mátrixba kötni a gombokat (sor-oszlop elrendezés) Ekkor pl. 16 gomb esetén csak 2x 4láb kell (4 sor 4 oszlop).
Persze vannak ennél még trükkösebb megoldások is, attól függ mennyire vagy szűkében az I/O lábaknak, ill. mennyi plusz alkatrész fér bele a játékba, vagy mondjuk tudni kell-e különféle gomb-kombinációkat is felismerni, vagy várhatóan egyszerre csak egy gomb lesz lenyomva.
-
válasz
ViZion #18087 üzenetére
Ha hosszú a vezeték, ami a pin-re van kötve, a belső felhúzó ellenállás kevés lehet, mert egy hosszú vezeték több zajt tud összeszedni, főleg ha nem árnyékolt. Ráadásul nem is 10kΩ szokott lenni a belső, hanem lehet 20-30kΩ is.
A táp rákötése se tud önmagában megbízhatóan működni, mert ahhoz meg külső lehúzó ellenállás kell, hogy ne lebegjen, amíg nem kap jelet.
De továbbra is az a gyanúm, hogy valahonnan túlfeszt kapott az a pin, és ez a relével függhet össze. -
ekkold
Topikgazda
válasz
daninet #17868 üzenetére
Ha felhúzó ellenállással nézzük akkor egyetlen lépésre ezt kellene kapni:
11 (mindkét kontakt nyitva)
01 (egyik kontakt zár)
00 (másik kontakt is zár)
10 (első kontakt bont)
11 (második kontkt is bont)
A másik irányba forgatva, a 01 és az 10 állapot fordított sorrendben jön.A kis panelen ugye bekötötted a GND-t és a +Tápot is az arduino panelre?
-
daninet
veterán
válasz
ekkold #17867 üzenetére
Köszönöm a válaszokat.
Sorban megyek az összesen:razorbenke92:
Adatlapja szerint vagy 10K ellenállást kell mérned a + pin irányba, vagy zárlatot a GND-re.
Ez így van, mérhetőek a 10k ellenállások. Kettő van rajta, egy-egy a két lábhoz. Az ellenállások a +5V és a CLK/DT láb között vannak.Nézd meg épp hogyan áll, és mozdíts egy ugrást rajta (gondolom diszkrét pozíciói vannak, 20 impulzus nem sok) majd nézd meg újra. Csak az egyiknek kellene változnia.
Ha rákötöm a multimétert a GND és a CLK lábra minkét irányba tekerve az enkódert van ellenállás változás.
De ha jól értelmezem ez nem gond, mert a minta amit ki kellene adjon Ayres kolléga szerint:
Egyik irányban
0 0
0 1
1 1
1 0
a másikban
0 0
1 0
1 1
0 1Ugyanitt elkövetheted azt is, hogy digitális pin helyett analógra kötöd, és az analóg értéket írod így ki sorosan, hogy lásd valóban analóg zaj van az enkóderen, vagy digitális.
Ezt még ki kell próbálnom.Janos250:
Próbáld ki ideiglenesen akkuról működtetni!
Ezt nem tudom hogyan kell miközben számítógépen a soros monitort is látni akaromekkold:
Valószínűleg fizikailag vagy nincs az enkóder panelján felhúzó ellenállás, vagy túl nagy értékű.
Van rajta 2x10k az egy-egy lábhoz. Azt nem tudom, hogy ez túlnagy-e.Ezért nem értem, hogy ha ez rajta van akkor miért lebegnek az értékek.
A képen a CLK és +5V lábak között mérekmivel kicsi az esélye, hogy két különböző helyről, két különböző enkóder is hibás lenne.
Kétszer ugyanazt az enkódert vettem hestore-ról. De vettem egy másikat is (más márka nem ez a zöld tokos) utoljára ami nem klikkelős, csak 3 lába van. Kipróbálom azt is majd. -
ekkold
Topikgazda
válasz
daninet #17864 üzenetére
1, Valószínűleg fizikailag vagy nincs az enkóder panelján felhúzó ellenállás, vagy túl nagy értékű.
2, Mindenképpen kell felhúzó ellenállás (akár belső, akár külső) mert különben lebegni fog a bemenet és mindenféle zavart összeszed.
Felhúzó ellenállással valószínűleg azért nem működik amit írtam - mivel kicsi az esélye, hogy két különböző helyről, két különböző enkóder is hibás lenne. -
ekkold
Topikgazda
válasz
daninet #17860 üzenetére
Minden mechanikus kapcsoló hajlamos egy olyan jelenségre amit "prellezésnek" hívnak. Fizikailag amikor az érintkezők összeérnek akkor rugalmasan torzulnak, majd az érintkező visszapattan, az áramkör megszakad majd újra összezáródik (akár többször is egymás után). Ez általában ezredmásodperces időtartományban zajlik (vagy akár 100usec tartományban). Emberi szempontból ez nagyon rövid idő, de digitális elektronikák szempontjából ez sok idő, simán észreveszi az áramkör és megpróbálja feldolgozni - ami alaphelyzetben hibás működéshez vezethet.
Két megoldási lehetőség van:
- Szoftveresen felkészülni a prellezés kezelésére - ahhoz hogy ez jól működjön nem lesz elég egy egyszerű kód. Persze megoldható teljesen jól is, csak az nem pár soros programrész lesz (készítettem már ilyet).
- A prellezés hardveres kezelése: a kontaktusokra kapcsolt felhúzó ellenállások után egy megfelelő időállandójú R-C szűrő is kell (ilyenkor a belső felhúzó ellenállást ki kell kapcsolni). Ez több alkatrészt igényel, viszont a szoftver viszonylag egyszerű maradhat.
Ha a programozás nem az erősséged, akkor a hardveres megoldás a könnyebb út, mivel az egyszerű áramkört igényel... Már én is elgondolkoztam rajta, hogy nekem is egyszerűbb lett volna hardveresen megoldani, mint szoftveresen, csak akkor már a hardver kész volt, így nem volt választásom. -
válasz
gordonfreemN #17778 üzenetére
Nem mindegy, ahhoz, hogy az elvárt módon működjön, CH340 DTR kimenetére, sorba egy kondival ês a 328 tápjára 10k-val.
Állítólag utóbbi felesleges, mert van belső felhúzó ellenállás a RESET lábon, de a gyári lapra se véletlenül került rá, szóval a stabilitás érdekében én biztosan rátenném. A diódát se hagyd ki, az meg a kondi miatt kell.
-
válasz
gordonfreemN #17758 üzenetére
Nyilván felhasználói oldalról - ha van rá felesleges szabad helyed a panelen, akkor - az a legegyszerűbb, ha teszel rá FT232-t meg usb csatlakozó aljzatot. Ha spórolni szeretnél vagy helyszűke miatt nincs rá lehetőség, akkor ISP.
Köztes megoldás lehet, ha csinálsz a panelre egy custom csatlakozót, amire kivezeted a RX,TX,GND,RESET lábakat, a kód feltöltéséhez pedig egy külön panelre teszed a FT232 chipet. Készen is lehet venni ilyen usb-uart konvertert.Hogy milyen kiegészítő alkatrészek kellenek, azt jól vissza lehet követni a bekötési rajzokról, például ezen 10k felhúzó ellenállás van a RESET lábon (330R feleslegesen kicsinek tűnik).
-
-
And
veterán
válasz
Tomika86 #17372 üzenetére
Látatlanban, a konkrét áramköri részletek ismerete nélkül nehéz meghatározni a 'jó' értéket, de a korábbiak értelmében a tartomány elég tág lehet, inkább csak a nagyságrendet kell belőni. Például egy nagy impedanciás uC bemenetére kötött nyomógomb fel/lehúzója széles ellenállás-tartományban rendben lesz. Ilyen helyen a rajz szerinti 4,7 kΩ simán helyettesíthető 10 kΩ-mal. De mondjuk egy I2C-busz felhúzóinál már necces lehet ekkora eltérés (relatív nagy busztávolság és sebesség esetén különösen).
-
gyapo11
őstag
Pnp tranzisztor is jó felhúzó ellenállással. Ha a pin lebeg vagy inputra van állítva, akkor ott magas szint lesz, a tranyó nyitott állapotban van, nem vezet. A relé tekercsének egyik pólus a testen, a másik a tranyón. Amikor a pin kimenetté válik és alacsonyra vált, akkor a tranyó zár és a relén átfolyik az áram, a relé zár.
Kicsit keveredős ez a zár-nyit, de itt azt mondtátok, hogy zár amikor vezet, nyit amikor nem vezet valami.
-
2. A kérdés ennél összetettebb. A relé bemenetének nem kell lebegni, csak lehúzó ellenállás helyett felhúzó ellenállást kell rá kötni, mivel a gpio0 magas szintet kér a boot ideje alatt. Ez viszont azt a problémát hordozza magában, hogy a relé a bootig bekapcsolva van, a bootnál megkapja a magas szintet, akkor kikapcsol, majd utána tudod a gpio-val újra bekapcsolni.
A FET-es megoldás ezt ki tudja küszöbölni, legfeljebb egy kisebb impulzust kaphat bekapcsoláskor, amit vagy elnyel a relé tekercse, vagy egy kondenzátorral ki lehet védeni. -
PHM
addikt
Azt el is felejtettem, hogy a legtöbb integrált áramkörben az a védődióda,
illetve védődiódák, (mert a negatív tápfeszültség felé is védik így a bemenetet)
már eleve be van építve az áramkörbe.
Így jelen esetben is valószínű, hogy a ledek nem a felhúzó ellenálláson,
hanem a belső védődiódán keresztül kaptak némi áramot. -
Tényleg, te fejtetted meg: a felhúzó ellenálláson keresztül rövidre van zárva a LED sor 12V a uC 5V tápjával.
Bár nem írtad, milyen uC-ről van szó, a felhúzó ellenállás az AVR-ekben 20-50k, emiatt nem sült még meg a uC, de úgy tűnik a LEDek számára elég ennyi áram is. Erre viszont a sorba kötött dióda tökéletes megoldás lesz!
-
Nem lesz jó. A LED táp felőli végére kellene a dióda, színenként egy, vagy a belső pullup helyett a LED tápjáról kellene felhúzó ellenállást kötni a bemenetre.
Apropó, hogy mehet a LEDeken visszafelé az 5V feszültség? Ne a táp felőli végéről vedd le a jelet, hanem a test felől! -
válasz
Tomika86 #16154 üzenetére
Hát nem akarok hülyeséget mondani, de ha jól tévedek, a legmagasabb, Mbit-es sebességhez talán 20cm a maximális vezetékhossz, de azt nem tudom, hogy a többi egységet is lassítja-e, ha egy egység valami miatt csak lassabb sebességre képes. 🤔
Hosszabb vezeték esetén csökkenteni kell a felhúzó ellenállások értékét, talán 2,7k-ra.Az autóban nem lesz CAN busz véletlenül?
-
Tomika86
senior tag
Hát kicseréltem a felhúzó ellenállásokat, de nem változott. Megpróbáltam 400kHzen az i2c-t, így sem.
Az a library a példaprogramot rátöltve is 800ms mire 8 csatornát kiolvas.
Egy másik library 1sec alatt 5x ad adatot a csatornákról, de viszont csak a ch0 csatorna működik, ez változik csak ☹️ -
válasz
Tomika86 #16136 üzenetére
Esetleg az i2c felhúzó ellenállásai 10kohmosak ez nem okoz gondot? Van ahol 2,7kohm vagy 4,7kohm van használva.
De bizony, a magas ellenállás pont alacsonyabb sebességet okozhat. Cseréld kisebbre! A szabvány úgy tudom, hogy 4,7k-t igényel, hosszabb vezetéknél akár kisebbet is. Milyen hosszú vezeték van a kettő közt?
-
Tomika86
senior tag
válasz
Janos250 #16135 üzenetére
Setup blokkban van az inicializálás.
Azt megtudom csinálni a kettő maggal, hogy egyik akkor kiolvas és a másik mag ezt az értéket használja fel? Tehát csak fizikailag van kettő magon, de a programfutásban átlátni a változókkal egyikből a másikba?
Ha jól gondolom 2 loop blokk lesz a kettő maghoz?Esetleg az i2c felhúzó ellenállásai 10kohmosak ez nem okoz gondot? Van ahol 2,7kohm vagy 4,7kohm van használva.
Köszi
-
Köszi, nem tűnik rossznak.
Maga a kifejtők között érdemes olyat keresgélni, amihez már vannak 0-10V áramkörök is, vagy a PWM-re rá lehet küldeni a külső 10V-ot? (Keresgélés közben 'insdustrial' verziókat is láttam, pl a norvi szimpatikus elsőre.)
Beleolvasgatva a topikba elképzelhető hogy ellenállásokkal is kell majd felhúzó ellenállás, stb? (Kisalaktrészekkel mindig bajban vagyok, nem akarok 100db-okat rendelni; meg elég alap villamos ismeretekkel rendelkezem, leírásokat követem, de ha valami nem kerek, akkor jön a pingvinezés.)Viszont: Érdekelne esetleg olyan irány is (ha van), amire van magasabb szintű fejlesztőkörnyezet esetleg. Van ezekre is esetleg ilyen, vagy akkor málnás vonalon kellene nézelődni?
-
válasz
Tomika86 #15733 üzenetére
GPIO12 és 0: FET kapcsol 12V-os Relét
Abból lehet probléma attól függően, mit kapcsol a relé. Egy ellenállás+kondenzátorral (low pass filter) ki lehetne szűrni a PWM jelet, a relét valószínűleg úgyis mondjuk 1Hz-nél ritkábban kapcsolgatod.
GPIO 2: 470ohm előtéttel földre van kötve a LED
Akkor a felhúzó ellenállással adtál egy pofont a kakinak.A többi a leírt módon szerintem jó lesz.
Jó lenne ha még 5db GPIO lenne a panelon
Próbálkozhatsz multiplexeléssel, egy lábra egy analóg és egy digitális bemenet közösítése például egyszerűen megoldható, vagy ha minden kötél szakad, külső port bővítőt is használhatsz, pl. 74hc595 vagy cd4021b.
-
válasz
Tomika86 #15731 üzenetére
GPIO12 és 0 én kimenetként használom, FET-et kapcsolok vele
Pontosan mit? Belefér, hogy a boot alatt random PWM jelet kapjon a külső eszköz? Ha egy LED-nél bonyolultabb eszköz van rákötve, gond lehet belőle.
GPIO 14 és 15 bemenetként használom
Mi van rákötve? Belefér, hogy a boot alatt random PWM jelet kapjon a külső eszköz? Egy passzív szenzor is károsodhat, ha tápfeszt kapcsolgatsz rá, az aktív eszközökben meg rövidzárlatot okozhat. Ha digitális bemenet, legalább egy védő ellenállást tegyél rá (100Ω-10kΩ közt, ami nem zavarja a kommunikációt).
GPIO 5 SD kártya SPI Chip Select láb
Ez valószínűleg ok, ha boot közben nem kap a többi lábon jelet.
GPIO 2 bemenetként van használva, felhúzó ellenállással
Az onboard LED-et megnézted, hogy gyárilag Vcc-re vagy GND-re van kötve? Utóbbi esetben érhetnek meglepetések, előbbi esetben nincs szükség külön felhúzó ellenállásra.
-
Tomika86
senior tag
Sziasztok!
Ez a táblázat alapján, vannak lábak amik csak ki vagy bemenetként használhatók:
[link]Pl:
GPIO12 és 0 én kimenetként használom, FET-et kapcsolok vele
GPIO 14 és 15 bemenetként használom
GPIO 5 SD kártya SPI Chip Select láb
GPIO 2 bemenetként van használva, felhúzó ellenállássalAhogy nézem ezek a kétes lábak.
Köszönöm!
-
Mit is fog ez pontosan csinálni?
A bekötés jónak tűnik, csak a logikát meg kell majd fordítani a programban, a 9V elem magas jelszintje az optón keresztül alacsonyra húzza a D5 lábat és viszont.
Még annyit, hogy a most 5V és D5 között lévő felhúzó ellenállást inkább a 3.3V-ra kösd, mivel a lap 3.3V-os, és itt gond nélkül megoldható a szintillesztés az opto-val. -
Tomika86
senior tag
Analóg bemenetekre szeretnék majd védelmet építeni.
Például:
- Nyomásszenzorok 5vról fognak működni, 0-5v kimenete van. A szenzorok az autó elektronikájától különállóak lesznek.
- Akkumulátorra tennék feszültségosztót(2db ellenállás Mohm nagyságban) , 15v-ot osztaná 5v-ra. 2db 5,1v zener dióda az 5v-bemenet-gnd közé.Általánosítva az arduino analóg bemenetei és a gnd közé 100nf kerámikondenzátor, vagy milyen kondenzátort kell tennem?
Digitális bemenetek:
- olajnyomás kapcsoló: ez gndt kapcsol, itt 10kohm felhúzóellenállás a bemenet és 5v közé elég? Alapból 5v a bemeneten, kapcsoláskor 0v
- 2db Ds18b20 itt ahogy most próbálom elég 1db felhúzó ellenállás a kettő szenzorhoz?
- 2db digitális hall érzékelő, beépített felhúzó ellenállással, itt gondolom nem kell áramkörileg semmi?Köszönöm a segítséget
-
válasz
RAiN91 #14967 üzenetére
Hát... Mivel a vezeték antennaként viselkedik, ilyen nagyon hosszú vezetéknél még alacsony értékű felhúzó ellenállás mellett is a levegőből összeszedett zaj nagyobb lehet, mint a küszöbérték az alacsony és a magas érték közt, így mindenképpen árnyékolt kábel kellene (pl. 1 erű fülhallgató kábel), de legjobb lenne minél közelebb vinni a NodeMCU-t a kapcsolóhoz. Az ellenállás értékét sem lehet akármeddig csökkenteni, mert nagyobb fogyasztás, melegedés lesz a végeredmény.
-
válasz
RAiN91 #14965 üzenetére
Igen, ezzel a belső, beépített felhúzó ellenállást kapcsolod be, amivel elvileg - rövid vezetékkel - hibátlanul kellene működnie. Azt viszont nehezen hiszem, hogy akkor is beriaszt, ha semmi sincs rádugva.
Próbáld ki, hogy a D7 és a 3,3V közé teszel egy 10k ellenállást, ha ez sem segít, mert nagyon hosszú a vezeték a NodeMCU és a kapcsoló közt, akkor próbáld ki 1000 Ohm-mal. Ha lehetőséged van, cseréld ki a kapcsoló vezetékét árnyékolt vezetékre. Bár azt nem írtad, hogy milyen hosszú ez a vezeték. -
válasz
repvez #14890 üzenetére
Én végig az alsó rajzról beszéltem...
A c1es részen annyi rész kell bele ahány chip vagy az mindig 3 db vagy mehet akár egy is csak megfelelő értékkel és az mennyi ?
Itt nem egészen értem, hogy miért van pont 3db párhuzamosan kötve, egy biztos: nem a chipek száma miatt. Azt tudom, hogy 3db 100nF-ot nem lehet 1db 300nF-ra cserélni, mert a nagyfrekvenciás tulajdonságai megváltoznak. Szoktak egy nagy (pl. 1uF elektrolit) és egy kis értékű (pl. 100nF kerámia) párhuzamosan kötni, mert az a nagy és a kisfrekvenciás zavarokat is szűri, gondolom itt is ez lett volna a költő szándéka. De erről a hobbielektronika topikban értelmesebb választ fogsz kapni (vagy itt a hozzáértő kollégáktól).
Az R25 re gondoltam Az a MISO-ba megy és a chipen belül meg az SI részre megy, nem a CS lábra.
Felhúzó ellenállás. A harmadik chip soros adat bemenetét védi a lebegéstől (random adat) arra az esetre, ha nincs semmi a bemenetre kötve.
Meg az OUT rész jobb felül az R26al elhagyható ha nem akarom daisy chainbe kötni több shift regiszterrel?
Ezt nem tudom, ennek valami védelmi szerepe lehet, nincs a rajzon, de vmi kisértékű (pl. 100 ohm) ellenállás lehet.
-
Sanki
addikt
-
Az a 16 fogalmam sincs, hogy mi lehet, a kódban nincs olyan sor, ami kiírhatná, hacsak a fastled nem írja ki ezeket, azt nem ismerem.
Az ellenállásról: amit csináltál, lehúzó ellenállásnak hívják, és ettől nincs összekötve a +12V a GND-vel, illetve össze van, de nem rövidzár, 1,2mA áram folyik rajta csak.
Azért van rá szükség, mert a digitális láb, főleg, ha vezeték is van rá kötve, mindenféle zajt szed össze a levegőből, lebeg, véletlenszerű állapotot vesz fel, ezért ha nem kap jelet, valamilyen irányba el kell húzni. Mivel nálad HIGH jelre kapcsol, ezért alapból a földre húzzuk. Ha nyomógomb lenne, ami a földre húzza a lábát, akkor pedig felhúzó ellenállás kellene, a Vcc és a láb közé, illetve mivel van beépített felhúzó ellenállás a lábakon, ezért nem is kellene külső ellenállás, elég szoftverből bekapcsolni:pinMode(D0,INPUT_PULLUP);
Illetve a gpio16-on van input_pulldown, ha esetleg kísérletezni akarsz vele, de nem tudom, működik-e, nem próbáltam még.JozsBiker: jogos!
-
weiss
addikt
ESP32 mesterek! RX lábra kell ellenállás? Néhány lapon láttam, néhányon meg nem, és nem tudom mennyire kritikus. Ill. GPIO0-t fel kell húzni, ha a RTS/DTR-es mókát használom? Huzzah32-őn ezt sem látom. Elvileg van belső felhúzója, ennek ellenére láttam már olyan tervet is, ahol ennek ellenére volt külső felhúzó.
-
gyapo11
őstag
Az az érdekes ebben, hogy én is 0-ról kezdtem, a példaprogramokat próbálgattam, és sose volt gondom a serial kommunikációval arduino és pc között. Viszont nem volt sose szükségem két soros portra, mert nem használtam olyan modult, ami soros porton kommunikál az arduinoval. I2c is ment egyből felhúzó ellenállással. Talán ezért jó ha led villogtatással kezdi valaki, és lépésenként halad, mert ha egy kicsit bonyolultabb cuccot rak össze és nem megy, akkor nem tud mihez nyúlni, nincsenek működő példái.
Itt is legalább két részre bontanám a problémát, először menjen az arduino-pc soros port kapcsolat, utána gps-pc kapcsolat, amihez persze kellene 3.3 V meg a jelekhez szintáttevés, és ha mindkettő jó, akkor már rá lehetne tenni az arduinora és mennie kell. Start-stop bitekről volt már szó? Összeföldelés, baudrate, start-stop bitek, rx a tx-re és viszont. -
válasz
repvez #14347 üzenetére
azt tanácsoltátok, hogy kell a felhuzo ellenállás mert anélkül nem müködnek a modulok,
Soros kapcsolathoz senki sem írta, hogy kellene felhúzó ellenállás, csak az i2c-hez. Bár nem tartom valószínűnek, hogy ez zavarná a kommunikációt.
3,3V modulhoz, ha nincs a boardon feszültségosztó (néha szokott lenni gyárilag, nekem szinte minden modulom ilyen) akkor illene, mert hiába 3,3V a Vcc, ha az RX/TX lábon megkapja a kontroller felől az 5V-ot, ugyanúgy kifingik tőle.
-
válasz
repvez #14186 üzenetére
ha csak egyet akarok probálgatni ahogy a linkeken is találtam akkor ugy gondoltam, hogy nem olyan fontos.
Úgy gondoltad? Elmondtuk, hogy de, kell, ha többet fűzöl fel, lehet, hogy kisebb ellenállás kell, de az i²c szabvány megköveteli a felhúzó ellenállásokat, anélkül nem működik. Az MPU gyárilag tartalmazza, azért működik out-of-the-box, de nem ez az általános.
ha esetleg nehezedre esik , akkor nem kell segiteni,
Kikérted a véleményünket, aztán teljesen mást csináltál, majd visszajöttél panaszkodni, hogy nem működik. Itt nem az a helyzet, hogy nehezemre esne segíteni, ellenkezőleg (keress rá, hány választ írtam már neked
), egyszerűen bosszant, hogy ugyanazt többször kell leírnom, mert semmibe veszed, amit mondok.
Próbálom ezután visszafogni magam, és nem adok több tanácsot.
Ja de: nem tudom melyik városban laksz, de a sarki hobbielektronika boltban 10Ft/db a 4,7kΩ ellenállás. Ha már ott vagy, vegyél egy marék 10kΩ ellenállást is, mert úgy kb. mindenhová kelleni fog, ahol digitális áramkörök vannak. Meg 220Ω, ha ledeket szeretnél használni.
szerk 2.: ha 3,3V i²c modulokat használsz 5V mikrokontrollerrel, az i²c vezetékeket ne 5V-ra húzd fel, hanem 3,3V-ra, különben kijöhet a füst belőlük, ami működteti őket.
-
válasz
repvez #14179 üzenetére
Az mpu9250 valószínűleg a lapon tartalmaz felhúzó ellenállásokat, azért működik.
A gyro-hoz ezt az oldalt ajánlom:
MPU 6050 Teapot project
Sokat kínlódtam különböző library-kkel, amikor megtaláltam az i2cdev lib-et, azon belül az mpu6050 lib-et, ez állati pontos érzékelést tesz lehetővé, mert meghekkeli a szenzort, feltölt rá egy firmware-t, ami az eszközön végzi a pozíció számítását. Úgy emlékszem, hogy az én 9250-emhez a MPU6050_9Axis_MotionApps41.h-t használtam, és működött. -
válasz
repvez #14061 üzenetére
Ezeket a reg cimeket, honnan tudom, meg?
Gyári adatlapból, de ha egy modulhoz van library, abban ez valószínűleg előre be van állítva.bármelyik manuált letöltve ugyan az lesz mindegyiké vagy az összes chipnek van sajátja?
Gyárilag egyforma, igen.Ha egy adott modulnak csak egyfajta registere van akkor kettő vagy többet hogy lehet ugyan abbol a modulbol használni ?
Van olyan i²c eszköz, amelyiknek hardveresen vagy szoftveresen változtatható a címe bizonyos korlátok közt, pl 2-3 címbit külső lábakra kivezetve, ezekből többet is fel lehet használni, amennyit a címtartomány enged. Amelyiket nem lehet változtatni, abból csak egyet tudsz használni egyszerre.HA nem tudom , hogy van e felhuzo ellenállás a panelokon, akkor enélkül nem is tudom tesztelni öket ?
Mérd ki egy multiméterrel a Vcc és az SDA, valamint a Vcc és SDL közti ellenállást. Ha kOhm tartományt mérsz, az a felhúzó ellenállás lesz. Persze ne működés közben, hanem kiszerelve mérd.ÉS azt hogy érted, hogy mindegyik vonalra és nem modulhoz kell ilyen ?
Két db. ellenállás kell, egy a Vcc és az SDA, egy pedig a Vcc és SDL közé.Mitől , függ, hogy honnan számit hosszúnak a vezeték aminél már kisebb ellenállás kell?
jelenleg csak 20cm es vezetéket tettem rá tesztelni, de későnn ez változhat.
Az rövid. A hosszú mondjuk 1,5-2m-nél kezdődik.A párhuzamos soros részt, ugy értettem, hogy ha 4 modult teszek rá akkor mindegyik lábhoz 4 vezetéket kell bekötni vagy beköthetem ugy is, hogy az egyik modul SDL lábárol a másik modul SDL lábára aztán a 3. és 4ére kötöm , majd a 4. től vezetem csak vissza a panelra és igy csak két vezeték menne a panel azonos lábaira:
Dehát attól még mindkettő párhuzamos.Az egyik csillagpontos, a másik daisy-chain (ha jól tévedek). De utóbbinál a lánc hosszúságával nő a zavarérzékenység, és csökken(het) a sebesség.
Hű, jó sokáig írtam a hozzászólást.
-
And
veterán
válasz
repvez #14061 üzenetére
A slave-címeket alapvetően a chip határozza meg, vagyis egy adott slave eszköz / modul adatlapján, leírásában lehet találkozni vele. Sok esetben legalább részben módosítható a cím, pl. a chip három lábának alacsony / magas szintre kötésével beállítható - a szokásosan 7-bites - cím három bitje, így abból akár nyolc is felfűzhető ugyanarra a buszra. A többi része fix, illetve van olyan típus is, amelynél az alacsony lábszám ára, hogy totál fix címe van. Létezik egyetlen input lábon analóg feszültségszinttel beállítható című slave is. Szóval modulja és a ráépített chipje válogatja, hogy mennyire szabadon állítható be a cím, ha egyáltalán módosítható.
"HA nem tudom , hogy van e felhuzo ellenállás a panelokon, akkor enélkül nem is tudom tesztelni öket ?"
Nem. Felhúzó ellenállás mindenképp kell, mivel a busz két vezetéke a slave-eken nyitott kollektoros tranzisztorokhoz kapcsolódik. Itt látható a jellemző I2C-busz felépítés: [link].
"Mitől , függ, hogy honnan számit hosszúnak a vezeték aminél már kisebb ellenállás kell?"
Van erre többféle leírás, app-note, néha még a slave-ek adatlapja is ad erre útmutatót. Általános esetben 4,7 kΩ körüli felhúzók megfelelnek, de az érték függ a busz hosszán felül a tápfeszültségtől (amire az I2C-busz fel van húzva, lásd az előbb linkelt ábrát) és a slave-ek típusától, darabszámától. Egyébként az I2C-vonalat nem túl nagy hosszra szokás tervezni, vagy ha igen, a sebességet lehet csökkenteni, illetve léteznek transzparens buszmeghajtók is ilyen célra. Azért egy-két méteren belül jó esetben nem lesz szükséged ilyesmire.
Mod. a #14062-re: a portra kapcsolható, uC-n belüli felhúzó megfelelhet, de mivel az általában túlságosan nagy értékű (sokszor 10 kΩ nagyságrendű), esetenként nem kerülhető meg a külső felhúzó. Ez főleg nagyobb buszsebesség, több slave és relatív nagy busztávolságok esetén igaz. -
Janos250
őstag
válasz
repvez #14061 üzenetére
"Ezeket a reg címeket, honnan tudom, meg?"
https://playground.arduino.cc/Main/I2cScanner/
"ugyan az lesz mindegyiké vagy az összes chipnek van sajátja? "
Általában fajtánként különböznek, de van, hogy egy adott fajtából is van több című. Nekem volt olyan - hirtelenjében nem jut eszembe mi volt - aminél a gyári jel után volt A0, A1,.. amiknek különböztek a címei. Hogy ezeket át lehet-e írni, azt nem tudom, de azt sejtem, hogy nem.
"Ha nem tudom , hogy van e felhúzó ellenállás a panelokon, akkor enélkül nem is tudom tesztelni őket ?"
A mikrokontroller GPIO lábát programozod úgy, hogy kapcsoljon be felhúzó ellenállást.
"azt hogy érted, hogy mindegyik vonalra és nem modulhoz kell ilyen"
A vezeték végig megy , a vezetékre csak egy helyen kell, pl. a kontrollerben, nem kell minden eszközhöz külön.
"vagy beköthetem úgy is"
Igen. -
válasz
repvez #14059 üzenetére
az összes modul mehet egy helyre és amjd a kodolásnál lesz megkülönböztetve a regiszter által
Így van, egész pontosan az i²c address az, ami megkülönbözteti a modulokat. Remélhetőleg gyárilag mind különböző címet kapott, mindenesetre minden modult külön próbálj ki. Amire még esetleg szükséged lesz az mindkét vonalra egy-egy 4k (ezt most fejből írom, majd vki kijavít, ha rossz/nézz utána pontosan) felhúzó ellenállás. Nem modulonként, hanem vonalanként 1-1. Ha valamelyik modulon van gyárilag felhúzó, az elég lehet az összes számára. Ha a lap és a modul hosszú vezetékkel lesz összekötve, akkor kisebb értékre lesz szükség.
Az mindegy, hogy sorosan vagy párhuzamosan kötöm be öket ?
Dehogy mindegy, sorosan be sem lehet kötni, hogy gondoltad?
-
válasz
wocsok17 #13839 üzenetére
A boot-nál használtak közül a legtöbbnek, ha jól látom, high szinten kell lennie a sikeres boothoz, ez tiszta sor, ezeket elvileg tudod használni, teszel rájuk egy-egy 10k felhúzó ellenállást.
Egy van, a gpio15, aminek a bootnál low szinten kell lennie, erre felhúzó helyett lehúzó ellenállást kötsz, és vagy fordított logikával használod a relét (az NO helyett az NC kimenetre kötöd, amit kell), vagy fordított logikával használod és a relé elé teszel egy tranzisztoros fázisfordító fokozatot. De ha jól számolom, enélkül is megvan a 8 kimenet.Ezeket abban a tudatban írtam, hogy a reléket alacsony jelszinttel kell bekapcsolni. Ha magas jelszinttel, akkor cseréld meg a kettőt, a gpio15 mehet lehúzó ellenállással, fázisfordító nélkül, a többi felfutó+fázisfordító fokozat.
gyapo11: nagyon tetszik ez a számlálós trükk, egyszer tuti használni fogom valamiben.
Csak egy hátulütője van: mivel nem tudni, boot közben hány random impulzust kapott, kell hozzá +1 láb, amin visszaolvasom az állapotát.
-
atesss
addikt
No már elkezdtem írni hogy mi lehet ennek az "anomáliának" az oka.
Aztán miközben írtam, esett le hogy mi is van:
Mivel a --változásokat-- figyeli a PCF8574, akkor is van ugyanúgy interrupt, amikor elengedem a gombot (az INT pin akkor is 0-ba megy).
És a gombot jelző sárga jel ugye így pont az inverze. De amúgy semmi más különbség nincs, most teszteltem.
Valószínűleg csak annyi történt, hogy a 3. képnél még nyomva tartottam a gombot, amikor csináltam a képet. Vagy esetleg STOP-oltam a triggerelést a szkópon.
A sárga mérőfej magán az input porton volt (illetve egy 20cm-es hozzáforrasztott kábel végén).
A kék mérőfej pedig magán az INT porton (szintén egy 20cm kábelen).
A felhúzó ellenállás még nem került fel. Írtam, hogy direkt úgy tesztelem most a szkóppal, hogy még nem forrasztom fel őket.
Az I2C-s mérés is egy jó ötlet lenne. De közben még tesztelgettem, és egyértelműen programkód-oka van a dolognak.
Ámde azon belül valami nagyon is fura oka...
Direkt kiszedtem a GPIO interruptot. Illetve a PCF8574 beolvasását is közvetlenül a MAIN-be raktam (kiszedtem még a MAIN-ből meghívott függvényből is). De erre nem lett változás.
Eddig amit találtam hogy "megoldja" a problémát, ha kiprintelem a tömböt, amibe előtte már beolvastam a PCF8574-nek a portját.
Próbáltam, hogy kiprintelek egy másik, teljesen ugyanilyen adat-szerkezetű tömböt, de arra meg nem.
Szóval egyelőre tiszta X-akták...if GPIO.input(I2C_IO_INTERRUPT_GPIO) == 0:
# i2c_io_readed_array = i2c_io_reader()
print("------")
io_interrupt_flag = GPIO.input(I2C_IO_INTERRUPT_GPIO)
print("Interrupt pin állapota - olvasás előtt: ", io_interrupt_flag)
print("--")
i2c_io_readed_array = i2c_io.port
if len(i2c_io_readed_array) == 8:
# pass
print("az előző kiolvasás megfelelően megfordított értéke: ", i2c_io_readed_array_reversed)
teszt = i2c_io_readed_array
# print("A beolvasott port tömbje egy külön [teszt] nevű változóba átmásolva: ", teszt)
# print("PCF8574 Port beolvasva. A beolvasott port tömbje:", i2c_io_readed_array)
time.sleep(0.125)
io_interrupt_flag = GPIO.input(I2C_IO_INTERRUPT_GPIO)
print("Interrupt pin állapota - 0.125 sec-el olvasás után: ", io_interrupt_flag)
print("------")
i2c_io_readed_array_reversed = i2c_io_reverser(i2c_io_readed_array)
i2c_io_state = i2c_io_namer(i2c_io_readed_array_reversed)
i2c_io_evaluator(i2c_io_readed_array_reversed, i2c_io_state)
i2c_io_printer(i2c_io_readed_array_reversed, i2c_io_state)
A legbelső if-ben láthatóak a tesztelt "feltételeim".
Csak az utolsó két, most #-el kikommentezett print() bármelyike oldja meg a problémát (természetesen a teszt változós csak akkor ha előtte megvan az értékadása is).
Ez valami eléggé érdekes bug lesz... -
And
veterán
válasz
atesss #13456 üzenetére
Az nem világos, hogy ha gombnyomásra indul a folyamat, és az input portra kerülő jelet - vagyis a gombnyomást, ami GND-re húz - a sárga görbe írja le, akkor miért csak a 3. képen szerepel ez a jel lefutó éllel, a másik kettőn pedig felfutóval? Egyáltalán, hol volt a mérőfej, magán az input porton, vagy a soros ellenállás előtt? Amúgy végül került arra a portra felhúzó vagy sem? Bocs, ha említetted volna, de nem találom ezt az infót.
Az is egy érdekes mérés lenne, ha a második csatornán nem az INT-jelet vizsgálnád, hanem magát az I2C-jelfolyamot, hogy az hogyan viszonyul időben a fizikai bemenet változásához képest. -
atesss
addikt
Hát a kódom elég gyorsan fut (kb. pár msec lehet egy teljes ciklus), ennyi időnként pollingolja a Raspberry-nek azt a GPIO bemenetét, amire rákötöttem a PCF8574-nek az INT pinjét.
Amint azt érzékeli a fő programszám, hogy 0-ban van ez a GPIO, rögtön meg is hívja a PCF8574-et I2C-n kiolvasó függvényt. A PCF8574 pedig a kiolvasás után magától, rögtön (adatlap szerint, ha jól olvastam ki, 4usec-en belül) alaphelyzetbe (azaz 1-esbe) állítja az INT Pint.
Tehát elvileg pár msec időre kellene csak megváltoznia az INT pinnek. Amit pedig egy multiméter észre se venne.
Szerintem - maximális eltérésként, de ez tényleg csak egy pillanatra (a multiméter-kijelzőt szemmel olvasva) - az a -1,5V körüli érték azt jelenti, hogy ennél jóval több időre megváltozott.
Nem tudom pontosan mekkora egy mezei multiméter sebessége, milyen ADC van benne, de kb. pár tized sec lehet a mérési illetve átlagolási ideje. A -1,5V kb. azt jelenti, hogy a megváltozott érték időtartama nem éri el az átlagolási időt, de közelít hozzá (nagyon durva becsléssel fele körül van).
De hát sokkal pontosabb lenne ezt szkóppal kimérni
Most már kíváncsi vagyok, asszem inkább várok, és nem is forrasztom be fixre a felhúzó ellenállásokat mielőtt letesztelném szkóppal.Nincs bekapcsolva a pulldown a raspberry-n.
-
And
veterán
A kötelező felhúzót a PCF8574-re írtam, az MCP-kben valóban van 100k-s belső kapcsolható ellenállás. A PCF INT-polaritásában igazad van, de ez eddig nem is tűnt fel
. Az adatlapon első blikkre kicsit megtévesztő. Még jó, hogy az MCP-k esetén az INT-jel polaritása is megszabható, meg az is, hogy csak open-drain kimenet legyen, vagy push-pull.
-
atesss
addikt
Pedig nagyon úgy néz ki hogy kell külső felhúzó ellenállás a PCF8574-nél.
Legalábbis az adatlap 15. oldalán a "Typical Application" ábrájára gondolom hogy nem véletlenül rakták fel.
De most megint átnézve az adatlapot, igazából olyan infót viszont nem találtam leírva, hogy "muszály" tenni.
Az MCP23017 az könnyen lehet hogy más, simán lehet hogy abba viszont már építettek be. (Ez akkor még egy - nem is kicsi - előnye lenne akkor annak az IC-nek, illetve a rá épülő moduloknak.)Na ezt elírtam. Javítva így néz ki:
Amikor változás van, rendben 0-ba vált az INT pin. Utána kiolvasom az összes bemenetet, rendben látszik is hogy a PCF8574-nek melyik bemeneti pinje változott meg.
De az INT 0-ban marad ez után is, nagyon sokáig.És a multiméteres mérést is pontatlanul írtam:
"Multiméteren is felugrik az érték az INT pin-t mérve (ha pár msec lenne, akkor ezt nem mutatná ki), de szkóppal sajnos most pont nem tudom megnézni pár napig."
Ebben az esetben az INT pin-t a VCC-hez (3,3V-hoz) képest mértem.
Vagyis alapból 0-t mutat a multiméter (1-esben, azaz 3,3V-on van az INT). És ha Interrupt van akkor pedig a felugró érték egy negatív lesz (nem megy el -3,3V-ig, de kb. olyan -1,5V-ig igen).
De a lényegen ez igazából nem változtat. Az a probléma, hogy olyan hosszú időre megváltozik az Interrupt pin, hogy ezt még egy mezei multiméter is simán kimutatja. -
Nem kell külső felhúzó ellenállás, az MCP23017-ben például van belső felhúzó (asszem 100k).
atesss:
"Amikor változás van, rendben 1-be vált az INT pin. Utána kiolvasom az összes bemenetet, rendben látszik is hogy a PCF8574-nek melyik bemeneti pinje változott meg.
De az INT 0-ban marad ez után is, nagyon sokáig.
Direkt beraktam sleep-et, hogy teszteljem ezt, és még 0.1s után is maradt."Elolvastam vagy 5x, de nem értem.
Amikor változás van, miért vált 1-be az INT pin? A PCF8574 INT kimenete active low, vagyis az alaphelyzet az 1, és akkor vált 0-ra, ha van interrupt.
Szerintem fordítva ültél fel a lóra. -
And
veterán
válasz
atesss #13432 üzenetére
"2,2kOhm-os ellenálláson keresztül húzzák földre a pineket, amikor átkapcsolom a kapcsolót/lenyomom a gombot."
A bemenettel soros ellenállás nem igazán kell, de ha maga a port nincs elhúzva a Vcc felé, az nem oké. Lehet 10kΩ is a felhúzó, az csak annyit eredményez, hogy aktív (alacsony) inputnál, megnyomott gombnál a rajta átfolyó áram nagyobb lesz. Nagyimpedanciás inputot amúgy sem szokás szabadon hagyni: extrém alacsonyra tervezett nyugalmi áram (pl. telepes táplálásnál) helyett megnövekedett nyugalmi áramfelvétel, határozatlan szint az eredménye.
16 portos MCP-verzió: MCP23017 (I2C) vagy MCP23S17 (SPI). -
atesss
addikt
Ahha, látom, igazad van.
100kOhm-ot ajánl felhúzónak. Most csak 10kOhm van itthon (már ha egyáltalán megvan az a maradékom még 8db), az esetleg jó lehet ?
A bemenetek közül 4db mikrokapcsoló, 2db meg mikronyomógomb. Ezek most egy-egy 2,2kOhm-os ellenálláson keresztül húzzák földre a pineket, amikor átkapcsolom a kapcsolót/lenyomom a gombot.
Így is jó lehet még a 10k ?Mondjuk azt még mindig nem annyira értem, ez hogyan okoz ilyen hibát. A - felhúzóellenállás hiányában - ha pl. a mosfet feltöltődik, akkor hogyhogy pont ilyen tizedmásodperc nagyságrendű idő lesz mire visszaáll ?
Illetve nem is. Ha az Interrupt Pin 1-es, akkor ez azt jelenti, hogy változott a bemenet.
Vagyis akkor lebeg a Pin, azaz 0 és 1 között ugrál folyamatosan ?Hát hozzávetőleges támpontnak jó az IC ára.
De igazából az a kérdés, a kínaiak mennyiért építettek rá kész modult.
Azt meg nem mindig lehet ilyen egyszerűen magyarázni. Pl. volt hogy néztem, hogy egy teljes modul ára a nagy(1000+) db-os tételben kapható IC áránál is jelentősen olcsóbb volt...MCP230xx-ból amúgy van 16 portos, vagy akár még annál is nagyobb kivitel ?
-
And
veterán
válasz
atesss #13429 üzenetére
"Hát igazából felhúzó ellenállást nem raktam fixen a Raspberry GPIO pinekre, csak egy soros 330 Ohm-os ellenállást."
Nem is a RasPI GPIO-pinjeire gondoltam, hanem a PCF8574-re: ha a portjait csak inputnak használod (másképp fogalmazva: az I2C-busz csak olvassa a chip-et, sosem írja), akkor a portok mindegyikére illik 1-1 felhúzót tenni, lásd a rajzot a 15. oldalon, amire korábban hivatkoztál. Lebegve hagyni csak akkor lehet a Px-portok bármelyikét, ha kimenetként írod azokat (a többivel együtt).
"Utánanézek részletesen akkor ennek az MCP230xx-nek is. Csak persze az is kérdés, hogy mennyivel drágább ez a modul..."
Maga az MCP23008-as chip (ez a 8-portos, a PCF8574-hez hasonló kivitel) nettó 300 Ft körül kapható a hazai forgalmazónál, szóval van rá esély, hogy ha valaki nagy tételben veszi a gyártótól és modulra építi, akkor nem lesz veszett drága a PCF-es modulhoz képest. Ha nyákot is tervezel a kész kivitelhez, akkor meg mindegy, maga a chip is elegendő.
Emlékeim szerint volt már említve ebben a topikban az MCP23..-as I/O-extender, és mások is jó véleménnyel voltak róla. Létezik belőle SPI-buszos kivitel is, MCP23S08 típusjellel. Elég jól felépített, valódi kétirányú portokkal rendelkezik, 11 belső regisztere van és szanaszét konfigurálható. -
atesss
addikt
Hát igazából felhúzó ellenállást nem raktam fixen a Raspberry GPIO pinekre, csak egy soros 330 Ohm-os ellenállást.
Mondjuk belegondolva ez - ha a GPIO bemenet Mosfet-es, amire jó esély van - akár okozhatna is problémát. Bár eddig még sehol nem fordult elő ebből problémám.
De ha pont ez okozná a gondot, akkor miért lesz a "GPIO-nullázódás" ideje pont ilyen "emberi léptékű" tized-másodperces időtartományban ?
Igen, mind a 8 pin bemenetként van használva.
Illetve pontosabban a 8-ból 2 nincs is használva, azt én nem is kötöttem be sehova.
Ugyan nem tudom a modulon belül van-e bárhova kötve, de igazából nem nagyon kellene. Főleg nem VCC-re.
Igen, azt néztem is hogy ezt "quasi-bidirectional" -nak írták. De eddig még nem mentem bele, hogy ez pontosan mit is jelent elektronikai szempontból.
"maszkolni a megszakítást (adott input eredményezzen-e olyat)" - Ez is hasznos mondjuk.
Hát ezek tényleg nagy előnynek hangzanak azért így együtt már. Utánanézek részletesen akkor ennek az MCP230xx-nek is.
Csak persze az is kérdés, hogy mennyivel drágább ez a modul...
Meg mennyivel nagyobb a modul nyákja, stb. -
And
veterán
válasz
atesss #13426 üzenetére
A bemenetek mindegyikére tettél felhúzó ellenállást? Nincs prell a bemenet(ek)en? Egyáltalán: csak adatot olvasol a PCF-ből, vagyis minden portot bemenetnek alkalmazol?
Ennek a port extendernek az előnye - nem kell külön belső regisztereket konfigurálni - egyben hátrány is lehet. Egy jobban beállítható extender, pl. az MCP230xx esetén portonként be lehet lőni az adatirányt, maszkolni a megszakítást (adott input eredményezzen-e olyat), és az INT-kimenet működése is elég részletesen befolyásolható. -
válasz
XP NINJA #13123 üzenetére
Szia! Én első körben megpróbálnám a szenzort 3,3V-ról megtáplálni, ha szerencséd van, működni fog.
Úgy tudom egyébként, hogy az ESP32 ADC-je elég vacak, talán megérné egy külső 5V-os ADC-t beiktatni, i2c-n keresztül, azt pedig jó eséllyel tudod külön illesztés nélkül az ESP-re kötni oly módon, hogy az i2c busz felhúzó ellenállásait az ESP 3,3V-ra húzod fel. -
And
veterán
válasz
Janos46 #13049 üzenetére
Belefutottunk már hasonlóba ezzel az SSD1306-os vagy kompatibilis vezérlővel. Egy darabig ment, aztán egyszer csak induláskor hasonló szemetelést produkált a kijelző. Más példánnyal / típussal egyszer normálisan elindult, másszor meg szemetelt. Akkor azt vettük észre, hogy a jelenség a tápfeszültségtől függ. Hiába volt a típus leírásában az Aliexpress-en, hogy Vcc: 3,3...5V, ha stabilizált 5.0 V-ot kapott, akkor gyakran csinált ilyet. Viszont ha a tápját akár csak egy soros Schottky-diódával, 2-3 tizedvolttal csökkentettük, a jelenség megszűnt. Ezt esetleg kipróbálhatod, ha most 5V a display tápja. Ha jobban kellene csökkenteni a tápot, akkor esetleg az I2C-busz felhúzó ellenállásait is erre a redukált tápfeszre kellene kötni (nem tudom, mennyire 5V-toleráns az oled SDA / SCL lába, ha a modul annál jóval kisebb, pl. 3.3V-os tápot kap). Ha a felhúzók az arduino-n vannak, akkor ez nem annyira járható út, de egy próba erejéig akár a kontroller tápja is csökkenthető egy picit.
-
Nyirike
csendes tag
válasz
gyapo11 #12526 üzenetére
Tegnap megcsináltam a kapcsolást több ellenállás párral. Mindegyiknél ugyanaz a eredmény. Maximum 200ohmig tudom visszaszámolni a termisztor értékét, Hiába emelem 500 esetleg 1kOhmig.
Elkezdtem nézni a feszültségosztó képletét és mivel 90Ohm a felhúzója a műszernek, amint emelkedni kezd a drasztikusan a termisztor ellenállása annál kisebb értékben változik a rajta eső feszültség így a visszaszámoló képlettel egyre pontatlanabb.
A mutató amúgy 60-110 fok között mutat valamit így érthető hogy úgy lett belőve a felhúzója.
Tesztek alapján igazából e tartomány között viszonylag pontosan tudom mérni a termisztor értéket arduinoval persze lekövetve a tápfeszültséget ami 12 esetleg 14.4 vagy bármi más lehet.A képletek jól működnek, mert folyamatosan kiraktam a consolera a számolt feszültség eséseket a mutatón, a termisztoron és a plusz feszültségosztón és mindegyik az, amit számolok.
Tehát köszönöm a segítséget. A mutató és az arduino is jól megy úgy hogy nem zavarják be egymást.
Az általad írt Emitter követő tranzisztor bekötése pontosabb értéket adna? Tudnék 200 ohm fölé is számolni? Vagy érdemlegesen nem változna sokat az érték?
-
Nyirike
csendes tag
válasz
gyapo11 #12520 üzenetére
Köszi.
Így gondoltad?
Így hogy változik a termisztor ellenállás mérése a kódban?
Eddig úgy csináltam hogy 4.7k ellenállással felhúztam 5V-ra mérés után ki tudtam számolni:
float vA1 = analogRead(A1);
float R2 = (float)4700 * (1023.0 / (float)vA1 - 1.0);Ez már így nem jó. Se a felhúzó nincs se a divider nincs benne.
-
Nyirike
csendes tag
Köszi a gyors választ.
Igen analóg bemenetre kötöm A1 ha jól emlékszem. A termisztort magában mértem és elég alacsony ellenállásokkal dolgozik. 250 Ohm-0 között van az értékelhető hőfok görbéje. A mutató 40 és 110 között mér és nekem sem kell nagyobb range. 9 fokban 1600Ohm, de igazából mindegy is.
Itt a mutató sematikus rajza.A TH az a Thermistor pin. Amúgy a 15 és 75 Ohm sorba van kötve (megmértem tehát úgy tűnik hogy 90 Ohm a felhúzó ellenállása a bejövő jelnek.
Hogy kellene akkor bekötnöm a arduinot? Mivel 0-12V lehet a TH-n pinen lévő feszültség emiatt ahogy írtad kellene a feszültség osztó.
A 90ohm-s felhúzó megkavarja a mérést is nem? Magában a termisztort tudom mérni egy 5V-ra való felhúzó ellenállással, de ha bekerül egy feszültség osztó akkor hogy változik a mérés?
Köszi
-
válasz
MasterMark #12192 üzenetére
A low-ra kellene dugni, is kapcsold be a bemeneten a beépített felhúzó ellenállást (INPUT_PULLUP). Akkor lehet, hogy sima digitalread is beolvassa majd.
Új hozzászólás Aktív témák
- Milyen széket vegyek?
- Megérkezett a Google Pixel 7 és 7 Pro
- Hivatalosan is bemutatta a Google a Pixel 6a-t
- AMD Navi Radeon™ RX 7xxx sorozat
- Teljes verziós játékok letöltése ingyen
- Lexus, Toyota topik
- Napelem
- PlayStation 5
- Győr és környéke adok-veszek-beszélgetek
- Komolyan ráállt a csúcs-GeForce-ok átalakítására Kína
- További aktív témák...
- Samsung Galaxy S23 Ultra 256GB Kártyafüggetlen 1Év Garanciával
- Bomba ár! Dell Latitude E7240 - i7-4GEN I 16GB I 256SSD I 12,5" HD I HDMI I Cam I W10 I Garancia!
- VÉGKIÁRUSÍTÁS - REFURBISHED - HP Elite / ZBook Thunderbolt 3 docking station
- Telefon felvásárlás!! Samsung Galaxy S24/Samsung Galaxy S24+/Samsung Galaxy S24 Ultra
- Nvidia Quadro P400/ P600/ P620/ P1000/ T400/ T600/ T1000 - Low profile (LP) + RTX A2000 6/12Gb
Állásajánlatok
Cég: FOTC
Város: Budapest