Jump to content

borg

Administrators
  • Gesamte Inhalte

    3.544
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    50

Alle erstellten Inhalte von borg

  1. Aha! Das ist ja interessant. Vielleicht ist es dann doch ein Software Fehler. Ich werde das mal am Dienstag genauso nachstellen und die ganze Software im Debug Modus laufen lassen. Ich bin gespannt. Grundsätzlich gibt es keinen Grund warum das nicht gehen sollte, also gibt es da auch einen Fix falls es an der Software liegt! Erstmal vielen Dank für deine ganzen Mühen, es ist leider immer viel Aufwand bis man solche Bugs findet die mit so vielen Elementen gleichzeitig zu tun haben.
  2. Ich könnte mir vorstellen das eine gewissen Gefahr durch Eisbildung an den Leiterplatten besteht. Wenn es dort langfristig bleiben soll würde ich versuchen die Platinen gut einzuwickeln, so dass es keine Kurzschlüsse geben kann wenn kurzzeitig Eis auftaut weil die Kühlschranktür auf ist (das gilt natürlich vor allem für das Eisfach).
  3. "Distance 16"? Du meinst "Distance IR Bricklet 1.0"? Das kannst du doch genauso parsen. Alles nach der ersten Leerstelle von rechts ist die Version, alles vor der zweiten Leerstelle von links ist der Name und das was überbleibt ist der Typ.
  4. Ah, verstehe. Mhhh. Also grundsätzlich solltest du es folgendermaßen Parsen können (Pseudocode): liste = name.split(" ") version = liste.last(); liste.remove_last() type = liste.last(); liste.remove_last() name = liste.join() Sprich: Am Ende steht der Name, davor kommt der Typ (mit Leerstelle getrennt), dann kommt der Name (zwischen Typ und Name auch mit Leerstelle getrennt, aber der Name selber kann Leerstellen enthalten). Aber: An der Stelle gibt es folgendes zu beachten: Die Versionsnummer ändert sich nur wenn die Hardware inkompatibel geworden ist. D.h. auch bei den ganzen neuen 1.1 Hardwareversion wird dort 1.0 stehen. D.h. du kannst damit nicht herausfinden ob die Platinen glänzend oder Matt sind (was der Unterschied zwischen Stepper Brick 1.1 und 1.0 ist). Ich hoffe das macht irgendwie Sinn. Wir wollen eigentlich nicht 1000 unterschiedliche Firmwares machen für Hardware die die gleiche Schaltung hat.
  5. Das ist komisch. Wenn du einen anderen Master da hast probier den doch mal bitte. Sonst würde das ja bedeuten, dass der Temperatur-Mess-IC auf dem Temperature Bricklet einen defekt hat (wenn er nicht richtig angelötet wäre o.ä. hättest du definitiv eine höhere Fehlerquote). Hast du denn ein größeres System am laufen (zum testen jetzt)? Wenn ja probier doch mal eine Zeit lang nur den Master mit einem Temperature Bricklet laufen zu lassen! Vielleicht hat es ja mit der Kombination von irgendwas zu tun.
  6. Ha, an sowas hatten wir beim ersten Design der Hardware in der Tat schon gedacht. Es gibt im Stack einen sync Pin (siehe Schaltplan). Damit wäre es in Theorie möglich genau das zu machen was du vorgeschlagen hast. Was ich mir da vorstelle ist eine Methode "trigger()" mit der man diesen Pin triggert. Dazu müsste es dann bei jedem Brick eine Methode "setTriggerType" geben bei der man setzen kann was getriggert wird damit (z.B. step() beim Stepper Brick). Ich schreib es mal auf meine TODO Liste, komme aber vermutlich frühestens Ende des Monats dazu das zu implementieren.
  7. Ich kann das Problem bei mir nicht erzeugen. Hab es über Nacht laufen lassen (~6 Stunden) sowohl mit einem 2m als auch mit einem 15cm Kabel. Das erste was ich dann jetzt probieren würde ist ein kürzeres Kabel. Um zu gucken ob es am langen Kabel liegt.
  8. So, ich hab mal alles an Messgeräten was wir hier haben angeschlossen und rumprobiert. Grundsätzlich ist es so, dass sich der Strom im Durchschnitt nicht besonders ändert zwischen halten, frei laufen und unter Last. Ich gehe davon aus dass dein Messgerät unterschiedliche Werte anzeigt weil der Stepper Brick unterschiedlich chopped (mit und ohne Last etc). Kannst du vielleicht unterschiedliche "Mess-Modi" einstellen? Wegen den weitläufigen Werten: Was du da siehst ist auch das Chopping, Der Schrittmotor wird angetrieben indem er immer abwechselnd volle Leistung/0A bekommt. Ich hab mal eine neue Firmware hochgeladen: http://download.tinkerforge.com/firmwares/bricks/stepper/ (1.1.3) Der Stromverbrauch wird jetzt über ein kleines Integral berechnet, so wie es jetzt ist stimmt der Wert zu jeder Zeit mit dem Messgerät überein was ich hier hab (+-15mA). Ich denke das ist erheblich sinnvoller als diskrete Werte zurück zu geben, wie wir es vorher hatten. Damit man die auswerten kann braucht man vermutlich zuviel Kenntnis von dem Schrittmotor Treiber IC den wir verwenden. Wenn es geht probier doch mal die neue Firmware aus und sag Bescheid ob die Werte eher so sind wie du dir vorgestellt hast.
  9. Ich konnte das Problem hier bisher noch nicht erzeugen, auch nicht mit einem 2m Kabel.
  10. Oh, das ist komisch. Wir schicken ja mit CRC und überprüfen die auch. Ist es für dich möglich zu testen ob dieses Problem auch ohne Chibi auftritt? Vor allem die gleiche Bricklet-Kabellänge verwenden! Bei Messungen alle 10 Sekunden ist das eine Fehlerrate von ~0,5% wenn ich mich nicht verrechnet hab. Das so oft ein Fehler auftreten soll der durch die CRC Prüfung rutscht kann ich mir gar nicht vorstellen. Welche Version haben deine Master denn? Wir haben in letzter Zeit viel am Chibi Code gearbeitet, die neueste Version ist 1.1.7: http://download.tinkerforge.com/firmwares/bricks/master/ Ich werde das hier mal nachstellen und über Nacht laufen lassen, mal gucken was dabei rum kommt.
  11. Die ganzen Bindings sind komplett autogeneriert und die Konfigurationsdateien wo die Informationen für die Generierung herstammen findest du hier: https://github.com/Tinkerforge/generators/tree/master/configs für den Stepper Brick z.B. hier: https://github.com/Tinkerforge/generators/blob/master/configs/brick_stepper_config.py Mhhh, das ist im Moment leider nicht möglich. Die Informationen sind auf dem Master Brick alleine leider auch nicht alle vorhanden. Der Master könnte einer Stack ID den Platz in der Platine zuweisen (z.B. dritte Platine von unten). Alle Bricks könnten einer Stack ID von einem Bricklet den Port zuweisen. Stellt sich natürlich die Frage wie man dafür eine vernünftige API macht, muss ich mal drüber nachdenken. Kurz zur Erklärung: Der Master enumeriert sich erst selbst durch (seine Bricklets). Dann enumeriert er alle Stack Teilnehmer durch (und übergibt als startende Stack ID die momentan höchste Stack ID). Dann enumeriert er alle Extension Teilnehmer durch. Der Master der Extension seinen Stack schon enumeriert und es wird nur noch ein Offset in der ID übertragen. Wenn nun eine Nachricht mit Stack ID x ankommt, weiß der Master der per USB angeschlossen ist genau wo die hin muss (z.B an die Extension oder an den Stack Teilnehmer Nummer y). Er weiß aber nicht was es für ein Typ ist oder an welchem Port ein Bricklet sitzt o.ä. Da haben wir elektronisch keinen "Detection Pin" o.ä., das einzige was du machen kannst ist GetVoltage auf dem Master aufrufen. Wenn die Spannung ungleich 0 ist, ist eine Step-Down Powersupply da.
  12. Oh, das ist ein "Bug". An der Stelle ist das aber natürlich egal, der Wert wird ja nicht benutzt. Wenn ich das nächste mal etwas an den Bindings ändere werde ich das fixen.
  13. Echt komisch, sieht alles so weit gut aus. Als length würde ich 12 erwarten anstatt 14, das sollte aber keine Probleme machen. Ich hab mal das Testprojekt was wir hier verwendet haben hochgeladen: http://download.tinkerforge.com/_stuff/project_uwet.zip Bin gespannt ob das bei dir funktioniert. Wenn ja müsste es irgendeine Compilereinstellung o.ä. in deinem Projekt sein sein die zu den Problem führt. Du kannst auch versuchen die Test.exe direkt auszuführen, das sollte auf jedenfall gehen. Wenn die nicht geht liegt das Problem außerhalb des Compilers, da sie bei uns funktioniert. Als UID haben wir 94ANbHiaKXq genommen das sollte die für deinen Stepper Brick sein.
  14. Mysteriös. Wo steht er denn bei ipcon_add_device (Zeie 339ff)? Kommt er bis zum if(ipcon_answer_sem_wait_timeout(device) != 0) { oder steht er schon beim send(ipcon->s, (const char*) &gsid, sizeof(GetStackID), 0); ? Und kannst du da auch mal die Elemente von GetStackID ausgeben? Um zu gucken ob da alles richtig ist.
  15. Brick Viewer and Brick Daemon for Mac OS X are now online: http://en.blog.tinkerforge.com/
  16. It is fairly simple. We have a Brick Daemon, a Brick Viewer and language bindings. The daemon has a USB connection to the Bricks (and over the Bricks to the Bricklets) and opens a TCP port. The bindings (currently for C/C++, C#, Java, Python) speak over TCP with the Brick Daemon and provide an API to the user (like SetSpeed, GetTemperature, etc). That is in principle all you need to use Bricks and Bricklets (the Brick Daemon and one language binding). Additionally we have the Brick Viewer, that provides a GUI for all of the API for all Bricks/Bricklets. The idea is to use it for testing before you start your own project. A list of devices that we currently have can be found here: http://www.tinkerforge.com/doc/index.html#bricks You can click on the names to get an in depth description.
  17. Sehr unwahrscheinlich das es am Rechner selbst liegt. Wird denn die Funktion ipcon_recv_loop überhaupt aufgerufen? Also wenn du mal ein printf direkt oben in Zeile 38 reinmachst. Ansonsten, gestartet wird die recv loop in Zeile 293: ipcon->handle_recv_loop = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)ipcon_recv_loop, (void*)ipcon, 0, (LPDWORD)&thread_recv_loop_id ); Wird da noch aufgerufen? Wenn nicht, wo bleibt das Programm stehen vorher? Dem Problem sollten wir auf die Spur kommen können, soviel passiert ja gar nicht bis dahin.
  18. Mh, schwer zu sagen. Da im brickv jetzt alles funktioniert, scheint der brickd ja zu laufen. Der brickv nutzt zwar Python, aber die Kommunikation läuft ja über herkömmliche Sockets. Ich würde also ausschließen das die nicht richtig funktionieren. Bleiben nur noch die C Bindings selbst übrig. Kannst du mal den buffer in der ip_connection.c direkt in der recv loop ausgeben (Zeile 61)? Ich würde im Moment davon ausgehen das die Daten dort ankommen (da ich einfach keinen Grund sehe warum es nicht funktionieren sollte), dann aber irgendwo in einer der Semaphoren oder so stecken bleiben. Ich würde erwarten das die Nachricht an ipcon_handle_message übergeben wird, dort wird festgestellt das der Typ TYPE_GET_STACK_ID ist, von da gehts an ipcon_add_device_handler und da wird die sem_answer Semaphore freigegeben. Wenn es geht guck doch mal wo es da stecken bleibt, da es bei uns läuft hab ich da gerade keinen Anhaltspunkt woran es liegen könnte.
  19. They would fit there, but the connectors of the Bricklet cables would collide with the USB connector on a USB cable (about 1mm with the cables we are currently selling).
  20. A Brick with more than 4 Bricklet connectors is quite hard. Bricks are defined to have a size of 4x4cm, 2 board-to-board connectors at the sides and one usb connector and 2 buttons at the front. 4 Bricklet connectors are unfortunately the maximum that can be mounted on the back side. A larger board without stack capability with just a USB connector and lots of Bricklet connectors would be possible. A Multi Analog IN Bricklet would also be possible. I doubt that we will make any of the two in the next months however. There is so much more stuff we want to release, we have to prioritize. Regarding the mounting kits: Mhh, i suppose the idea is that you get everything you need to be able to place a Brick/Bricklet on a table without the board touching it. It is hard to provide anything that might be needed to mount our stuff in any possible casing or similar. That said, you can probably buy 3mm screws for something like 1 cent/piece at your local hardware store. Also we intend to offer casings for all of our Bricks/Bricklets in the future, there you will of course get anything needed.
  21. Bei mir funktioniert der Source Code hier: https://pastee.org/gtnxq sowohl unter Linux (Ubuntu 11.10) als auch unter Windows 7 ohne Probleme. Hast du die IO16 schon auf die neueste Firmware geupdatet? Hab da vor kurzem eine Kleinigkeit hinzugefügt, siehe hier: http://www.tinkerunity.org/forum/index.php/topic,188.0.html (das kann aber eigentlich nichts mit deinen Problemen zu tun haben) Funktioniert das denn im Brick Viewer? Einfach starten und auf die Knöpfe drücken, der konfiguriert dafür standardmäßig genau richtig. Welche Version haben deine Python Bindings? http://download.tinkerforge.com/bindings/python/
  22. Oh, es leuchtet keine LED wenn du es per USB anschließt? Aber es taucht ein neues Gerät unter Windows auf? Klingt als wäre dein Servo Brick im Bootloader! Dann musst du eine neue Firmware draufflashen, wie das geht ist hier beschrieben: http://www.tinkerforge.com/doc/Software/Firmwares_And_Plugins.html#flash-firmware-on-a-brick Firmware fürs Servo Brick gibts hier: http://download.tinkerforge.com/firmwares/bricks/servo/
  23. OK, nochmal zum Thema Kalibrieren (das Kalibrieren unter "advanced functions"). Wenn man dort auf "calibrate" klickt, werden die Extremwerte des Analog zu Digital Wandlers vom Brick kalibriert. Das hat an der Stelle erstmal überhaupt nichts mit den Bricklets zu tun! Nun, um die Extremwerte (d.h. 0V und 3.3V in unserem Fall) zu kalibrieren, benötigen wir aber extern etwas, das diese Werte erzeugt. Da kommen die analogen Bricklets ins Spiel. Um den Analog zu Digital Wandler korrekt zu kalibrieren müssen wir also ein Bricklet anschließen mit dem wir auf dem analogen Pin 0V und 3.3V erzeugen können, dies geht z.B. gut mit den Potis. Dazu kann man ein Poti anschließen, auf einen Extremwert drehen, "calibrate" klicken, auf den anderen Extremwert drehen, "calibrate" klicken und fertig. Nun sind 0V und 3.3V kalibriert. Diese Möglickkeit haben wir eingebaut da der Analog zu Digital Wandler auf dem Microcontroller nicht immer die vollen Werte erreicht. Da er eine 12 Bit Auflösung hat sollte er bei 0V 0 ausgeben und bei 12V 4095. Allerdings kann es sein das er sowas wie 2 und 4092 o.ä. ausgibt, dieser Fehler wird Kalibriert. Wenn du den Analog zu Digital Wandler nun verkalibrierst (d.h. du drückst z.B. "calibrate" wenn das Poti nicht nach ganz links oder ganz rechts gedreht ist), gibt alles falsche Werte zurück was den Analog zu Digital Wandler benutzt. Unter anderem alle Analog Bricklets und die Spannungs- und Strommessung im Stack! Um das nochmal ganz klar zu machen: Diese Kalibrierung wird auf dem Brick gespeichert und betrifft das Brick, das Bricklet mit dem kalibriert wird ist nur Hilfsmittel. Wenn du aus welchen Gründen auch immer Probleme mit der Kalibrierung hast, würde ich sehr stark empfehlen das Brick neu zu flashen und einfach den "calibrate" Knopf unter "advanced functions" nicht zu drücken . Zum Thema Lux: Tageslicht hat 10000 Lux, dein Handy kann vermutlich 900 Lux erzeugen wenn du es genau drauflegst. Zum Thema Ambient Light Kalibrieren: Das muss nicht kalibriert werden, wenn du etwas mehr über die genauen Eigenschaften des Sensors erfahren willst kann ich dir die Graphen im Datenblatt empfehlen: https://github.com/Tinkerforge/ambient-light-bricklet/raw/master/datasheets/TEMT6000.pdf Edit: Die Bricklets die eine Kalibrierung benötigen (z.B. Current oder Distance IR) haben Kalibrierungsfunktionen dafür im jeweiligen Bricklet Fenster im Brick Viewer. Diese Kalibrierungen werden dann natürlich auch auf den Bricklets gespeichert.
  24. Überprüfen welchen Interrupt du bekommen hast kannst du mit dem binären &, z.B.: if value & (1 << 5): # hier code für pin 5 = high if value & (1 << 0): # hier code für pin 0 = high # ... Ansonsten, ist mir noch nicht klar was du machen möchtest. Soll der Motor so lange fahren wie du den Knopf drückst? Dann würde ich machen # Schalter an Pin 5 if value & (1 << 5): stepper.drive_forward() else: stepper.stop() Wenn du pro Knopf drücken x Schritte fahren willst: # Schalter an Pin 5 if value & (1 << 5): stepper.set_steps(x)
  25. Naja, dafür musst du die Schrittanzahl die beim Poti eingestellt wird zwischenspeichern und sobald du den Callback bekommst den Wert mit set_steps setzen.
×
×
  • Neu erstellen...