Jump to content

AuronX

Members
  • Gesamte Inhalte

    888
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von AuronX

  1. Wenn auch sicherlich langsam einen eigenen Thread wert: Sofern jumperbar/schaltbar sich so leicht realisieren ließe, dann wäre das definitiv die von mir favorisierte Lösung.
  2. Könnt ihr denn einen "allgemeinen" Snubber einsetzen? Dachte das käme auch immer auf die Last an die geschaltet wird. Ansonsten wäre ich auch sehr für eine Variante die vor Fehlbedienung sicher ist
  3. Bin grad noch im Urlaub, aber wenn es nur darum geht das bisher erreichte allgemein verfügbar zu machen, dann stell es einfach ins Forum und ich sortiere es zu nem Pull Request in deinem Namen ^^
  4. Degree ist nur da um dir das Leben leichter zu machen. Deinen Servo interessieren nur Pulsweite und Periode. Wenn du jetzt als minimale Pulsweite zum Beispiel 1000 einstellst und als minimalen Degree -25000, dann bedeutet das nicht mehr, als dass dein Servo genau dann mit einer 1000er Pulsweite angesteuert wird, wenn du eine Position von -25000 einstellst. Dein Servo "weiß" gar nichts vom Degree. Der Sinn ist der: Wenn du einen Servo hast der 180° insgesamt drehen kann, dann kannst du den Degree von -9000 bis +9000 stellen und weißt dann, dass bei einer Position von 1000 der Servo 10° nach rechts gedreht ist. Wenn dein Servo hingegen einen Fahrtenregler ansteuert der von keine Motordrehung bis volle Drehzahl steuert, dann kannst du den Degree von 0 bis 100 stellen und weißt zum Beispiel, dass bei Position 0 die Drehzahl 0% vom Maximum ist und bei 100 halt 100% vom Maximum. Den Degree kannst du also frei definieren so wie es dir bequem ist, hoffe meine Erklärung war mehr hilfreich als verwirrend ^^
  5. Letzteres ist technisch nciht möglich und ich vermute sogar gegen die Bedingungen von Github (automatisches Anlegen von Accounts). Zumal ja nur ein Bruchteil der Forenuser auf Github was beisteuern wird und dann noch viele schon vorher einen Account hatten (wie ich). Code-formatierungen wird es von TF wohl zu nicht-unterstützten Sprachen kaum geben. Ansonsten reicht aber ein kostenloser Account völlig aus. Grundprinzip bei allen Github-Projekten sieht so aus: Du gehst auf das öffentliche Repo, dann forkst du es und führst alle Ändeurngen an deiner eigenen Kopie durch. Wenn was dabei ist was du für teilenswert hälst, dann kannst du ne "Pull Request" stellen, das ist quasi die Bitte an TF deine Änderungen zu übernehmen. Dann kann TF sich das anschauen, villt noch mit dir Rücksprache halten und am Ende übernehmen. Das war Github in Kurzform. Falls es jetzt noch Organisatorisch was gibt kann TF das ja nachtragen, aber meiner Erfahrung nach ist es recht unkompliziert ^^
  6. Github wird nicht von TF betrieben sondern ist ne unabhängige Seite die Git-Repositories für andere Leute hostet. Deswegen brauchst du da auch einen eigenen Account. Solltest du bisher nicht mit Git oder anderen Versionsverwaltungssystemen vertraut sein, kannst du dich ja auf http://help.github.com erstmal grundsätzlich damit vertraut machen. Allerdings gibt es definitiv eine gewisse Einstiegshürde, wenn man noch nie vorher Versionsverwaltung betrieben hat.
  7. Borg: Sag das nicht. Bei uns an der Uni sind die LEGO Teile ziemlich beliebt und werden von verschiedenen Leuten zerprogrammiert. Allerdings habe ich nie selbst daran gearbeitet, aber auf jeden Fall sollte es weit entfernt von unmöglich sein
  8. Meiner Ansicht nach würde es hierher gehören: https://github.com/Tinkerforge/generators Dort Unterordner delphi und erstmal alle Klassen rein. Auch wenn es bisher nicht generiert wird ^^
  9. AuronX

    Roadmap

    Meiner Meinung nach dürfen Zeitangaben auch in der Form "nahe Zukunft", "ferne Zukunft", "nur in euren Träumen" erfolgen. (also nur "weiche" Zeitangaben)
  10. Lässt du deine Software jetzt auch von -25000 bis +25000 steuern oder machst du da weiter 9000? Weil der Degree ja im Grunde "nur" eine Umrechnung ist.
  11. @batti: Auf jeden Fall sollte der brickd aber nicht sterben gehen, wenn er kaputte Pakete erhält. Ist zum einen unschön, aber auch gewissermaßen ein Sicherheitsproblem (zwar nur DoS, aber immerhin ^^).
  12. Zu der Schleife: Findet das Warten nicht in der Funktion MsgWaitForMultipleObjects statt? Weil du das lock erst danach freigibst, das heißt also während du wartest darf es sich niemand anders nehmen. Ich würde jetzt vermuten, dass das Release VOR dem MsgWaitForMultipleObjects stehen sollte. Das if(closing) usw sollte wohl lieber zwischen aquire und if(count > 0) stehen, auf jeden fall sollte es nur dort stehen wo du das lock gerade besitzt. Sonst ist es wieder möglich, dass jemand close aufruft, nachdem du auf closing geprüft hast.
  13. Die Funktion count macht ja nicht mehr als innerhalb einer critical-section den queue.count abzufragen. Da queue.count sonst auch nur innerhalb der locks verwendet wird ist das äquivalent. Tatsächlich sieht der vom C#-Compiler generierte Code ziemlich genau so aus (abgesehen von anderen Locking-Klassen ) Das klingt danach, dass du während des wartens das lock nicht abgegeben hast. Das wäre aber nötig. Ich versuche mal in Pseudo-code darzustellen wie es grob aussehen könnte (nicht schön aber selten): while(true) { lock.aquire(); if(count > 0) { break; } lock.release(); WaitSomeTime(); } pop(); lock.release(); In diesem Beispiel habe ich jetzt sowas wie closing und exception-handling mal ausgeblendet. Das ist jetzt nur exemplarisch fürs locking, wenn du sonst keine besseren Bordmittel von Delphi bekommst.
  14. Ich befürchte TryDequeue ist noch nicht korrekt gelocked (habe aber auch Probleme Delphi zu lesen ^^): while (Count = 0) do begin state := MsgWaitForMultipleObjects(1,job,false,timeout,QS_ALLINPUT); if (closing) or (timeout < Timeout_Infinite) or (state=WAIT_TIMEOUT) then begin result := false; exit; end; timeout := tick-GetTickCount; end; Ich verstehe nicht ganz wie, aber wenn ich es richtig sehe ist das der Code der wartet bis mindestens ein Eintrag in der Queue steckt (das ist jetzt eine Annahme von mir). Daraufhin kommt dieser Code: writeLock.Acquire; try p:=queue.Pop; item := p^; dispose(p); finally writeLock.Release; end; Das Problem ist, dass zwischen dem Aquire und dem Verlassen der while-schleife darüber kein locking besteht. Es ist also möglich, dass mehrere Threads die while-schleife verlassen, dann bekommt der erste Thread das writeLock (Thread 2 hängt jetzt am aquire), holt sich das einzige Item in der Queue und gibt das lock wieder ab. Jetzt kann der zweite Thread weiterlaufen, beim Pop knallt es jetzt aber. Der C#-Code funktioniert deswegen, weil die gesamte Schleife in einem locked-Bereich liegt, aber das Monitor.Wait es zulässt, dass man sein Lock mittendrin wieder abgibt und auch wiederbekommen kann. Du müsstest also sicherstellen, dass man vor dem Prüfen des count das lock aquired, und es wieder abgibt und wartet falls der count == 0. Falls der count > 0, dann sollte man das lock behalten, poppen gehen und danach das lock abgeben. Viele Grüße Jan
  15. It works under Win7 64Bit. Did you check your host, the port and that the brickd is running? The host should normally be localhost (if running from the same computer) Port should be left unchanged (I don't remember the default) To see whether the brickd is running go to Start -> Rightclick on "Computer" -> Manage. You get a window where you can navigate through a tree at the left side: Services and applications -> Services In the list search for brickd and check whether the status is "Running".
  16. Nennen wir es einfach Schlafstörungen
  17. Master, den will borg ja auch austauschen
  18. AuronX

    USB Problem

    Etwas mehr Detail wäre gut ^^ Wird nicht erkannt heißt, dass gar kein Gerät im Geräte-Manager auftaucht? Oder taucht im Geräte-Manager nur ein Gerät ohne passenden Treiber auf? Du musst den Brick Daemon von hier installiert haben: http://www.tinkerforge.com/doc/Downloads.html In dessen Installationsordner wird auch ein Verzeichnis driver erstellt, dort findest du den Treiber für deine Bricks
  19. Nur dass es nach der Konfiguration ohne USB-Host auskommen soll
  20. Meine Pull Request ist raus, aber ich glaube beim letzten Mal ist Git explodiert... Hoffe das klappt trotzdem alles halbwegs ^^
  21. Ich habe zwar nicht für GPS gestimmt aber tatsächlich kenne ich eine Anwendung ^^ Ich hatte mir schonmal die Idee zusammengesponnen, dass ich in mein Auto ein Display montieren könnte das mir den Abstand und die Geschwindigkeitsdifferenz zum Vordermann anzeigt (gibt aber leider bisher keine Distanzmessung über viele Meter). Wenn ich die absolute Geschwindigkeit meines Vordermanns haben will, dann brauche ich meine eigene Geschwindigkeit. Am wenigsten basteln muss man da mit GPS. Mit mehr basteln kann man auch irgendwo ne Raddrehzahl abnehmen und aus der die Geschwindigkeit berechnen ^^ Das wäre ein (exotischer) Anwendungsfall.
  22. Das ist ja furchtbar! Ich hab mich schon immer über die vielen verstreuten ifdefs geärgert... werde mal schauen, dass ich mir nen WP-SDK installiere, dann würde ich versuchen das Problem zu entschärfen.
  23. Ergänzung wegen 2.0/4.0: Die aktuell herunterladbare DLL wurde so wie es scheint für 2.0 gebaut. Daran sollte es also nicht liegen
  24. Die DLLs sollen ja eigentlich 2.0 kompatibel sein. Ich müsste mal versuchen ob sie sich so wirklich kompilieren lassen...
  25. Vermutlich lässt sich da noch einiges optimieren ^^ Für einen einfachen Generator ist es am Ende nur wichtig, dass man die einzelnen Methoden nach einfachen Regeln bauen kann, deiner Beschreibung nach scheinst du ja die Handhabung sogar zu vereinfachen, sollte also gut sein. Wenn ich eine Methode generiere, dann habe ich die folgenden Informationen: - Welche ID hat sie auf TCP-Ebene - Wie heißt sie - Für alle Paramter/Rückgabewerte: Name, Typ, vielfältigkeit Vielfältigkeit wird in C# durch arrays abgebildet. (Zur Referenz: Config vom Stepper)
×
×
  • Neu erstellen...