-
PROHARDVER!
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
-
Teasüti
nagyúr
Épp az XQueue-val és az xSemaphore-ral ismerkedek.
Szeretnék kipróbálni egy bináris szemafort, amit egy megszakításból szeretnék "adni".
Kérdésem, hogy hogy lehet megcímezni Arduino-ban az UART RX portjára érkező adathoz kapcsolódó megszakítás vektort?Jelenleg a Serial.available() függvénnyel végzek polling-ot, viszont biztos meg lehet valahogy oldani ezt megszakítással is.
-
Tankblock
aktív tag
válasz
Teasüti #10297 üzenetére
Hello
Erre próbáltalak rávezetni...
A taskokat futattod, és a szükséges információkra vársz bennük.
xQueue meg küldöd az adatokat akár még interuptból is.A folyamatos object létrehozás és törléstől én óvakodnék real time rendszerben.
- Sok idő lehet amíg azobjetumok törlődnek és újból létrehozódka
- Ha valamit nem szabadítasz fel a memóriából, vagy az alatta lévő könyvtás hibás akkor memory leak jelenséged lesz.Tanácsom, hogy írd le mit szeretnél, --> requirement
tervezz hozzá tervezési minta alapján valami szép architectúrát
implement
teszt :-)Enjoy it!
-
Teasüti
nagyúr
válasz
tvamos #10292 üzenetére
Ezt a pvParameters-t nem tudom elképzelni hogy tudnám használni a task folytonos meghívása nélkül.
Nálam egyszer setup()-ban el van indítva a végtelen ciklus és ennyi. Indításkor tudnék átadni egy paramétert, de ez haszontalan futás közben.
Vagy arra célzol, hogy ez a koncepció eleve hibás? Lehet nem különálló és független ciklusokat kellene indítani, hanem minden egyes alkalommal meghívni mindent egyesével, majd ha lefutott törölni a példányt?
Ezzel viszont az a gondom, hogy így lényegében lineáris programfuttatás lenne belőle, ha nekem kell sorban elindítgatni a szálakat. -
Teasüti
nagyúr
válasz
Tankblock #10291 üzenetére
Jó észrevétel, ezt a bugot ki se szúrtam volna talán, csak telepítés után!
Amúgy nem hiszem, hogy ez volt a gondja. Azért nem, mert most nem tudom reprodukálni a hibát.
Letöltöttem újra azt, amit megmutattam kódot és most az sem hibázik bootoláskor.
Azóta annyi változás történt, hogy frissítettem az Arduino Core-t 1.0.1-re.
(Egyébként az új verzióban már rendesen működik a BT Serial, akit érdekel. Az 1.0.0 eldobálta a küldött adatot.) -
tvamos
nagyúr
válasz
Teasüti #10290 üzenetére
Nem tudom, hogy a "esp32 kernel panic" dologrol van-e meg szo, de nekem volt problemam azzal, hogy task-ok kozott volatile globalokkal akartam adatokat atadni.
A megoldasthoz ezt a doksit hasznaltam: [link]
Az adatokat ennek a pvParameters mautatonak a segitsegevel adtam at.
Bocs, ha mar nem errol van szo! -
Tankblock
aktív tag
válasz
Teasüti #10290 üzenetére
Szia
Vagy én néztem be (csak notepadba)
de csak a PCNT_CHANNEL_0 használod, tehát ugyanazt a csatornát próbálod meg 2x configolni.
static void initSpeedCounter(void)
{
pcnt_config_t pcnt_config = {
SPEED_SIGNAL_CAPTURE,
-1,
PCNT_MODE_KEEP,
PCNT_MODE_KEEP,
PCNT_COUNT_INC,
PCNT_COUNT_INC,
SPEED_COUNT_UNIT,
PCNT_CHANNEL_0
};és itt is ugyanaz a channel 0...
static void initTachoCounter(void)
{
pcnt_config_t pcnt_config = {
SPEED_SIGNAL_CAPTURE,
-1,
PCNT_MODE_KEEP,
PCNT_MODE_KEEP,
PCNT_COUNT_INC,
PCNT_COUNT_INC,
TACHO_COUNT_UNIT,
PCNT_CHANNEL_0
}; -
Teasüti
nagyúr
válasz
Tankblock #10289 üzenetére
Két PCNT csatorna van használatban, semmi más nem hívja meg a saját taskján kívül.
Szándékosan nem szeretnék megszakítást használni és elvenni a cpu időt mástól, ha hardverből is mehet.Megpróbálom a volatile változókat és a setup() végére rakom a task indítást. Meg utána nézek a szálkezelésnek, xQueue-nek.
(#10288) Janos250
Még nem olvastam el a linket, de "thread"? Ha ez nem ugyanaz mint a task, akkor most hallok erről először.
Ezt intelligensebben kezeli az RTOS?szerk: na ilyet most látok először! És jóval egyszerűbbnek tűnik, mint az RTOS féle xTask.
Viszont gondolom ez nem ugyanazon az absztrakciós rétegen fut, ugye? -
Tankblock
aktív tag
válasz
Teasüti #10285 üzenetére
Hello,
Én inkább a memória/erőforrás kezelés rovására írnám.
Direct használod mindig a PCNT0 csatornát? Az IDF es példaprogramban interuptba számolja az eventeket és xQueue küldi a fő programba.
Szerintem ott akad szét, hogy ugyanazt az erőforrást címzed meg 2 külön taskből és már a setupnál kifagy ahogy írtad.
Amikor megy gondolom valaiért az egyik szál kicsit megcsúszik a FreeRTOS miatt és nem egyszerre próbál funtni 2 init.
Szálkezeléshez jó tervezés kell, mert könnyen lehet Deadlockba futni.
-
Janos250
őstag
Nem próbáltad thread -del?
Akkor az op. rendszer állítgatja be a prioritásokat.
http://arduinouser.hu/esp32/AszalakEsAzESP32.pdf -
Janos250
őstag
-
_q
addikt
válasz
Teasüti #10285 üzenetére
Nem értek annyira hozzá, de a taskok nálam is furán működtek. Már korábban lehet írtam, de most hogy szóba került leírom megint hát ha van összefüggés vagy ötlet.
Task nélkül tökéletesen fut a program: ESPNow, I2C, Wifi(Webserver + NTP), SPI. Ezeket használom. Taskokkal megoldva már kevésbé. I2C-n olvasva nem mindig kérte jól le az adatokat az ESP. Próbáltam prioritásokat állítani, próbáltam 0 és 1 mag között ide-oda pakolászni a taskokat. Néha jól olvasta az I2C adatokat, néha nem, néha meg többször egymás után rossz adatok jöttek. Néha reset segített, néha az se. Emellett volt még a wifi-nél NTP-vel is gond, bár ott nem emlékszek, hogy kimondottan a task okozta-e, de azóta hogy nem task-al oldom meg nincs egyikkel se baj.
Tehát ahogy kezdtem nem értek hozzá, tapasztalatot írtam le, de gyanúm az lenne, hogy az ESP nem teljes értékű 2 magos eszköz mint egy számítógép processzor. 0. magon mennek a perifériák, 1. magon meg nem véletlen van a loop is. Tehát lehet próbálkozni taskokkal, de valójában 1 magos az eszköz, 0. mag a sok periféria elem miatt van, hogy ne akadjon össze. Szerintem.
Szívesen fogadok bármiféle észrevételt.
-
Teasüti
nagyúr
válasz
Tankblock #10282 üzenetére
Köszönöm a figyelmet!
Most nincs előttem a kód, de az utolsó három tasknál jött elő a jelenség. Nem használnak sok változót, a két PCNT-t használó csak beállít egyet-egyet, a harmadik meg kiküldi PWM-re a beállított változót. (Tudom ez mehetne egy taskba is, de a multitask lényege nem pont az, hogy kismillió folyamatot indíthatok?) Mindegy melyiket veszem ki, külön-külön mindegyiktől pánikol az 1. mag. És a 0. magon futnak.
Úgy tűnik magától a taskok számától jön be a jelenség. -
LógaGéza
veterán
Üdv!
Eredeti Arduino Ethernet Shieldet látott valaki mostanában valahol, magyar beszerezhetőséggel? Kellene egy sürgősen, mihamarabb, de sehol nem találok... -
_q
addikt
Sziasztok!
ESP32 SPIFFS-el foglalkozott valaki? Csak olvasgatás szinten néztem rá és felmerült kérdésként a működése. Ez ha minden igaz a 4MB flash-ből foglal le egy bizonyos méretet fájl tárolására, így kevesebb hely marad a fő program számára ha jól értem. Tovább menve az elv is kérdés számomra:
Since if SPIFFS was never formatted it will fail mounting and we need to format it, then we will pass this flag as true. In my case, I already had my file system formatted, so this flag has no effect.
Eszerint hasonló mint egy winchester partícionálás? Ha egyszer lefoglaltam az SPIFFS-nek egy bizonyos méretet (leformáztam), akkor később hiába töltök rá egy egyszer LED Blink programot, nem fogja az egészet letörölni, programot rátölteni és a fentmaradó részt üresen hagyni? Tehát ha többé nem kell a fájlrendszer akkor le kell valahogy törölni az SPIFFS partíciót?
-
Tankblock
aktív tag
-
Teasüti
nagyúr
válasz
Tankblock #10280 üzenetére
Multi tab program, azért .ino az összes. HondaCBR az első a sorban.
Tehát már meghíváskor futnak a taskok mielőtt a végére érne a setup()-nak. Ez új.
Akkor csak átrendezem a setup()-ot.Vannak globális változók, mert végső soron sokminden interaktív lesz. Ha olyan könnyű lenne könyvtárba rendezni mindent, már rég portoltam volna.
A komponenseket természetesen egyesével tesztelem ki, azt is tudom hol jött be a cpu pánik.
Az utolsó három tasknál. Önmagában minden jól fut. Csak együtt nem annyira.Az xQueue és xEvent még új, majd utána nézek. Köszi!
-
Tankblock
aktív tag
válasz
Teasüti #10277 üzenetére
Hello,
Miért az összes file végződése .ino?
Azt nem értem, hogy miért van a fps_cap paramétered a Setup függvényben kiszámolva, de a task már rég fut mire odaérne a számolásban???
A taskok közötti változók kezelésére volatile kellene ha nem lehet máshogy muszáj. Ha meg csak 1x kell
futnia inkább tedd a Task elejére mielőtt a végtelen ciklus futna.....ez inkább C kód mint C++...
Amit tanácsolok, dekomponáld a projectet kisebb részegységekre majd egyesével integráld vissza.
NE használj változókat különböző taskokban főleg ha az csak egy konstans --> arra van a #defineMinimalizáld a változóidat és funkcionlításokat rendezzd classokba...
Task elején class init majd végtelen ciklusba számolja amit kell. Taskok közötti communikációra FreeRTOS is van ajánlása xQueue vagy xEventGroup ha szignálozni kellene,A debug üzeneteket is mentsd le, mert sokat segítenek abban, hogy merre kellene nézelődni. Pluszban most egy MQTT C++ dolgozom és memory leak után nyomozok.
Itt pl a
ESP_LOGI(TAG, "[APP] Free memory: %d bytes", esp_get_free_heap_size());
használom a szabad memória fellelhetőségének. -
XP NINJA
őstag
Sziasztok, ESP32-höz szeretnék oled kijelzőt rendelni. Ez működne? [link]
-
Teasüti
nagyúr
válasz
Janos250 #10276 üzenetére
Hogy kell privát repohoz linket gyártani? Csak olvasóként ismerem az oldalt.
Hagyjuk, így egyszerűbb!
Prioritások:
Vhol azt olvastam, hogy 18 fölött vannak az RTOS taskok. Bár nem vagyok meggyőződve róla.
Amúgy kell némi mozgástér. 6-7 task még csak egy kis része a to-do listámnak. -
Janos250
őstag
válasz
Teasüti #10264 üzenetére
Azt nem mondtam, hogy egyszerű, mert nem erre találták ki, hanem eredetileg az infra távirányítók jelének adására/vételére. Egyébként, ha valaki megcsinálja hozzá a könyvtárakat (mint pl. példádban a ledcSetup, stb.), akkor ebben is pár sor. Persze nem valószínű, hogy valaki megcsinálja, mert valószínűleg nem így akar PWM-et gyártani. Egyébként, ha valaki használja azokat a struktúrákat, amiket korábban Te is használtál a led szalag meghajtására (illetve használja az általad használt könyvtár), akkor némileg szintén egyszerűbb, de akkor meg nem tudja az emberfia, hogy mit csinál. Én szeretem tudni, hogy mit csinálok, ezért szeretem a Tech. Ref-eket.
Pár éve, mikor valahova PWM kellett, akkor azt STM32-vel csináltam, azok is jó procik. Ott is Tech. Ref. alapján. -
Teasüti
nagyúr
válasz
Tankblock #10272 üzenetére
Nem találok megosztás gombot Github-on, így remélem a repo oldalának címe elég lesz.
Mondjuk lefuttatni nem fogod tudni szerintem a függőségei nélkül.
De ha belekukkantasz és látsz vmi gyanúsat, azt megköszönöm! -
Tankblock
aktív tag
válasz
Teasüti #10265 üzenetére
Hello
A második képeden a bementi változó referencia ként van átadva.
Ha tárolni szeretnéd, akkor egy rámutató pointerrel lehet megtenni, ha jól emlékszem. Mivel C++ ezért a PRivate részbe tenném bele és itt csak anyit tennék, hogyclass SillyClassNameRules {
protected :
Stream * s;
int x;
int y;
public:
SillyClassNameRules(Stream &p, int X, int Y) : s(p), x(X), y(Y)
{
// If I not made a huge mistake
//do init here pl.call any additional fnc()
}
} -
tvamos
nagyúr
-
ratkaics
senior tag
válasz
brickm #10263 üzenetére
Ha még működik a mikrovezérlő, csak a kimenetei közül pusztult el néhány, akkor a benne lévő programot még le lehet tölteni és visszatenni egy másik új vezérlőbe, ugye?
Ha igen, akkor mi kell hozzá? Illetve van esetleg Győr környékén olyan szaki, aki el tudja végezni a műveletet?
/Nekem sajna nincs tapasztalatom PIC-el. Annó AVR-el foglalkoztam kicsit, ahhoz talán még valahol van programozó cuccom is, de a PIC-et nem ismerem./ -
Teasüti
nagyúr
válasz
Janos250 #10253 üzenetére
Valamint tőled kérdezném még, mint ESP32 gurutól, hogy találkoztál-e már olyan hibával, hogy pánikol a CPU 1 a sok task miatt, viszont olyan 5-6 reset után végül csak képes elindulni a oprendszer?
Jelenleg 6-7 taskom van, amit szétszórtam a két mag közt (0. magon a gyors függvények, 1. magon a hosszabb programok), prioritásnak alacsony 10 alattiakat adtam meg és mindegyik task-nak eltérőt.
Ha csökkentem a taskok számát, akkor nem pánikol a proci. Van erre vmi ötleted mi lehet?
Minden task-ot szabályosan írtam meg: végtelen ciklusban futnak valamennyi delay()-jel a végükön. -
Teasüti
nagyúr
Kérdeznék viszont könyvtár írással kapcsolatban, akinek ez ujjgyakorlat!
Osztályt próbálok írni, aminek rá kéne kapcsolódnia a Serial Stream-re, viszont sehogy se jövök rá hogy kell átadni a könyvtárnak a Stream-et. Kérhetnék ebben némi segítséget?Jelenleg itt tartok és nagyon nem jövök rá hogyan kellene működnie:
[kép]
[kép]Köszönöm!
-
Teasüti
nagyúr
válasz
Janos250 #10253 üzenetére
Mi a f...
Hát ez elég komplikált.
PWM-mel ez ennyi:#define PWM_CHANNEL_1 1
#define PWM_TIMER_12_BIT 12
uint_16t speed_freq = 100;
void setup() {
ledcSetup(PWM_CHANNEL_1, speed_freq, PWM_TIMER_12_BIT);
ledcAttachPin(PinNumber, PWM_CHANNEL_1);
}
void loop() {
ledcWriteTone(PWM_CHANNEL_1, speed_freq); //Min 5Hz 12 biten. Ledc driverben a Tone függvény alapból 10 biten dolgozik.
delay(100);
} -
brickm
őstag
válasz
tvamos #10262 üzenetére
Nálam nem a tervezett elavulás dominá, de más kategóriára fejlesztek. Nem lakossági felhasználás a fő cél.
Amúgy elbtudom kézelni, higy ez direkt van így. Hisz ha a picet agyonvete ez a művelet, akkor a forráskód hiányávan javíthatatlan a termék.A jól megcsinálást egyes esetekben felülírja a felhasználó😁
-
-
ratkaics
senior tag
válasz
ratkaics #10257 üzenetére
Ez az alkatrész jó lehet a felrobbant helyére?
Magának a PIC-nek vajon lehet baja? Az áramkor 230V-ot kapott egy 24VDC-s tekercsű relé kapcsaira.
Ezek után a készülék elindul, de nem működik rendesen. A PIC által meghajtott kezelő panelen látszódnak a dolgok, de a nyomógombokra nem reagál normálisan.
Tudom, hogy ez elég ködös és nem túl "szakmai" így, de hátha valakinek így is van tippje. -
puritan
csendes tag
Kedves Mindenki!
Nemrég vettem egy PZEM004T modult, 230V-on lehet vele feszültséget, áramot, teljesítményt fogyasztást mérni.
Már napok óta szívtam vele, mert a modulhoz a neten egyetlen kódot találtam, ami az istennek se akart működni. Végül az oldotta meg a problémát, hogy a kódban jelzett IDE verziót, az 1.6.6-ot töltöttem le, és azzal szépen működik.
Az arduino.cc-n levő legújabb IDE-vel, az 1.8.8-al, és egy régebbivel, az 1.0.?? verzióval sem megy.Lehetséges, hogy valóban a verziók közötti különbség miatt nem akarja lefordítani, vagy én vagyok a béna, és valamit nem jól csinálok??
Azért még nem tökéletes a dolog, mert a fogyasztás adatot megjegyzi a kütyü, amit elvileg a rajta levő gombbal lehetne törölni, nullázni, de nem felejti el, akár mennyit nyomkodom.
Arra, hogy szoftveresen milyen parancsal lehet resetelni, még nem jöttem rá, pedig biztos vagyok benne, hogy van rá lehetőség.Ha valaki használt már ilyet és megosztaná a tapasztalatait róla, azt szívesen venném.
-
Janos250
őstag
válasz
Teasüti #10212 üzenetére
Olvastam én, csak eddig nem volt időm rá, de most összeütöttem.
RMT-vel hogy csinálnál mondjuk 100 Hz 50% PWM jelet?
Így:
Bár most látom, hogy Te 100 Hz-et kérdeztél, én meg 10 kHz-re emlékeztem. Sebaj, átírhatja, akit érdekel.Ha nem kell carrier, akkor ki kell kommentelni
// 10 kHz RMT
const uint8_t GPIOnum = 15;
const uint8_t RMTchNum = 0;
const uint8_t DutyCycle = 50 ; // %
const uint32_t freq = 10000 ;
const uint32_t clockAPBbus = 80000000 ; // RMT use APB bus clock
const uint16_t highCiklNum = (uint16_t) ( clockAPBbus / freq / 100 * DutyCycle ) ;
const uint16_t lowCiklNum = (uint16_t) ( clockAPBbus / freq / 100 * (100 - DutyCycle) ) ;
const uint32_t RMTdata = ( ( (lowCiklNum) <<16) + (1<<15) + highCiklNum) ;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("start setup");
pinMode(GPIOnum, OUTPUT);
*((volatile uint32_t *) (0x3FF44530 + GPIOnum * 4 )) = 0x57 + RMTchNum ;
*((volatile uint32_t *) (0x3FF000C0)) |= 1 << 9 ;
*((volatile uint32_t *) (0x3FF000C4)) &= (~(1 << 9)) ;
*((volatile uint32_t *) (0x3FF560F0)) |= 1 ;
*((volatile uint32_t *) (0x3FF560F0)) |= 2 ;
*((volatile uint32_t *) (0x3FF56020 + RMTchNum*8)) = 1 ;
*((volatile uint32_t *) (0x3FF56020 + RMTchNum*8)) |= (1 << 24) ;
*((volatile uint32_t *) (0x3FF560B0 + RMTchNum*8)) = ( (0x80 << 16) + 0x80) ; // carrier freq
*((volatile uint32_t *) (0x3FF56020 + RMTchNum*8)) |= (1 << 28) ; // carrier enable
*((volatile uint32_t *) (0x3FF56024 + RMTchNum*8)) = (1 << 17) ;
*((volatile uint32_t *) (0x3FF56024 + RMTchNum*8)) |= (1 << 3) ;
for (uint16_t i = 0 ; i<(64) ; i++ ){
*((volatile uint32_t *) (0x3FF56800 + RMTchNum *64 * 4 + i*4)) = RMTdata ;
};
*((volatile uint32_t *) (0x3FF56024 + RMTchNum*8)) |= 1 ;
Serial.println("end setup");
delay(500) ;
} // end setup
void loop() {
delay(1000) ;
} ; // end loop
/*
Comments:
*((volatile uint32_t *) (0x3FF44530 + GPIOnum * 4 )) = 0x57 + RMTchNum ; // GPIOnum output = RMT CH RMTchNum
// p 58 (Tech. Ref, 4.12 Register Summary)
// 0x3FF44530 = Peripheral output selection for GPIO_0 (GPIO_FUNC0_OUT_SEL_CFG_REG)
// (0x3FF44530 + GPIOnum * 4 ) = Peripheral output selection for GPIOnum
// 87 (0x57) = rmt_sig_out0 (p. 53 , 4.9 Peripheral Signal List)
// GPIO_FUNC2_OUT_SEL_CFG_REG
*((volatile uint32_t *) (0x3FF000C0)) |= 1 << 9 ; // BIT9, Remote Controller (p. 93)
// DPORT registers/DPORT_PERIP_CLK_EN_REG =1 : enables the peripheral clock (p 92.)
// PERIP_CLK_EN_REG (p. 95 , 5.4 DPort Register Summary)
// BIT9, Remote Controller
// DPORT_RMT_CLK_EN = bit 9 = 0x200
*((volatile uint32_t *) (0x3FF000C4)) &= (~(1 << 9)) ; // PERIP_RST_EN_REG reset for peripherals (p 95)
// BIT9 = DPORT_RMT_RST (RMT reset)
// DPORT registers/PERIP_RST_EN_REG = reset for peripherals
// DPORT_PERIP_RST_EN_REG = (DR_REG_DPORT_BASE + 0x0C4) = 0x3FF000C4
*((volatile uint32_t *) (0x3FF560F0)) |= 1 ; // bit 0 RMT_APB_CONF_REG 1 = Set this bit to disable apb fifo access
// RMT_APB_CONF_REG / bit 0 RMT_MEM_ACCESS_EN Set this bit to disable apb fifo access
// This bit must be 1 in order to access the RMT memory (p. 402.)
*((volatile uint32_t *) (0x3FF560F0)) |= 2 ;
// RMT_APB_CONF_REG / bit 1 RMT_MEM_TX_WRAP_EN This bit enables wraparound mode: when the transmitter of a channel
// has reached the end of its memory block, it will resume sending at the start of its memory region
// RMT_CHxCONF0_REG 15. Remote Control Peripheral/ 15.3 Register Summary (p 396, 397.):
*((volatile uint32_t *) (0x3FF56020 + RMTchNum*8)) = 1 ; // frequency divider's factor , bit7-0 (p. 396)
// freq = 80 Mhz / 1
*((volatile uint32_t *) (0x3FF56020 + RMTchNum*8)) |= (1 << 24) ; // memory blocks allocated to channel , bit27-24
*((volatile uint32_t *) (0x3FF560B0 + RMTchNum*8)) = ( (0x80 << 16) + 0x80) ; // carrier freq
*((volatile uint32_t *) (0x3FF56020 + RMTchNum*8)) |= (1 << 28) ; // carrier enable
*((volatile uint32_t *) (0x3FF56024 + RMTchNum*8)) = (1 << 17) ; // CLK = 80 Mhz
// bit 17: RMT_CHxCONF1_REG / RMT_REF_ALWAYS_ON_CHn
*((volatile uint32_t *) (0x3FF56024 + RMTchNum*8)) |= (1 << 3) ;
// bit 3 : RMT_CHxCONF1_REG / RMT_MEM_RD_RST_CHn Set this bit to reset the read-RAM address
// for channel n by accessing the transmitter
for (uint16_t i = 0 ; i<(64) ; i++ ){
*((volatile uint32_t *) (0x3FF56800 + RMTchNum *64 * 4 + i*4)) = RMTdata ;
};
*((volatile uint32_t *) (0x3FF56024 + RMTchNum*8)) |= 1 ;
// bit 0 : RMT_CHxCONF1_REG / RMT_TX_START_CHn . Set this bit to start sending data on channel n
*/ -
-
válasz
Tankblock #10242 üzenetére
Van ez a jópofa karakteres időjárásjelző oldal, ez a Worldweatheronline adatait használja.
Az előrejelzés pontosságát tesztelni kell -
#include <ESP8266WiFi.h>
WiFiServer server(80); //a szerver a 80-as portot figyeli
int LED_PIN = 2;
void setup() {
WiFi.mode(WIFI_AP); //access point
WiFi.softAP("Hello_IoT", "12345678"); //ssid plusz jelszó
server.begin(); //192.168.4.1
//Looking under the hood
Serial.begin(115200); //Start communication between the ESP8266-12E and the monitor window
IPAddress HTTPS_ServerIP= WiFi.softAPIP(); // Obtain the IP of the Server
Serial.print("Server IP is: "); // Print the IP to the monitor window
Serial.println(HTTPS_ServerIP);
pinMode(LED_PIN, OUTPUT); //GPIO16 is an OUTPUT pin;
digitalWrite(LED_PIN, LOW); //Initial state is OFF
}
void loop() {
WiFiClient client = server.available();
if (!client) {
return;
}
//Looking under the hood
Serial.println("Somebody has connected :)");
//Read what the browser has sent into a String class and print the request to the monitor
String request = client.readString();
//Looking under the hood
Serial.println(request);
// Handle the Request
if (request.indexOf("/OFF") != -1){
digitalWrite(LED_PIN, HIGH); }
else if (request.indexOf("/ON") != -1){
digitalWrite(LED_PIN, LOW);
// THE HTML document
String S = "HTTP/1.1 200 OK\r\n";
S += "Content-Type: text/html\r\n\r\n";
S += "<!DOCTYPE HTML>\r\n<html>\r\n";
S += "<br><input type=\"button\" name=\"b1\" value=\"Turn LED ON\" onclick=\"location.href='/ON'\">";
S += "<br><br><br>";
S += "<input type=\"button\" name=\"b1\" value=\"Turn LED OFF\" onclick=\"location.href='/OFF'\">";
S += "</html>\n";
//Serve the HTML document to the browser.
client.flush(); //clear previous info in the stream
client.print(S); // Send the response to the client
delay(1);
Serial.println("Client disonnected"); //Looking under the hood
}
}Ezt a példát tettem fel a Wemos-ra. Ha simán az url mögé írom (192.168.4.1/ON vagy OFF) akkor megcsinálj. OFF esetén bedobja azt a honlapot is, ami bele lett írva a kódba. De tetű lassú, ezzel hogy lehet egy autót távirányítani? Rég nekiment volna már bárminek, mire veszi a következő utasítást.
-
Wemos D1 R2-alapon készítenék távirányítós autót. Uno+bluetooth-tal csináltam már ilyet, de esp8266-tal még nem. Egyáltalán mivel lenne jobb: wifivel vagy bluetooth-tal? A wifinek nagyobb a hatótávolsága, így akár egy sportpályán is lehetne játszani. Telefonon keresztül irányítanám.
-
Tankblock
aktív tag
okay,
valami példa kód esetleg?
Home automationben szeretnék Nextion kijelzőket telepíteni, hogy lássam milyen idő lesz....
openweather jónak tűnt, mert JSON ként tudom kezelni Raspin az egészet....Kicsit macerás az adatok értelmezése a 3 órás szeletek miatt, de működhet....
időképnek milyen APIja van? -
Tankblock
aktív tag
Sziasztok,
időjárás előrejelzéshez szeretnék ötletet gyűjteni.
Eddig a openweathermap regisztráltam, ahol napi illetve 3 órás felbontásban 5 napi előrejelzés lehet lekérdezni.
Messze van a valóságtól, nagyon messze.....
Más ötlet?Amit szeretnék 3 napos előrejelzés min max hőmérséklet, időjárás.....
Előre is köszönettel.
-
ecaddsell
aktív tag
válasz
Teasüti #10238 üzenetére
Vsz. nem tévedek túl nagyot, ha a Robin Scheibler FFT tesztjének összes float igényét N*log2(N) + 2*N-el közelítem ami 4k FFT esetén kb. 57k float művelet 7ms alatt, azaz per float kb 120ns. Ebből a tényleges float mindenféle overhead nélkül jóval kevesebb (lehet fele se). Persze ez még mindig jópár órajel ciklus nem úgy mint a float DSPknél ahol 1 float 1 órajel, szóval aki nagyságrendi ugrást akar az megy DSP-re.
Röviden: abban a tesztben amit linkeltél vagy valamit nagyon elrontottak, vagy valami olyat néz ami az itt felvetett és tárgyalt FFT szempontjából teljesen irreleváns, szóval kár volt ide hozni.
-
-
Teasüti
nagyúr
válasz
ecaddsell #10236 üzenetére
ESP32 floating-point performance
És a hozzá kapcsolódó Espressif fórum téma.Lényegében csúnyán kikap az ARM procitól.
-
ecaddsell
aktív tag
Lehet, hogy az esp32 lebegőpontos képességei túl gyengék lennének a feladathoz.
Nekem nem úgy tűnik vsz. jobb mint bármi más ebben a kategóriában...
http://www.robinscheibler.org/2017/12/12/esp32-fft.html -
-
Teasüti
nagyúr
válasz
ecaddsell #10226 üzenetére
ESP32 kimenetein egyébként ha jól tudom több fokozatú meghajtás van. Vannak kisebb és gyorsabb FET-ek, és vannak erősebbek, de lassúbbak. ESD kár tipikus példája amikor a kicsi FET-ek elszállnak, de a nagyok még működnek. Az egészből annyit veszel csak észre, hogy nem hozza a specifikációkat a port nagyobb sebességen.
Épp mostanában olvastam erről, már nem tudom minek a kapcsán.
-
tvamos
nagyúr
Ezt aprojektet szeretnem lemasolni nemi valtoztatassal: [link]
Lenne a projektben meg egy ESP32 is.
Meg lehet valahogy szerezni ezt az arm_math.h-t ESP-re, vagy veszett fejsze nyele? (En nem talaltam meg. LEhet, hogy rossz kereso szavakat irtam a google-be.)
Mert ha nem lehet, akkor teszek egy-ket Teensy-t az ESP melle, csak jo lett volna elkerulni ezt. -
Amarton
tag
válasz
ecaddsell #10226 üzenetére
ESD-re is figyelni szoktam. Nem tapizom az alkatrészeket, a panelt csak a szélén fogom 2 ujjal.
A munkahelyemen garanciális autóelektronika hibaanalízissel foglalkozom. Ott minden az ESD védelemről szól. Köppeny, cipő, ESD csipesz, ESD forrasztó állomás, páratartalom szabályzás, tisztaság stb. -
ecaddsell
aktív tag
válasz
Amarton #10225 üzenetére
Pedig tényleg nagyon kicsi a valószínűsége, hogy hibás legyen, különösen nagy szériás cuccnál ahol minden automatizálva megy beleértve a tesztelést.
A chip-eket pl. a legtöbb esetben gyári szalagból kivágva kaptam.
Pl. DC-DC konverternél meg a panelizált (géppel) beültetett NYÁK-ból nem törték szét az egyes darabokat, hanem egyben küldték a min egységet amit árultak.
Persze nem mindig ez van, pl. csatlakozósoros panelt sose kapsz panelizáltan.Egyébként ilyen esetek elkerülésére (különösen, ha nem túl drága) min. duplán szoktam venni. Amellett, hogy lesz tartalék (és nem kell hónapot várni míg megjön a másik ha valami gond van), ilyenkor megnézem, hogy minden darab ugyanúgy működik és ha igen élek azzal a feltételezéssel, hogy valahol máshol van a gond.
Nem mondom, hogy sose fordulhat elő, hogy hiba van és ha valami akkor az ESD bárhol tönkre tudja vágni a cuccot.
Egyébként az ESD az egyik legalattomosabb hiba, mert ez az ami nem feltétlen teljesen teszi tönkre egyből a cuccot és ez ami nagyon rossz mert nehéz észre venni, mert pl. SPI még simán megy, de valahol már nem tudja a speckót a CMOS chip.
Pl egyszer ESP32 valamelyik pinjére véletlenül 5V jutott. Egyből tönkrement és annyira nagy áramot vett fel, hogy a stabi IC majdnem kiégett. Rögtön látszott kuka. Másik ESP32 egyik pinjénél meg azt vettem észre, hogy nem bírja a nagyobb frekvenciás jelet. Vsz. olyan ESD-t kapott amit már nem teljesen kezelt a védelem (valami minimális védelem van ezekben) és az a pin bizonytalanná vált. Legalább fél órám ment rá (de lehet jóval több), csere más pinre, csere más ESP32-re stb mire megtaláltam mi lehet a gondja.Szóval lehet a cuccod pont ott ment tönkre amikor bekötötted.
Aztán még van olyan storym is amikor a CMOS chip (ADF4351) EN pinje nem lett felhúzva, de csak 1 másképp tervezett panelnél vettem észre a hibát (bizonytalanná vált a lock), mert az elsőnél olyan volt az elrendezés, hogy annyi áram odakúszott, hogy elég volt neki (ugye CMOS bemenet több 10 MOhm tip.). Ha nem kapok egy másképp tervezett panelt, lehet sose veszem észre...
Röviden: El lehet hobbizni ezekkel az Arduino kompatibilis cuccokkal, ahol a hibák/veszteségek nem nagy ügy (pláne, ha rátolod az eladóra), de az ipari kategória nagyon más. Nem véletlen, hogy nagy-szériás gyártás ma már szinte csak Kínában fordul elő. Nem mellékesen szokás szidni a minőség-ellenőrzést. De azért nézzük meg, hogy pl. a jlcpcb-nek 20 cent/hobbi paneles árba (szállítás nélkül értendő) belefér automatizált optikai és elektromos ellenőrzés. Ezek után nem csoda, hogy ennek a szakmának se nálunk se nyugaton sem rózsásak a kilátásai. Hobbizni persze OK.
-
Amarton
tag
válasz
ecaddsell #10224 üzenetére
Az eladóval felvettem a kapcsolatot. Vissza fizeti az árát.
Első körben szabványosan kötöttem be. Mikor láttam, hogy teljesen értelmetlen dolgokat mér, azután kezdtem el úgy lecsupaszítani a kapcsolást, hogy már a végén terhelés nélkül csak feszültséget mértem.
Gondoltam, ha ez a része megoldódik, akkor már az áram részét tudni fogom kalibrálni.
Az Arduino 5V-os kimenetét használtam, ahol majdnem 12V-ot mért. Tehát totálisan hibás az IC.
Mivel egy egyszerű feszültség mérést sem tud megoldani, így hagyom a csudába és rendelek egy másikat.
Köszi. -
ecaddsell
aktív tag
válasz
Amarton #10201 üzenetére
Bár nem is használtam, és nem is különösebben érdekel, de ha már ennyit írtatok róla gondoltam megnyitom az adatlapot és gyorsan átfutottam.
Bevezetőként annyit, hogy bár nem sokat és gyakran, de bőven 10+ éve vásárolok ebay-ről, és nem nagyon tapasztaltam, hogy rosszat küldenek (OK, alapból megbízható eladót választok, néhány cent nekem nem éri meg, hogy kb. 1 hónap vagy még több és refund után újabb kb. 1 hónapot várjak).A bekötésre a kulcsszó a 8.3.1.3 fejezetben van (ha a 10-oldalon lévő bekötési rajzról nem lenne eleve világos): high-side shunt.
Szóval a terhelés a föld és a - ág közé kerül a sönt ellenállás meg a - és a + közzé a + meg a pozitív betápra.Tovább nem mennék bele, de cserébe googliztam neked 1 maxim tutoriált (a találatok legelején) amiben minden benne van.
Szóval butaság össze-vissza kötözgetni.
Azt, hogy a SW mit, hogy csinál nem tudom, de ami még eszembe jutott, hogy minden mérésnél rögtön tisztázni kell mit mérünk és hogyan és nem árt 1 másik módszerrel is ellenőrizni (pl. multiméter vagy oszcilloszkóp az eszköz bemenetére). Itt pl. nekem totál nem világos, hogy a LED tiszta DC-ve van hajtva vagy PWM-el és ez utóbbi esetben egyáltalán ez az eszköz alkalmas-e a mérésre (szinte biztos nem, mivelhogy semmi ilyesmiről nincs szó az adatlapon, szintúgy effektív érték sincs megemlítve).
-
válasz
Attix70 #10221 üzenetére
Általános, nemzetközi fórumokon érvényes íratlan szabály, hogy ha kérdezek valamit, megpróbálom a lehető legpontosabban leírni a probléma körülményeit, valamint azt, hogy eddig mit tettem a megoldás érdekében.
Ha a fenti információkat helyettesítem egy "nekem ez a szakmám, hogy képzeled, hogy tévedek?!?" kártyával, akkor pedig nem csodálkozom, ha ez másokból ellenérzést vált ki.
-
-
Attix70
aktív tag
válasz
Amarton #10215 üzenetére
Ha máskor felteszel kérdést alkatrésszel kapcsolatban akkor javasolnám, hogy mellékelj hozzá Data Sheet-et is amit természetesen lefordítasz (mindenki számára érthető legyen) mert kevesen néznek utána a kérdésben szereplő alkatrésznek. Inkább azt akarják neked bizonygatni, hogy alapokat sem ismered az elektronikában. A végzettséged ne írd meg máskor mert valami oknál fogva miatta is támadásokat kapsz (inkább magyarázd el Ohm törvényét, Kirchoff törvényeit, stb..). Ha ezeket megfogadod akkor talán a válaszok nagy része építő jellegű lesz a feltett kérdéssel kapcsolatban.
Tisztelet a kivételnek. -
válasz
Amarton #10215 üzenetére
Én ugyan nem vagyok villamosmérnök, de azt tudom, hogy feszültséget két pont között szokás mérni. Jelen esetben a chip a 0.1Ohm-os ellenállás két sarka közt méri az ellenálláson eső feszültséget.
Ha te az in+ bemenet feszültségét akarod mérni, akkor a chip mihez képest méri azt? A saját tápjának a GND-hez képest?Mellesleg a kérdésedhez nem mellékeltél diplomamásolatot, hogy kikérd magadnak a gyanúsítást, hogy nem értenél a dolgodhoz, és mivel a topikba nem csak villamosmérnökök szoktak írni, így nyilván első az, hogy kizárjuk az emberi tévedés lehetőségét. Kérek engedélyt meghunyászkodni.
-
Teasüti
nagyúr
válasz
Amarton #10214 üzenetére
Értem. Én viszont nem vagyok az, így volna egy kérdésem:
Hogy lehet áramot és feszültséget mérni egyszerre VAGY hogy lehet feszültséget mérni soros kapcsolással ("Természetesen sorba volt kötve a LED-el a LED 5V-os ágában. Tehát az 5V-ot is mérnie kellett volna nem csak az áramot.")? Ilyet nekem nem tanítottak az iskolában. -
Amarton
tag
Az megvan, ha nincs fogyasztó az áramkörön, akkor nem folyik áram? Ilyenkor (is) a kapcsolfeszültséget mérnie kellene az INA219-nek, mivel a sönt egyik és másik felén is ugyan az a feszültség van ilyenkor, tehát teljesen mindegy melyik kivezetést kötöm oda, ahol a feszültség van, ha a másikat szabadon hagyom.
-
Amarton
tag
válasz
Teasüti #10209 üzenetére
Én kérek elnézést. Villamosmérnök vagyok. Tudom hogyan kell áramot mérni.
Az INA219 nem csak áramot mér, hanem feszültséget is.
Természetesen sorba volt kötve a LED-el a LED 5V-os ágában. Tehát az 5V-ot is mérnie kellett volna nem csak az áramot. Mint mondtam, sokkal több áramot és feszültséget mért.
Arra jutottam, mivel a feszültség részét nem lehet kalibrálni, csak az áram részét (ha söntöt cserélnénk és ki szeretnénk a mérés határt terjeszteni), így arra jutottam, hogy a belső áramkörben valami erősítése nem jó az alkatrésznek. Szerintem hamisított sz*r. -
Teasüti
nagyúr
válasz
Janos250 #10200 üzenetére
Olyan túl sok mondanivalóm nincs a PCNT-vel kapcsolatban. Működik a példa alapján.
Inkább matematikai fejtörést okoz a frekvencia mérése. Ugye másodperc az alapegysége, viszont nekem ennél gyakoribb frissítés kellene. Mondjuk olyan 200 ms-os frissítés már elfogadható. Ez viszont azt jelenti, hogy fel kell szoroznom a mért értéket ha SI mértékegységet szeretnék látni. Ez meg precizitás csökkenéssel jár, így már csak a(z 5-ös) szorzó többszörösét kaphatom eredményül. Ráadásul így az 5 Hz a legkisebb mérhető egység, ez alatt inkonzisztens eredményt ad nulla és öt között váltakozva. Ezt így egyelőre csak szűréssel tudom áthidalni.
Nincs vmi jobb matematikai módszer a gyakoribb frissítésre? Kíváncsi lennék vajon egy hall szenzoros jeladóból hogy számol pontos értékeket gyors frissítéssel egy km óra?Hogyne használtad volna a PWM-et, vagy sose írtál még be egyetlen ledcWrite() parancsot se?
RMT-t meg én nem használtam még direktben sose, csak könyvtárból. RMT-vel hogy csinálnál mondjuk 100 Hz 50% PWM jelet?
RMT bemenetként is érdekelne, állítólag azzal periódusidőt is lehet mérni vhogy. Na ha vmi, akkor az precíz és gyors lenne!Meg most láttam a Technical Reference doksiban, hogy vannak natív Motor Control funkciók is a PWM perifériában ESP32-ben.
Na erről nem is tudtam. Van benne egy Capture Unit is, ami meg beérkező PWM jelet tud mérni, vagy mi a szösz. Ezt megtartom harmadik lehetőségnek, ha a PCNT és az RMT nem válna be. -
Teasüti
nagyúr
Nem. R100 az 100 Ohm. 0R1 lenne a 0,1 Ohm.
Várjunk csak... Jogos, ezt benéztem.
100 Ohm-nál nem lenne R betű.
Részlet kérdés, a tényen nem változtat. -
-
Teasüti
nagyúr
válasz
Amarton #10201 üzenetére
Mit akarsz mérni amúgy? Mert eredetileg ezt írtad: Egy LED áramot próbáltam mérni.
Utána meg feszültségmérésről írtál.
Azt ugye tudod, hogy áramot mérni soros kapcsolásban lehet? Általános iskola 8. osztályában tanítják a soros és párhuzamos kapcsolást.
Így neked ezt a modult az áramforrás és a fogyasztó közé kell kötni, hogy jó legyen. Vin+ a forrás felé, Vin- a fogyasztó felé.A linkelt képen meg gyönyörű nagy méretben látható az R100. Ez 100 Ohm, nem 0,1.
Rövidzárhoz ez még kicsit erős. -
Amarton
tag
válasz
tvamos #10202 üzenetére
Az annyira nem jó ötlet, ugyanis 0,1Ohmmal van a két bemenet össze kötve.
Ha GND-re kötném akkor csinálnék egy jó kis rövidzárat.
Az egyik bemenetet azért is hagytam lógva, mivel ha nincs terhelve, akkor mindegy, hogy a Vin+ vagy a Vin-ra kötök feszültséget. Ugyan azt kellene mutatnia/mérnie.
Itt az a kérdés, hogy 5V esetén miért mér 11 volt felett, holott a környéken nincs sehol ilyen feszültség.
Az alkatrész adatlapjában sincs a feszültségre vonatkozó kalibráció. Szóval a feszültséget pontosan kellene mérnie. -
Amarton
tag
Valaki használt már INA219-et?
Valami nálam nem okés. Egy LED áramot próbáltam mérni és 5-ször többet mutatott, mint kellett volna.
Gondoltam kipróbálom, ha a Vin- kivezetést az 5V-ra kapcsolom Vin+ lógva hagyom. Ebben az esetben 5V helyett 11.6V-ot mutat. Ha ugyan így a 3.3V-ra kötöm, akkor 7.5V-ot mutat.
Ha mindkét kivezetést szabadon hagyom, akkor 2.4V. Ha GND-re kötöm, akkor legalább 0V-ot.
Adafruit library-t használom módosítás nélküli. YouTube-on mindenkinek működik.
Lehet kínai barátaink nem jól működő darabot küldtek?
Új hozzászólás Aktív témák
Hirdetés
- Telefon felvásárlás!! iPhone 12 Mini/iPhone 12/iPhone 12 Pro/iPhone 12 Pro Max
- Csere-Beszámítás! Asus Tuf Gamer laptop! R7 3750H / GTX 1650 / 16GB DDR4 / 500GB SSD
- BESZÁMÍTÁS! ASUS ROG Zephyrus GA403UV Gamer notebook - R9 8945HS 16GB RAM 1TB SSD RTX 4060 8GB WIN11
- Kaspersky, McAfee, Norton, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- HP Probook 650 G4 15,6 i5-8350u 8. gen. GYÁRI MAGYAR VILÁGÍTÓ BILL!!!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged