- btz: Internet fejlesztés országosan!
- sziku69: Fűzzük össze a szavakat :)
- Kraz
- koxx: Bloons TD5 - Tower Defense játék
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- bitpork: Phautós tali a Balcsinál 2025 Augusztus 2 napján (szombat)
- Real Racing 3 - Freemium csoda
- laskr99: Processzor és videokártya szilícium mag fotók újratöltve!
- D1Rect: Nagy "hülyétkapokazapróktól" topik
Hirdetés
Köszönjük a sok biztatást, támogatást! Utolsó pillanat a féláras hirdetésfeladásra, előfizetésre!
-
LOGOUT
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
-
válasz
Tomika86 #16175 üzenetére
Röviden: sehogy. Hosszabban: a hétköznapi autók sebességmérője is ± 5-10% pontossággal dolgozik, nem lehet előre beállított módon pontosan mérni az utat egy alapvetően nem fix kerületű, rugalmas abronccsal, hacsak nem veszed számításba a gumikopást és a keréknyomást. Szóval ne csinálj ebből nagy gondot.
Esetleg próbálkozhatsz beépített GPS-szel, ha már adott a mikrokontroller, nagyobb sebességen nagyobb pontossággal tudsz mérni sebességet és utat is. -
Janos250
őstag
válasz
Tomika86 #16169 üzenetére
A stack méretet szerintem csak próbálgatással lehet belőni. Adsz valami jó nagyot, aztán addig csökkented, amíg jó. Minél több változót definiálsz a függvényen belül, annál nagyobb kell. Ha globálisak a változóid, akkor kevesebb.
Igen, simán szétszedheted gyakorlatilag akárhány részre, és megszabhatod, hogy melyik rész hol fusson. -
Janos250
őstag
válasz
Tomika86 #16165 üzenetére
Az egyik felét hagyod a loopban, az fut majd az 1-es magon.
Csinálsz egy függvényt, abba teszed a másik felét, és az megy ./*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/
TaskHandle_t Task1;
//TaskHandle_t Task2;
// LED pins
//const int led1 = 2;
//const int led2 = 4;
void setup() {
Serial.begin(115200);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
//create a task that will be executed in the Task1code() function, with priority 1 and executed on core 0
xTaskCreatePinnedToCore(
Task1code, /* Task function. */
"Task1", /* name of task. */
10000, /* Stack size of task */
NULL, /* parameter of the task */
1, /* priority of the task */
&Task1, /* Task handle to keep track of created task */
0); /* pin task to core 0 */
delay(500);
/*
//create a task that will be executed in the Task2code() function, with priority 1 and executed on core 1
xTaskCreatePinnedToCore(
Task2code,
"Task2",
10000,
NULL,
1,
&Task2,
1);
Ez nem kell, mert a loop automatikusan a 0. magra megy.
*/
delay(500);
}
//Task1code: blinks an LED every 1000 ms
void Task1code( void * pvParameters ){
Serial.print("Task1 running on core ");
Serial.println(xPortGetCoreID());
/*
for(;;){
digitalWrite(led1, HIGH);
delay(1000);
digitalWrite(led1, LOW);
delay(1000);
*/
// ide jön a 0-án futtatandó programrész
Serial.print("Task1 running on core ");
Serial.println(xPortGetCoreID());
}
}
/*
//Task2code: blinks an LED every 700 ms
void Task2code( void * pvParameters ){
Serial.print("Task2 running on core ");
Serial.println(xPortGetCoreID());
for(;;){
digitalWrite(led2, HIGH);
delay(700);
digitalWrite(led2, LOW);
delay(700);
Serial.print("Task2 running on core ");
Serial.println(xPortGetCoreID());
*/
}
}
void loop() {
// ide jön, ami az 1-es magon fusson
} -
PeterPH
senior tag
válasz
Tomika86 #16158 üzenetére
Arduino IDE esetén nincs jelentősége, PlatformIO+VSCode esetén mindenképp előbb kell deklarálni, vagy definiálni.
Valószínűleg a task watchdog indítgatja újra, mert az idle taskok nem jutnak szóhoz. Kis delay esetleg segíthet a loop illetve a 0. magon futó cikluson belül. Vagy tiltsd le a watchdog-ot. -
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?
-
And
veterán
válasz
Tomika86 #16148 üzenetére
Alapban jónak tűnik, bár a ciklusban így nem nagyon van késleltetés. A command-ként beküldött 0x0C viszont nem oké, ha single ended konfigurációban kapcsolod az ADC-re a mérendő feszültséget. Utóbbi esetben a COM-pin a negatív referencia (= GND), ehhez pedig az SD-bitet 1-be kell állítanod (COM = 0x8C).
-
And
veterán
válasz
Tomika86 #16143 üzenetére
(Ezt csak úgy megkérdezem: miért kell annyira library-függővé tenni ennek az ADC-nek a működtetését? Az összes I2C kommunikáció 2 byte /cím + parancs, utóbbi mindössze hat hasznos bitet tartalmaz/ beírásából majd 3 byte /cím + 2 byte eredmény/ kiolvasásából áll. Nem lenne egyszerűbb ezt natív I2C-parancsokkal megoldani? Tényleg nem tudom, mit ad még ehhez hozzá a library, mert nem ismerem. De az ADC nyers kezelése sem egy űrtudomány.)
-
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?
-
-
válasz
Tomika86 #16130 üzenetére
Mire gondolsz az ügyes képkocka számolas alatt?
Hát ha van mondjuk másodpercenként egy beolvasás. A két érték különbözetét elosztod mondjuk 12-vel, és 1/12-ed másodpercenként növelve/csökkentve újra küldöd a köztes értékeket. Igaz így lesz a folyamatban egy 1mp-es késés, de gyakoribb beolvasásnál ez csökken. 2-3 beolvasásnál szerintem már észre sem lehet venni.
Az egy ciklus lefutási idejét a micros vagy millis értékének a számolásával a loop elején és végén megtudom határozni a ciklusidőt?
Igen, de pontosabb értéket kapsz, ha mondjuk 1000 ciklust mérsz le és visszaosztod. Már ha van erre lehetőség.
-
válasz
Tomika86 #16124 üzenetére
A mutató sebességének a folyamatosságához elég 12-15 mintavétel is, de valójában akár másodpercenként 2-3 mintavétellel is meg lehet oldani a folyamatos mozgást mondjuk a sebességmérőnél vagy a fordulatszámmérőnél, csak a két érték közti "képkockákat" kell ügyesen kiszámolni.
-
And
veterán
válasz
Tomika86 #16125 üzenetére
Ja, hogy ez még mindig a mutatós / Nextion-os projekt
. Nem halott ügy, de akkor sincs szükséged sok ezer minta / szekundumos sebességre, maximum néhányszor 10-es nagyságrendben. Igen, az ADC maximális sebessége 50 kSps, de ez csak az általa támogatott legnagyobb I2C-órajelnél realizálható, mivel utóbbi gátat szab a nagyobb konverziós rátának. A standard 100 kHz-es I2C mellett a ADS7828 legnagyobb elérhető sebessége adatlap szerint 2000 sample/sec.
Az ADS111x-ek 16-bites, nem is túl gyors ADC-k, szerintem 'analóg' kijelzéshez túlzás ekkora felbontás. Jó az ADS7828 is, de nagyobb sebességnél valóban kis forrásimpedanciát igényel, vagy egy külső követő / puffererősítőt (pl. 1x-es rail-to-rail OPA-kapcsolás formájában). -
And
veterán
válasz
Tomika86 #16122 üzenetére
Az adatkiolvasás (amit megelőz a command byte beküldése, ami ténylegesen indítja a konverziót) sebessége annyi, amennyit az I2C-master konfigurációnál megadsz. Valójában nem a kiolvasás sebessége az érdekes, hanem a teljes A/D-konverziók egy másodperc alatti száma, bár lehet, hogy te eleve ezt értetted alatta. Ez egy SAR-regiszteres ADC belső pufferfokozat nélkül, vagyis a bemeneti mintavevő és -tartó kapac töltési / kisütési rátája határozza meg a bemenőáramot - ez a túlságosan nagy forrásimpedancián keresztül meghamisíthatja a mérés eredményét -, ami így végső soron az SPS-értéktől függ. Te eleve egy lassan változó DC-szintet szeretnél konvertálni, nincs szükséged őrületes mintavételi sebességre.
#16115: mivel az A/D-konverziónak része a mintavétel, ami egy konverziós ciklus alatt egyszer történik meg, ezért a kettő ekvivalens. Az ADC adatlapja is hol így, hol úgy hivatkozik rá. -
And
veterán
válasz
Tomika86 #16110 üzenetére
Azért én csak megnézném, mit produkál tized akkora ellenállásokkal (így az osztó árama még mindig csak 1mA körüli lesz). Ha a konverziós ráta alacsony, vagy relatív hosszú időközönként veszel csak egy-egy mintát, akkor nem ezzel lehet a fő probléma. A bemeneti COM és a táp GND-je amúgy össze van kötve?
-
And
veterán
-
And
veterán
válasz
Tomika86 #16105 üzenetére
Ha belső referenciát használsz, mindenképp 2,5V lesz a mérés vége. Viszont konfigurálható pl. a bemenet típusa (szimpla vagy differenciális) a referenciaforráson felül. Pontosan milyen értéket küldesz be a command byte-on keresztül? [mod: valamint melyik pin-ekre van kötve a bemeneti forrás?]
Az adatlapon nem látok követelményt vagy ajánlást a forrásimpedanciára vonatkozóan, de kicsit túlzónak érzem a külső feszültségosztó - ha jól értem, az van a bemenet előtt - és az azt követő RC-szűrő ellenállásértékeit. Annyit említ, hogy a bemeneti áram a konverziós ráta függvénye, és hogy a belső mintavevő kapacitás 25 pF értékű. -
stopperos
senior tag
válasz
Tomika86 #16103 üzenetére
Én nem ismerem, de az adatlapja alapján van neki egy 2,5V-os belső referenciája. A kérdés, hogy te mit csinálsz a REF_in/REF_out lábbal, van rá kötve valami? Vagy úgy programoztad, hogy a belső referenciát használja?
-
Janos250
őstag
válasz
Tomika86 #15969 üzenetére
Drivere válogatja, de általában fájl jelleggel írod, olvasod. Vagyis amit először írsz be, kiolvasásnál az jön először. Nem név, hanem sorrend alapján. Bár, én az SPIFF-et csak próbáltam, ténylegesen soha nem használtam, ezért talán majd azok jobb választ adnak, akik ténylegesen használják is.
-
Janos250
őstag
válasz
Tomika86 #15967 üzenetére
Nem látom a programod, de ha másról ültetted át ESP32-re, ez más programozási technikákat is lehetővé tesz. Például szenzorok olvasása szenzoronként mehet külön taskokba, külön magra. Pl. a szenzorok kezelése taskok a 0-ás magra, a főprogram meg az egyesre, mert a loop-ot automatikusan oda teszi. Egy taskban beolvasod egy szenzor értékét, beteszed egy globális változóba, majd delay, ami átadja a vezérlést a következő tasknak. Ha időzítésekben jó a körülbelüli, akkor milliszekundum olvasása, ha meg jóval pontosabbat akarsz, akkor a 80 Mhz-es busz órajel ciklusait számláló regiszter olvasása. (A chip órajele ugyan 240 Mhz, de azt nem tudod olvasni, csak a belőle képzett 80 Mhz-es busz órajelet.) Ez már elég pontos.
-
válasz
Tomika86 #15961 üzenetére
"Enable (EN)
Enable (EN) is the 3.3V regulator’s enable pin. It’s pulled up, so connect to ground to disable the 3.3V regulator. This means that you can use this pin connected to a pushbutton to restart your ESP32, for example."Ez alapján nem kell sehova kötni, ha nem akarod kézzel resetelni a lapot.
-
válasz
Tomika86 #15958 üzenetére
olvasas[tomb] = rpm; erre írja a cpu megállást.
Ez elég elég jellegzetes hibalehetőség, lehet, hogy a program a tömb definiált méretén túl próbál írni! Nézd meg alaposan, hogy túllépheti-e a "tomb" változó értéke az olvasas tömb definiált méretét! Ha te nem találod a hibát (a saját kódjában az ember nehezebben látja meg a logikai hibát), tedd fel a pastebin-re, segítünk megkeresni.
Arduinon ment a program teljesen, egyedül az i2c az új.
meg ezek szerint az architektúra is más. Korábban szó volt a különböző architektúrák közti különbségekről, lehet ott van a kutya elásva.
En lábat nem kötöttem sehova
Micsodának az En lábát?
-
-
Janos250
őstag
válasz
Tomika86 #15879 üzenetére
"Esp32 esetén is a láb számával adom meg hogy mi hova van bekötve?"
Igen, de vigyázz, mert a lapokon néha összevissza van jelölve.
"Illetve Tx1, Rx1 a Serial1 itt kell lábszámot megadni, vagy az alapértelmezett jó?
Tx2, Rx2 lábszámai hogy adhatóak meg? Vagy nem kell? Csak Serial2?"
Serial1-nél meg kell adni a beginben a lábszámokat, mert a default nem jó, mert azt a belső flash használja.
Ha Serial2-nél a default lábakra kötötted, akkor nem kell megadni.
I2C:
https://randomnerdtutorials.com/esp32-i2c-communication-arduino-ide/ -
Janos250
őstag
válasz
Tomika86 #15862 üzenetére
Itt vannak a megfeleltetések.
Van ugyan még plusz aláhúzás, de az ne zavarjon, többszörös átültetés során kerültek bele ilyesmik bőven.typedef signed char __int8_t ;
typedef unsigned char __uint8_t ;
#define ___int8_t_defined 1
typedef signed short __int16_t;
typedef unsigned short __uint16_t;
#define ___int16_t_defined 1
typedef signed int __int32_t;
typedef unsigned int __uint32_t;
#define ___int32_t_defined 1
typedef signed long long __int64_t;
typedef unsigned long long __uint64_t;
#define ___int64_t_defined 1
typedef __int8_t __int_least8_t;
typedef __uint8_t __uint_least8_t;
#define ___int_least8_t_defined
typedef __int16_t __int_least16_t;
typedef __uint16_t __uint_least16_t;
#define ___int_least16_t_defined
typedef __int32_t __int_least32_t;
typedef __uint32_t __uint_least32_t;
#define ___int_least32_t_defined
typedef __int64_t __int_least64_t;
typedef __uint64_t __uint_least64_t;
#define ___int_least64_t_defined
typedef __INTPTR_TYPE__ __intptr_t;
typedef __UINTPTR_TYPE__ __uintptr_t; -
Janos250
őstag
válasz
Tomika86 #15860 üzenetére
Főként a microkontrolleres alkalmazásokban terjedt el az int8_t, uint8_t, stb. alakokat használni, ahol fixen megadjuk a memóriában a méretet, és hogy előjeles, vagy előjel nélküliként értelmezze a számítások során.
Idővel (C++11 óta) bekerült a szabványos C++ -ba is,
https://en.cppreference.com/w/cpp/types/integer
Én mindig ezeket az alakokat használom, mert így biztosan tudom, milyen lesz, én így jobban szeretem. -
válasz
Tomika86 #15862 üzenetére
Ha jól tudom sima int-es megadással se vizsgálja meg, hogy neked valójában csak 8 bitre van szükséged, azaz sokkal több memóriát foglal le, int32 vagy int64-nek veszi, mint ha te fixen 8 bitesnek adod meg, mert amúgy meg beleférne az adat. De azért várjuk meg más mit ír.
Én is változó hogy adom meg, sokszor függ a minta kódtól is, ha ott valami int-el van megadva akkor úgy hagyom. -
válasz
Tomika86 #15860 üzenetére
Ha int-et írsz, akkor az asszem feltételezi a "legrosszabb" esehetőséget és uint64 lesz használva. Ha megnéznéd mi van az int mögött, akkor számos más függvényt találnál, aminek a legvégén lesz talán az uint64. De majd kijavítanak ha rosszul írom.
Úgy tudom a kód hatékonyabbá tehető, ha pl in8-as adatot nem int16-al adsz meg és végképp nem a teljesen general int paranccsal, mert indokolatlanul több helyet használsz. Manapság már a több memóriaterület miatt kevésbé számít, főleg hobbi szinten.
-
-
And
veterán
válasz
Tomika86 #15735 üzenetére
"Van hátránya az I2C külső ADC ICnek?"
Azon felül, hogy elfoglal néhány pin-t (már ha az ehhez szükséges adatbusz amúgy nem létezik / nem használt), inkább csak előnyei lehetnek: nagyobb felbontás, jobb konfigurálhatóság, differenciális bemenet lehetősége, kisebb zaj, jobb linearitás, egyéb képességek, pl. változtatható előerősítő, stb. -
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.
-
Janos250
őstag
válasz
Tomika86 #15706 üzenetére
Lehet, hogy nagyon rossz megoldás, de én az egyik panelomon így csináltam:
Input feszből DC/DC konverter csinál kb 7 voltot.
A 7-ből LDO 5-öt, illetve 3.3-at.
Jumperezhető, hogy az ESP32 közvetlenül 3.3-at kapjon, vagy a Vin-re 5 V-ot.
Ez utóbbinak - elvileg stabilabbnak kéne lenni, mert közvetlenül a panelon van, nincsen hosszabb hozzávezetés. -
And
veterán
válasz
Tomika86 #15703 üzenetére
"Nextion ha jól tudom tud 3,3Vos adatbusszal kommunikálni."
Olyannyira, hogy bár a tápfeszültségük 5V, a Nextion-ok Tx-vonala konkrétan 3,3V szintű jelet ad. Ezért a kapcsolódó kontroller UART-áramkörének vételi érzékenysége és tápja függvényében esetenként szükség lehet egy szintillesztő beiktatására is. -
Janos250
őstag
válasz
Tomika86 #15694 üzenetére
Pl ennél:
https://www.banggood.com/ESP32-WiFi-+-bluetooth-Development-Board-Ultra-Low-Power-Consumption-Dual-Core-ESP-32-ESP-32S-Similar-ESP8266-Geekcreit-for-Arduino-products-that-work-with-official-Arduino-boards-p-1175488.html?cur_warehouse=CN&rmmds=search
ki sincs vezetve.
OFF: 8$-ért az új szabályok szerint is bejön, mert ebben már minden benne van (azaz szállítás, VÁM, ÁFA, vámkezelési díj) , azokat az áruház beléptetéskor kifizeti. -
Janos250
őstag
válasz
Tomika86 #15694 üzenetére
Csak úgy hirtelen ránézésre:
Micro SD 1/2 tippem szerint biztosan rossz, mert azokat a lábakat a belső flash használja.
Én micro SD-re a VSPI-t használom. (mert csak)
https://randomnerdtutorials.com/esp32-microsd-card-arduino/
"GPIO6 to GPIO11 are connected to the intagrated SPI flash integrated on ESP-WROOM-32"
A lapok nagy részén ki sincs vezetve lábhoz. -
vargalex
félisten
válasz
Tomika86 #15682 üzenetére
Utóbbira írtam, hogy mivel a változó értéke egy másik változótól függ, így az ne változó, hanem függvény legyen. Most csak telefonról vagyok, de nagyon csúnyán:
unsigned long PeriodBetweenPulses() {
return ZeroTimeout+1000;
}
Majd, ahol használod, ott a
PeriodBetweenPulses
-t lecseréledPeriodBetweenPulses(
)
-re. -
Tankblock
aktív tag
válasz
Tomika86 #15678 üzenetére
Szia,
Ha a példádat felpakolod a Git, .... ahol meg tudod osztani egyértelműen könnyebb lenne a helyzet....
Kérdés hogyan szeretnéd változtatni azokat az értékket a kijelzőn....
az biztos, hogy a
numReadings
változót nem szerencsés változtatni ha így marad a kód.
minden olyan helyen ahol tömb van ezzel a mérettel plunsigned long readings[numReadings];
ott át kell méretezni vele egyidőben a tömböt is.... Ha ez sima C akkor ugye calloc malloc páros ha jól rémlik..... De az futásidőben szép feladvány lesz, inkább egy láncolt lista mint ezt csinálni..... Még azzal is jobban jársz ha max méretű tömböt hozol létre és csaknumReadings
nyi adatot préselsz bele, majd nem engeded max -1 fölé a számolót..... -
vargalex
félisten
-
weiss
addikt
válasz
Tomika86 #15669 üzenetére
Alapvetően nem szerencsés globális változót használni, mert azt bárhonnan eléred, ezért nem tudhatod hol módosult. Ez főleg hibakereséskor fontos. Nem tiltja meg senki, és ha a te kódod úgy sokkal egyszerűbb, akkor hajrá. Van valami konkrét kód is, amit meg tudsz mutatni?
-
weiss
addikt
válasz
Tomika86 #15666 üzenetére
Ha módosítani akarod, akkor az nem konstans.
Működik persze, a C-ben az a jó, hogy engedi, hogy lábon lődd magad
Viccet félre téve, nyilván nem fér bele egy int egy byte-ba, csak ha nem használod ki az int ranget, ha még tudod, hogy belefér nem kell castolni. Arra vigyázz, hogy az int alapból signed.
Lokális szebb, de néha kell a globális.
-
Janos250
őstag
válasz
Tomika86 #15637 üzenetére
A Tx0, Rx0 maradjon a helyén, használd a Tx2, Rx2-t: GPIO17, GPIO16 !
SPI:
A CS (GPIO5), a MOSI (GPIO23), A MISO (GPIO19), a CLK (GPIO18) kellenek.
Ezeket a cardreader ugyanolyan nevű lábaihoz kell kötni.I2C:
SCL (GPIO22), SDA (GPIO21)CAN:
Még nem használtam, bár tervben van, a transceiver már megvan hozzá, de pihen, így én csak azt tudom, amit írnak:
http://www.iotsharing.com/2017/09/how-to-use-arduino-esp32-can-interface.htmlHa úgy gondolod, hogy segítség, átküldöm az egyik panelom kapcs. rajzát, ahol ezek be vannak kötve.
Javítás:
Nem is kell, hogy elküldjem, mert itt van:
https://prohardver.hu/tema/arduino/hsz_15436-15436.html -
válasz
Tomika86 #15632 üzenetére
Ha jól emlékszek akkor fel lehet fűzni is az i2c-re és spi-ra is több eszközt, csak mindig a megfelelőt kell megszólítani. Így elvileg nem lesz gond. Amire nem emlékszek az az, hogy ha pl használsz valamilyen kommunikációt, mondjuk i2c akkor működik-e vajon az uart is, vagy ha uartra kötöd a nextiont, akkor tudod-e közben debugolni arduino ide-vel. Lényeg amit akarok ezzel jelezni, hogy meg kell nézni, ha valamelyik lábat nem gpio-ként használod, hanem i2c, uart, spi stb, akkor nem üti-e egyik a másikat mert ugyan azon a belső áramkörön van és hiába van több helyre kivezetve, egyidejűleg nem lehet mindkettőt használni.
Az ADC-re emlékszek, hogy ott van ilyen kitétel, a többit meg kell nézni nem emlékszek teljesen már.
-
válasz
Tomika86 #15629 üzenetére
Én ilyet használok: [link]
Lehet legközelebb már nextiont vennék, bár ez se rossz ha működik. Betekintési szöge fentről és oldalról jó, másik 2 irányból nem az igazi. Elsőt amit rendeltem egy idő után csíkozni kezdett ha melegszik. Másodikat használom azóta, szerencsére azzal nincs gond. Egyedül az ára zavar a nextionnak. Ha kevés a pin esetleg, akkor egy plusz IC-t kell beiktatni ami többszörözi a pineket, most nem ugrik be a neve.ADS1115-re ha jól emlékszek 4 analog bemenet köthető. AZ ESP32 lábai azért lehet esetleg kevés, mert az AD1115-nek kell pár láp az I2C kommunikációhoz, nextionnak is kell pár, szinten SD-hez is.
-
válasz
Tomika86 #15627 üzenetére
Igen én is azt használom az időjárás állomásnál az aksi feszültség mérésére. Több, mint amire szükségem van, de mivel van hozzá minta kód és én is ezt találtam meg, ezért ezt választottam. Szerintem amihez találsz arduinos kódot az mind jó lehet.
Nekem az ADC az egyedüi hátrány. Ha valakinek sok pin kell akkor esetleg az még hátrány lehet. A jelszint alatt ha a 3.3V-ot érted az nekem például előny, többnyire ilyen alkatrészeket használtam, persze ez felhasználás függő.
A kíniai fejlesztői panelek egy részén megy az automatikus kód letöltés minden gomb megnyomása nélkül, másiknál meg csak akkor, ha lenyomom a flash gombot és lenyomva tartom. Ez nem ESP32 hiba, nem is értem mi az oka, van hogy egyik nap még jó másnaptól meg nem megy csak gombot lenyomva a letöltés.Wifi nagy előny, ESPnow-al kettő eszköz tud egymással kommunikálni wifin. Én rendeltem utóbb 2 db arduino mini-t ha esetleg kellene legyen, de ezen kívül csak ESP32-ből van 2 db. Ha vennem kellene maradnék az ESP32-nél.
-
válasz
Tomika86 #15615 üzenetére
10cm vezeték, eaton 10kohm
Az külső zaj szempontjából jónak mondható.Schmitt-trigger: nem árt, ha tudod, hogy az AVR-ekben gyárilag van egy analóg komparátor (egy belső opamp), állítható referenciafeszültséggel, amire interruptot is tudsz beállítani. Ha esetleg külön külső áramkör nélkül szeretnéd megoldani. Bár a sebességét nem tudom, hogy mennyire lenne alkalmas a feladatra, de szerintem 8000rpm-mel még simán megbirkózik.
-
válasz
Tomika86 #15608 üzenetére
Írj az uno-ra egy programot, ami kihagyja az ADC-t, és magától sweep-el az alsó és felső frekvencia közt, egyenletesen vagy random értékek közt.
De azt is lehetne, hogy kihagyod a pwm megoldást, és te magad állítod elő a négyszög jelet, a loop ciklusban, delay-ekkel. Mivel a programnak gyakorlatilag nincs más dolga. -
válasz
Tomika86 #15605 üzenetére
Az ugrálás nem az uno-ból ered? A kódban semmi sem indokolja. Mint ahogy a 0-ra zuhanást sem.
A potméter értékét sem kellene egy az egyben alapul venni, azt is szűrni (átlagolni) kellene, mert maga az ADC is zajos, és a vezetékek is összeszedhetnek zajt, amivel a potit a bemenetre kötötted. Az autónál pedig amúgy sem fog olyan eset előfordulni, hogy hirtelen változzon a fordulatszám például 0 és 1800 között. -
válasz
Tomika86 #15599 üzenetére
A numReadings = 2; írd át 3-ra, vagy akár 30-ra, mert a két értékből számolt átlag túl kevés a sima kijelzéshez. Addig növeld, míg a kívánt simaságot nem éri el a kijelzés.
A mutató mozgása a fordulatszám növekedésével egyre "izgágább" lesz, mivel az átlag képzése nem az időt, hanem a mérések számát veszi alapul. Tehát vagy beállítasz egy optimális középutat a numReadings-nek, vagy írsz egy idő alapú átlagszámítást. Esetleg a sebesség növekedésével arányosan több mintavételből számolod az átlagot. -
válasz
Tomika86 #15545 üzenetére
Aztán túlcsordul 0-ra, akkor két fordulatnyit hibázni fog, mert csak 2-től számol a kód. Ilyenkor meg fog lódulni a mutató, és pl. 1000-es fordulatnál 333-at fog mutatni egy pillanatra.
Minden számítás után nullázni kell ezt a számlálót, és nem lesz gond. Mármint ha a másodpercenkénti impulzusok számából számolsz.Azthittem az impulzusok közötti időből lehet pontosabban számolni.
Mondom, ez a fordulatszámtól/periódusidőtől függ. Kis fordulatszámnál (pl. 0-100 közt) talán érdemesebb/pontosabb az impulzusok közötti időből számolni. De itt az is számít, hogy a loopban könnyebb az impulzusokat számolni meg az adatokat átlagolni, mint az interrupton belül pl. tömbbe menteni a periódusidőket, az átlagoláshoz. Átlagot pedig muszáj számolni (oversampling), ha nem szeretnéd, hogy darabosan közlekedjen a mutató.
Új hozzászólás Aktív témák
- HP Zbook Firefly 15 G8 - i7-1165G7/24GB/512GB-/W15"/W10 Pro/ ÁFÁ-s
- Lenovo ThinkPad P16s AMD Gen2 R5 7540U / 32GB RAM / 1TB SSD / FHD Touch ÁFÁ-s
- Samsung Galaxy A52s 5G 128GB 6GB RAM Dual (A528) Mobiltelefon
- Ohh Lenovo ThinkPad P15 G2 Tervező Vágó Laptop -75% 15,6" i5-11500H 32/1TB RTX A2000 4GB /1 Millió/
- Uhh Lenovo ThinkPad P15 G2 Tervező Vágó Laptop -75% 15,6" i5-11500H 16/1TB RTX A2000 4GB /1 Millió/
- Gamer PC-Számítógép! Csere-Beszámítás! I5 12400F / RTX 3070 8GB / 32GB DDR4 / 1TB SSD
- Extra olcsó! HP 230 Vezetéknélküli USB-s Billentyűzet
- LG 32GR93U-B - 32" IPS - UHD 4K - 144Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDR 400
- Konzol felvásárlás!! Xbox Series S, Xbox Series X
- HIBÁTLAN iPhone 14 Pro 128GB Gold -1 ÉV GARANCIA - Kártyafüggetlen, MS3029, 90% Akkumulátor
Állásajánlatok
Cég: FOTC
Város: Budapest