Code für Geigerzähler
Code für Geigerzähler
Hallo alle zusammen - ich habe mir vor ein paar Jahren einen Geigerzähler mit digitalem Ausgang gebaut (negative Flanken) - zur Messung der natürlichen Umgebungsradioaktivität. Ich möchte damit eine Wetterstation komplettieren die auf einem Arduino läuft. Jetzt suche ich ein Programm das einen Eingangspin (z.B. 23) abfragt um die Counts zu zählen und anzuzeigen. Ich habe so was schon mal vor vielen Jahren mit BASCOM gemacht muss aber gestehen dass ich in Gambas ein absoluter Neuling bin und es mir nicht gelungen ist das BASCOM Programm nach Gambas zu übertragen. Wenn ich wenigsten mal einen Anfang hätte - dann käme ich schon weiter. Ich habe die Version 3.12.2 auf einem Raspberry Pi den ich mir erst kürzlich zugelegt habe. Könnte wirklich Hilfe gebrauchen!!!
-
- Foriker
- Beiträge: 135
- Registriert: Di 4. Nov 2014, 21:11
- Kontaktdaten:
Re: Code für Geigerzähler
Abfrage für GPIO beim Raspberry hatte ich mal eine kleine Anleitung gegeben.
viewtopic.php?t=5590&p=13246#p13246
Weitere Test kann ich zur Zeit nicht durchführen, da mein Raspberry kaputt ist. Habe mich noch nicht entschieden ob ich den 3 -er oder 4 -er kaufe. Ich habe ihn auch vorwiegend zum streamen der DVB-C Sender über das Netzwerk genutzt.
Eine Abfrage der Pins mit einen Shell-Sript-Schleife lief so ca. alle 40 ms. Ob es möglich ist das jede ms zu machen und ob das mit der Technik geht weiss ich nicht.
viewtopic.php?t=5590&p=13246#p13246
Weitere Test kann ich zur Zeit nicht durchführen, da mein Raspberry kaputt ist. Habe mich noch nicht entschieden ob ich den 3 -er oder 4 -er kaufe. Ich habe ihn auch vorwiegend zum streamen der DVB-C Sender über das Netzwerk genutzt.
Eine Abfrage der Pins mit einen Shell-Sript-Schleife lief so ca. alle 40 ms. Ob es möglich ist das jede ms zu machen und ob das mit der Technik geht weiss ich nicht.
Re: Code für Geigerzähler
Hallo besenmuckel - Vielen Dank für Deine Antwort - das hilft mir schon mal weiter!!!
Update:
Ich bin jetzt so weit gekommen - jetzt müsste ich den Zustand von Pin 16 einer Variablen zuordnen! Immer wenn Pin 16 low ist dann entspricht das einem Count und die Variable müsste aufaddiert werden. Nach einer Minute erhält man so die Counts pro Minute!
Dazu bräuchte ich wohl eine If-Abfrage - aber auf was bezieht sich dann das If? Wo wird der ausgelesene Wert von Shell "gpio -g read 23" denn gespeichert und wie kann ich darauf zugreifen?
Public Sub Form_Open()
' Lege den GPIO 23 = Pin 16 als Eingang fest und lege den Pullup-Widerstand an +Ub.
Shell "gpio -g mode 23 in up"
' Timer1 einschalten und 10x die Sekunde den Zustand auslesen.
Timer1.Enabled = True
Timer1.Delay = 100
Shell "gpio -g read 23" 'Pin 16 auslesen
' If...
End
Update:
Ich bin jetzt so weit gekommen - jetzt müsste ich den Zustand von Pin 16 einer Variablen zuordnen! Immer wenn Pin 16 low ist dann entspricht das einem Count und die Variable müsste aufaddiert werden. Nach einer Minute erhält man so die Counts pro Minute!
Dazu bräuchte ich wohl eine If-Abfrage - aber auf was bezieht sich dann das If? Wo wird der ausgelesene Wert von Shell "gpio -g read 23" denn gespeichert und wie kann ich darauf zugreifen?
Public Sub Form_Open()
' Lege den GPIO 23 = Pin 16 als Eingang fest und lege den Pullup-Widerstand an +Ub.
Shell "gpio -g mode 23 in up"
' Timer1 einschalten und 10x die Sekunde den Zustand auslesen.
Timer1.Enabled = True
Timer1.Delay = 100
Shell "gpio -g read 23" 'Pin 16 auslesen
' If...
End
Re: Code für Geigerzähler
meine wirren gedanken mal schnell blind aufgeschrieben ... keine ahnung obs geht ... aber versuch macht kluch
gambas code

