P4trick Geschrieben July 20, 2014 at 12:20 Geschrieben July 20, 2014 at 12:20 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 Zitieren
joerg Geschrieben July 21, 2014 at 05:55 Geschrieben July 21, 2014 at 05:55 Hallo, hast du das gelesen ? Der letzte Eintrag von Theo. http://www.tinkerunity.org/forum/index.php/topic,2441.0.html lg Jörg Zitieren
P4trick Geschrieben July 21, 2014 at 08:08 Autor Geschrieben July 21, 2014 at 08:08 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 Zitieren
P4trick Geschrieben July 22, 2014 at 05:13 Autor Geschrieben July 22, 2014 at 05:13 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? Zitieren
photron Geschrieben July 22, 2014 at 09:34 Geschrieben July 22, 2014 at 09:34 Komische Sache! Ruf doch mal nach dem SetInterrupt() in deinem Programm GetInterrupt() auf, um zu überprüfen ob der Interrupt auch wirklich aktiv ist. Hast du mal versucht das IO-4 Bricklet neu zu flashen? Zitieren
P4trick Geschrieben July 22, 2014 at 10:38 Autor Geschrieben July 22, 2014 at 10:38 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 Zitieren
photron Geschrieben July 22, 2014 at 10:48 Geschrieben July 22, 2014 at 10:48 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. Zitieren
P4trick Geschrieben July 22, 2014 at 11:48 Autor Geschrieben July 22, 2014 at 11:48 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. Zitieren
photron Geschrieben July 22, 2014 at 12:00 Geschrieben July 22, 2014 at 12:00 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. Zitieren
P4trick Geschrieben July 22, 2014 at 12:23 Autor Geschrieben July 22, 2014 at 12:23 Sorry, mein Fehler. ich meinte Pin 0.. damit vertue ich mich ständig. Der Pin oben Links auf dem Bricklet, wenn ich den Brickletconnector unten habe :-) werde das aber mal mit 255 testen und berichten. Zitieren
P4trick Geschrieben July 23, 2014 at 10:11 Autor Geschrieben July 23, 2014 at 10:11 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. Danke für den Wink mit dem Zaunpfahl. Gruß Patrick Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.