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   438 / 852
(#) cpt.zoltan.simon hozzászólása Márc 17, 2018 /
 
Sziasztok!

Készítettem egy project-et Arduino-ban. Tökéletesen működik ellenben a könyvtárrá alakítása során apróbb gondjaim vannak. Van benne pár saját és egyéb (MQTT) szubrutin, melyek class-on belüli deklarációjával vannak gondjaim.
Van itt valaki olyan, aki csinált már project-ből library-t és Debrecen vagy annak környékén lakik?
(#) HiMen válasza vargham hozzászólására (») Márc 17, 2018 /
 
Ezt a pollingot hogy kell használni? Esetleg valami jó leírást tudsz róla?
Egyenlőre avr és polling kifejezésre UART soros átvitelről találok leírásokat csak...
(#) vargham válasza HiMen hozzászólására (») Márc 17, 2018 / 1
 
Polling: Rendszeres időközönként ellenőrizni valamit. Például digitalRead a loop függvényben. Hátránya, hogy ha sokmindent csinálsz a loopban, akkor akár NAGYON sok idő is eltelhet az esemény és a kezelése között.
Interrupt: Nem kell ellenőrizni, mert automatikusan szól, ha változás van. Például ha változik egy input pin logikai szintje, akkor megszakítja a program futását, és átadja a vezérlést az interrupt kiszolgáló rutinnak.

Megnézted a linkelt forrást? Ha cUseInterrupt true, akkor interrupt-ot használ, ha false, akkor pollingot.
(#) kegyetlen19 válasza kapu48 hozzászólására (») Márc 17, 2018 /
 
Helló mindenkinek.
Meglettek az eredmények, az Arduino-s logikai analizátorral. (Az eredmény egyezik, a hangkártyás teszt eredményével.)
A második képen látható a logikai szintek, időtartalmai.
Ezek után, hogyan tovább?
(#) kapu48 válasza kegyetlen19 hozzászólására (») Márc 17, 2018 /
 
OK! Ez szép eredmény!

Mesélj hogyan érted el, hogy mérni tudod az eredeti jeleket?
Van H: 400us, L: 200us, és H: 100us, L. 500us.

Hú! Nem tudom fejből, 1 ADC konvertálás menyi idő? Ennek utána kel nézni.
Eddig úgy csináltuk, hogy megszámoltuk menyi ADC mérés volt szintenként.
És abból kalkuláltuk az impulzusok hosszát.

És a LED vezérlő mérését is ide tehetnéd, hogy lássuk annak is az időzítéseit
(#) kapu48 válasza kegyetlen19 hozzászólására (») Márc 17, 2018 /
 
Következtetek!
Ha már mérni tudod a kapásjelzőt, akkor már TTL jelszintjeid vannak a bemeneten?

Épp az előbb mértek itt bemenet olvasásra időket. Bővebben: Link
1. // Arduino Polling: 6-11 us
2. // Arduino Interrupt: 11.7 us
3. Ehhez még hozzájön a feltétel vizsgálat
Ha a fent mért időket osztjuk a (szintolvasások száma * 20) = kapunk viszonyítást az impulzusok hosszáról.

Vagy timer időzítésekkel mérjük a jelváltozások között eltelt időt.
Mint az Arduino-s logikai analizátorban.
És ellemezük a kapott értékeket.
A hozzászólás módosítva: Márc 17, 2018
(#) vargham válasza kapu48 hozzászólására (») Márc 17, 2018 /
 
Impulzus hossz mérésre van támogatás a legtöbb AVR-ben, és úgy hívják, hogy input capture. Itt is van róla leírás.
(#) kapu48 válasza vargham hozzászólására (») Márc 17, 2018 /
 
Köszi, a segítséget!

Igazság szerint ez nem az én projectem!

És nem szándékoztam rá annyi időt szánni, hogy meg írjam A – Z-ig.
Max pár soros kiegészítést tudok ígérni 1 már meglevő projektben!
A hozzászólás módosítva: Márc 17, 2018
(#) kegyetlen19 válasza kapu48 hozzászólására (») Márc 17, 2018 /
 
Idézet:
„akkor már TTL jelszintjeid vannak a bemeneten?”

Igen, az LM358-ast 5V-al hajtom. (Csatolt képen a kapcsolás, hogy ne invertáljon).
És egy csatolt kép, a LED-szalag vezérlő távirányítójáról is. (Bár ennél a rövid impulzusoknál van eltérés, elégé random, biztos az olcsó „technika” miatt).
Nem követtem azt a témát, majd visszaolvasok.
(#) kapu48 válasza kegyetlen19 hozzászólására (») Márc 17, 2018 /
 
Itt a freki: 580Hz
És a kapásjelzőnél: 1668Hz. Ez 3 szorossa!
Ezért kellet formázni a bemenő impulzusokat digitálisan mérhető jelszintekre.

Most a használt ADC polingolós programot, könnyen átalakíthatjuk digitálisra.
Vagy megpróbálsz keresni az előbb ajánlót hoz hasonló projectet?
(#) kegyetlen19 válasza kapu48 hozzászólására (») Márc 17, 2018 /
 
Megvallva az igazat, én is elég kezdő vagyok az Arduino programozásában, csak az alap dolgokat tudom. (Csak a neten lévő projektekből lopkodok és próbálom megérteni, kisebb nagyobb sikerrel).
Megnézem az ajánlott projekteket, próbálom elkezdeni és biztos, hogy kérek még majd segítséget.
De ha ez a sok segítség után is, még egy kis útbaigazítást adnál, hogy melyik irányba induljak, melyik lehet az egyszerűbben kivitelezhető, azt megköszönném.
(#) kapu48 válasza kegyetlen19 hozzászólására (») Márc 17, 2018 /
 
Olvasd el a cikket, amit Vargham ajánlott feljebb!
Az pont erről szól.
(#) HiMen válasza vargham hozzászólására (») Márc 18, 2018 /
 
Megvan a kód. Értem már!

A polling módszer nekem teljesen jó. Semmi mást nem kell csinálnia, mint figyelni a pin-t és ha átáll akkor mehet a program tovább.

Ha ezt is gyorsítani akarom, akkor arduino kód helyett valami más kell? Lehet esetleg assembly-t is írni bele?
(#) vargham válasza HiMen hozzászólására (») Márc 18, 2018 /
 
Idézet:
„Ha ezt is gyorsítani akarom, akkor arduino kód helyett valami más kell?”

Bizony. Ha végignézed a kódot, amit írtam és linkeltem, akkor látod, hogy van benne egy cUseArduino nevű bool konstans. Nézd végig az összes if ágat, ahol ezt vizsgálja. Az igaz ágon találod az Arduino megvalósítást, a hamison pedig az AVR Libc megvalósítást. A kettő ugyanazt csinálja, csak az Arduino lassabban.

Idézet:
„Lehet esetleg assembly-t is írni bele?”

Lehet, de ide minek. Ezek a regiszter műveletek 1-1 gépi utasítássá fordulnak.
(#) Baxi hozzászólása Márc 24, 2018 /
 
Hi Mesterek!
Most ismerked az avr-el, ardunioval. Vaki tudna segiteni abban hogy a serial porton bejovő pl.: bluethoot modulrol mert csak ascii illetve hex erteket látok, mig a gps modul esetén int illetve float változkkat. Vagy ugy is kérdezhetém hogy az uart-on lehet integer illetve float váltózakat kuldeni és fogadni is? Vagy a gps modul esetében az uarton bejövő változókat maga a "gps könyvtár" forgatja/ alakítja át a char illetve string változókból float/int váltózokká? Remélem érthetően sikerült fogalmaznom
(#) nedudgi válasza Baxi hozzászólására (») Márc 24, 2018 / 1
 
A soros porton levő adatokat úgy értelmezzük, ahogy jólesik. A számítógépen (Arduino is) történik az átalakítás karakteres formából belső, bináris formára, mint a float, integer, string. A vonalon megegyezés szerint bájtokat mozgatunk, amik rendszerint nyomtatható karakterek, de megtehetjük azt is, hogy a bináris, belső formát küldjük át bájtonként. Ez gyorsabb kommunikációt eredményez, de nehezebb kideríteni az esetleges, manapság egyre ritkább adattorzulást.
Remélem jól értettem a kérdést.
A hozzászólás módosítva: Márc 24, 2018
(#) devilke3000 hozzászólása Márc 25, 2018 /
 
ds1307 Time kódot szeretném meg fordítani elöl"ddMMTyyyyhhmmss" erre yyyyMMddhhmmss>>>> de nagy hülyeséget csinál ds1307 még sem jó irodik be a beállítót idő 2..3 kódrésznél!
1,
  1. String time_string = String(serial_buffer);
  2.         int day = time_string.substring(2, 4).toInt();
  3.         int month = time_string.substring(4, 6).toInt();        
  4.         int year = time_string.substring(6, 10).toInt();
  5.         int hour = time_string.substring(10, 12).toInt();
  6.         int minute = time_string.substring(12, 14).toInt();
  7.         int second = time_string.substring(14, 16).toInt();
  8.         DateTime set_time = DateTime(year, month, day, hour, minute, second);
  9.         RTC.adjust(set_time);
  10.  
  11. //ddMMTyyyyhhmmss


2,
Ezzel van probléma!
  1. String time_string = String(serial_buffer);
  2.         int year = time_string.substring(2, 4).toInt();
  3.         int month = time_string.substring(4, 6).toInt();        
  4.         int day = time_string.substring(6, 10).toInt();
  5.         int hour = time_string.substring(10, 12).toInt();
  6.         int minute = time_string.substring(12, 14).toInt();
  7.         int second = time_string.substring(14, 16).toInt();
  8.         DateTime set_time = DateTime(year, month, day, hour, minute, second);
  9.         RTC.adjust(set_time);
  10.  
  11. //yyyyMMddhhmmss

3,
  1. String time_string = String(serial_buffer);
  2.         int year = time_string.substring(6, 10).toInt();
  3.         int month = time_string.substring(4, 6).toInt();        
  4.         int day = time_string.substring(2, 4).toInt();
  5.         int hour = time_string.substring(10, 12).toInt();
  6.         int minute = time_string.substring(12, 14).toInt();
  7.         int second = time_string.substring(14, 16).toInt();
  8.         DateTime set_time = DateTime(year, month, day, hour, minute, second);
  9.         RTC.adjust(set_time);
  10.  
  11. //yyyyMMddhhmmss
A hozzászólás módosítva: Márc 25, 2018

RTCSetup.ino
    
(#) kapu48 válasza devilke3000 hozzászólására (») Márc 25, 2018 /
 
  1. Ez a függvény nem ad vissza semmit!:
  2.  
  3. DateTime::DateTime (uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t min, uint8_t sec) {
  4.     if (year >= 2000)
  5.         year -= 2000;
  6.     yOff = year;
  7.     m = month;
  8.     d = day;
  9.     hh = hour;
  10.     mm = min;
  11.     ss = sec;
  12. }
  13.  
  14. Csak feltölti ezeket a belső változókat:
  15. protected:
  16.     uint8_t yOff, m, d, hh, mm, ss;
(#) tbarath válasza devilke3000 hozzászólására (») Márc 25, 2018 /
 
Nem csinál az hülyeséget, pont azt csinálja amit "kérsz" tőle. Az egy másik dolog, hogy fogalmad sincs arról, amit csinálsz.
Nézz utána a substring fv-nek, hogy hogyan működik Bővebben: Link

Ha az 1. négy karaktered az év, akkor az első 4 karaktert kell kivenned, és mivel a 0. az első index, akkor:
  1. int year = time_string.substring(0, 4).toInt();

Szóval se nem a 2., se nem a 6. karaktertől nem kezdődik, hanem a nulladiktól.
Egyébként tökre használhatatlan kódrészleteket hánysz ide...
(#) devilke3000 válasza tbarath hozzászólására (») Márc 25, 2018 /
 
igy sem ad jó eredményt!

  1. String time_string = String(serial_buffer);
  2.         int year = time_string.substring(0, 4).toInt();
  3.         int month = time_string.substring(4, 6).toInt();        
  4.         int day = time_string.substring(6, 8).toInt();
  5.         int hour = time_string.substring(8, 10).toInt();
  6.         int minute = time_string.substring(10, 12).toInt();
  7.         int second = time_string.substring(12, 14).toInt();
(#) devilke3000 válasza devilke3000 hozzászólására (») Márc 25, 2018 /
 
igy ok...

  1. int year = time_string.substring(2, 6).toInt();
  2.         int month = time_string.substring(6, 8).toInt();        
  3.         int day = time_string.substring(8, 10).toInt();
  4.         int hour = time_string.substring(10, 12).toInt();
  5.         int minute = time_string.substring(12, 14).toInt();
  6.         int second = time_string.substring(14, 16).toInt();
(#) tbarath válasza devilke3000 hozzászólására (») Márc 25, 2018 /
 
Akkor az elején volt valami dzsuva, 2 karakter a ddMMTyyyyhhmmss előtt...
(#) devilke3000 hozzászólása Márc 26, 2018 /
 
Soros port státusz lehet figyelni valahogy?
Itt gondolok ha megnyitom portot egy led villog!

  1. int port=0;
  2. void setup() {
  3.  
  4.   pinMode(LED_BUILTIN, OUTPUT);
  5.   port=1;
  6.   Serial.begin(9600);
  7.  
  8. }
  9.  
  10. void loop(){
  11.    
  12. if (!Serial) {
  13.     port=0;
  14.   }
  15.   if (port==0)
  16.  
  17.   {
  18.  
  19.   digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  20.   delay(1000);                       // wait for a second
  21.   digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  22.   delay(1000);
  23.   }
  24. }
(#) devilke3000 válasza tbarath hozzászólására (») Márc 26, 2018 /
 
Igen azért kérdeztem meg itt!
(#) devilke3000 válasza kapu48 hozzászólására (») Márc 26, 2018 /
 
Még azt tervezek bele karakter ellenőrzést de az rá ér később is !
(#) Kari55 hozzászólása Márc 26, 2018 /
 
Szervusztok.
Már jó pár napja szenvedek az Arduino nanora feltöltéssel az asztali gépemen. Ám a laptopon minden simán megy.

Alább küldöm a hibaüzenetet amit kapok. Mi hiányzik neki és azt hogyan javíthatnám?

Köszönöm.

Hiba.txt
    
(#) Feri007 válasza Kari55 hozzászólására (») Márc 26, 2018 /
 
Szia
gondolom, az evidens, hogy nem tud csatlakozni a bootloaderhez az avrdude
- jó a soros port beállítása?
- úgy tudom, a nano bootloader sebessége 57600
A hozzászólás módosítva: Márc 26, 2018
(#) Kari55 válasza Feri007 hozzászólására (») Márc 26, 2018 /
 
Szia.
Ezt hogyan/hol tudom beállítani?
(#) icserny válasza Kari55 hozzászólására (») Márc 26, 2018 /
 
- Arduino IDE 1.0x-ben az Eszközök/Alappanel menüpontban Arduino Nano w/ATmega 328

- Arduino 1.6.x-ben Tools/Board menüpontban Arduino Nano, A Tools/Processor menüpontban pedig ATmega 328 legyen kiválasztva.
(#) Kari55 válasza icserny hozzászólására (») Márc 26, 2018 /
 
Szia. ezt így csinálom.
De hoppá, most látom, hogy van egy "ATmega328P (Old Bootloader)" menüpont is és azzal működik!

Mi okozta a két opciót?
"ATmega328P (Old Bootloader)"
és "ATmega328P"
A hozzászólás módosítva: Márc 26, 2018
Következő: »»   438 / 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