public function geigercount() as integer dim c as integer dim bstatus as boolean dim start as float = timer dim stop as float shell "gpio -g mode 23 in" shell "gpio -g mode 23 up" do shell "gpio -g read 23" to bstatus wait if bstatus = 1 then inc c stop=timer while stop - start <= 60000 shell "gpio -g mode 23 down" return c end
Re: Code für Geigerzähler
Hallo PJBlack - Danke für die Antwort - das wäre genau das was ich suche. Leider bekomme ich bei "Stop=Timer" ein Unerwartet "=" das = scheint ihn zu stören 

Re: Code für Geigerzähler
So läufts - "Stop" ist ein Befehl in Gambas - habe es durch stopp ersetzt. Schaue morgen nach wie die Ergebnisse sind - heute ist schon zu spät - aber nochmals Danke!!!!
Public Function geigercount() As Integer
Dim c As Integer
Dim bstatus As Boolean
Dim start As Float = Timer
Dim stopp As Float
Shell "gpio -g mode 23 in"
Shell "gpio -g mode 23 up"
Do
Shell "gpio -g read 23" To bstatus
Wait
If bstatus = 1 Then Inc c
stopp = Timer
While stopp - start <= 60000
Shell "gpio -g mode 23 down"
Wend
Return c
Loop
End
Code: Alles auswählen
Dim c As Integer
Dim bstatus As Boolean
Dim start As Float = Timer
Dim stopp As Float
Shell "gpio -g mode 23 in"
Shell "gpio -g mode 23 up"
Do
Shell "gpio -g read 23" To bstatus
Wait
If bstatus = 1 Then Inc c
stopp = Timer
While stopp - start <= 60000
Shell "gpio -g mode 23 down"
Wend
Return c
Loop
End
Code: Alles auswählen
Re: Code für Geigerzähler
hab das ganze mal in gambas gemacht :
gambas code
aber die function läuft durch und sollte das tun was du möchtest ...
gambas code
Public Function GPIO_Count(iPin As Integer, iTime As Integer) As Integer ' iPin ist (logischerweise) der gewünschte Pin der abgefragt werden soll ' iTime ist die abfragedauer in millisekunden (1 sekunde = 1000 iTime) Dim iCounter As Integer Dim sStatus As String Dim tStart As Float = Timer Dim tStop As Float Shell "gpio -g mode " & iPin & " in" Shell "gpio -g mode " & iPin & " up" Repeat Shell "gpio -g read " & iPin To sStatus Wait If Val(sStatus) = 1 Then Inc iCounter tStop = Timer Until (tStop - tStart) > iTime Shell "gpio -g mode " & iPin & " down" Return iCounter Endbei der do/while war ich sprachlich woanders

