Hirdetés

2024. június 2., vasárnap

Gyorskeresés

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2023-03-11 00:46:52

LOGOUT.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.

Összefoglaló kinyitása ▼

Hozzászólások

(#14051) hcl


hcl
félisten
LOGOUT blog

Hello,

Van 1-2 szervóm, aminek nem tudom a bekötését. (Kb. ilyen.) Megvettem, aztán jól elfelejtettem felírni, melyik vezeték melyik.
Hogyan tudom kideríteni, mit hova? (Gúgli megvolt, csak ugye a kínai vagy olyan kiosztást használ, vagy nem... Ilyesmi érdekelne, hogy pl. mi mérhető a szálak között)
Azt már régebbről tudom, hogy a fordított polaritást nem szeretik :D

[ Szerkesztve ]

Mutogatni való hater díszpinty

(#14052) Aryes válasza hcl (#14051) üzenetére


Aryes
nagyúr

Piros +V, fekete GND, sárga vezérlőjel. Ha nem ez a három szín vagy ehhez hasoló van, akkor nemigen tudod kimérni szerintem. Kezdetnek adj rá vmi törpe feszültséget (pl ceruzaelem), ha megmozdul, akkor eltaláltad a tápot és a polaritást.
Többféle kínai szervót is vettem már, de fel sem merült még bennem, hogy rossz bekötés is lehet. Ezen szerintem nem szokták elqrni a színkódokat.

[ Szerkesztve ]

(#14053) hcl válasza Aryes (#14052) üzenetére


hcl
félisten
LOGOUT blog

Hát az egyik helyből barna-sárga-fekete, a másik piros-fehér-fekete :D

Mutogatni való hater díszpinty

(#14054) Aryes válasza hcl (#14053) üzenetére


Aryes
nagyúr

Akkor a GND egyértelmű. Mi kell még? :DDD

(#14055) hcl válasza Aryes (#14054) üzenetére


hcl
félisten
LOGOUT blog

Nem vagyok benne biztos, hogy egyértelmű... a kínaiak akárhogyan is képesek bekötni színes kábeleket.
USB-ben is láttam már meredek színeket :D Tehát a zöld-fehér-piros-feketéből egy sem volt benne.

Mutogatni való hater díszpinty

(#14056) Aryes válasza hcl (#14055) üzenetére


Aryes
nagyúr

Mondom: már vagy 4 különböző kínai szervót teszteltem, asszem volt közte ilyen barna-sárga-fekete is, de egyik se ment tönkre rossz bekötés miatt. :N Egyedül akkor gyanakodnék, ha fehér-zöld-fekete vagy hasoló lenne, mert fehér szokott lenni jel és táp is.

USB-ben is láttam már meredek színeket

Az semmi, asszem itt a topikban is volt már valaki, aki li-po akksit kapott, amin vagy a piros-fekete vezeték volt fordítva, vagy a csatlakozó, már nem emlékszem, de egy esp32 lolin lap bánta a dolgot, és még jó, hogy nem lett robbanás belőle. Szóval nyugi, nincsenek illúzióim. :DDD Én ilyen dolgokat multiméter nélkül sosem kötök sehová.

[ Szerkesztve ]

(#14057) hcl válasza Aryes (#14056) üzenetére


hcl
félisten
LOGOUT blog

Nekem egy más elpusztult fordított bekötés miatt, azért kérdezek itt, hogy hogyan lehet megtudni, mi a helyes :D

Az akkun felcserélni, az szép.... Én még csak (elég komoly) RC távirányítóba fordítva beültetett akkucsatit -> szerencsére az AA cellás volt, és csak pár 7805 bánta.

Mutogatni való hater díszpinty

(#14058) Aryes válasza hcl (#14057) üzenetére


Aryes
nagyúr

Persze, az egészséges gyanakvás sosem árt. :DDD

(#14059) repvez


repvez
addikt

na lassan megérkezik az összes modulom, a kérdésem az lenne, ha jol gondolom, ha a modulokat a VCC, GND , SDL,SDA részekre kell kötni, akkor az összes modul mehet egy helyre és amjd a kodolásnál lesz megkülönböztetve a regiszter által , hogy mikor melyik mmodulra vonatkozik ?

Mert ugye SDA, és SDL lábak csak egy helyen vannak és én szeretnék több modult használni egyszerre,
Ha jol értettem a leirásokat akkor ez az I2C .
Az mindegy, hogy sorosan vagy párhuzamosan kötöm be öket ?
[link]
Egy ilyen panelra akarom összerakni első körbe öket.
Egy AHT10es temp senzort, egy MUP9250est, és egy VL53LO lézeres távolság mérőt, később még egy NEO-8m GPS modul .
Egy NANO alap panelre kötve.

Bűrmilyen infot tanácsot szivesen fogadok

(#14060) Aryes válasza repvez (#14059) üzenetére


Aryes
nagyúr

az összes modul mehet egy helyre és amjd a kodolásnál lesz megkülönböztetve a regiszter által

Így van, egész pontosan az i²c address az, ami megkülönbözteti a modulokat. Remélhetőleg gyárilag mind különböző címet kapott, mindenesetre minden modult külön próbálj ki. Amire még esetleg szükséged lesz az mindkét vonalra egy-egy 4k (ezt most fejből írom, majd vki kijavít, ha rossz/nézz utána pontosan) felhúzó ellenállás. Nem modulonként, hanem vonalanként 1-1. Ha valamelyik modulon van gyárilag felhúzó, az elég lehet az összes számára. Ha a lap és a modul hosszú vezetékkel lesz összekötve, akkor kisebb értékre lesz szükség.

Az mindegy, hogy sorosan vagy párhuzamosan kötöm be öket ?

Dehogy mindegy, sorosan be sem lehet kötni, hogy gondoltad? :)

(#14061) repvez válasza Aryes (#14060) üzenetére


repvez
addikt

köszi,
Ezeket a reg cimeket, honnan tudom, meg? bármelyik manuált letöltve ugyan az lesz mindegyiké vagy az összes chipnek van sajátja?
Ha egy adott modulnak csak egyfajta registere van akkor kettő vagy többet hogy lehet ugyan abbol a modulbol használni ?

HA nem tudom , hogy van e felhuzo ellenállás a panelokon, akkor enélkül nem is tudom tesztelni öket ?
Per pillanat nincs semilyen ellenállásom se itthon.
ÉS azt hogy érted, hogy mindegyik vonalra és nem modulhoz kell ilyen ?

Mitől , függ, hogy honnan számit hosszúnak a vezeték aminél már kisebb ellenállás kell?
jelenleg csak 20cm es vezetéket tettem rá tesztelni, de későnn ez változhat.

A párhuzamos soros részt, ugy értettem, hogy ha 4 modult teszek rá akkor mindegyik lábhoz 4 vezetéket kell bekötni vagy beköthetem ugy is, hogy az egyik modul SDL lábárol a másik modul SDL lábára aztán a 3. és 4ére kötöm , majd a 4. től vezetem csak vissza a panelra és igy csak két vezeték menne a panel azonos lábaira:

(#14062) Janos250 válasza repvez (#14061) üzenetére


Janos250
őstag

"Ezeket a reg címeket, honnan tudom, meg?"
https://playground.arduino.cc/Main/I2cScanner/
"ugyan az lesz mindegyiké vagy az összes chipnek van sajátja? "
Általában fajtánként különböznek, de van, hogy egy adott fajtából is van több című. Nekem volt olyan - hirtelenjében nem jut eszembe mi volt - aminél a gyári jel után volt A0, A1,.. amiknek különböztek a címei. Hogy ezeket át lehet-e írni, azt nem tudom, de azt sejtem, hogy nem.
"Ha nem tudom , hogy van e felhúzó ellenállás a panelokon, akkor enélkül nem is tudom tesztelni őket ?"
A mikrokontroller GPIO lábát programozod úgy, hogy kapcsoljon be felhúzó ellenállást.
"azt hogy érted, hogy mindegyik vonalra és nem modulhoz kell ilyen"
A vezeték végig megy , a vezetékre csak egy helyen kell, pl. a kontrollerben, nem kell minden eszközhöz külön.
"vagy beköthetem úgy is"
Igen.

Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.

(#14063) And válasza repvez (#14061) üzenetére


And
veterán

A slave-címeket alapvetően a chip határozza meg, vagyis egy adott slave eszköz / modul adatlapján, leírásában lehet találkozni vele. Sok esetben legalább részben módosítható a cím, pl. a chip három lábának alacsony / magas szintre kötésével beállítható - a szokásosan 7-bites - cím három bitje, így abból akár nyolc is felfűzhető ugyanarra a buszra. A többi része fix, illetve van olyan típus is, amelynél az alacsony lábszám ára, hogy totál fix címe van. Létezik egyetlen input lábon analóg feszültségszinttel beállítható című slave is. Szóval modulja és a ráépített chipje válogatja, hogy mennyire szabadon állítható be a cím, ha egyáltalán módosítható.
"HA nem tudom , hogy van e felhuzo ellenállás a panelokon, akkor enélkül nem is tudom tesztelni öket ?"
Nem. Felhúzó ellenállás mindenképp kell, mivel a busz két vezetéke a slave-eken nyitott kollektoros tranzisztorokhoz kapcsolódik. Itt látható a jellemző I2C-busz felépítés: [link].
"Mitől , függ, hogy honnan számit hosszúnak a vezeték aminél már kisebb ellenállás kell?"
Van erre többféle leírás, app-note, néha még a slave-ek adatlapja is ad erre útmutatót. Általános esetben 4,7 kΩ körüli felhúzók megfelelnek, de az érték függ a busz hosszán felül a tápfeszültségtől (amire az I2C-busz fel van húzva, lásd az előbb linkelt ábrát) és a slave-ek típusától, darabszámától. Egyébként az I2C-vonalat nem túl nagy hosszra szokás tervezni, vagy ha igen, a sebességet lehet csökkenteni, illetve léteznek transzparens buszmeghajtók is ilyen célra. Azért egy-két méteren belül jó esetben nem lesz szükséged ilyesmire.
Mod. a #14062-re: a portra kapcsolható, uC-n belüli felhúzó megfelelhet, de mivel az általában túlságosan nagy értékű (sokszor 10 kΩ nagyságrendű), esetenként nem kerülhető meg a külső felhúzó. Ez főleg nagyobb buszsebesség, több slave és relatív nagy busztávolságok esetén igaz.

[ Szerkesztve ]

(#14064) Aryes válasza repvez (#14061) üzenetére


Aryes
nagyúr

Ezeket a reg cimeket, honnan tudom, meg?
Gyári adatlapból, de ha egy modulhoz van library, abban ez valószínűleg előre be van állítva.

bármelyik manuált letöltve ugyan az lesz mindegyiké vagy az összes chipnek van sajátja?
Gyárilag egyforma, igen.

Ha egy adott modulnak csak egyfajta registere van akkor kettő vagy többet hogy lehet ugyan abbol a modulbol használni ?
Van olyan i²c eszköz, amelyiknek hardveresen vagy szoftveresen változtatható a címe bizonyos korlátok közt, pl 2-3 címbit külső lábakra kivezetve, ezekből többet is fel lehet használni, amennyit a címtartomány enged. Amelyiket nem lehet változtatni, abból csak egyet tudsz használni egyszerre.

HA nem tudom , hogy van e felhuzo ellenállás a panelokon, akkor enélkül nem is tudom tesztelni öket ?
Mérd ki egy multiméterrel a Vcc és az SDA, valamint a Vcc és SDL közti ellenállást. Ha kOhm tartományt mérsz, az a felhúzó ellenállás lesz. Persze ne működés közben, hanem kiszerelve mérd.

ÉS azt hogy érted, hogy mindegyik vonalra és nem modulhoz kell ilyen ?
Két db. ellenállás kell, egy a Vcc és az SDA, egy pedig a Vcc és SDL közé.

Mitől , függ, hogy honnan számit hosszúnak a vezeték aminél már kisebb ellenállás kell?
jelenleg csak 20cm es vezetéket tettem rá tesztelni, de későnn ez változhat.

Az rövid. A hosszú mondjuk 1,5-2m-nél kezdődik.

A párhuzamos soros részt, ugy értettem, hogy ha 4 modult teszek rá akkor mindegyik lábhoz 4 vezetéket kell bekötni vagy beköthetem ugy is, hogy az egyik modul SDL lábárol a másik modul SDL lábára aztán a 3. és 4ére kötöm , majd a 4. től vezetem csak vissza a panelra és igy csak két vezeték menne a panel azonos lábaira:
Dehát attól még mindkettő párhuzamos. :DDD Az egyik csillagpontos, a másik daisy-chain (ha jól tévedek). De utóbbinál a lánc hosszúságával nő a zavarérzékenység, és csökken(het) a sebesség.

Hű, jó sokáig írtam a hozzászólást. :DDD

[ Szerkesztve ]

(#14065) hukhl


hukhl
csendes tag

Sziasztok!

Lenne egy kezdő kérdésem. Nyomógomb lenyomásainak számát számolom és erre léptetek állapotokat, mint egy állapotgép szerűen. Az egyes állapotokban 4 db LED-et villogtatok. (minden állapotban más-más sorrendben) Először delay-t használtam. Ezzel az volt a gond, hogy, amíg az egyik állapotom nem járt le addig nem tudtam tovább léptetni.
Aztán rátaláltam a millis()-re amivel szépen meglehetne ezt oldani. Mivel sok LED-em van és sok állapotom, így arra gondoltam, hogy ezt behívható funkcióként kellene megcsinálni. És amikor az egyik állapotban meghívom, akkor megadom a funkció bemeneti értékként a kívánt LED számát és a késleltetés idejét. Ezt a funkciót egy állapotban többször meghívva különböző LED-eket különböző ideig lehetne villogtatni. És közben elvileg a nyomógombom állapotát is tudom figyelni. :DD
Idáig jutottam:
//---------------
//Function
//--------------

bool LedMillis(long interval, int LEDPin, unsigned long currentMillis, bool ledState){

bool LEDStateResultInternal;
unsigned long previousMillis = 0;

if (currentMillis - previousMillis >= interval)
{

if(ledState == LOW)
{
ledState = HIGH;

ledState = LEDStateResultInternal;
}
else{
ledState = LOW;
ledState = LEDStateResultInternal;
}
previousMillis = currentMillis;
digitalWrite(LEDPin, ledState);
}
return LEDStateResultInternal;
}

Az adott kimenet számát, amelyhez a LED tartozik - LEDPin értéken adom be
CurrentMillis-nél az aktuális Millis értéket adom be
ledState-értéknél pedig a returnként visszaadott led állapot csatolom vissza.

A previousMillis értékem sajnos mindig 0 marad mivel újra meghívódik a funkció és kinullázódik.
A previousMillis érétket valahogy funkció meghívásonként el lehet tárolni valahogy külön-külön?
Visszatérési értékként lehet több különböző adatot visszaadni?
Bocsánat, ha kicsit katyvasznak tűnik így elsőre.
Még szoknom kell ezt a környezetet. :))

Köszönöm a segítséget! :)

[ Szerkesztve ]

(#14066) Janos250 válasza hukhl (#14065) üzenetére


Janos250
őstag

És ha previousMillis static-ra állítod?
Vagy legyen globális.

Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.

(#14067) Aryes válasza hukhl (#14065) üzenetére


Aryes
nagyúr

Így van, globálissá kell tenni a previousMillis-t.
Az
unsigned long previousMillis = 0;
sort a függvényen kívülre kell tenni, hogy globális változó legyen.

[ Szerkesztve ]

(#14068) hukhl válasza Aryes (#14067) üzenetére


hukhl
csendes tag

Köszönöm aryes és neked is Janos250!
Ez a globális változó ez bejött. :R

Viszont a funkcióból sajnos nem sikerült kinyernem a return értéket. :W Biztos valami alap nyelvtani hibát vétek ami miatt nem sikerül. Monitorozva a programot, sajnos nem kapom meg kívülre az értéket...
Lent látató az eddigi kód bejelölve ahova át akarnám másolni a visszatérési értéket majd újra betenni a funkcióba. Így megoldani a LED ki és bekapcsolását...

Végig gondolva az eddig megírt funkciót, ha többször fogom behívni akkor a "previousMillis" értékeket külön-külön kell nyilvántartani, mivel más időintervallumot fogok megadni az egyes ledekhez és így máskor kapja meg majd az aktális Millis értéket.

//---------
//Constans
//---------
const int LED1 = 12;
const int LED2 = 10;
const int LED3 = 8;
const int LED4 = 6;
const int BUTTON1 = 4;
const int BUTTON2 = 2;
//---------
//Variables
//---------
unsigned long previousMillis = 0;
int Button1State = 0;
int Button2State = 0;
int Button1LastState = 0;
int Button2LastState = 0;
int Button1CountState = 0;
int Button2CountState = 0;
bool LedStateResult = LOW;
//-------------------
// Start Initializing
//-------------------
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(BUTTON1, INPUT);
pinMode(BUTTON2, INPUT);
Serial.begin(9600);
}
//--------------------
//Main CODE start here
//--------------------
void loop() {
Button1State = digitalRead(BUTTON1);
unsigned long currentMillis = millis();
//---------------------------------
//Button State Reading and Counting
//---------------------------------
if (Button1State != Button1LastState) {
if(Button1State == HIGH){

Button1CountState = Button1CountState+1;
Serial.println("BUTTON STATE CHANGED");
}
}
Button1LastState = Button1State;

Serial.print("LED Result Main Loop : ");
Serial.println(LedStateResult);
//-----------------------------------------
//State machine according to Button 1 State
//-----------------------------------------
switch (Button1CountState)
{
case 0:
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
Serial.println("CASE0");
break;
case 1:
LedMillis(2000, LED1, currentMillis, LedStateResult);
LedStateResult = LedMillis;
// Serial.print("Millis Function Reuslt: ");
// Serial.println(LedMillis);

Serial.print("LED Result CASE1 : ");
Serial.println(LedStateResult);
//LedMillis(500, LED2, currentMillis, LedStateResult);
// LedMillis(500, LED3, currentMillis, LedStateResult);
Serial.println("CASE1");
break;
case 2:
Serial.println("CASE2");
break;

case 3:
Serial.println("CASE3");
break;
case 4:
Serial.println("CASE4");
break;
case 5:
Serial.println("CASE5");
break;
case 6:
Serial.println("CASE6");
Button1CountState = 0;
break;
}
}

//----------
//Function
//-----------
bool LedMillis(long interval, int LEDPin, unsigned long currentMillis, bool ledState){
bool LEDStateResultInternal;
Serial.print("Previous Millis :");
Serial.println(previousMillis);
Serial.print("Current Millis :");
Serial.println(currentMillis);
if (currentMillis - previousMillis >= interval)
{

if(ledState == LOW)
{
ledState = HIGH;

LEDStateResultInternal = ledState;

Serial.print("LED Result LedState High :");
Serial.println(LEDStateResultInternal);

}
else{
ledState = LOW;
LEDStateResultInternal = ledState;
Serial.print("LED Result LedState Low :");
Serial.println(LEDStateResultInternal);
}
previousMillis = currentMillis;
digitalWrite(LEDPin, ledState);


Serial.print("LED Result Final LedState :");
Serial.println(ledState);
}
return LEDStateResultInternal;
}

(#14069) Aryes válasza hukhl (#14068) üzenetére


Aryes
nagyúr

Légyszi használd a programkód formázás gombot </>, ha kódot szúrsz be, mert így olvashatatlan.

(#14070) Aryes válasza hukhl (#14068) üzenetére


Aryes
nagyúr

Megírhatnád az elvárt működést, és, hogy mit csinál helyette a program.

(#14071) weiss válasza hukhl (#14068) üzenetére


weiss
addikt

Szia, ez

LedMillis(2000, LED1, currentMillis, LedStateResult);
LedStateResult = LedMillis;

nem pont azt csinálja, mint szeretnéd, hanem a függvény címét másolná bele változóba. Neked ez kell:

LedStateResult = LedMillis(2000, LED1, currentMillis, LedStateResult);

Persze nem sok értelme van, mert amúgy is át adod neki azt a paramétert, szóval akár belül is módosíthatod. Üdvözöllek a pointerek bűvös világában :)

[ Szerkesztve ]

I did nothing, the pavement was his enemy!

(#14072) hukhl válasza weiss (#14071) üzenetére


hukhl
csendes tag

Szia!
Igen ennél a sornál akarnám beírni a "LedMillis" funkció visszatérési értékét a "LedStateResult "-ba, hogy a következő funkció lefuttásnál már ezzel a beolvasott értékkel dolgozzon a funkció. Ekkor elvileg 2000 msec-onként a visszatérési érték negálódik és ezzel a LED kivezérlési értéke is. :))

(#14073) hukhl válasza Aryes (#14070) üzenetére


hukhl
csendes tag

Bocsánat a szerkesztésért.
Ahogy fentebb írtam. Egy olyan funkciót szeretnék megírni. Ahol paraméterként egy idő intervallumot és egy pin számot kellene megadni. Amivel a pin-hez tartozó LED-et megadot ideig villogtatom. És van egy állapotgép, amit nyomógombbal léptetek. Az egyes állapotokhoz ezt a funkciót hívnám be. Ahol mindig más és más idő intervallmot adnék majd meg. :D Tudom elég nyakatekert. :DD

(#14074) Aryes válasza hukhl (#14073) üzenetére


Aryes
nagyúr

Értem! Ezt ilyen formában szerintem nem igazán lehet megoldani, illetve feleslegesen túl van komplikálva.
Ahogy én csinálnám: létrehoznék egy LED class-t, aminek 4 metódusa lenne: inicializáló, ahol beállítod a villogás idejét, start, stop, és egy frissítés, amit minden loop ciklusban meg kell hívni, ez ellenőrzi, hogy mennyi idő telt el, kell-e már ki-be kapcsolni a LED-et. Ebből annyi példányt csinálsz, ahány LED van, így az összeset egymástól függetlenül lehet villogtatni. Ha a class túl magas labda, hasonló logikát meg lehet valósítani függvényekkel is, de mindenképp külön inicializáló és külön villogtató(frissítő) függvény kellene.

[ Szerkesztve ]

(#14075) Janos250 válasza Aryes (#14074) üzenetére


Janos250
őstag

Ezért - is - jobb a párhuzamos programozás.
Tulajdonképpen azt csinálja, amit leírtál, csak el van rejtve.
Amikor el kell indítani egy led villogtatását, elindítom egy külön taskként, ami majd megszűnik, amikor lejár az idő.
Nincs gond az átlapolással, miegymással, a taskok nem zavarják egymást, az op. rendszer elintézi, hogy mind kapjon egy időszeletet, de senkit ne zavarjon.

Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.

(#14076) Aryes válasza Janos250 (#14075) üzenetére


Aryes
nagyúr

Ó, te!
De abban mi a kihívás, meg szórakozás? :DDD

(#14077) Alu


Alu
senior tag

Sziasztok!

STM32 -vel kapcsolatban lenne egy kérdésem és bár nem Arduino környezet, azért bízom benne, hogy nem hajtotok el. :U
STM32F103C8T6 (BluePill) + St-Link v2 + Keil
UART olvasás jelenleg DMA módban van konfigurálva, melynek előre meg kell határozni azt a byte hosszúságot, ami után interruptot dob és meghívódik az RxCpltCallback függvény. A probléma, hogy a másik eszköz 8 vagy 16 byteosával küldi az üzeneteket és ezeket kellene dekódolnom a mikrovezérlővel. A kérdésem pedig az lenne, hogy ha a dma interruptot 8 bytera állítom, akkor abban az esetben mi történik, ha 16 byteot küld a másik eszköz? A 8. byte beérkezésével jön egy megszakítás, majd kb. rögtön (konkrétan 8 byte idővel később) jönne egy újabb megszakítás?

λŁƯ™

(#14078) Aryes válasza Alu (#14077) üzenetére


Aryes
nagyúr

Gondolom igen. Ez a DMA mód micsoda? Hardveresen puffereli a bejött adatokat vagy szoftveresen?

(#14079) Alu válasza Aryes (#14078) üzenetére


Alu
senior tag

Direct memory access. Amikor szoftverben felkonfigurálod ezt a módot, akkor megadsz egy tömböt és ő cpu idő nélkül hardveresen beteszi a bejövő adatokat a megadott tömbbe. Ha pedig beérkezett az a mennyiségű byte, amit az elején megadtál, akkor generál egy megszakítást.

λŁƯ™

(#14080) Janos250 válasza Alu (#14077) üzenetére


Janos250
őstag

Vannak itt páran, akik foglalkoznak STM32-vel, ha erre járnak, biztosan válaszolnak.
Páran, így hirtelen, ha nem vennék észre, őket keresd:
ecaddsell, Tankblock, fpeter84, tvamos
Bár tvamos már nemigen jár erre, pedig a PH-n még itt van.

Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.

(#14081) Janos46


Janos46
tag

Sziasztok!
Találtam egy jó kis oldalt, ami 339 példa programot tartalmaz az aurdino számára. Amiket kipróbáltam, az mind működött is.
https://robojax.com/learn/arduino/

Robojax.com forráskód a YouTube videókhoz
Ez az oldal a videók forráskódjának megosztására szolgál a Robojax YouTube-csatornáján.

Artillery, lelkes újonc vagyok, tanulni akarok!

(#14082) gyapo11 válasza Janos46 (#14081) üzenetére


gyapo11
őstag

Köszi, eltettem az url-t, itt egy másik: link.

menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet

(#14083) Aryes válasza Alu (#14079) üzenetére


Aryes
nagyúr

Az tök jó. Akkor a megszakításban annyit tegyél csak, hogy átmásolod ezt a tömböt valahová minél gyorsabban, hogy azonnal tudjon érkezni a következő adag adat, és a programtörzsben dolgozd fel.

(#14084) Janos46


Janos46
tag

Sziasztok.
Segítséget kérnék és köszönöm ha sikerül. Van az alább mellékelt porgram, ami nem akarja az igazságot. Ha nincs csatlakoztava a TM1632-es, akkor a portmonitoron megjelennek az adatok. Azonban ha csatlakotatom, akkor sem a portmonitoron, sem a kijelzőn nem láthatóak. A hw jó, mert az előzőben említett oldalról letöltött másik kicsit hasonló prgram azonos csatlakozó-kiosztással működik
//  https://vk-book.ru/ultrazvukovoj-dalnomer-hc-sr04/
// a TM1637 kijelző csatlakoztatása
#include <TM1637.h>
#define CLK 3
#define DIO 2 
TM1637 tm1637(CLK,DIO);
// пины для HC-SR04
int echoPin = 12; 
int trigPin = 11; 
 
void setup() { 
  Serial.begin (9600); // a portmonitor kimenete
  pinMode(trigPin, OUTPUT); // jel küldése
  pinMode(echoPin, INPUT);  // jel vétele
 
  // kijelző inicializálása
  tm1637.init();
  tm1637.set(BRIGHT_TYPICAL);

  
void loop() { 
  int duration, mm; // változók a távolság tárolásához
  // hagyja abba a jel küldését
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2); 
  // küldjön ultrahangos jelet
  digitalWrite(trigPin, HIGH); 
  // várjon 10 mikroszekundumot
  delayMicroseconds(10); 
  // hagyja abba a jel küldését
  digitalWrite(trigPin, LOW); 
  // méri az echoPin pozitív impulzusának hosszát
  duration = pulseIn(echoPin, HIGH); 
  // számolja ki az akadály távolságát
  mm = duration / 5.8;
  // adatkimenet a portmonitorhoz
  Serial.print(mm); 
  Serial.println(" mm"); 
  // adatkimenet a kijelzőhöz
  tm1637.display( mm );
  delay(1000);
}

Artillery, lelkes újonc vagyok, tanulni akarok!

(#14085) Aryes válasza Janos46 (#14084) üzenetére


Aryes
nagyúr

Hát első ránézésre a
tm1637.display( mm );
sor gyanús, nincs a library-ben "display" metódus.
Vajon mire gondolt a költő? 🤔

(#14086) weiss válasza Janos46 (#14084) üzenetére


weiss
addikt

Ezt a két sort próbáld meg lecserélni a TM1637.cpp-ben:

pinMode(Clkpin,OUTPUT);
pinMode(Datapin,OUTPUT);

erre

pinMode(Clkpin, INPUT);
pinMode(Datapin,INPUT);
digitalWrite(Clkpin, LOW);
digitalWrite(Datapin, LOW);

[ Szerkesztve ]

I did nothing, the pavement was his enemy!

(#14087) Aryes válasza weiss (#14086) üzenetére


Aryes
nagyúr

Ez miért jó?

(#14088) weiss válasza Aryes (#14087) üzenetére


weiss
addikt

Áh, semmi, csak összenéztem a két konstruktort, és ezt láttam meg különbségként, de már rájöttem, hogy máshogy műxik a két lib.

I did nothing, the pavement was his enemy!

(#14089) Janos250 válasza hukhl (#14073) üzenetére


Janos250
őstag

Rólad meg elfeledkeztünk :-(
Nem tudom jutottál-e már valamire?
A problémát én a következőkben látom: IDŐ !!!

Ha egy függvényt csinálsz, ami adott ideig villogtat, akkor az addig fogja a programot, nem megy tovább. Ha jól értem, amit akarsz csinálni, akkor ez itt elakad, amíg be nem fejeződik a villogás, nem megy tovább, és ez gond.

1. Vagy több loopot csinálsz, és mindegyikben egy-egy ledet kezelsz ciklusban. (Milyen lapon csinálod?)
Akkor időszeletben fut párhuzamosan az összes függvényed, és kezeli egy-egy függvény egy-egy loopban a kapcsolóidat, ledjeidet.

2. Vagy muszáj az egy loopban folyamatosan vizsgálni ciklikusan az összes ledet, hogy melyiknek éppen milyen a státusa és hol tart. Ha kell, beavatkozol.

Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.

(#14090) Janos250 válasza Janos46 (#14084) üzenetére


Janos250
őstag

Kíváncsiságból megnéztem ez a displayt, bár pont ugyanezt szerintem soha nem használtam. (És másikat is évekkel ezelőtt)
A neten van egy csomó könyvtár a kezelésére, nem tudni, melyiket használod.
Talán ezt:
https://github.com/Seeed-Studio/Seeed_Grove_4Digital_Display_g/blob/master/TM1637.h
Ennek viszont egyik display tagfüggvényéhez se passzol - úgy vélem - a te hívásod.
Ez van a .h-ban:
void display(int8_t DispData[]);
void display(uint8_t BitAddr,int8_t DispData);
Ez meg nálad:
tm1637.display( mm );

Ez egyikhez sem passzol. Vagy másik könyvtárat használsz?
Ha nem tudjuk pontosan, melyik könyvtárat használod, nehéz lesz ötletet adni!

Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.

(#14091) Alu válasza Aryes (#14083) üzenetére


Alu
senior tag

Én is gondoltam erre, de tartottam tőle, hogy a 2. megszakítás kritikusan gyorsan következne és beleszólna a tömb másolásba. No meg akkor a feldolgozást is alaposan át kellett volna gondolni. Végül máshogy oldottam meg. A másik eszköz amúgy egy Nextion kijelző és minden eventnél saját magam határoztam meg, hogy mit küldjön az stm -nek. Minden üzenet fix 16 byteos lett, bár megesik, hogy ebből csak 2 byte hasznos, a többi '0x00'... ;] de legalább egységes és könnyebben tudom kezelni stm oldalon. DMA -t is kukáztam és interruptos megoldást alkalmaztam. Jó fél nap volt, mire rájöttem, hogy mi a különbség az interrupt és a dma kezelés között. Ráadásul dma -nál is annyi mindent be tudsz konfigurálni, mint égen a csillag... Eddig nem tűnt fel, de Arduban hatalmas segítség, hogy a szoftver elég sok mindent lekezel a háttérben. Igaz így a kezed is jobban meg van kötve, de valamit valamiért.

#14080 Janos250: Köszi! Privátban éri őket zaklatni?

[ Szerkesztve ]

λŁƯ™

(#14092) Janos250 válasza Alu (#14091) üzenetére


Janos250
őstag

"Privátban éri őket zaklatni?"
Szerintem várd ki, hátha itt is meglátják, és reagálnak.
Én csak utána próbálkoznék.

Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.

(#14093) hukhl válasza Janos250 (#14089) üzenetére


hukhl
csendes tag

Szia!
Igen előrébb jutottam a témával kapcsolatban :)
#1404 - aryes - válaszában ahogy írta. Elkezdtem utána nézni hogy lehetne egy ilyen LED classot csinálni. És belefutottam egy leírásba ahol a szerző az OOP előnyeit pont egy ilyen LED-es class készítése közben magyarázta el. :Y
A LED számát, a bekapcsolás és kikapcsolás idejét is meg lehet adni benne.
Magamtól sajnos még nem tudok ilyet írni, de ezt jól be tudtam illeszteni az eddigi programomba. :DD
Tegnapi nap nagy része pedig egy 2004A típusú kijelző élesztésével ment el. A nap végére azt is sikerült összehoznom. Ma, ha lesz időm akkor akarok írni rá fancy szövegeket. Illetve van néhány szenzorom amit fel akarok még éleszteni és beintegrálni az eddigi projektbe.
Szóval köszönöm az eddigi segítséget! :R

(#14094) Janos250 válasza hukhl (#14093) üzenetére


Janos250
őstag

:)

Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.

(#14095) Janos46 válasza Janos250 (#14090) üzenetére


Janos46
tag

Köszi a választ (és mindenkinek).
Valóban nekem a csak a TM1637-hez 4 könyvtár van a libraries-be. Mivel csak kisérletezgetek, összejött több mint 130 könyvtár ott. Most már azt fogom tenni, hogy azokat a progikat, amelyek nem futnak, egy külön konyvtárba fogom rakni és csak a kért fájlhoz tartozó konyvtárakat teszem a lib-be. Igazad volt, mert a Grove könyvtárral indult el, a portmonitor már ok, de a kijelzőn abszolút hibás adatok jelennek meg. Tudnád orvosolni?
Nem mondom hogy buta vagyok, bizonyos dolgokba bele tudok javítani, de ez így egészben nekem már kissé magas. Amúgy a (sz)ámítástecnika nem ismeretlen számomra (Commodore 64 óta). Megtetszett a programozás, de így 75 éves fejjel már nem fogok elérni nagy sikereket. Környezetemben senki nincs akivel eszmecserét folytathatnák ebben a témában. A pub-ban nem szándékozozm a pultot támogatni, ezért is kezdtem el ezt az egészet, a bringázás mellett egész jó kiegészítés. Ép testben ép lélek. Már volt rá példa, hogy meg kellett mutatnom a szig-et, nem hitték el a korom. Nnnna..., jól kisiránkoztam magam.

[ Szerkesztve ]

Artillery, lelkes újonc vagyok, tanulni akarok!

(#14096) Janos250 válasza Janos46 (#14095) üzenetére


Janos250
őstag

Így a távolból nem sokat tudok mondani erre a konkrét problémára.
Először is: milyen lapot használsz? 5V-os, vagy 3,3 V-os.
Ha szenzorokat akarsz csatlakoztatni, akkor én nagyon javasolom
ennek az eszköznek a megvételét:
https://www.aliexpress.com/item/1005001564915722.html
Ha ezt csatlakoztatod az Arduino lábaira, tudod rögzíteni egy idő tengelyen, hogy melyik láb mikor, mennyi ideig lett alacsony, illetve magas. Ha ezt visszabogarászod, és összehasonlítod az eszköz adatlapjával, akkor látod, hogy ez ment ki, pedig emennek kellett volna. Így már gyakorlatilag meg is van a hiba, hova kell belenyúlni.
Higgyétek el, sokkal eredményesebben lehet dolgozni, ezzel a módszerrel, és nagyjából 2000 Ft az ára.
Szoftvert meg ingyen is el lehet érni hozzá, több félét is. Nem törött, vagy akárhonnan letöltött vírusosat! Könyvtárakkal - ha irodalmi könyvtárat használok - többnyire azt csinálom, hogy a .h és a .cpp fájlt átteszem oda, ahol a .ino is van. Ez némi hátránnyal jár ugyan, de előnnyel is.

Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.

(#14097) Aryes válasza Janos46 (#14095) üzenetére


Aryes
nagyúr

Erre szokták mondani, hogy most panaszkodsz, vagy dicsekszel? :DDD 75 évesen ilyen hozzáállás és nyitottság igazán példaértékű. :R
Én is C64-en kezdtem, megtanultam a gépi kódot is, amit AVR-rel már hasznosítottam is (nyilván nem ugyanaz a nyelv, de a logikája hasonló).
Ha bármi kérdésed van, ide nyugodtan írhatsz, a topik tele van okos és segítőkész tagokkal. Ja, és itt vagyok én is. :DD

(#14098) Aryes válasza Janos250 (#14096) üzenetére


Aryes
nagyúr

Tudsz javasolni hozzá szoftvert? Van egy ilyenem, de még sosem használtam.

(#14099) Alu válasza Aryes (#14098) üzenetére


Alu
senior tag

Elvileg Saleae kompatibilis. Nekem is van, de még nem próbáltam.

λŁƯ™

(#14100) Gergosz2 válasza Alu (#14099) üzenetére


Gergosz2
veterán

Nem elvileg, hanem gyakorlatban is, magam is használom. Bár annyit hozzáteszek, hogy 20MHz-et nem mindig tudja, de 16-on stabilan működik.

A nagyobb testvére is jó cucc, ár érték arányban nagyon adja. [link]

Nokia 6030 Hardcore User // I Panic Restaurant by Taito

Copyright © 2000-2024 PROHARDVER Informatikai Kft.