Fórum témák
» Több friss téma |
Köszönöm. Ezt a linket már olvastam, de még sohasem néztem meg.
Idézet: „ne érjen csalódás” Ha így állsz hozzá, akkor fog. Minden ilyen tanulási folyamat tele van zsákutcákkal, és elégett hardverrel. De ez hozzá tartozik. Kísérletezz bátran, tanulj a hibáidból, és ne sajnáld a megölt alkatrészeket.
Sziasztok!
Egy GPIO-n kiadott jel után (amire pl. elkezd világítani egy lámpa), kellene mérnem ezred másodperc pontossággal azt az időt, amíg egy másik GPIO-ra egy kapcsoló jele beérkezik. Ilyen pontosságú mérésre alkalmas egy raspberry? Ha igen, merre induljak el? Gondolom megszakítás kezeléssel lehet ilyesmit megoldani...
Nekem nem sikerült hasonló esetben, nagy volt a jitter.
Értem. Milyen eszközzel lehetne ilyet mérni?
Ha nem mechanikus kapcsoló jelét kell figyelni, akkor egy mikrovezérlővel oldanám meg.(PIC vagy AVR) . Egy mechanikus kapcsolónál a kapcsoláskor ennél az időnél lényegesen is hosszabb lehet a pergése.
Ugyan nem csináltam még ilyet, de gondolom, valamilyen microcontrolerrel. Épp most tervezem kipróbálni ezt arduinoval, ilyen elven csináltak frekvencia mérőt. Hogy mekkora a legkisebb idő amit így mérni lehet, annak még nem jártam utána.
Idézet: „GPIO-ra egy kapcsoló jele beérkezik” Így ez nem fog sikerülni! A kapcsoló ilyen pontos méréshez alkalmatlan. Használj optó csatolót, abból is a gyorsabb fajtát. És keres gyorsabb processzort, mondjuk ilyet: BluePill
Ha csak egyszeri alkalomról van szó, akkor egy digitális oszcilloszkóp kell neked. Azon a kapcsoló esetleges pergését is lehet látni.
Több mérésről lenne szó vagy egyszer-kétszer kellene lemérni a "reakcióidőt"?
Szerintem lehet mérni, mert elég 10kHz-el poll-ozni a GPIO-t.
Kell egy timer ami 100000 nsec (100 usec, 10kHz) időközönként generál egy signal-t: http://man7.org/linux/man-pages/man2/timer_create.2.html A signal kezelőben megszámolod a hívások számát: counter++; beállítod a megfelelő kimenő GPIO regiszter értékét és nullázod a counter-t: https://www.raspberrypi.org/forums/viewtopic.php?t=8476 lekérdezed a megfelelő input GPIO regiszter értékét, ha megjött a jel akkor kerekített (10-el osztás után) counter érték ms pontossággal megadja az időt, pl: int ido = round((double)counter/10.0); vagy int ido = counter/10; if((counter%10)>4) ido++;
Hogyan lehetséges az hogy egy python file mikor terminálból indul el akkor jól működik, de amikor automatikusan indítom bekapcsoláskor akkor nem, konkrétan a requests könyvtárat használom mikor http az üzenetváltás akkor minden jó, mikor https akkor csak manuálisan indul el jól, néha automatikusan is mikor bekapcsolás után nagy késleltetést adok induláskor time.sleep(30) akkor ritkán elindul, ha https esetén a verify=False ra állítom akkor sem jó.
Hogy lehet ezt a 450 karakteres _mondatot_ értelmezni?
Én nekifutottam aztán feladtam
Python file mikor terminálból indul el akkor jól működik, de amikor automatikusan indítom bekapcsoláskor akkor nem.
Environment probléma valószínűleg. PATH, SHELL, HOME, LANG, stb. környezeti változók beállítása oldhatja meg a problémát szerintem. Ha rákeresel a "script doesn't work in cron" vagy hasonló kifejezésre, akkor elég sok helyen ez lesz a találat. Itt ugyan nem cron a téma, de a probléma oka szerintem azonos.
Csak tipp, hátha. Ne közvetlen a Python file-t hívd meg hanem készíts egy bash script-et és azon belül futtasd.
Nezd meg milyen sorrendben indulnak a szolgaltatasok. Lehet akkor probal csatlakozni amikor meg nincs is netkapcsolat.
A hozzászólás módosítva: Nov 6, 2019
Ha nem szupertitkos akkor megoszthatnád azt a szkriptet, mert így csak vakon tapogatózunk.
Belső intranetes hálózat le lesz cserélve titkosított adatátvitelre. Amit látunk egy idő szinkronizálás. a lényeg hogy -requests.get('https...- esetén nem sikerül az időpont lekérdezés azaz az except rész hajtódik végre, ha a python fájlt automatikusan akarom elindítani. Parancs sorból, .desktop ikonról indítva jó. Próbáltam sok helyről indítani, crontab, rc.local, .bashrc, késleltetés python script indítsa el de az eredmény ugyanaz, csak a - conn=requests.get('http... - mód esetén működik automatikus indításkor.
Csak a http és a https a különbség, azaz 1 darab s betű? Mert az obfuszkált kódodban nem így van, tudni kellene, hogy csak ez-e a különbség.
Amúgy irasd már ki az exception-t is, kicsit beszédesebb, mint a "nem megy": Bővebben: Link De semmi értelme az időszinkront így csinálni, az NTP erre van kitalálva. És van pi-hoz olcsón RTC modul is: Bővebben: Link
A programozási tanácsok közül ez az első: Ne találj ki saját date/time műveleteket, mert elrontod és megszívod. Használj NTP-t!
Nem lehet mert azok a portok tiltva vannak amin kommunikálna.
Biztosan van arra az esetre is szabványos megoldás.
Igen biztos, a win gépek is valahogy szinronizálódnak, de mindegy mivel amúgy is adatbázis műveletekkel dolgozom így teljesen áttérek a MySQLdb használatára.
Nincs egy olyan gép a hálón ami kilát az internetre, szabad neki NTP szinkronizálni, és az rpi látja ezt a gépet? Erre a gépre kéne egy NTP szerver progit telepíteni, az rpinek meg megadni a gép ipcímét NTP szerver lekérdezéshez. Illetve arra a gépre egy NTP szerver progi, amit most akarsz lekérdezgetni. Érdemesebb szabványos dolgokat használni, mint saját óralekérdezést kitalálni.
A prototípust egy Raspberry Pi Zero-val építettem meg, az alábbi programmal:
A ciklusban egy számlálót növelek, így tudom, hogy hányszor futott le, mielőtt beérkezett az input-ra a 0. Ez alapján tudok pontosságot is mérni, ami 7 microsec ezzel a hardware-el. Úgy gondolom ez bőven elég a millisec pontosságú méréshez. Mi a véleményetek?
Miért nem használsz GPIO megszakítást?
Bővebben: GPIO Bővebben: Rising/falling edge Bővebben: Python GPIO interrupt A hozzászólás módosítva: Nov 9, 2019
Sziasztok, segítséget kérnék. Pi3 A+-om .. volt.
tegnap megöltem. a történet a következő: DHT22-est kötöttöm rá, amivel szépen dolgozott. páratartalom függően, szeretnék elindítani ventillátort, ezért bekötöttem egy 4-es relét is, ami viszont 5 V-ról működik. ehhez külön tápot vettem, amit elvileg jól kötöttem be. relé megkapa az 5 V-ot, a GND-jét a PI GND-jére kötöttem, illetve kapott még 3,3 V-ot a ralé VCC lába és még egy GPIO-ra is rátettem. Pár percig szépen olvasott és kapcsolt is, viszont 5-6 perc után vettem észre, hogy a relén a visszajelző led akkor világít, amikor nem kapcsol... aztán az összes kábel (elé felé, dht felé) elkezdett nagyon melegedni.... lefagyott a gép, azóta nem indul újra, csak 5 V-ot lehet a lábakon mérni... A kérdés az, hogy valamit rosszul kötöttem be? rendeltem egy újat, nem szeretném azt hazavágni... előre is köszönöm
Ez így kevés. A relét direkt a GPIO-ra kötötted, vagy volt közte valami elektronka? Tranzisztor, opto, stb.
Sima relé, vagy készen vásárolt relé modul? |
Bejelentkezés
Hirdetés |