Re: Code für Geigerzähler
Hallo PJBlack - vielen Dank für Deine Bemühungen - ich habe das Programm jetzt mal auf meine Verhältnisse angepasst ( pin23, 60 sec Zählzeit, Geigerzähler liefert negative Flanken (Val(sStatus=0). Ich habe auch versucht das Ergebnis in einer Textbox sichtbar zu machen muss aber zu meiner Schande gestehen dass es mir nicht gelungen ist
Die Basic Dialekte die ich bisher benutzt habe waren eben ganz anders! Wenn Du mir jetzt noch sagen könntest wie ich die Variable iCounter in einer Textbox sichtbar machen kann wäre ich echt glücklich!! Danke!!!
Public Function GPIO_Count(iPin As Integer, iTime As Integer) As Integer
Let iPin = 23
Let iTime = 60000
Dim iCounter As Integer
Dim sStatus As String
Dim tStart As Float = Timer
Dim tStop As Float
Shell "gpio -g mode " & iPin & " in"
Shell "gpio -g mode " & iPin & " up"
Repeat
Shell "gpio -g read " & iPin To sStatus
Wait
If Val(sStatus) = 0 Then Inc iCounter
tStop = Timer
Until (tStop - tStart) > iTime
Shell "gpio -g mode " & iPin & " down"
Return iCounter
End



Code: Alles auswählen
Let iPin = 23
Let iTime = 60000
Dim iCounter As Integer
Dim sStatus As String
Dim tStart As Float = Timer
Dim tStop As Float
Shell "gpio -g mode " & iPin & " in"
Shell "gpio -g mode " & iPin & " up"
Repeat
Shell "gpio -g read " & iPin To sStatus
Wait
If Val(sStatus) = 0 Then Inc iCounter
tStop = Timer
Until (tStop - tStart) > iTime
Shell "gpio -g mode " & iPin & " down"
Return iCounter
End
Code: Alles auswählen
Re: Code für Geigerzähler
gambas code
function | sub irgendwas (blahblubb) [as ...] ... textbox1.text= GPIO_Count(23, 60000) ...wobei eine textbox eigentlich zu einer benutzereingabe dient ... ich würde vllt eher ein label (dann label1.text) nehmen ...
Re: Code für Geigerzähler
@PJBlack
Welches Kapitel des Gambas Buches befasst sich denn mit dem Auslesen der seriellen Schnittstelle des Raspberry Pi?
Welches Kapitel des Gambas Buches befasst sich denn mit dem Auslesen der seriellen Schnittstelle des Raspberry Pi?
Re: Code für Geigerzähler
ich dachte dabei mehr an gambas basics ... wie z.b. einen label einen text zuweisen 
nebenbei ... gambas ist saugeil und ist die zeit wert es zu lernen ... es gibt nichts was nicht geht nur leider ganz mies dokumentiert
und ich meine mich zu erinnern das der gute herr lehmann rs-232 irgendwo mit abhandelt ...
p.s.: mein kommentar in g one war durchaus nicht böse gemeint

nebenbei ... gambas ist saugeil und ist die zeit wert es zu lernen ... es gibt nichts was nicht geht nur leider ganz mies dokumentiert

und ich meine mich zu erinnern das der gute herr lehmann rs-232 irgendwo mit abhandelt ...
p.s.: mein kommentar in g one war durchaus nicht böse gemeint
Re: Code für Geigerzähler
Du hast natürlich recht...und ich bin auch in keinster Weise beleidigt!!! Nur ist das Gambas Buch wirklich sehr umfangreich. Man wird förmlich erschlagen mit Information...ich bin halt geneigt gleich loszulegen, so wie einst in GWBasic...aber ich habe gemerkt dass das nicht geht




Re: Code für Geigerzähler
24.1.5.1.6 Initialisierung SerialPort-Objekt
Wenn Sie eine RS232-Schnittstelle öffnen, die Sie entweder in der Gambas-IDE aus der Werkzeugsammlung im Reiter 'Netzwerk' auf das Formular gezogen haben oder im Quelltext zum Beispiel mit hRS232 = New SerialPort As „hRS232“ erzeugen, wird die RS232-Schnittstelle mit den folgenden Übertragungsparametern initialisiert:
So steht es im Gambas Buch - allerdings finde ich im Programm den Reiter "Netzwerk" nicht und auch keine "Werkzeugsammlung" - Ich benutze die Version 3.12.2. Kann mir da vielleicht jemand weiterhelfen?
Re: Code für Geigerzähler
Du musst die Komponente gambas3-gb-net auf dem Computer installiert haben, das geht auf dem Terminal mit
shell code
sudo apt install gambas3-gb-netUnd dann kannst du in deinem Projekt unter Komponenten gb.net anhaken. Danach kannst du den Reiter Netzwerk sehen, wenn du ein Form bearbeitest.
Alles Gute,
tionov
tionov
Re: Code für Geigerzähler
Hallo tionov - erstmal Danke für Deine Anwort - aber leider...
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
gambas3-gb-net ist schon die neueste Version (3.12.2-1+b1).
gambas3-gb-net wurde als manuell installiert festgelegt.
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
pi@raspberrypi:~ $
pi@raspberrypi:~ $ sudo apt install gambas3-gb-net
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
gambas3-gb-net ist schon die neueste Version (3.12.2-1+b1).
gambas3-gb-net wurde als manuell installiert festgelegt.
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
pi@raspberrypi:~ $
Tja...so kanns gehen - irgendeine weitere Idee?
Wer ist online?
Mitglieder in diesem Forum: Google [Bot] und 2 Gäste