Code für Geigerzähler

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
phb
Foriker
Beiträge: 10
Registriert: So 26. Jul 2020, 21:53
Kontaktdaten:

Code für Geigerzähler

Beitrag von phb » So 26. Jul 2020, 22:09

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!!!

besenmuckel
Foriker
Beiträge: 129
Registriert: Di 4. Nov 2014, 21:11
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von besenmuckel » So 26. Jul 2020, 22:30

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.

phb
Foriker
Beiträge: 10
Registriert: So 26. Jul 2020, 21:53
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von phb » Mo 27. Jul 2020, 12:09

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

Benutzeravatar
PJBlack
Foriker
Beiträge: 45
Registriert: Sa 8. Dez 2018, 23:50
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von PJBlack » Mo 27. Jul 2020, 19:31

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

phb
Foriker
Beiträge: 10
Registriert: So 26. Jul 2020, 21:53
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von phb » Mo 27. Jul 2020, 21:25

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 :(

phb
Foriker
Beiträge: 10
Registriert: So 26. Jul 2020, 21:53
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von phb » Mo 27. Jul 2020, 21:39

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

Benutzeravatar
PJBlack
Foriker
Beiträge: 45
Registriert: Sa 8. Dez 2018, 23:50
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von PJBlack » Di 28. Jul 2020, 00:23

hab das ganze mal in gambas gemacht :
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

End
bei der do/while war ich sprachlich woanders :( aber die function läuft durch und sollte das tun was du möchtest ...

phb
Foriker
Beiträge: 10
Registriert: So 26. Jul 2020, 21:53
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von phb » Di 28. Jul 2020, 14:25

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

Benutzeravatar
PJBlack
Foriker
Beiträge: 45
Registriert: Sa 8. Dez 2018, 23:50
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von PJBlack » Di 28. Jul 2020, 17:34

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 ...

phb
Foriker
Beiträge: 10
Registriert: So 26. Jul 2020, 21:53
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von phb » Mi 29. Jul 2020, 21:52

@PJBlack
Welches Kapitel des Gambas Buches befasst sich denn mit dem Auslesen der seriellen Schnittstelle des Raspberry Pi?

Benutzeravatar
PJBlack
Foriker
Beiträge: 45
Registriert: Sa 8. Dez 2018, 23:50
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von PJBlack » Mi 29. Jul 2020, 22:27

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

phb
Foriker
Beiträge: 10
Registriert: So 26. Jul 2020, 21:53
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von phb » Do 30. Jul 2020, 11:03

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 :( :( :(

phb
Foriker
Beiträge: 10
Registriert: So 26. Jul 2020, 21:53
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von phb » So 2. Aug 2020, 21:57

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?

Benutzeravatar
tionov
Site Admin
Beiträge: 345
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von tionov » Mo 3. Aug 2020, 06:52

phb hat geschrieben:
So 2. Aug 2020, 21:57
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?
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-net
Und 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

phb
Foriker
Beiträge: 10
Registriert: So 26. Jul 2020, 21:53
Kontaktdaten:

Re: Code für Geigerzähler

Beitrag von phb » Mo 3. Aug 2020, 11:38

Hallo tionov - erstmal Danke für Deine Anwort - aber leider...
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?

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste