- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Atomenergiával dübörögnek tovább az Amazon adatközpontok, SMR-ek is jöhetnek
- Macron betiltatná az EU-ban a közösségi médiát a 15 év alattiaknak
- Az NVIDIA ipari AI-felhőt épít a németeknek, együtt az OpenAI és a Google
- Két új Ryzen közül választhatnak a kézikonzolok
- AMD Navi Radeon™ RX 9xxx sorozat
- AMD vs. INTEL vs. NVIDIA
- HiFi műszaki szemmel - sztereó hangrendszerek
- Milyen belső merevlemezt vegyek?
- Melyik tápegységet vegyem?
- Milyen billentyűzetet vegyek?
- TCL LCD és LED TV-k
- NVIDIA GeForce RTX 3080 / 3090 / Ti (GA102)
- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- ThinkPad (NEM IdeaPad)
-
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
-
Gergosz2
veterán
Már egy ideje hiányoltam egy ilyen jellegű cikket, és úgy látom más aktívan foglalkozott q témával , hogy mennyire hekkelhező az ESP.
-
Gergosz2
veterán
válasz
cog777 #23223 üzenetére
Ha nem akarsz nagyon játszani , akkor én egy ilyent vennék : https://netkazan.hu/termek/10742/honeywell-home-r200s-2-optikai-fusterzekelo
-
Gergosz2
veterán
válasz
gordonfreemN #23221 üzenetére
Most kicsit meglepett ez a 6ks szállítás, legutóbb amikor kistételt rendeltem sima 2k volt a posta. Lehet ahhoz is köze van hogy melyik raktárban van nekik az alkatrész. Amúgy az esetek 99 százalékában mindig bőven 15k felett rendelek
-
Gergosz2
veterán
válasz
gordonfreemN #23218 üzenetére
Én elég sok TIs drivert használtam már. Gyorsan rákeresve ez akár jó is lehet neked:
https://hu.mouser.com/ProductDetail/Texas-Instruments/DRV8213DSGR?qs=HoCaDK9Nz5fr9x8VVVVBBg%3D%3D
És igen, mouserről 1 darabot is kihoznak neked (plus nyilván a posta ami 2k, de amúgy 15k feletti rendelésnél gyakorlatilag mindig ingyen van.)
-
Gergosz2
veterán
válasz
tibi-d #22222 üzenetére
Mivel a string egy char array, ezért string vectorhoz egy char mátrixot kell deklarálnod. Erre azért lesz szükséged mert ahogy te próbáltad, úgy nem azonos hosszú is lehet egy egy sor, amire hisztizni fog a compiler.
Példa
char myStrArray[3][10]= {"asd", "asd1","asd12"};
Értelemszerűen a "" miatt a /0 is ott lesz mindegyik végén
B opció, ugyanez pointerrel :
char *myStrArray[3]= {"asd", "asd1","asd12"};
-
Gergosz2
veterán
Sziasztok!
Nincs valakinek elfekvőben egy W5500 vagy enc28j60 modulja, amit nem használ és megválna tőle?
-
Gergosz2
veterán
válasz
gordonfreemN #21897 üzenetére
De az I2C egy busz amúgy, szóval több eszközt is aggathatsz rá.
-
Gergosz2
veterán
válasz
gordonfreemN #21897 üzenetére
Shift register? PL egy 74hc595.
-
Gergosz2
veterán
A bin-t flasheli fel . A map file és az elf is általában a linker kimenete. A map file tényleg egy térkép, megmondja melyik memória címre mi kerül. Az elf is hasonló de , benne van a bináris is és még csomó egyéb dolog, ami akkor hasznos ha van egy debuggered és teszem fel lépésről lépésre akarsz vizsgálódni.
Amúgy a MCU flashben foglalt méret nagyjából megegyezik a bin méretével. De ez fejlesztőkörnyezet és proci függvénye is.
-
Gergosz2
veterán
válasz
razorbenke92 #21075 üzenetére
NRF24L01+ úgy rémlik tud ACKot kezelni, így lesz infó arról is hogy megkapja e a címzett az üzenetet
-
Gergosz2
veterán
-
-
-
Gergosz2
veterán
válasz
ekkold #20748 üzenetére
Nagyjából mindegyik MCU-nak rosszabb a belső ADC-je, mint egy küldő A/D konverter.
Ezt azért nem merném így kijelenteni. Jó, persze, vannak elég jó külső ADk, teszem fel 32bit flash ADCk. Csak cserébe marha drága és csak nagyon cél alkalmazásokban éri meg használni.
#20746Ton-tonJanos250#20732
Mit küzdöttél vele? Az AD viselkedését eléggé meghatározza, hogy mivel van terhelve. -
Gergosz2
veterán
válasz
JozsBiker #19090 üzenetére
Nos, nem kell feladni, szoftversen is lehet rajta szűrni:
#include <Arduino.h>
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define ADC_BUFFER_SIZE 20
#define ADC_PIN A0
#define ADC_OFFSET 512.0f
#define ADC_GAIN 0.0f // be kell állítani
#define RMS_GAIN 0.05f // delta_T/T
volatile uint8_t bufferIterator = 0;
volatile uint16_t ADC_BUFFER[ADC_BUFFER_SIZE];
volatile bool CalcRMS = false;
volatile uint16_t FilterCoeffInv = 5u;
uint16_t ADC_BUFFER_CALC[ADC_BUFFER_SIZE];
float RMS_Current;
unsigned long SerialTimer = 0u;
unsigned long SerialPrintTimeout = 1000;
void setup()
{
//Gergosz2 2023
Serial.begin(51200);
bufferIterator = 0;
SerialTimer = millis();
memset(ADC_BUFFER, (uint16_t)0, ADC_BUFFER_SIZE*sizeof(uint16_t));
setupPWMInterrupt();
}
void loop()
{
if (true == CalcRMS)
{
CalcRMS = false;
memcpy(ADC_BUFFER_CALC, ADC_BUFFER, ADC_BUFFER_SIZE*sizeof(uint16_t));
RMS_Current = 0.0f;
int iterator = 0;
for (iterator = 0; iterator < ADC_BUFFER_SIZE; iterator++)
{
float SI_val = (((float)ADC_BUFFER_CALC[iterator] - ADC_OFFSET)*ADC_GAIN);
RMS_Current = RMS_Current + SI_val*SI_val* RMS_GAIN;
}
RMS_Current = sqrt(RMS_Current);
}
if ((millis() - SerialTimer) > SerialPrintTimeout)
{
SerialTimer = millis();
Serial.println(RMS_Current);
}
}
void setupPWMInterrupt()
{
noInterrupts(); // disable all interrupts
TCCR2A = 0; // set entire TCCR2A register to 0
TCCR2B = 0; // same for TCCR2B
TCNT2 = 0; //initialize counter value to 0
// set compare match register for 1khz increments
OCR2A = 124; // = (16*10^6) / (2*1000*64) - 1 (must be <256)
TCCR2A |= (1 << WGM21); // turn on CTC mode
TCCR2B |= (1 << CS22); // Set CS01 and CS00 bits for 64 prescaler
sbi(TIMSK2, OCIE2A); // enable timer compare interrupt
interrupts(); // enable all interrupts
}
ISR(TIMER2_COMPA_vect)
{
uint16_t prevSample = 0u;
if(bufferIterator == 0u)
{
prevSample = ADC_BUFFER_SIZE - 1u;
}
else
{
prevSample = bufferIterator - 1u;
}
ADC_BUFFER[bufferIterator] = ADC_BUFFER[prevSample] - (uint16_t)(ADC_BUFFER[prevSample]/FilterCoeffInv) + (uint16_t)(analogRead(ADC_PIN)/FilterCoeffInv);
bufferIterator ++;
if (bufferIterator > ( ADC_BUFFER_SIZE - 1u) )
{
CalcRMS = true;
bufferIterator = 0u;
}
}Gaineket ne felejts beírni
-
Gergosz2
veterán
válasz
JozsBiker #19050 üzenetére
Ennyit finomítanék a kódon :
#include <Arduino.h>
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define ADC_BUFFER_SIZE 20
#define ADC_PIN A0
#define ADC_OFFSET 512.0f
#define ADC_GAIN 0.0f // be kell állítani
#define RMS_GAIN 0.05f // delta_T/T
volatile uint8_t bufferIterator = 0;
volatile uint16_t ADC_BUFFER[ADC_BUFFER_SIZE];
volatile bool CalcRMS = false;
uint16_t ADC_BUFFER_CALC[ADC_BUFFER_SIZE];
float RMS_Current;
unsigned long SerialTimer = 0u;
unsigned long SerialPrintTimeout = 1000;
void setup()
{
//Gergosz2 2023
Serial.begin(51200);
setupPWMInterrupt();
bufferIterator = 0;
SerialTimer = millis();
memset(ADC_BUFFER, (uint16_t)0, ADC_BUFFER_SIZE*sizeof(uint16_t));
}
void loop()
{
if (true == CalcRMS)
{
CalcRMS = false;
memcpy(ADC_BUFFER_CALC, ADC_BUFFER, ADC_BUFFER_SIZE*sizeof(uint16_t));
RMS_Current = 0.0f;
int iterator = 0;
for (iterator = 0; iterator < ADC_BUFFER_SIZE; iterator++)
{
float SI_val = (((float)ADC_BUFFER_CALC[iterator] - ADC_OFFSET)*ADC_GAIN);
RMS_Current = RMS_Current + SI_val*SI_val* RMS_GAIN;
}
RMS_Current = sqrt(RMS_Current);
}
if ((millis() - SerialTimer) > SerialPrintTimeout)
{
SerialTimer = millis();
Serial.println(RMS_Current);
}
}
void setupPWMInterrupt()
{
noInterrupts(); // disable all interrupts
TCCR2A = 0; // set entire TCCR2A register to 0
TCCR2B = 0; // same for TCCR2B
TCNT2 = 0; //initialize counter value to 0
// set compare match register for 1khz increments
OCR2A = 124; // = (16*10^6) / (2*1000*64) - 1 (must be <256)
TCCR2A |= (1 << WGM21); // turn on CTC mode
TCCR2B |= (1 << CS22); // Set CS01 and CS00 bits for 64 prescaler
sbi(TIMSK2, OCIE2A); // enable timer compare interrupt
interrupts(); // enable all interrupts
}
ISR(TIMER2_COMPA_vect)
{
ADC_BUFFER[bufferIterator] = analogRead(ADC_PIN);
bufferIterator ++;
if (bufferIterator > ( ADC_BUFFER_SIZE - 1u) )
{
CalcRMS = true;
bufferIterator = 0u;
}
}Láttam hogy van szkópod szóval ezeket így lehetne kalibrálni:
ADC_OFFSET : egyszerűen nulla terheléssel, értsd nincs rajta semmilyen fogyasztó, mekkora feszültség értéket ad vissza a szkóp? Tegyük fel, hogy 2.5V, akkor az ADC_OFFSET értéke (2.5/5)*1023 lesz, ami 512-re jön ki kerekítve.
ADC_GAIN : ha megvan az ADC_OFFSET, akkor ismert terhelésre megkéne nézni mit ad vissza a mérőműszer a kimenetén. Ehhez kéne a szkóp és multiméter is. Célszerű itt egy sima izzót használni, semmi fancy LED dolgot. Tegyük fel hogy az ADC_OFFSET 2.5V lett és mondjuk 2A csúcs folyt izzón amit a multiméterről olvastál le, amire 3V csúcsfeszültséget mértél a szópon. Ilyenkor az ADC_GAIN nem lesz más mint (5/1023)* 2 /(3-2.5).
Ha ezekről adsz képet és vagy mérési eredményt kiszámolom neked.
RMS_GAIN : ehhez nem nyúlj, kivéve ha a megszakítást akarod változtatni.
Az interrupt kezelő rész fontos bele ? Mit csinál tulajdonképpen ?
1kHz mintavételezési időt valósít meg , így gyakorlatilag 20 mintát vesz 1 hálózati periódusból. -
Gergosz2
veterán
válasz
JozsBiker #19015 üzenetére
Ahogy fentebb is írtam : Ez a kód most nullát fog mindenre visszaadni amígy ADC_GAIN -t nem állítod be.
Szinuszos áram mérésekor a ZMCT103C analóg kimenetén a bemenő jelalaknak megfelelő feszültség mérhető, aminek a nullátmenete kb. a fél tápfeszültségnél azaz 2,5 V -nál van. Az amplitudó arányos a mért áram amplitudójával ill. lehet változtatni a trimmerrel.
Ez tiszta sor, de mennyi az amplitúdó? 5A? Ha annyi akkor a
#define ADC_GAIN 0.0f
sort írd át erre :
#define ADC_GAIN 0.009765625000000f // 5/512
-
Gergosz2
veterán
válasz
JozsBiker #18965 üzenetére
Na én valami ilyesmivel próbálkoznék. Boarodon nem próbáltam ki, csak gyorsan összedobtam. Amit bekéne állítani az a
ADC_GAIN
ésADC_OFFSET
, Utóbbit 512-re tippelem viszont látom, hogy a modulon van valami potméter is így tipper a gain az állítható.
Ez a kód most nullát fog mindenre visszaadni amígyADC_GAIN
-t nem állítod be.#include <Arduino.h>
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#define ADC_BUFFER_SIZE 20
#define ADC_PIN A0
#define ADC_OFFSET 512.0f
#define ADC_GAIN 0.0f // be kell állítani
#define RMS_GAIN 0.05f // delta_T/T
volatile uint8_t bufferIterator = 0;
volatile uint16_t ADC_BUFFER[ADC_BUFFER_SIZE];
uint16_t ADC_BUFFER_CALC[ADC_BUFFER_SIZE];
float RMS_Current;
void setup()
{
//Gergosz2 2023
Serial.begin(51200);
setupPWMInterrupt();
bufferIterator = 0;
memset(ADC_BUFFER, (uint16_t)0, ADC_BUFFER_SIZE*sizeof(uint16_t));
}
void loop()
{
if (0u == bufferIterator)
{
memcpy(ADC_BUFFER_CALC, ADC_BUFFER, ADC_BUFFER_SIZE*sizeof(uint16_t));
RMS_Current = 0.0f;
int iterator = 0;
for (iterator = 0; iterator < ADC_BUFFER_SIZE; iterator++)
{
float SI_val = (((float)ADC_BUFFER_CALC[iterator] - ADC_OFFSET)*ADC_GAIN);
RMS_Current = RMS_Current + SI_val*SI_val* RMS_GAIN;
}
RMS_Current = sqrt(RMS_Current);
Serial.println(RMS_Current);
}
}
void setupPWMInterrupt()
{
noInterrupts(); // disable all interrupts
TCCR2A = 0; // set entire TCCR2A register to 0
TCCR2B = 0; // same for TCCR2B
TCNT2 = 0; //initialize counter value to 0
// set compare match register for 1khz increments
OCR2A = 124; // = (16*10^6) / (2*1000*64) - 1 (must be <256)
TCCR2A |= (1 << WGM21); // turn on CTC mode
TCCR2B |= (1 << CS22); // Set CS01 and CS00 bits for 64 prescaler
sbi(TIMSK2, OCIE2A); // enable timer compare interrupt
interrupts(); // enable all interrupts
}
ISR(TIMER2_COMPA_vect)
{
ADC_BUFFER[bufferIterator] = analogRead(ADC_PIN);
bufferIterator ++;
if (bufferIterator > ( ADC_BUFFER_SIZE - 1u) ) bufferIterator = 0u;
} -
Gergosz2
veterán
Sziasztok!
Milyen ESP32 boardot ajánlatok? Stabil és minél egyszerűbb megoldás érdekelne.
-
Gergosz2
veterán
válasz
tonermagus #16908 üzenetére
Ha PWMezed akkor az áramiránytol fuggően a DC fesz plusz mínusz dióda nyitó fesz megy ki. Amit leírtál az igaz lesz az effektív értékre ha változtatod a kitöltési tényezőt.
Keresésre ajánlom az ST, Ti és infineon vagy egyéb gyártók keresőjét, ahol nagyjából minden paraméterre szűrni lehet.
-
Gergosz2
veterán
válasz
tonermagus #16885 üzenetére
Az okosabb soros port usb illesztők is tudják. Amúgy meg tényleg egy scope vagy logikai analizátor
-
Gergosz2
veterán
válasz
Sebiferi #16834 üzenetére
Amit csinálhatsz:
1, kompenzált hall elemes áramérő. Ilyennel tudsz mérni DCt is ha esetleg megkívája, szőt még leválaszt is. Pl LEM.
2, sönterősítő kapcsolás . Most hasraütésszerűen amit már használtam : https://www.ti.com/lit/ds/symlink/ina181.pdf?ts=1642093565364&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FINA18120-21 oldal. Kell egy sönt ellenállás, ez az erősítő + egy feszültség referencia. Ha az arduinod ADC refje is 5 V, akkor pl egy 2.5V os referencia is tökéletes, de bármi egyéb is jó lehet az erősítések függvényében.
-
Gergosz2
veterán
Minap volt itt valami kilóméteres kód nézegetés. Pár nappal előtte pedig belefutottam ebbe:
Úgy néztem, hogy az ott látott hibák elég nagy részét ez megfogta volna.
-
Gergosz2
veterán
válasz
JulianSinulf #14649 üzenetére
Opto-s Triak / IGBT vagy FET van benne
Valamint mekkora az áramfelvétele, mert a linken lévő nem írja?
Egy LED van az input fokotaon, így nagyjából a 10-20mA-es tartományról lesz szó. De ez típus függő. Most nézem, ennek a relének van adatlapja is: link -
Gergosz2
veterán
válasz
zsolti_20 #14647 üzenetére
nincs benne mozgó alkatrész. Személy szerint ha nem muszály akkor nem használnék mechanikus relét, kivéve ha valami battery pakkor építesz, vagy DC link előtöltést.
Meglepő, de a kínai SSR-ek aliexpressről elég jól mennek. Anno egy ilyen 25A-es10-es pakkot vettem kb két éve, ebből öt azóta is megy napi szinten és viszonylag nagyobb induktív terhelést kapcsolnak. Eddig egy sem füstölt el.
-
Gergosz2
veterán
Nálam már több mint másfél éve üzemel egy NEO 7M modullal szerelt nyák, amely TX lábát közvetlenül egy Atmega328p egyik lábára kötöttem. Aóta is szépen teszi a dolgát, beüzemelés óta folyamataosan megy és rá sem néztem azóta.
Amúgy annyit érdemes tudni ezekről, hogy 95% kínai klón és 9600 baudnál és 1s-es update ratenél nem tudnak többet. Hiába van az Ublox szoftvere ami fel is ismeri és látsólag llehet paramétereni is benne, mégsem írható át.
-
Gergosz2
veterán
válasz
tonermagus #14124 üzenetére
Az egész NEMA stringet átakarod tolni? Amúgy NRF24-gyel elég stabil működést lehet elérni, ha a speedet leveszem és a transmission powert feltolod. Hardveres CRC van benne szóval ezzel sem kell játszani.
Vannak kész libek rá, pl MIRF, RF24. Mindegyiket próbáltam és használtam is. De az NRF24 elég jó eszköz, a doksija alapján nem bonyis a használata, így saját 'libet' is csináltam, mert pár byte- ot kellet átküldeni.
-
Gergosz2
veterán
válasz
kesztió #13990 üzenetére
Hát van eset hogy a LINT nemtetszését fejezi ki a
//
vagy /* megoldásokra, sőt //-re például errort is dob. Másrészt ha olyan rendszert fejleszt az ember ahol pl a PAL is változik egyes revizióról a másikra akkor kismillió ifdef / ifndef-fel találkozik az ember.A syntax highlight pedig a szerkesztődön múlik, pl Eclipse-ben és Visual Studioóban kb olyanra konfigolod amire akarod.
-
Gergosz2
veterán
válasz
tonermagus #13866 üzenetére
Kínából a pcbway-ről rendeltem elég sokat. Jól gyártanak és kb mindig megérkezett a cucc két héten belül. JLCPCB-ről i szoktam, mert sokszor olcsóbb, de teljesen OK minőség.
-
-
Gergosz2
veterán
válasz
tonermagus #13523 üzenetére
Fix pontra minek GPS meg RF adó? Nem elég lenne elég csak a koordinátája?
Ezeknek az NRF24L01+PA+LNA-nak mekkora a valóságban a hatótávja? Próbálta már valaki? 1km elvileg a gyári adat, akkor gondolom 500m-et simán bírnia kellene.
Papíron, nyílt terepen talán. Valóságban szerintem olyan 200m az említett antennával, beltérben meg max 1 fal. -
Gergosz2
veterán
válasz
Tankblock #13418 üzenetére
Local GITnek nem sok értelmét látom, mert oké hogy valamilyen szinten verziót követsz, de a remote nyújtotta lehetőségeket pedig nagyon szépen bukod. Nem is kell beszélni róla hogy ez a távoli, más gépen lévő backup, másrészt remote/masterben rendszerint a tényleg forduló verziót szoktuk tartani, localban meg a kismillió branchen lehet fejleszteni amit kell. Jómagam egy rasberry pin hostolom a saját GIT szerveren, egy minőségi SD kártyát használva. Igen, sajnos ugye az utóbbi sem triviális, volt vele tapasztalat (szivás) anno.
-
Gergosz2
veterán
válasz
Janos250 #13088 üzenetére
Inkább az a baj, hogyha az ember a BUS-ra rá akar nézni, az nem lesz olcsó. Kell egy CANUSB vagy valami hasonló, és nem is beszélve a szoftverről ami kell hozzá. Vannak a CANopen-es okosságok, de ahhoz sem valami eszköz amivel a BUS-t debuggolhatod.
Én még mindig azt mondom, hogy RS485.
-
Gergosz2
veterán
válasz
Tankblock #13084 üzenetére
Ez a CAN driver IC-d függvénye lesz. Maga az MCU ha támogat CAN-t hardveresen akkor 0-5 vagy 0-3v3 jelet fog fogadni, de a fizikai layered mehet 12 vagy akár 24V -on is.
BTW, nem biztos, hogy CAN-nek állnák neki. Ha mindenképp 12V-os fizikai layert akarsz akkor RS485-ö választanék mert olcsóbb. A protokollt meg magad válaszod.
Új hozzászólás Aktív témák
Hirdetés
- AMD Navi Radeon™ RX 9xxx sorozat
- A Fehér Házban marad a Starlink Trump és Musk rossz kapcsolata ellenére
- Milyen légkondit a lakásba?
- AMD vs. INTEL vs. NVIDIA
- gban: Ingyen kellene, de tegnapra
- Honor Magic V2 - origami
- Sorozatok
- HiFi műszaki szemmel - sztereó hangrendszerek
- Kerékpárosok, bringások ide!
- Milyen belső merevlemezt vegyek?
- További aktív témák...
- Bomba ár! Lenovo ThinkPad X390: i5-G8 I 16GB I 256GB SSD I 13,3" FHD Touch I Cam I W11 I Gari!
- Telefon felvásárlás!! Apple iPhone SE (2016), Apple iPhone SE2 (2020), Apple iPhone SE3 (2022)
- ASUS TUF Gaming F15 FX506 - 15.6"FHD IPS 144Hz - i5-11400H - 8GB - 512GB - RTX 3050 Ti - 1,5 év gari
- LG 65B4 - 65" OLED - 4K 120Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - PS5 és Xbox Ready
- 13-14" Új és használt laptopok , üzletitől a gamerig , kedvező áron. Garanciával !
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest