Homepage Wiki Forum Buy

GNUBLIN embedded GNU/Linux

Open source learning and training plattorm for embedded GNU / Linux
A projects from Hochschule Augsburg and embedded projects GmbH

Project homepage: http://www.gnublin.org
Wiki: http://wiki.gnublin.org
Aktuelle Zeit: Sa 18. Nov 2017, 00:52

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: PWM Signale aufnehmen
BeitragVerfasst: Sa 8. Jun 2013, 22:29 
Offline

Registriert: Sa 8. Jun 2013, 22:04
Beiträge: 6
Hallo, ich bin neu hier und nur teilweise fit in Mikrocontollern, aber das Linux System macht mir Mut eine Idee umsetzen zu können.
Im Sinne von messen und steuern würde ich den Gnublin gerne einsetzen. In meinem Projekt möchte ich zwei Drehräder meiner Hamster messen. Dazu habe ich mir einen Umdrehungs-Reedkontakt gebastelt. Die Häufigkeit der Reedkontaktsignale läßt auf die Geschwindigkeit schliessen. Das habe ich getestet und bekomme eine entsprechendes PWM Signal heraus. Dieses Signal möchte ich mit dem Gnublin aufnehmen und mir grafisch visualisieren lassen. Nun sind es aber zwei (und in Zukunft vielleicht auch drei) Räder, von denen es ein Signal aufzunehmen gilt.
Hinzu kommt, daß ich in einem nächsten Schritt auch gerne das Trinkwasser überwachen will, also die Menge messen möchte. Möchte wissen ob und welchen Zusammenhang es bei meinen Tieren zwischen Bewegung und Durst gibt.

Ich komm also schnell auf 3-6 Eingangssignale, die ich aufnehmen möchte. Allerdings parallel und genau hier bin ich mir unsicher, ob der Gnublin das schafft. Ein einzelnes Signal liegt mit min. ca. 25ms lang genug an, um es mitzubekommen. Aber wie läuft das parallel ab. Da könnten locker Kontaktsignale unterschiedlichen Räder parallel oder minimal zeitversetzt eintreffen. Wie verhindere ich, daß ein Signal verpasst wird? Parallel will ich außerdem noch genug Performance haben, um mir die Daten per Webinterface ausgeben zu lassen.

Geht das mit dem Gnublin oder ist das System damit überlastet?
Wie nehmen ich die Kontaktsignale parallel auf?

Kenne mich mit hardwarenaher Softwareentwicklung mit Linux leider nur sehr leicht aus.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PWM Signale aufnehmen
BeitragVerfasst: Mi 12. Jun 2013, 14:40 
Offline

Registriert: Fr 8. Mär 2013, 09:41
Beiträge: 39
hi Hamster,

ich habe gerade ausprobiert, wie schnell das gnublin 3 gpios mit der gnublin-api einlesen kann:
1000 * 3 x einlesen = ca 5,5s -> 5,5ms für 3 GPIO einlesen: sollte schnell genug sein.

anschließend habe ich es mit einem pca9555 Portexpander versucht, noch schnell eine Methode für die pca9555 Klasse implementiert um einen kompletten Port auf einmal auslesen zu können und siehe da:

1000 * port 0 einlesen = ca 1s -> 1ms um 8 pins einzulesen: sollte für dich auf jeden fall schnell genug sein!

grüße
Manuel


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PWM Signale aufnehmen
BeitragVerfasst: Do 13. Jun 2013, 16:13 
Offline

Registriert: Sa 8. Jun 2013, 22:04
Beiträge: 6
Hi und danke,
das klingt vielversprechend.

kannst du mir dein Testszenario etwas näher beschreiben? Hast du ein Impulssignal an die 2 GPIOs gelegt oder nur so schnell wie möglich versucht ein Dauersignal vom GPIO auszulesen? Was hast du mit den gelesenen Werten gemacht? Idealerweise in eine DB oder Datei geschrieben?

Die Idee mit dem Portexpander ist sehr interessant. Darüber geht es also noch schneller als über die internen GPIOs. Aber warum eigentlich? Ich vermute das liegt an der Abfragemethode. Wie läuft das bei dem pca9555? Ist das ereignisgesteuert oder wird der über Port über eine Endlosschleife abgefragt? Ich hatte gedacht die GPIOs werden über einen Interrupt abgefragt. Das sollte doch das schnellst sein. Oer wie hast du das in deinem Test gemacht?

Auf jeden Fall erstmal vielen Dank für deine Mühe, hilft mir auf jeden Fall weiter.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PWM Signale aufnehmen
BeitragVerfasst: Do 13. Jun 2013, 16:40 
Offline

Registriert: Fr 8. Mär 2013, 09:41
Beiträge: 39
hi,

ich habe nur jeweils in einer for schleife 1000x die eingänge über die Gnublin-API eingelesen und in ein buffer array gelegt.
dass das einlesen der GPIOs langsamer ist könnte ich mir dadurch erklähren, dass in der API die gpios über das sysfs angesprochen werden und dazu für jeden pin der eingelesen wird immer zuerst die dateien geöffnet und ausgelesen werden müssen.
schneller würde das direkt über den speicher mit mmap gehen, oder am elegantesten wie von dir vorgeschlagen mit hilfe von interrupts.

der pca9555 ist per i2c angeschlossen. daraus habe ich mit der readPort() methode aus der pca9555 API (develop branch) immer wieder den gleichen port ausgelesen. dass der chip die eingangssignale schnell genug an den ausgang bringt ging ich mal davon aus :?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PWM Signale aufnehmen
BeitragVerfasst: Fr 14. Jun 2013, 12:46 
Offline

Registriert: Sa 8. Jun 2013, 22:04
Beiträge: 6
Hi,

ich bin mir nicht ganz sicher, inwieweit dein Test mit der while-Schleife repräsentativ ist. Das ist ein single Prozess ohne aufwendigeren Operationen. Was wenn ich im Hintegrund zusätzliche Tasks laufen lasse, z.B. den Webserver? Ich erwarte einen Leistungseinbruch deiner Messung, wenn du bereits die gelesenen Informationen nicht in ein Array schreibst, sondern in eine Datei (öffnen, einlesen, mit neuen Wert erweitern, speichern, schließen. Wenn dann noch parallel eine Website angefragt wird... kannst du das mal prüfen?

Interrupts. Habe mich schnell hierzu belesen. Auf dem Ereignis eines eingehenden Signals auf einen Hardwareport wird eine bestimmte Routine ausgeführt. Im Forum lese ich hierzu verschiedenes. User space, mmap. Kann mich jemand aufklären was der Unterschied ist? Kenne mich in diesem Bezug auch nicht mit Linux aus. Ich glaube aber aus dem Forum rauszulesen, daß es sehr kompliziert ist und auch das es nicht so richtig funktioniert.
Ich hätte dazu gerne in Bezug auf mein Vorhaben eine Meinung oder Erfahrungswerte.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PWM Signale aufnehmen
BeitragVerfasst: Fr 14. Jun 2013, 14:38 
Offline

Registriert: Fr 8. Mär 2013, 09:41
Beiträge: 39
ich werde evtl ab montag ein paar tests bezüglich der GPIO lesegeschwindigkeit anstellen und dir dann genauer berichten wie und was ich gemacht habe.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PWM Signale aufnehmen
BeitragVerfasst: Fr 14. Jun 2013, 18:44 
Offline

Registriert: Do 8. Nov 2012, 09:47
Beiträge: 93
Wohnort: Aachen
Hallo,

Im Thread "Wie schnell ist ein Gnublin" (viewtopic.php?f=3&t=216) hatte ich mal mit verschiedenen Methoden GPIO gelesen und geschrieben. Demnach geht es aus dem Userspace (dazu gleich mehr) durch mmap wesentlich (!) schneller.
Dein Vergleich ein komplettes Byte über Port-Expander und I2C auszulesen gegenüber bitweisen Zugriff per Dateisystem ist natürlich Äpfel mit Birnen ...

Applikationen im Userspace haben unter Linux keinen direkten Zugriff auf z.B. GPIO. Per Memory Mapping kann man sich den allerdings geben lassen und dann wird es richtig flott, siehe obigen Thread.
Eine Alternative wäre Kernelspace, dann schreibt man quasi Treiber mit der ganzen damit verbundenen Komplexität (und Instabilität!?). Davon würde ich abraten.

Vom Hersteller des Gnublin gibt es inzwischen auch ein API, doch ob darin mmap unterstützt wird und wie schnell es insgesamt ist, habe ich noch nicht angesehen. Vielleicht kann jemand mal diese Daten im obigen Thread ergänzen?

Übrigens, bei GPIO Geschwindigkeiten im Bereich von Millisekunden brauchst Du Dir um die Zeit für's Ablegen im Speicher oder einfachere Weiterverarbeitung noch keine Sorgen zu machen.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PWM Signale aufnehmen
BeitragVerfasst: Fr 14. Jun 2013, 19:30 
Offline

Registriert: Fr 8. Mär 2013, 09:41
Beiträge: 39
dass der vergleich hinkt war mir schon klar, ich wollte nur die wirklich aller einfachsten Möglichkeiten aufzeigen, die für diese geschwindigkeit reichen sollten ;) ;)

deinen "wie schnell ist das gnublin" thread habe ich vor kurzem auch gelesen, nur dachte ich da ginge es nur um das schreiben auf den gpios und nicht ums lesen... außerdem nicht auf meheren parallel


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PWM Signale aufnehmen
BeitragVerfasst: Fr 14. Jun 2013, 22:05 
Offline

Registriert: Sa 8. Jun 2013, 22:04
Beiträge: 6
Ich möchte mich zuerst einmal für die rege Diskussion bedanken.

Wie liebert erkannt hatte, geht es mir ums auslesen von Signalen an mehreren GPIO Ports. Indirekt hintereinander, wobei die Signale asynchron reinkommen und nicht länger als vielleicht 30ms anliegen.
Gehen wir davon aus alle kommen parallel rein oder Szenario 2, die Signale kommen mit 1ms versetzt rein.

Hört sich machbar an, nach euren Berichten bereits mit einer while-Schleife. Wobei ich die Lösung über Memory map eleganter finde.

Hat einer von Euch die Möglichkeit das zu testen, indem er z.B. ein Signal (z.B. Intervall von 30ms Impulsen) an möglichst viele Ports parallel anschließt und prüft mit wievielen Eingängen der Gnublin die Daten zuverlässig über einen Zeitraum von vielleicht 5 Minuten erfasst? wichtig wäre dann auch zu wissen wie ihr das gemacht habt (while-loop, Memory map, API).
Klingt nach einem interessanten Performancevergleich, oder?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: PWM Signale aufnehmen
BeitragVerfasst: Mo 17. Jun 2013, 17:33 
Offline

Registriert: Fr 8. Mär 2013, 09:41
Beiträge: 39
Hi Hamster,

ich habe nun eine Messung angestellt:

Das erste Gnublin zum erzeugen der frequenz
* nacheinander 3 GPIOs ein und anschalten
* ca 1,6ms Puls alle ca 10ms

Das zweite Gnublin zum erfassen der Flanken:
*Es werden die steigenden Flanken jeweils der 3 GPIOs gezählt und in einer Variablen gespeichert
*Flankenerkennung mit poll()/"Userspace-Interrupt"
*Beim beenden des programms gebe ich die Anzahl der Flanken aus

1000 Umdrehungen jedes Rades dauern also ca 10sec
CPU last des 2. Gnublin ist bei der frequenz bei < 35%, wobei htop davon schon 10% im idle verbraucht.

Die Geschwindigkeit sollte also leicht reichen ;)
bei Interresse kann ich den quellcode gern zur verfügung stellen. Ich werde aber die nächsten tage im Wiki einen artikel dazu verfassen...

Grüße
Manuel


Dateianhänge:
hamster3.jpeg
hamster3.jpeg [ 43.59 KiB | 2126-mal betrachtet ]
hamster2.jpeg
hamster2.jpeg [ 61.25 KiB | 2126-mal betrachtet ]
hamster1.jpeg
hamster1.jpeg [ 54.81 KiB | 2126-mal betrachtet ]
Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de