Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   578 / 852
(#) rolandgw válasza Bakman hozzászólására (») Dec 25, 2019 /
 
Több könyvtári függvény is ilyen. Például a printf:
Bővebben: Link
(#) kiborg hozzászólása Dec 25, 2019 /
 
Sziasztok!

Van pár tömböm,ami különböző hosszúságúak, byte típusúak.
Hogy tudnám meghatározni a hosszukat? (a hossz a kiíratáshoz kellene)
a sizeof mindig 4 értéket ad vissza (amit nem tudok, hogy miért)
Böngésztem a netet, de az strlen csak sting/char tömbhöz jó, ha jól láttam.
Mi a megoldás?
Nyilván úgy is létre tudom hozni a tömböt, hogy a [] közé beírom az elemszámot, ha ezt vissza tudom nyerni valahogy,akkor az is megoldás jelenleg számomra.

  1. byte Day_1[] = {0x48,0x82,0x04,0x66,0x30};
  2. byte Day_2[] = {0x4B,0x65,0x64,0x64};
  3. byte Day_3[] = {0x53,0x7A,0x65,0x72,0x64,0x61};
  4. byte Day_4[] = {0x43,0x73,0x81,0x04,0x99,0x72,0x04,0x99,0x6B};
A hozzászólás módosítva: Dec 25, 2019
(#) Massawa válasza kiborg hozzászólására (») Dec 25, 2019 /
 
Mert minden tartalom a tömben egységesen 4 byte, ezért ad a sizeof 4-t vissza. Ezt kezelned kell ( mondjuk osztva 4-l stb).
(#) kiborg válasza Massawa hozzászólására (») Dec 25, 2019 /
 
ööö... lehet nem értek valamit,de ha a 4-t osztom 4-el,akkor meg mindig 1-et kapok.Ezzel nem vagyok előrébb.
(#) szeg76 válasza kiborg hozzászólására (») Dec 25, 2019 /
 
Nálam ez 5,4,6 és 9 byte hosszat ír:

  1. byte Day_1[] = {0x48,0x82,0x04,0x66,0x30};
  2. byte Day_2[] = {0x4B,0x65,0x64,0x64};
  3. byte Day_3[] = {0x53,0x7A,0x65,0x72,0x64,0x61};
  4. byte Day_4[] = {0x43,0x73,0x81,0x04,0x99,0x72,0x04,0x99,0x6B};
  5.    
  6. Serial.begin(9600);
  7. Serial.println( sizeof( Day_1 ) );
  8. Serial.println( sizeof( Day_2 ) );
  9. Serial.println( sizeof( Day_3 ) );
  10. Serial.println( sizeof( Day_4 ) );
(#) Taki33 válasza kiborg hozzászólására (») Dec 25, 2019 /
 
A tömbök méretét előre meg szoktuk határozni, mivel a mikroprocesszorok memóriája elég karcsú!

  1. #define DAY1_SIZE 5
  2. #define DAY2_SIZE 4
  3. #define DAY3_SIZE 6
  4. #define DAY4_SIZE 9
  5.  
  6. byte Day_1[DAY1_SIZE] = {0x48,0x82,0x04,0x66,0x30};
  7. byte Day_2[DAY2_SIZE] = {0x4B,0x65,0x64,0x64};
  8. byte Day_3[DAY3_SIZE] = {0x53,0x7A,0x65,0x72,0x64,0x61};
  9. byte Day_4[DAY4_SIZE] = {0x43,0x73,0x81,0x04,0x99,0x72,0x04,0x99,0x6B};
  10.  
  11. void loop()
  12. {
  13.    for (int i = 0; i <DAY1_SIZE; i++)
  14.   {
  15.    
  16.   }
  17.  
  18. }
(#) Kovidivi válasza kiborg hozzászólására (») Dec 25, 2019 /
 
A tömb mérete meghatározott, akár előre definiálod tomb[12], vagy ha üresen hagyod, akkor a fordító tölti ki helyetted, hogy hány eleme van a tömbnek. Tehát elviekben már tudod, mekkora a tömböd a fordításkor is!
Használhatsz változót is, vagy előre definiálhatod mint előttem írták #define.
Ha valamilyen oknál fogva nem akarod számolgatni, mert a programozás során össze-vissza írsz hozzá, veszel el a tömbökből, akkor megpróbálhatod, hogy a sizeof(tomb)-értéket elosztod a sizeof(tomb[0])-val. Írj vissza, ha kipróbáltad, én telóról vagyok.
Vagy a tömbőd végére berakod a '/0' lezárót, és akkor az strlen meg tudja számolni, de ha nem, akkor írsz egy saját fv-t hozzá.
A hozzászólás módosítva: Dec 25, 2019
(#) zsoltee0001 válasza Bakman hozzászólására (») Dec 25, 2019 /
 
Persze.
Upc-s neten ment az outlokon keresztül gmailra is és tonlinera is a küldés.
Telekomos netnél már csak tonline irányába tud küldeni.
Üdv
(#) tbarath válasza Bakman hozzászólására (») Dec 25, 2019 /
 
Pedig biztosan hívtál már meg így. Pl. ott a Serial.begin(), nézd csak meg!
De ott is hasznos, ahol ugyanazt a függvényt több típusra is akarod használni. Pl. a Serial.print() ki tud írni int-et, float-ot, karaktert, karaktertömböt, stb., itt ez a függvény minden adattípusra meg van írva, és futásidőben az kerül meghívásra, ami a paraméter típusa alapján stimmel.
(#) Massawa válasza kiborg hozzászólására (») Dec 25, 2019 /
 
Itt van kb 11. perctöl pontosan elmagyarázva ( németül) hogyan müködik a sizeof funkcio és a tömb.
(#) kiborg válasza szeg76 hozzászólására (») Dec 25, 2019 /
 
Igazatok van, működik a dolog, viszont akkor más a hibám.
Melléklem a részleteket is.

  1. byte Day_1[] = {0x48,0x82,0x04,0x66,0x30};
  2. byte Day_2[] = {0x4B,0x65,0x64,0x64};
  3. byte Day_3[] = {0x53,0x7A,0x65,0x72,0x64,0x61};
  4. byte Day_4[] = {0x43,0x73,0x81,0x04,0x99,0x72,0x04,0x99,0x6B};
  5.  
  6.  
  7. VFD_tomb(Day_4,0);
  8.  
  9.  
  10.  
  11. void VFD_tomb( byte tomb[], byte poz)
  12. {
  13.     byte hossz=sizeof(tomb);
  14.    
  15.     digitalWrite(VFD_Select,LOW);       // VFD_Data_Transfer_Enable
  16.     SPI_Send(0x10+poz);                  // Pozíció beállítás
  17.     delayMicroseconds(5);  
  18.     for (int i = 0; i < hossz; i++)
  19.     {
  20.       SPI_Send(tomb[i]);//(0x00);
  21.       delayMicroseconds(5);  
  22.     }
  23.     digitalWrite(VFD_Select,HIGH);    // VFD_Data_Transfer_Disable
  24.   }


Egy tömbbel hívnám meg VFD_tomb rutint, de byte hossz=sizeof(tomb); sor négyet ad vissza Pedig elméletileg azt kellene visszaadnia, hogy milyen hosszú a tömb és a for ciklusnak addig kellene olvasnia a tömb elemeit.
Hol a hibám?
A hozzászólás módosítva: Dec 25, 2019
(#) benjami válasza kiborg hozzászólására (») Dec 25, 2019 / 1
 
Tömböt nem tudsz paraméterként átadni egy függvénynek (még ha annak is látszik), csak a tömb kezdőcímét (a címe ezek szerint 32 bites). Vagy kiegészíted a függvényed egy harmadik (tömbméret) paraméterrel, vagy lezáró nullát teszel a tömb végére és akkor az strlen függvénnyel lekérdezhető az aktuális tömböd hossza.
(#) Kovidivi válasza kiborg hozzászólására (») Dec 25, 2019 / 1
 
Ha egy tömböt egy fv-nek át akarsz adni, akkor azt csak pointerrel tudod (a címével), onnantól kezdve elveszted azt az infót, hogy a tömböd milyen hosszú, mert a függvényen belül csak egy címe látható.
(#) kiborg válasza Kovidivi hozzászólására (») Dec 25, 2019 /
 
Köszönöm a segítséget mindenkinek, megoldottam a dolgot másképpen.
(#) Sanyesz5 válasza icserny hozzászólására (») Dec 26, 2019 /
 
Köszönöm a segítséget!

Így már érthető, viszont van egy olyan gubancom hogy nem működik a telep feszültség mérése ezzel a megoldással. Holott így van megoldva gyárilag is, felvillan a telep hogy tele, fél perc múlva üreset mutat a kijelző.... Kis pihenés után megint jó fél percig, amit viszont végképp nem értek hogy ilyenkor nem is mérek az A0 bemeneten semmit, már kötöttem direktbe is egy dróttal 220k ellenállással a végén ugyanez..... Nem értem hol a gond
(#) Sanyesz5 válasza Sanyesz5 hozzászólására (») Dec 26, 2019 /
 
Közben úgy nézem megoldódott a probléma, két vezetősáv nagyon közel volt egymáshoz
(#) Rober_4 hozzászólása Dec 26, 2019 /
 
Egy Yamaha szinti billentyűzetmátrixát próbáltam szimulálni ma Arduinoval. A lényeg, hogy a mátrix 9 címvezetéken kapja az éppen aktuális címet. A 9 címhez 6 billentyű (fél oktáv) tartozik. (Egyszerre csak egy címvezeték van alacsony szinten)
Arra gondoltam, hogy egy Arduinó Nanoval helyettesítem a mátrixot. A0-A8 és D13 a címvezetékeken veszi az aktuális címet, a D7-D12-ig pedig visszaadja , hogy melyik billentyű van lenyomva a 6 közül. Tehát ha az A0 alacsony szintre megy, akkor pl. D7-et alacsony szintre váltom, mellyel jelzem, hogy le van nyomva a hozzá tartozó billentyű. (de csak akkor ha címet kap)
A dolog elvben szép, a gyakorlatban túl lassú az egész, úgyhogy semmi haszna nem lett. Mire reagál a Nano, addigra, 2-3 ciklus lezajlik a címzésben, és sokszor mire kiteszem az adatot, addigra rég más címhez tartozik már... Tehát ne így próbáljátok megoldani, ha ilyen problémába ütköztök...
És megint random hangokat hallgatott a család egész délután
(#) proba válasza Rober_4 hozzászólására (») Dec 26, 2019 /
 
Lehet ha analóg kapcsolókat használsz működik. A sor meg oszlop jelekre a kapcsolók egyik pontja, a másik pontjukat meg közösíted. Így ha az adott gombhoz tartozó sor meg oszlop kapcsolót kapcsolod, egyenlő a gombnyomással.( már csak az időt kell mérni, hogy biztosan lenyomottnak érezze a gombot.)
(#) Massawa válasza Rober_4 hozzászólására (») Dec 26, 2019 /
 
Az ilyesmit nem biztos, hogy a sima Arduino C nyelvben kell megirni. Az ilyesmit alapbol ASM-ben vagy annak a kombináciojával lehet csak elérni. A minap éppen bizonyitottuk be, hogy igy az Arduinobol akár 100 kHz is kihozhato ( szignalgenerátori minöségben) C nyelvben meg a 10 kHz is sok.
(#) Rober_4 válasza proba hozzászólására (») Dec 26, 2019 /
 
Persze, csak akkor 49db kapcsoló kell... Vagy 49 kimenet ami nagyon sok vezeték sajnos. Egyszerűbbet szeretnék...
(#) Rober_4 válasza Massawa hozzászólására (») Dec 26, 2019 /
 
Ha tudnál dobni valami doksit, vagy linket erről, azt megköszönném! Természetesen rászánom az időt. Most tulajdonképpen már látom a serial printen, hogy címezgeti a bemeneteket, ha lenne szkópom talán látnám is mennyi a késésem a kimeneten...
Illetve melyik idet tegyem fel hozzá?
A hozzászólás módosítva: Dec 26, 2019
(#) proba válasza Rober_4 hozzászólására (») Dec 26, 2019 /
 
Miért kellene? A midi minden ki/bemenetére egy kapcsoló, a másik pontjuk meg közös. Bármelyik gomb két analóg kapcsoló sorba kapcsolásával megvalósítható. Az adott gombhoz tartozó cím, meg oszlop lábakon lévő kapcsolók egyidejű zárásával már meg is van nyomva a gomb. ( talán a több midis gomb egyidejű megnyomása így nem megvalósítható, de az egygombos kezeléshez jó)
(#) wbt válasza Rober_4 hozzászólására (») Dec 26, 2019 /
 
MT8812 vagy MT8816 akár hazsnálható is lenne szerintem.
(#) proba válasza Rober_4 hozzászólására (») Dec 26, 2019 /
 
Ami kérdés, egyáltalán milyen tempóban változnak a cím lábak. Ha 50-100Khz-nél több, nem sok esélyed van az arduinóval szoftveresen.( esetleg egy frekvenciamérővel megmérheted, max a kapott értéket a kimenetek számával szorozni kell.)
(#) benjami válasza Rober_4 hozzászólására (») Dec 26, 2019 /
 
Egy gombhoz az mt8816 megfelelhet, több gomb esetén korlátos a diódák hiánya miatt. Amúgy miért nem veszel egy pár dolláros 8 csatornás logikai analizátort? Azzal simán megnézhetnéd milyen sebességgel van a mátrix működtetve.
(#) sargarigo válasza Rober_4 hozzászólására (») Dec 26, 2019 /
 
Vagy váltasz egy erősebb hardverre, ami izomból megoldja neked a dolgot. Elég szűkös amit az arduino sebességileg tud, ide már lehet hogy érdemes lenne a váltás.
(#) Massawa válasza Rober_4 hozzászólására (») Dec 26, 2019 / 1
 
Ez nem olyan egyszerü. Itt már magával a chippel kell foglalkozni (az Atmel oldalon ott van rengeteg ASM példa) a portokat direktben kell cimezni ( nem digitalwrite meg hasonlo funkciokkal). Az Arduino IDE környezetéböl csak a program strukrura marad meg (Setup, loop stb).
Böngészd át az Arduino Port Registers fejezetet. Ott az alapok egészen jol meg vannak irva.
A hozzászólás módosítva: Dec 26, 2019
(#) Rober_4 válasza Massawa hozzászólására (») Dec 26, 2019 /
 
Akkor ezzel gyorsulhatok?
Portmanipulation
Köszönöm, ez nagy segítség reggel kipróbálom!
(#) Massawa válasza Rober_4 hozzászólására (») Dec 27, 2019 /
 
Igen ezek a kodok már gépkodok (ASM), azaz egyenesen a chipet hajtják minden késleltetés nélkül. Persze még igy sem éred el a chip maximális sebességét, de már sokkal gyorsabb mint az Arduino alapsebessége.
(#) vargham válasza Rober_4 hozzászólására (») Dec 27, 2019 /
 
Jó lenne látni a programodat is.
Következő: »»   578 / 852
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem