Jump to content

Problem mit Interrupt von IO4 Bricklet und vb.net


P4trick

Recommended Posts

Hallo zusammen:-)

ich bin gerade dabei ein kleines Programm zu schreiben und wollte dabei auf ein Tasterereignis am IO4 reagieren, leider klappt das nicht so wie gewollt.

Es wird nicht auf mein Interrupt reagiert aus dem "normalen" Programm heraus. Starte ich jedoch den BrickViewer und gehe in den Tab für das IO4 WÄHREND mein selbst geschriebenes Programm läuft, reagiert er.

Ich habe das Problem mal mit dem Beispielcode von der TF Seite mit der Doku für das IO4 nachgestellt, und auch hier habe ich das gleiche Verhalten.

 

Also: Programm starten- console geht auf.. verbinde ich die Anschlüsse 1 und GND passiert nichts. Starte ich den Brickviewer und gehe in den Tab mit den Einstellungen und verbinde dann die Pins 1 und GND, wird mir in der Konsole eine Veränderung angezeigt.

 

Woran kann das liegen und wie kann ich das Beheben?

 

Danke und Gruß

Patrick

Link zu diesem Kommentar
Share on other sites

Hallo Joerg,

 

nein das habe ich gar nicht gesehen.

Ich habe immer nach IO4 Interrupt gesiucht und das gar nciht gefunden. Danke für den Hinweis. Zumindest weiß ich nun das ich nicht spinne :-P

 

Ich könnte jetzt so gar nicht sagen ob ich mal den BV gestartet habe, während mein Programm lief. Das müsste ich heute Nachmittag mal nachstellen.

Mal sehen was dabei rum kommt und dann melde ich mich mal zurück wie das Ergebnis ist.

Gruß

Patrick

Link zu diesem Kommentar
Share on other sites

Guten Morgen,

ich habe das nun gestern mal getestet, und habe leider das gleiche Phenomen.also ob ich nun den BV vorher starte oder nicht, ist egal.

Ich stecke den Masterbrick an, starte mein Programm, stelle die Verbindung her und Funktionen wie etwas auf das DualRelay-Bricklet zugreifen gehen auch. Nur eben nicht der Interrupt des IO4.

 

Hat noch jemand eine Idee? :-\

Link zu diesem Kommentar
Share on other sites

Da Flashen kann ich mal machen, das habe ich noch nicht gemacht. nur die neuste Version kürzlich aufgespielt weil es länger nicht gebraucht wurde.

 

ich werde das getInterrupt() mal testen, aber stelle mir die Frage warum der Interrupt dann gehen sollte, wenn ich auf dem aktiven Reiter für das IO- Bricklet bin. setzt nur das aktiv setzen der Reiterkarte denn schon einen Interrupt auf das IO4-Bricklet?

Ich melde mich zurück sobald ich es getestet habe.

Danke euch schonmal für die Tips

Link zu diesem Kommentar
Share on other sites

Der Vorschlag das Bricklet neu zu flashen ist ein Schuss ins Blaue, weil mit keine gute anderen Erklärung einfällt.

 

Der GetInterrupt() Aufruf ist auch mehr ein Schuss ins Blaue. Dadurch wird das Problem nicht behoben werden. Interessant wäre aber, ob sich der Wert den du SetInterrupt() übergibst sich von dem unterscheidet, den dir GetInterrupt() zurück gibt. Die beiden sollten im Normalfall gleich sein.

 

Wenn du in brickv den Tab des Bricklet anwählst werden die Interrupts für alle Pins aktiviert. Ist dein Problem vielleicht, dass dein Programm die Interrupts nicht richtig einstellt? Also SetInterrupt mit einem flaschen Wert aufruft und dann auf dem Pin auf dem du den Interrupt benutzen willst, der Interrupt gar nicht an ist? In brickv dann den Tab anzuwählen fixt das Problem, weil brickv immer die Interrupts für alle Pins anmacht.

 

Teste mal in deinem Programm SetInterrupt(255) aufzurufen. Ich würde fast erwarten, dass das dein Problem löst.

