-
GAMEPOD.hu
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
-
Teasüti
nagyúr
Én pl. kalibrációs értékeket mentek el benne, amit onnan tölt be egy esetleges reboot esetén.
Flash élettartam.
A CPU meg évtizedeket szolgálhat. Igazából én még csak nem is hallottam hír szinten se öregségben elhunyt processzorról eddig életemben.
A 20-30 éves PC-k is vígan futnak még, persze ha az alaplap és rajta a kondik bírják még.[ Szerkesztve ]
-
Teasüti
nagyúr
MPU6050 lelkivilágához ért itt vki?
Átnyálaztam magam ezen, mellé felcsaptam még ezt is.
Viszont akad pár kérdésem, amit nem értek, infót neten nem találtam, a program és a kézikönyv nem tárgyalja.
Pl. a FIFO olvasása és írása hogy működik?
Van egy FIFO_R_W regiszterem, de ez csak egyetlen bájt az 1024-ből. Szóval ezt miként használja a modul? Az olvasás gondolom úgy megy, mint a 60 KB soros puffer esetén, hogy a kiolvasott adat helyére a sorban következő kerül míg ki nem ürül a FIFO. Így van?
Viszont az írás teljesen ködös, egyáltalán mit és miért kéne ebbe írni kívülről az adatbusz felől?Aztán ott van a low pass filter és a sample rate.
Ha jól értem a kézikönyvet, akkor a chip a mintavételi frekinél alacsonyabb szűrő frekivel írja ki a szűrt értéket a regiszterbe.
Viszont ennek látszólag ellenmond az alábbi kód:// Configure MPU6050 gyro and accelerometer for bias calculation
writeByte(MPU6050_ADDRESS, CONFIG, 0x01); // Set low-pass filter to 188 Hz
writeByte(MPU6050_ADDRESS, SMPLRT_DIV, 0x00); // Set sample rate to 1 kHz
writeByte(MPU6050_ADDRESS, GYRO_CONFIG, 0x00); // Set gyro full-scale to 250 degrees per second, maximum sensitivity
writeByte(MPU6050_ADDRESS, ACCEL_CONFIG, 0x00); // Set accelerometer full-scale to 2 g, maximum sensitivity
uint16_t gyrosensitivity = 131; // = 131 LSB/degrees/sec
uint16_t accelsensitivity = 16384; // = 16384 LSB/g
// Configure FIFO to capture accelerometer and gyro data for bias calculation
writeByte(MPU6050_ADDRESS, USER_CTRL, 0x40); // Enable FIFO
writeByte(MPU6050_ADDRESS, FIFO_EN, 0x78); // Enable gyro and accelerometer sensors for FIFO (max size 1024 bytes in MPU-6050)
delay(80); // accumulate 80 samples in 80 milliseconds = 960 bytesTehát 80 ms-et vár, ami e szerint 80 minta (1 kHz). Viszont feljebb meg 188 Hz-es lowpass van beállítva, szóval ezt nem értem.
A célom az volna, hogy egy tetszőleges lowpass frekvencián megtöltsem a FIFO-t a gyorsulásérzékelő adataival, majd ezt burst read módban kiolvasni relatíve ritkán, hogy a fő programomat ne lassítsa be a 200 hz-es I2C olvasás szerencsétlen Uno-n. E helyett mondjuk a megengedhető legnagyobb késleltetéssel végezni egyetlen I2C műveletet a teljes FIFO puffert kiemelve, majd matekozni.
Ehhez talán interrupt se fog kelleni, max flag-ként.
Illetve azon fílózom még, hogy ha overflow interrupt-ot választok, akkor a FIFO eleje már felülírodott, mire jön a jel? Mert tök jó lenne úgy időzíteni a burst read-et is, hogy teli puffernél olvasson.szerk: illetve továbbra se tudok interrupt-ban I2C műveletet végezni. Ez normális?
Köszi!
[ Szerkesztve ]
-
Sokimm
senior tag
válasz Gergosz2 #3151 üzenetére
Köszönöm szépen! Neked is Teasüti! Már világos, hogy mért nem értettem, mivel még nem volt szükségem ilyen dologra (tárolni valamit a programon kívül), de már tudom merre induljak tovább!
Az élettartam dolgokra is köszi a linket, akkor nem félek, hogy a redőnyöm (vezérlője) bedöglik pár hónapon belül.[ Szerkesztve ]
-
tvamos
nagyúr
ROM, ami elektronikusan írható
Nem, az a PROM. A ROM az, amit a gyarban programoznak be.[link]
Ezeknel a prociknal nem tudom, hogy tudsz-e a Flash-be irni programkodbol, futasi idoben, szerintem nem, ha kell valamire non-volatile memory, csak az EEPROM-ban tudod tarolni. (Nagyobb prociknal, pl ARM, tudsz a Flash-be irni.)"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
hermit
tag
válasz fpeter84 #2908 üzenetére
Szia,
megerkezett az 5100-as ethernet shield-em.
Ha rateszem a megara, akkor el sem tud indulni, csak a piros led-je vilagit a meganak; ill. az ethernet-nek is.
Ha teszek a setup-ba egy led villogtatast, akkor meg idaig sem jut el az ethernettel. Lehet hogy hibas az ethernet modul es megfogja az egesz megat?Szerencsere a kijelzoje jol mukodik!
-
fpeter84
senior tag
A LED-nek erőteljes a fénye vagy csak pislákol? Ha utóbbi akkor rövidzárlatra tippelnék, ha nem akkor valami mással akasztja meg a kontrollert... Nézd át az egészet, hogy valahol nem látsz e megfolyt ónt a lábak között...
Tápot USB-ről kap vagy külső tápról? Utóbbit mindenképpen érdemes kipróbálni, hátha csak nem bírja a portod...
-
omárserif
újonc
Sziasztok!
Nagyon kezdő vagyok a témában, most került hozzám egy MEGA 2560.
Kérdésem, hogy az USB csatlakoztatás után folyamatosan villog a Teszt "L" led, és ezt semmilyen módon nem tudom megszüntetni.
Előre is köszi. -
omárserif
újonc
Nem, semmi nincs rákötve, teljesen szűz board.
-
-
mekkGyver
aktív tag
Üdv. Írok egy programot tabletre, ami soros porton arduinoval vezérelne egy autórádiót. Egy kb. 12 gombból álló bill. mátrixot kellene nyomkodnia. Kézenfekvő megoldás lenne egy relékből, vagy optokból álló kapcsolás, de egyrészt macerás, másrészt felesleges költségnek gondolom, mert szerintem simán meg lehetne oldani közvetlenül az arduino be/kimeneteivel. Épített már valaki hasonló kapcsolást? Jó lenne ha lenne valami példa program kiindulásnak. (Ha összejön, így szeretném megoldani a beltérim kapcsolgatását is wifin keresztül, mert az infra sokat hibázik.)
Idegeskedni nem más, mint mások hülyesége miatt magunkon bosszút állni.
-
omárserif
újonc
Sajnos ha más programot töltök rá akkor is tovább villog
-
tvamos
nagyúr
válasz Teasüti #3169 üzenetére
Simán átmásolod a programot RAM-ba, onnan futtatod, és írod a flash-t. Újabban már ez sem kell, lapokra van osztva a flash, egyikben fut a kód, másikat írod.
De tuti Arduinon is lehet akkor, mert van bootloader. Akkor rosszul tudtam, az újabb avr-eknél biztosan lehet.
Aha, ja. Ha eltolod, felülírod a kódot.
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
hermit
tag
válasz fpeter84 #3157 üzenetére
Eroteljes a megan es az etherneten is, de mind a ketton csak a a piros led vilagit. Ha rajt van az ethernet, akkor latszik a mega a programozo tool-ban.
Atneztem, nem lattam rajt semmi olyat, amit rovidzart okozhatna.
Eloszor usb-rol probaltam, majd kulso taprol is, de sajnos ugyanaz lett a vegeredmeny mindket esetben. :-/ -
Teasüti
nagyúr
Miért van az, hogy az alábbi 3 soros kód részlet - hőmérséklet olvasása MPU6050-ről - nem fut le a setup()-ban (rawData[ ] nem tartalmaz semmit), míg a loop()-ban igen?
szerk: nem aktuális, delay megoldotta.
Gondolom a szenzor reset után még nem volt adat, mikor olvasott az Uno.//temperature from MPU6050
Serial.println(readTempData());
Serial.print(float(readTempData()/340.0 + 36.53), 2);
Serial.println(" °C");
int16_t readTempData()
{
uint8_t rawData[2]; // x/y/z gyro register data stored here
readBytes(MPU6050_ADDRESS, TEMP_OUT_H, 2, &rawData[0]); // Read the two raw data registers sequentially into data array
Serial.println(rawData[0], BIN);
Serial.println(rawData[1], BIN);
return ((int16_t)rawData[0]) << 8 | rawData[1] ; // Turn the MSB and LSB into a 16-bit value
}
void readBytes(uint8_t address, uint8_t subAddress, uint8_t count, uint8_t * dest)
{
Wire.beginTransmission(address); // Initialize the Tx buffer
Wire.write(subAddress); // Put slave register address in Tx buffer
Wire.endTransmission(false); // Send the Tx buffer, but send a restart to keep connection alive
uint8_t i = 0;
Wire.requestFrom(address, count); // Read bytes from slave register address
while (Wire.available()) {
dest[i++] = Wire.read();
} // Put read results in the Rx buffer
}[ Szerkesztve ]
-
-
DougButabi
tag
Sziasztok!
Nagyon elakadtam, a segítségeteket kérem.
Rf kommunikációval próbálkozok ( VirtualWire). Tudok mindenféle adatot küldeni, de a string változó kifogott rajtam, egyszerűen nem megy sehogy.
Találtam egy ilyen példát ami látszólag pont megoldás nekem, csak az a baj, hogy nem működik, nem küld semmit:
void SendData(String Data)
{
//Making char Array of String
const char* rawdata = Data.c_str();vw_send((uint8_t *)rawdata, strlen(rawdata)); //Send Data
vw_wait_tx(); // Wait until the whole message is gone
}viszont ez működik tökéletesen:
char *controller;
controller="blablabla" ;
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx(); // Wait until the whole message is goneValakinek ötlet?
-
zka67
őstag
válasz DougButabi #3176 üzenetére
Szia, írasd ki soros porton a rawdata karaktereit (hexában) és az strlen értékét, és meglátod hogy van-e különbség az elvárt és a valós értékek között.
-
DougButabi
tag
Megnéztem, tökéletesen az elvárt eredményt hozza, látszólag semmi hiba, mindössze nem küldi el az üzenetet:
Talán így jobban érthető, egy receiver arduino-n csak a második üzenetet kapom meg.
void loop
{
SendData("Hello");
delay(50000);
}void SendData(String Data)
{//Ez nem működik semmi pénzért
const char* rawdata = Data.c_str();
vw_send((uint8_t *)rawdata, strlen(rawdata));
vw_wait_tx();//Ez pedig simán elmegy
char *Uzenet;
Uzenet = "Hello2";
vw_send((uint8_t *)Uzenet , strlen(Uzenet ));
vw_wait_tx();}
-
zka67
őstag
válasz DougButabi #3178 üzenetére
Szia, szerintem a const körül lesz valami, ha jól sejtem, akkor a const a kódmemóriába kerül, míg te a ram címét adod át. Próbáld meg, és vedd ki azt a const-ot.
-
Daszkalosz19
aktív tag
Sziasztok!
most kezdem tanulgatni az aurdino programozást és találtam egy jó kis [oldalt],de az ott található arduino kódok ellenőrzés után mindegyik re hibát ír ki.
Mindre a void setup-ra!
Mi lehet a hiba?
Nézzétek el tudatlanságom,még kezdő vagyok/*
AnalogReadSerial
Analóg kiolvasás és soros port
Az analóg 0 pinből olvassa ki az értékeket, amiket utána serial monitoron kiír. A potméter középső lábát A0-ba kötjük, a két szélsőt az 5 V-ba és a földbe. -
*/
void setup() {
// inicializáljuk a soros kommunikációt 9600 bits/mp-en:
Serial.begin(9600);
}
void loop() {
// kiolvassuk a bemenetet analóg 0 pinen:
int sensorValue = analogRead(A0);
// kiprinteli a kiolvasott értéket:
Serial.println(sensorValue);
delay(1);
// a delay késlelteti a kiolvasást, a stabilitás érdekében
} -
Teasüti
nagyúr
válasz Daszkalosz19 #3181 üzenetére
Nálam lefordítja így ahogy van.
Gondolom friss verziód van neked is.[ Szerkesztve ]
-
Teasüti
nagyúr
Ezt hol látod? Átsiklottam felette biztos.
Arról nincs infód véletlenül miért kell a PWR_MGMT_1 regiszterben a reset után még külön ébreszteni (kinullázni a regisztert)? A doksi szerint ha végez a reset-tel, akkor ez a kapcsoló automatikusan átfordul nullába. De nálam vmiért nem és nem is működik a modul, amíg külön nem írok nullákat ide.DEVICE_RESET: When set to 1, this bit resets all internal registers to their default values.
The bit automatically clears to 0 once the reset is doneFIFO-t nem használok jelenleg. felraktam maxra a lowpass filtert, aztán csak a regisztereket olvasom.
Egész jó eredményt ad, mintavételezéssel és átlagolással se kapnék szükségszerűen jobb eredményt, de legalább megspórolok némi cpu időt.MÁS
Watchdog interrupt-ra tud vki egy tutorial-t példával?
Csak olyan cikket találtam, ami egy erre épülő library-t mutat be, de nem akarok library-t használni, amikor pár sor az egész és legalább látnám mit is csinál regiszter szinten a kód.
(Lassan meg kéne néznem mi is az a library és hogy lehet létrehozni sajátot.)[ Szerkesztve ]
-
Janos250
őstag
válasz Daszkalosz19 #3181 üzenetére
Nekem is lefordítja. Írd ide, mit ír ki hibaként, hogy tudjunk segíteni!
Továbbá:
Milyen Arduino panelt használsz? (pl. UNO, stb.)
Melyik verziót használod az Arduino környezetből? 1.6.9 jelenleg a legújabb, de a régebbiek is jók.
Ugye innen (https://www.arduino.cc/en/Guide/HomePage) töltötted le? (Találtam már a neten máshol berhelt verziót)
Az installálós, vagy a portable verziót használod?
(Portable attól lesz, hogy a zip fájlt egyszerűen kicsomagolod, és első indítás ELŐTT csinálsz benne egy portable könyvtárat. Ugyanott, ahol a többi könyvtár is van. Ő csinál magának a portable könyvtárban a programjaidnak egy sketchbook könyvtárat, ahova a programjaidat teszi. Indítani az arduino.exe indításával lehet. A portable verzió ide rakja a saját dolgait, és békén hagyja a dokumentumok könyvtárat. ELVILEG bárhova áthelyezve működik, és ha több portable verzió van egymás mellett, nem zavarják egymást.)Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
soldi3r
veterán
Lenne egy bizonyos dolgom, amit szeretnek szemmel tartani, kovetnek, nevezzuk autonak.
Err van tobb celeszkoz is, amit a gpslive elofizetessel tudok hasznalni, szoval ezt kipipalnam.
Viszont megoldhato, hogy egy kis kamerat is elrejtsek benne es valahogy ennek a kepet tovabbitsam egy adott helyre? pl egy Arduino segitsegevel?
Talaltam hasonlo projektet, de nem tudom, hogy ez mennyire lehet eletkepes. Sajnos celeszkozt erre nem talaltam.E30 (oo=[][]=oo)
-
Daszkalosz19
aktív tag
válasz Janos250 #3186 üzenetére
Szia!
Arduino megám van és az 1.6.5 verziót használom exe telepítős nem portable és a hivatalos oldalról töltöttem le.
Viszont a többi kódot betölti csak a Rékásat nem!Ez a hibakód!
Arduino: 1.6.5 (Windows 8.1), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"Build options changed, rebuilding all
_03AnalogPin.ino: In function 'void setup()':
_03AnalogPin:7: error: redefinition of 'void setup()'
sketch_jun14a:1: error: 'void setup()' previously defined here
_03AnalogPin.ino: In function 'void loop()':
_03AnalogPin:12: error: redefinition of 'void loop()'
sketch_jun14a:6: error: 'void loop()' previously defined here
redefinition of 'void setup()'This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences. -
Janos250
őstag
válasz Daszkalosz19 #3190 üzenetére
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz Daszkalosz19 #3190 üzenetére
Hopsz, látom, igen, úgy van beállítva.
Akkor a következő lépés, hogy a file/preferences menüben berakod a pipát a
Show verbose output during részben a compilation elé.
Akkor igen szószátyár lesz, minden lépést kommentál, de akkor talán több látszik, hogy hol akad el.Azt gyanítom, hogy valami vagy hiányzik, vagy összekavarodott.
Lehet, hogy új letöltés lesz a vége.
Megpróbálhatod egy új letöltést, és a ha a portable verzióval használod, nem zavarja meg a már meglévő installáltat.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Gergosz2
veterán
válasz Daszkalosz19 #3190 üzenetére
nincs véletlen kettő loop-od meg setup-od? Akkor szokott ilyen hibákat dobni, ha egy már meglévő változót/függvény nevét használod egy új névnek.
Nokia 6030 Hardcore User // I Panic Restaurant by Taito
-
Daszkalosz19
aktív tag
Újra telepítettem,de ugyanaz a hiba
Portable verziónál is
Közben meg lett a hiba
Gergosz2: Tényleg két db volt belőle!!![ Szerkesztve ]
-
Teasüti
nagyúr
Watchdog témakörben van itt egy cikk, ami vhogy elmenti egy ISR_NAKED interrupt-tal, hogy hol lett megszakítva a program. Ez debug-ra volna jó, hogy aztán lehessen látni visszafejtés után pontosan milyen parancsnál fagyott le a futtatás.
Function called when the watchdog interrupt fires. The function is naked so that
we don't get program stated pushed onto the stack. Consequently the top two
values on the stack will be the program counter when the interrupt fired. We're
going to save that in the eeprom then let the second watchdog event reset the
micro.Nem fordul le a példa program, szóval szeretném újraalkotni alacsony szinten a kulcs részeit, viszont még elég hiányosak az ismereteim, meg a library-t se igazán értem még, hogy sketch-be át tudjam írni.
Nem tudom mi az a "stack" és hogy lehet kezelni. Illetve ez milyen területe az Arduino-nak? Még azt se igazán tudom mit kéne keresni a neten némi tájékozódás gyanánt.[ Szerkesztve ]
-
Teasüti
nagyúr
Illetve akartam kérdezni, hogy regiszter tologatásnál mit jelent egy ilyen művelet: 1<<WDRF?
Bitshift referencia szerint így kellene kinéznie:
Syntax:
variable << number_of_bits
variable >> number_of_bitsSzóval ez alapján nem tudom értelmezni a fenti műveletet.
Tolja el az 1-et balra a WDRF regiszterrel (ami 8 bites gondolom)??
Ha jól láttam az összes regiszter beállítása hasonlóképp működik*, de eddig csak értetlen copy&paste alapján végeztem tutorial-ból.
De szeretném megérteni mi is történik itt.
Érdekességképpen az I2C buszon lévő modulok regisztereit AND és OR művelettel lehet írni, ami adja magát és logikus is.Köszi!
*pl Timer1 config:
OCR1A = 31250; // compare match register 16MHz/256/2Hz
TCCR1B |= (1 << WGM12); // CTC mode
TCCR1B |= (1 << CS12); // 256 prescaler
TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt[ Szerkesztve ]
Új hozzászólás Aktív témák
- Azta Yoga Slim 7 Pro Gamer Procis Ultrabook 14" -30% AMD Ryzen 7 6900HS 16/512 RADEON 2GB 2,8K OLED
- iPhone 15 Pro Max kerestetik
- ASUS ROG Strix G15 G512LI-AL003 (15,6" 144Hz, I5 10300H, 16gb ram, GTX1650TI 4GB, 512gb SSD)
- PNY RTX 3090 24GB GDDR6X XLR8 Eladó! 199.000.-
- Ej-Ha! Lenovo ThinkPad P15 Szép Tervező Vágó Laptop -50% 15,6" i7-10850H 16/512 QUADRO T1000 4GB
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen