Fórum témák

» Több friss téma
Fórum » Raspberry Pi - Málnatopik
 
Témaindító: Topi, idő: Máj 6, 2013
Témakörök:
Lapozás: OK   48 / 65
(#) Marko Ramiusz válasza pipi hozzászólására (») Szept 30, 2019 /
 
Köszönöm. Ezt a linket már olvastam, de még sohasem néztem meg.
(#) vargham válasza Marko Ramiusz hozzászólására (») Okt 1, 2019 / 1
 
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.
(#) Farkaspók hozzászólása Okt 14, 2019 /
 
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...
(#) GPeti1977 válasza Farkaspók hozzászólására (») Okt 14, 2019 /
 
Nekem nem sikerült hasonló esetben, nagy volt a jitter.
(#) Farkaspók válasza GPeti1977 hozzászólására (») Okt 14, 2019 /
 
Értem. Milyen eszközzel lehetne ilyet mérni?
(#) Elektro.on válasza Farkaspók hozzászólására (») Okt 14, 2019 /
 
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.
(#) tomi52 válasza Farkaspók hozzászólására (») Okt 14, 2019 /
 
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.
(#) kapu48 válasza Farkaspók hozzászólására (») Okt 14, 2019 /
 
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
(#) Bakman válasza Farkaspók hozzászólására (») Okt 14, 2019 /
 
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"?
(#) dc001 válasza Farkaspók hozzászólására (») Okt 14, 2019 /
 
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++;
(#) GPeti1977 hozzászólása Nov 5, 2019 /
 
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ó.
(#) tbarath válasza GPeti1977 hozzászólására (») Nov 5, 2019 /
 
Hogy lehet ezt a 450 karakteres _mondatot_ értelmezni?
Én nekifutottam aztán feladtam
(#) GPeti1977 válasza tbarath hozzászólására (») Nov 5, 2019 /
 
Python file mikor terminálból indul el akkor jól működik, de amikor automatikusan indítom bekapcsoláskor akkor nem.
(#) tbarath válasza GPeti1977 hozzászólására (») Nov 5, 2019 / 1
 
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.
(#) GPeti1977 válasza tbarath hozzászólására (») Nov 6, 2019 /
 
Nem nem működik hanem nem jól.
(#) Bakman válasza GPeti1977 hozzászólására (») Nov 6, 2019 /
 
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.
  1. #!/bin/sh
  2. python path/to/python_script.py
(#) cua válasza GPeti1977 hozzászólására (») Nov 6, 2019 /
 
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
(#) tbarath válasza GPeti1977 hozzászólására (») Nov 7, 2019 /
 
Ha nem szupertitkos akkor megoszthatnád azt a szkriptet, mert így csak vakon tapogatózunk.
(#) GPeti1977 válasza tbarath hozzászólására (») Nov 7, 2019 /
 
  1. import time as time, threading
  2. time.2)
  3. import requests
  4. import os
  5. import RPi.GPIO as GPIO
  6. import LiquidCrystalPi
  7. import rom
  8. #from Tkinter import *
  9. #import MySQLdb
  10.  
  11. def getdatetime():
  12.     tok=False
  13.     print "Get time  date"
  14.     try:
  15.         conn=requests.get('https://xyz.abc.hu/date.php?date=1', verify=False)
  16.         #conn=requests.get('http://xyz/date.php?date=1')
  17.         tok=True
  18.     except:
  19.         print "Can not get date  time"
  20.         LCD.write('No time')
  21.         tok=False
  22.         time.2)
  23.     finally:
  24.         conn.close()
  25.     if(tok==True):
  26.         data1=conn.text
  27.         y = data1[0:4]
  28.         m = data1[4:6]
  29.         d = data1[6:8]
  30.         h = data1[8:10]
  31.         minute = data1[10:12]
  32.         sec = data1[12:14]
  33.         print data1
  34.         if (m=="01"):
  35.             ms="Jan"
  36.         elif (m=="02"):
  37.             ms="Feb"
  38.         elif (m=="03"):
  39.             ms="Mar"
  40.         elif (m=="04"):
  41.             ms="Apr"
  42.         elif (m=="05"):
  43.             ms="May"
  44.         elif (m=="06"):
  45.             ms="Jun"    
  46.         elif (m=="07"):
  47.             ms="Jul"
  48.         elif (m=="08"):
  49.             ms="Aug"
  50.         elif (m=="09"):
  51.             ms="Sep"
  52.         elif (m=="10"):
  53.             ms="Oct"
  54.         elif (m=="11"):
  55.             ms="Nov"
  56.         elif (m=="12"):
  57.             ms="Dec"
  58.         dtadj = "sudo date -s "
  59.         dtadj += '"'
  60.         dtadj += ms
  61.         dtadj += " "
  62.         dtadj += d
  63.         dtadj += " "
  64.         dtadj += h
  65.         dtadj += ":"
  66.         dtadj += minute
  67.         dtadj += ":"
  68.         dtadj += sec
  69.         dtadj += " "
  70.         dtadj += "UTC"
  71.         dtadj += " "
  72.         dtadj += y
  73.         dtadj += '"'      
  74.         #sudo date -s "Jul 08 15:50:00 CEST 2016"
  75.         os.system(dtadj)
  76. getdatetime()


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.
(#) tbarath válasza GPeti1977 hozzászólására (») Nov 7, 2019 / 1
 
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
(#) vargham válasza GPeti1977 hozzászólására (») Nov 7, 2019 /
 
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!
(#) GPeti1977 válasza vargham hozzászólására (») Nov 7, 2019 /
 
Nem lehet mert azok a portok tiltva vannak amin kommunikálna.
(#) vargham válasza GPeti1977 hozzászólására (») Nov 7, 2019 /
 
Biztosan van arra az esetre is szabványos megoldás.
(#) GPeti1977 válasza vargham hozzászólására (») Nov 7, 2019 /
 
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.
(#) pipi válasza GPeti1977 hozzászólására (») Nov 7, 2019 /
 
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.
(#) Farkaspók válasza dc001 hozzászólására (») Nov 9, 2019 /
 
A prototípust egy Raspberry Pi Zero-val építettem meg, az alábbi programmal:

  1. import RPi.GPIO as GPIO
  2. import time
  3.  
  4. GPIO.setmode(GPIO.BCM)
  5. GPIO.setwarnings(False)
  6. GPIO.setup(3, GPIO.IN)
  7. GPIO.setup(15, GPIO.OUT)
  8.  
  9. i = 0
  10. print "Waiting..."
  11. GPIO.output(15, GPIO.HIGH)
  12. start_time = time.time()
  13.  
  14. while GPIO.input(3) == 1:
  15.         i += 1
  16.  
  17. end_time = time.time()
  18. GPIO.output(15, GPIO.LOW)
  19. dif = end_time - start_time
  20.  
  21. print "Time: " + str(round(dif, 3)) + " sec, precision: " + str(round(dif / i * 1000000, 1)) + " microsec"


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?
(#) vargham válasza Farkaspók hozzászólására (») Nov 9, 2019 /
 
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
(#) Vicu hozzászólása Nov 11, 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
(#) vargham válasza Vicu hozzászólására (») Nov 11, 2019 /
 
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?
(#) GPeti1977 válasza Vicu hozzászólására (») Nov 11, 2019 / 1
 
Rajzold le
Következő: »»   48 / 65
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