Link zu diesem Kommentar
Share on other sites

Danke für den Hinweis. Kann es im Moment wie gesagt nicht testen, da ich die Harware daheim habe. Werde das aber gleich mal machen.

Allerdings habe ich, weil es mit meinem erstem Code nicht ging- auch mal den Beispielcode für den interrupt des IO4 genommen, und da habe ich das gleiche Verhalten.(wobei ich zu meiner Schande gerade sagen muss: ich hatte es zwar damit getestet, kann aber nicht sagen ob da der BV offen und auf der Reiterkarte für das IO4 war.) Der Test gestern mit dem BV und der Reiterkarte auf IO4 war mit meinem Code.

Hier mal ein Auszug wie ich den Interrupt setze:

  Private Sub VerbindungHerstellen()
        con = New CConnection
        ipcon = con.Verbindung_herstellen(HOST, PORT)
        If ipcon.GetConnectionState = 0 Then
            Exit Sub
        End If

        rUid = My.Settings.ruid.ToString
        IoUid = My.Settings.iouid.ToString
        io16uid = My.Settings.io16uid.ToString
        QRuid = My.Settings.QRuid.ToString

        Dim io4 As New BrickletIO4(IoUid, ipcon)
        Dim io16 As New BrickletIO16(io16uid, ipcon)

        AddHandler ipcon.EnumerateCallback, AddressOf UIDs_Durchlaufen
        ipcon.Enumerate()

        AddHandler io4.Interrupt, AddressOf ventilsteuerung
        If QRBrick = True Then
            AddHandler io16.Interrupt, AddressOf ventilsteuerung
            io16.SetPortInterrupt("a"c, 1 << 2)
        End If


        io4.SetInterrupt(1 << 0)
        ' Trigger Enumerate

    End Sub

 

jetzt wo ich meinen Code so sehe, fällt mir noch ein andere Problem auf, was ich nicht lösen konnte- gehört aber jetzt hier nicht zum Thema.. ich denke das wird sonst zu verworren hier.

Link zu diesem Kommentar
Share on other sites

Okay auf den ersten Blick sehe ich das kein direktes Problem im Code.

 

Ich bleibe bei meiner Vermutung, dass du den Interrupt in deinem Programm nicht richtig einstellst. In deinem ersten Post sprachst du von Pin 1. Meinst du damit den Pin der auf dem IO-4 Platine mit einer "1" gekennzeichnet ist? Wenn ja, dann aktiviert

 

io4.SetInterrupt(1 << 0)

 

nicht den Interrupt für diesen Pin, sondern für Pin 0, der auf der IO-4 Platine mit einer "0" gekennzeichnet ist.

 

Für Pin 1 muss das so aussehen:

 

io4.SetInterrupt(1 << 1)

 

Dass es in deinen Tests dann doch funktioniert, wenn du in brickv auf den IO-4 Tab wechselst liegt dann daran, dass brickv in diesem Fall die Interrupts für alle Pins anmacht, also auch für Pin 1.

Link zu diesem Kommentar
Share on other sites

soo. ich habs jetzt gestern mal gestet. .und ja was soll ich sagen ::):-[

 

ich müsste mir das Bein abhacken und mich selbst in den Ar**** treten!!.

Es war meine eigene Baseligkeit!.

Ich habe es mir 255 getestet un dklappte auf anhieb, dann mal wieder zurück auf (1) un des ging nicht.

Habe dann einfach mal spaßeshalber alle Pins auf dem IO durch und bei einem ging es dann auch.

 

Ich habe den Interrupt auf Pin0 eingestellt, hatte aber im Kopf immer Pin 1 als Pin 0 angesehen und immer am falschen Pin getestet. Ob ich mich Verlesen habe oder sonst was, keine Ahnung.. Auf jeden Fall: kaum mach tman es richtig, geht es auch. :(:o

 

Danke für den Wink mit dem Zaunpfahl.

 

Gruß

Patrick

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...