PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Software-Fragen zur Multi-IO



fabqu
15.03.2013, 21:29
Dieser Thread ist gedacht für alle Fragen, welche die Software (Bibliotheken etc) zur Multi-IO betreffen.
Leiten wird sie Dirk, da er die Bibliotheken geschrieben hat und hier natürlich der Fachmann ist ;)

Ein RN-Artikel zur Software findet sich HIER (http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software).

Für Fragen zur Hardware gibts HIER (https://www.roboternetz.de/community/threads/61294-Hardware-Fragen-zur-Multi-IO) einen eigenen Thread. Natürlich gibt es Überschneidungen, aber damit werden wir schon umgehen können.

Thorben W
22.03.2013, 14:42
Hallo fabqu,
kann man sich die Bibliotheken irgendwo herunterladen ?
Thorben

DanielSan
22.03.2013, 15:12
Der Quelltext steht doch im Artikel oder seh ich das falsch?
Also einfach datei anlegen und mit dem Quelltext füllen fertig.

Thorben W
22.03.2013, 21:32
Muss ich um GPS zu benutzen das Modul mit dem UART verbinden, oder reicht eine Verbindung zum IO_MXXX?
Thorben

Dirk
22.03.2013, 21:41
Bei der M256 gibt es keinen UART an IO_PWM/T2/T3 (also IO-Mxxx).

Der UART1-Anschluß geht so:
http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#UART-Anschlu.C3.9F

Thorben W
23.03.2013, 13:55
Ich wollte eigentlich wissen ob die Verbindung nötig ist (die zum UART) oder ob die über IO-Mxxx reicht?
Thorben

Dirk
23.03.2013, 15:03
Darauf habe ich ja auch geantwortet.
Ja, Verbindung zum UART ist für GPS nötig; und nein, die Verbindung mit IO-Mxxx reicht nicht.

fabqu
23.03.2013, 15:55
:D
Deine Libs sind echt der Hammer :)
Mehrere Oktaven für den Buzzer - da können sich die RP6-Entwickler schon noch bissl was abschauen!

Ne Frage: Manche Funktionen wie alles für die LFS, Bumper, Sharps usw stehen doch nur in den Examples, nicht aber in den Libs. War das so gedacht? Oder kommen diese Funktionen noch in deine RP6M256_MultiIO.c/.h?

Grüße

und noch mal: Echt ne saubere Arbeit!

Dirk
23.03.2013, 17:20
Vielen Dank!
Passend für deine "saubere" Platine, die wirklich Spaß macht!!! ;)


Ne Frage: Manche Funktionen wie alles für die LFS, Bumper, Sharps usw stehen doch nur in den Examples, nicht aber in den Libs. War das so gedacht? Oder kommen diese Funktionen noch in deine RP6M256_MultiIO.c/.h?
Ich bin da unsicher.
Ich selbst möchte es bei der "zentralen" Lib eigentlich belassen, weil dafür ganz klar ist, was da rein muss. Nämlich alle Funktionen für die fest installierten Komponenten (genau so wie bei der RP6 Lib). Eine Lib macht ja auch nur Sinn, wenn sie weitgehend unverändert bleiben kann und nicht von wechselnden Komponenten abhängig ist.

Deshalb habe ich die anderen Funktionen (LFS, Bumper) erst einmal in den Demos gelassen, aber so angelegt und voneinander getrennt, dass eigentlich jeder "seine" Funktionen aus den Demos einfach in seine zentrale Lib einfügen kann:
- Definitionen in den Header (RP6M256_MultiIOLib.h)
- Funktionen in die Source (RP6M256_MultiIOLib.c)

Der Konfigurations-Header der Lib (RP6M256_MultiIO.h) braucht dabei nicht geändert zu werden, weil er schon alle grundlegenden Definitionen (auch für LFS, Bumper, DCF77...) enthält.
Im Prinzip ist es also einfach, sich eine individuelle Lib zusammenzubasteln.

Wenn gewünscht, würde ich evtl. die LFS und Bumper-Teile einmal zur Lib dazutun, wenn sich das jemand kopieren will. Damit würde ich aber noch warten, bis evtl. Bugs raus sind.

fabqu
23.03.2013, 23:35
Vielleicht ein "Mittelweg" : eine Lib für die beiden Boards Linie und Bumper? Vielleicht auch noch fürs Radio?

Dirk
24.03.2013, 10:18
Du meinst also die MultiIO-"Hauptlib" und je eine weitere für Linie/Bumper und für Radio?

Das ist eine gute Idee. Werde ich so machen.

inka
24.03.2013, 10:36
wie wäre es mit einer "hauptlib" und einer fürs "zubehör"?

fabqu
24.03.2013, 11:32
Jo, genau. Eine hauptlib hast du ja schon gemacht. Dann noch eine "exp-Lib" für die drei zusatzboards!?
oder eben eine für jedes Board... Wie es vom programmieren her sinnvoller ist.

Dirk
24.03.2013, 13:39
@Fabian:
Ok, wird so gemacht. Ein bisschen Geduld ... :-k

inka
24.03.2013, 14:53
hi,
das kompilieren der RP6Control MultiIO.c hat funktioniert, beim starten kommen im terminal folgende meldungen (ausschnitt)



Terminal cleared!

[READY]


RP6Control Multi IO Selftest 1!

Writing 128 to EEPROM address 5:
Done!

Reading EEPROM address 5:

I2C ERROR --> TWI STATE IS: 0x20

I2C ERROR --> TWI STATE IS: 0x48
Done!
EEPROM address 5 content: 17

3V3 Voltage: 2.6V
ADC 3V3: 536
TOUCHED!!!
ADC Touch: 541
Temperature: 21.8°
RTC: 12:00:00 10.01.2013
Temperature: 0.0°
BAT Current: 0.0mA
BAT Voltage: 0.0V
SERVO Volt.: 0.0V
VCC Voltage: 2.5V

3V3 Voltage: 2.3V
ADC 3V3: 473
NOT touched.
ADC Touch: 424
Temperature: 21.8°
RTC: 12:00:00 10.01.2013
Temperature: 0.0°
BAT Current: 0.0mA
BAT Voltage: 0.0V
SERVO Volt.: 0.0V
VCC Voltage: 2.5V

3V3 Voltage: 2.2V
ADC 3V3: 448
NOT touched.
ADC Touch: 392
Temperature: 21.8°
RTC: 12:00:00 10.01.2013
Temperature: 0.0°
BAT Current: 0.0mA
BAT Voltage: 0.0V
SERVO Volt.: 0.0V
VCC Voltage: 2.5V

3V3 Voltage: 2.1V
ADC 3V3: 437
NOT touched.
ADC Touch: 383
Temperature: 21.8°
RTC: 12:00:00 10.01.2013
Temperature: 0.0°
BAT Current: 0.0mA
BAT Voltage: 0.0V
SERVO Volt.: 0.0V
VCC Voltage: 2.5V

3V3 Voltage: 2.1V
ADC 3V3: 437
NOT touched.
ADC Touch: 380
Temperature: 21.8°
RTC: 12:00:00 10.01.2013
Temperature: 0.0°
BAT Current: 0.0mA
BAT Voltage: 0.0V
SERVO Volt.: 0.0V
VCC Voltage: 2.5V

[RP6BOOT]

[READY]

was bedeuten die zwei I2C errors am anfang?

ist sonst noch was für die experten zu erkennen was falsch ist?

Dirk
24.03.2013, 15:18
Also, was man erkennen kann:

1. Es gibt einen I2C-Bus-Fehler beim Lesen des EEPROMs.

2. Die RTC DS1307Z funktioniert.

3. Der Temperatursensor TCN75A funktioniert.

4. 3V3 Voltage und Touch-Sensor zeigen wahrscheinlich Fantasie-Werte.

5. Der Strom & Spannungssensor LTC2990 scheint nicht zu funktionieren.


Zu 1: Welches EEPROM hast du drauf sitzen (Lib ist auf 24LC32-P ausgelegt!)? Sind die I2C-Adress-Jumper links neben dem EEPROM richtig gesetzt?

Zu 4: Sitzen die Jumper auf dem Wahl-Jumper-Block so wie in der Standard-Jumperstellung gezeigt (insb. 3V3-AD3 und NE5-AD1)?

Zu 5: Sitzen die I2C-Adress-Jumper des LTC2990 (direkt über dem XBUS2-Stecker) so wie in der Standard-Jumperstellung gezeigt?

Allgemein: Sind alle Jumper in der Stellung für die M32??

fabqu
24.03.2013, 15:23
Stimme da zu:

Dein 3,3V-Sensor liefert "nur" 2,3V. Bei mir ist hier auch noch ein (nicht gefundener) Fehler, meiner bringt nur etwa 1,8V. Habe das auch mit nem Multimeter nachgemessen, der Sensor funktioniert also, aber der 3,3V-Regler tuts nicht.
Deine ganzen Spannungen und Strom/Temp des U-I-T-Sensors LTC2990 stimmen auch nicht!?
Servo-Spannung: Was hast du da mit deinem Multimeter gemessen? sollten ja etwa 5V sein, wenn du den 7805er drinnen hast. Ebenso VCC, sollten mit dem 7805er (U1) 5V sein. Bat Voltage sollte ja auch irgendwas um die 8V sein, je nachdem was hier am Akku anliegt.
Bat Current ist bei mir auch 0mA, warum auch immer.
Hier stimmt auf jeden Fall etwas noch nicht.

RTC und Touch-Sensor scheinen zu tun, was sie so tun sollen. Ebenso der normale Temp-Sensor TCN75A.

Übrigens, um mal Fehler kategorisch auszuschließen:
Die software scheint zu funzen. Denn meine gesamten Sensoren zeigen alles richtig an, habe es mit nem Multimeter nachgemessen (Spannung 3,3V; Spannung VCC; Spannung Servos; auch: TCN75, NE555, PCA9685, RTC-Uhr, Beeper, EEPROM habe ich noch keines drauf).
Was bei mir auch nicht funzte (vielleicht softwareseitig??? ) war Strom und Temp des LTC2990.

Dirk
24.03.2013, 15:32
@Fabian:
Die Temp. des LTC2990 funktioniert bei mir.
Beim Strom habe ich auch immer 0mA, das ist wohl noch ein Software-Bug.
Ich bin da dran ...

fabqu
24.03.2013, 15:39
Hier mal mein normaler output:
3V3 Voltage: 1.6V
ADC 3V3: 319
NOT touched.
ADC Touch: 15
Temperature: 24.9ᄚ
RTC: 12:00:10 10.01.2013
Temperature: 22.7ᄚ
BAT Current: 0.0mA
BAT Voltage: 9.0V
SERVO Volt.: 6.0V
VCC Voltage: 5.0V

Bei mir klappt die LTC-Temp also auch ;) Auch der NE555 zeigt "Touched" an, wenn er berührt wurde.

Etwas, das heute und gestern auch schon passiert ist: nachdem ich via RobotLoader V2 via WLAN reset durchgeführt habe, startet das Programm (selbstständig???) nach etwa 5 Sekunden neu.
Passiert nicht immer, heute einmal und gestern zweimal.
... und in diesem Moment wieder, obwohl ich nichts gemacht habe!?!?!?!?!?
Liegts am Loader? Schickt der mal eben einen Start-Befehl???
EDIT: Wenn das Port geschlossen ist, passierts nicht. Zumindest bisher -> liegt wohl am Loader. Gehört hier also nicht hin, vergesst es wieder ;)

Dirk
24.03.2013, 15:51
@Fabian:
Für meine Fehlersuche zum Strom eine Bitte:
Hast du einen 100 Ohm Widerstand?

Könntest du mal deine "BAT Current" Ausgabe posten, wenn du den 100 Ohm zwischen GND und + eines Servo-Steckers tust (J_Servos-On geschlossen)?
Bei 50-60 mA müßte eigentlich ein Strom angezeigt werden ...

fabqu
24.03.2013, 16:11
Mache ich... Dauert nen Moment!

- - - Aktualisiert - - -

leider nix. 0,0mA.
Habe ihn auch mal kurz zwischne GND und VCC sowie zwischen GND und UBat gesetzt -> Widerstand (150Ohm) wurde warm, aber weiterhin 0,0mA.

inka
24.03.2013, 16:14
Also, was man erkennen kann:

Zu 1: Welches EEPROM hast du drauf sitzen (Lib ist auf 24LC32-P ausgelegt!)? Sind die I2C-Adress-Jumper links neben dem EEPROM richtig gesetzt?

Zu 4: Sitzen die Jumper auf dem Wahl-Jumper-Block so wie in der Standard-Jumperstellung gezeigt (insb. 3V3-AD3 und NE5-AD1)?

Zu 5: Sitzen die I2C-Adress-Jumper des LTC2990 (direkt über dem XBUS2-Stecker) so wie in der Standard-Jumperstellung gezeigt?

Allgemein: Sind alle Jumper in der Stellung für die M32??

1- kein EEPROM, habe jetzt die jumper aus dem block entfernt, ok?

4- 3V3 ist bei mir nicht installiert, die wahl-jumper: sitzen so wie es auf dem bild dargestellt ist (links und rechts frei, in der mitte jeweils 2 jumper obere reihe und untere reihe) - sollen sie enrfernt werden?

5- LTC2990-jumper: links zwei frei, die pins rechts sind wagerecht jeweils unten und oben verbunden

Allgemein: Jumper für die M32: wo kann ich das sehen?

Dirk
24.03.2013, 19:49
Zu 1: Wenn du kein EEPROM hast: Einfach in der Demo den Progammteil zwischen:
// EEPROM test:
... und...
// Buzzer test:
... auskommentieren oder löschen. Dann gibts die Fehlermeldung nicht mehr.
An der Lib nichts verändern.

Zu 4: Wenn du die 3V3-Spannungsversorgung nicht eingebaut hast, kann alles so bleiben. Bei der Demo bekommt man dann unter "3V3 Voltage:" keinen sinnvollen Wert angezeigt. Das was hier eine Rolle spielt, ist aber die 3V3-Spannungsmessung. Die funktioniert im Prinzip auch, wenn du die 3V3-Spannungsversorgung nicht aufgebaut hast.

Zu 5: Die I2C-Adress-Jumper des LTC2990 sind ok. Sonst gibts da nichts mehr einzustellen oder zu jumpern,- d.h. man müßte im Umkreis des LTC2990 messen, ob er hardwaremäßig richtig auf der Platine sitzt und an allen Pins Kontakt hat.

Die grundsätzliche Stellung der Jumper (für die M256) findest du hier: http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Multi_IO_Projekt_Library
Was für die M32 anders als in der Grundstellung gejumpert werden muss, steht hier: http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Multi_IO_Projekt_Library_3

fabqu
25.03.2013, 17:48
@Dirk:

Wenn ich das Programm beende (Reset), bleiben ja die Zustände auf dem Multi-IO wie sie waren (z.B. bleiben die LEDs so an, wie sie zuletzt waren, auch die Transistoren von Liniensucher-Board, Servo-Versorgung und Sharp-Versorgung bleiben alle auf ON.

Könnte man da noch eine "Shut-Down Routine" irgendwie anfügen? Er könnte die LEDs sowie Sharps, Servostrom und Liniensucher abschalten, genauso das SnakeVision. Wenn es Shut-Down-Modi für manche Sensoren (http://www.rn-wissen.de/index.php/Sensorarten) gibt (TCN75, Uhr, GPS etc) wäre das vielleicht auch schön.
Was passiert denn eigentlich genau, wenn man den Reset auslöst? Läuft er noch einmal die While zu ende? Oder bricht er einfach komplett ab? Kann man so einen "Shut down bei Reset" denn dann eigentlich realisieren?

Habe gerade noch etwas rumprobiert. Die Taster gehen auch, aber wie befürchtet funzt immer nur ein Taster!? Drücke ich zwei gleichzeitig, zeigt er nur den niedrigeren ADC-Wert an. Drückt man also T4 und irgendeinen anderen, zeigt er mir nur die 4.

Grüße

Dirk
25.03.2013, 19:33
@Fabian:
Beim Reset des RP6 bleibt die Situation auf der MultiIO weitgehend so, wie sie zuletzt war. Wenn man alles aus haben möchte, müßte man vor Programmende tatsächlich die Power Off Funktionen (für SHARPS, LFS, Servo Power) aufrufen. Dafür kann man am einfachsten eine Ausschaltfunktion in den eigenen Programmen vorsehen (z.B. durch Drücken einer der Tasten oder Berühren des Touch). Man würde dann vor dem Abschalten diese Taste einmal drücken.

Übrigens: Die Stromgeschichte (CBAT) ist wirklich ein Software-Problem. Ich muss da aber noch was messen. Z.Zt. behauptet der LTC2990, dass meine MultiIO 98,2mA zieht (ohne irgendwas angeschlossen). Das kann ich nicht glauben. Schalte ich dann noch einen 47 Ohm Widerstand an GND/VCC, wird 200,7mA angezeigt: Die Erhöhung um ca. 100mA wäre wieder ok. Wieviel zieht deine MultiIO über +UB vom RP6?

fabqu
25.03.2013, 20:32
Mein Mutlimeter ist wohl hin... zumindest misst es nur 0.0mA, uA oder A, was auch immer ich einstelle. V und Ohm lassen sich nach wie vor einwandfrei messen, aber nicht A...
Ich kann vielleicht morgen mal an der Uni messen! Sonst jemand, der das kurz testen könnte?

inka
25.03.2013, 20:43
Mein board ist schon unerwegs.....

fabqu
25.03.2013, 20:55
Dirk, vielleicht stimmts ja doch?
An Stromverbrauchern sitzen ja doch einige droben:
3,3V-Regler, zwei 5V-Regler, PWM-Modulator, Strom-Spannungssensor, LEDs, Widerstände, Temp-Sensor, Uhr, NE555, EEPROM, ... da kommt schon was zusammen.
Mich wundert eben, dass er den Mehr-Strom durch deinen Widerstand so genau wiedergibt!
Nimm doch mal einige Jumper (Uhr, 3,3V, Temp) weg und schau, ob sich was ändert.
Die uhr sollte etwa 1-2mA nehmen, Temp etwa 0,2mA

Dirk
25.03.2013, 21:30
@Fabian:
Ja, könnte gut sein,- messe ich demnächst noch.

Im RN-Wissen ist jetzt auch die neue Linienfolger- und Bumper-Board Library online.
Sie ist noch V0.9, weil der Teil für die Radar-Sensoren fehlt: http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Linienfolger_und_Bumper_Board_Library
Die beiden Demos sind geändert, damit sie zur neuen Lib passen.

fabqu
25.03.2013, 22:29
Das ging ja mal zackig :D
Danke dir!

Dirk
26.03.2013, 21:43
Leute,

jetzt ist eine neue Version der M256 MultiIO Lib (v2.1) und der M32 MultiIO Lib (v1.1) online.

Die einzige Änderung ist ein Fix des Strom-Mess-Bugs mit dem LTC2990: Der zeigte immer 0.0mA an.
Jetzt wird "richtig" gemessen, aber man muss für die eigene Platine noch bestimmte Werte anpassen.

Der einfachste Weg ist:
- Im Configuration Header (RP6M256_MultiIO.h bzw. RP6Control_MultiIO.h) muss die Definition "C_OFFSET" einmalig angepaßt werden.

Dazu geht man so vor:
1. Bei laufender Demo 1 wird mit einem Multimeter der Strom gemessen, den die MultiIO verbraucht. Bei Versorgung der MultiIO aus +UB des RP6 kann man diesen Strom z.B. am Jumper J_U-RP6 messen: Man schließt das Messgerät an die beiden Pins dieses Jumper-Steckers an.
2. Man vergleicht den vom externen Messgerät gemessenen Strom mit der Anzeige von CBAT im Wifi-Terminal (=LTC2990-Wert): Die Differenz zwischen beiden Angaben wird dann als C_OFFSET festgelegt.
Beispiel 1: LTC2990: 70mA, Messgerät: 50mA ==> C_OFFSET = -20
Beispiel 2: LTC2990: 60mA, Messgerät: 80mA ==> C_OFFSET = 20
3. Indem man noch weitere Verbraucher (Servos, Bumper Board, LFS Board ...) anschliesst, kann man die Stromwerte überprüfen.

Der etwas aufwändigere Weg:
- Es gibt im Configuration Header noch 2 weitere Parameter (SHUNT_R und C_ADJUST), die eine Festlegung über den Shunt-Widerstand R10 und die Spannungsteiler an R10 (R2/R12, R9/R3) erlauben. Die Parameter sollte man aber nur ändern, wenn man weiss, was man macht und wenn man die Werte der Widerstände auch sehr genau messen kann.

radbruch
27.03.2013, 00:06
Hallo


...die Spannungsteiler an R10 (R2/R12, R9/R3)...wenn man die Werte der Widerstände auch sehr genau messen kann.Widerstandsmessungen mit dem Multimeter sind ja recht ungenau. Alternativ könnte man die Gesamtspannung über beiden Widerständen eines Spannungsteiler und die jeweiligen Teilspannungen messen. So bekommt man zwar auch keine besseren Widerstandswerte, aber das recht genaue Teilungsverhältniss.

Gruß

mic

inka
27.03.2013, 16:57
hallo Dirk,

habe soeben festgestellt, dass ich - wenn der kompiliervorgang mit der neuen "RP6Control_MultiIO.h" ohne fehlermeldungen ablaufen soll - nicht nur die "RP6Control_MultiIO.h" , sondern auch die "RP6Control_MultiIOLib.c" neu kopieren und abspeichern muss. Ist es so korrekt, oder habe ich etwas falsch gemacht?

Dirk
27.03.2013, 19:51
@radbruch:
Ja, danke für den Hinweis. Theoretisch könnte man das Teilungs-Verhältnis aus den beiden Spannungsteilern dann in C_ADJUST einbringen.
Wir haben es da ja mit sehr geringen Spannungen am Shunt zu tun: 5,1mV z.B. bei 100mA.
Da braucht es einiges an Abstimmung für die eigene Platine, wenn man es genau nehmen will.
Ich habe die Spannungsteiler zumindest mit 1%-Widerständen gemacht.

@inka:
Ja, die "RP6Control_MultiIOLib.c" hat sich auch verändert. Gleich geblieben ist nur der Header ("RP6Control_MultiIOLib.h").

Dirk
28.03.2013, 20:45
Leute,

jetzt ist eine neue Version der M256 MultiIO Lib (v2.2), der M32 MultiIO Lib (v1.2) und der M256 LFSBumper Lib (v0.92) online.

Die Änderung in allen drei Libs ist eine neue Funktion zum "Herunterfahren" der MultiIO ("Shutdown-Mode") bzw. der LFS- und Bumper-Platine.

Grund für die Veränderung:
Nach einem Reset des angeschlossenen Microcontrollers bleibt die MultiIO im zuletzt aktiven Zustand. Das heißt, dass evtl. noch LEDs an sind oder Servos auf der letzten Position gehalten werden.
Auch evtl. angeschlossene Bumper- und LFS-Platinen verbrauchen viel Strom, wenn sie nicht mehr angesteuert werden.

Deshalb gibt es in den 3 Libs jetzt jeweils eine "Shutdown-Funktion". Mit der kann man alle Funktionen, bei denen das möglich ist, ausschalten bzw. auf minimalen Stromverbrauch zurücksetzen.

Mit den MultiIO-Demos 1 für die M256 und M32 kann man die Shutdown-Funktion jetzt testen:
Drückt man die Taste 4 auf der MultiIO und bestätigt dies noch einmal durch Drücken der Taste 1, wird die MultiIO in den "Shutdown-Modus" versetzt und man kann danach ein Reset der M256 oder M32 durchführen.

TrainMen
29.03.2013, 12:49
Hallo,
ich habe eben die ganzen .c und .h für die Multi IO kopiert. Leider in Englisch bis auf die M 128 (die hab ich natürlich nicht), wird also wieder etwas länger dauern bis ich alles verstehe. Trotzdem mal ein dickes Danke an Dirk.
mfG Berndt

Dirk
29.03.2013, 14:00
@TrainMen:

Leider in Englisch bis auf die M 128 (die hab ich natürlich nicht), wird also wieder etwas länger dauern bis ich alles verstehe.
Wenn du irgendwo hängst: Frag einfach hier, wenn etwas unklar ist ...

radbruch
29.03.2013, 16:44
Ich wollte es ja nicht ansprechen:

https://www.roboternetz.de/community/threads/47088-RP6Control-M32-Impulsl%C3%A4ngen-Messger%C3%A4t?p=453235&viewfull=1#post453235

("Leider in Englisch" TrainMen? *lol)

fabqu
29.03.2013, 17:40
Ihr findet jetzt auch die Software von Dirk im Download-Bereich. Im .zip-File ist alles drin, so spart man sich auch etwas copy-paste-Arbeit!!

Nochmals ein :!: Danke \\:D/ an Dirk!

Dirk
29.03.2013, 22:51
@radbruch:


Ich wollte es ja nicht ansprechen: https://www.roboternetz.de/community/...l=1#post453235 (https://www.roboternetz.de/community/...l=1#post453235)
Nett, dass du es trotzdem gemacht hast. :Haue

inka
30.03.2013, 15:09
hallo,

ich habe jetzt die platine vom fabqu bekommen, angeschlossen, das ergebnis verstehe ich in zweierlei punkten nicht:


Terminal cleared!

[RP6BOOT]

[READY]


RP6Control Multi IO Selftest 1!

Writing 128 to EEPROM address 5:
Done!

Reading EEPROM address 5:

I2C ERROR --> TWI STATE IS: 0x20

I2C ERROR --> TWI STATE IS: 0x48
Done!
EEPROM address 5 content: 17

3V3 Voltage: 2.6V
ADC 3V3: 532
TOUCHED!!!
ADC Touch: 537
Temperature: 23.4°
RTC: 12:00:00 10.01.2013
Temperature: 20.8°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.3V
ADC 3V3: 472
NOT touched.
ADC Touch: 423
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 21.8°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.2V
ADC 3V3: 448
NOT touched.
ADC Touch: 392
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 22.1°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.1V
ADC 3V3: 439
NOT touched.
ADC Touch: 382
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 23.7°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.1V
ADC 3V3: 437
NOT touched.
ADC Touch: 381
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 23.0°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.1V
ADC 3V3: 436
NOT touched.
ADC Touch: 380
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 21.2°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.1V
ADC 3V3: 435
NOT touched.
ADC Touch: 379
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 22.6°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.1V
ADC 3V3: 435
NOT touched.
ADC Touch: 379
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 22.8°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.1V
ADC 3V3: 435
NOT touched.
ADC Touch: 379
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 21.3°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.1V
ADC 3V3: 435
NOT touched.
ADC Touch: 379
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 21.8°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.1V
ADC 3V3: 436
NOT touched.
ADC Touch: 380
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 22.1°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.1V
ADC 3V3: 435
NOT touched.
ADC Touch: 379
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 21.4°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.1V
ADC 3V3: 435
NOT touched.
ADC Touch: 379
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 22.1°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.1V
ADC 3V3: 435
NOT touched.
ADC Touch: 379
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 23.4°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.1V
ADC 3V3: 435
NOT touched.
ADC Touch: 379
Temperature: 23.3°
RTC: 12:00:00 10.01.2013
Temperature: 22.6°
BAT Current: 0.0mA
BAT Voltage: 7.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 2.1V
ADC 3V3: 435
NOT touched.
ADC Touch: 379
Temperature: 23.3°
RTC: 12:00:00 10.01.2013

[RP6BOOT]

[READY]

das verhalten der 3.3 V - sinkt von 2,6 auch 2,1V

das nichtreagieren des berührungssensors, auch beim berühren nicht (antennen wie auch beuteil direkt reagieren nicht)


Fabqu hat gemeint ich soll den ausdruck ins forum stellen, evtl. ein softwareproblem?

fabqu
30.03.2013, 15:26
Hast du denn schon gemessen, ob der Output des NE555 nach Berühren schaltet?
Dort (messe z.B. am Jumper, wo "NE5" steht) sollten normalerweise 0V anliegen, und nach Berühren der Antenne für einige Sekunden knappe 5V.

Thorben W
30.03.2013, 15:32
Hallo bei mir ist die Ausgabe so:
3V3 Voltage: 1.5V
ADC 3V3: 300
NOT touched.
ADC Touch: 300
TNC75_Temperature: 26.4°
Temperature: 0.0°
BAT Current: 0.0mA
BAT Voltage: 0.0V
SERVO Volt.: 0.0V
VCC Voltage: 2.5V

Mich wundert das der LTC 2990 nichts anzeigt oder wie wird die Spannung VCC Voltage gemessen?
Wenn ich das DCF77 Modul (Conrad 641138 ) anschließe bekomme ich bei dem Beispielprogramm von Dirk keine Werte.
Muss ich noch einen Pull-up anschließen an Port 3?

inka
30.03.2013, 15:39
beim messen zwischen GND (kompass-pin-leiste) und dem NE5-pin, so wie du es beschreibst, 0V / 4.6V

fabqu
30.03.2013, 15:54
@Inka. wie mit eMail besprochen.

@Thorben:
DU hast scheinbar dasselbe Problem wie Inka mal hatte, dein LTC macht gar nix. Bei Inka war hier einfach nur ein einziger Pin (der GND-Pin) ohne Kontakt zum Board, könnte mein Fehler gewesen sein, könnte durch den Transport bei Minusgraden passiert sein, wenns vorher schon nicht so super war.
Am besten mal mit dem Lötkolben vorsichtig jedes Beinchen einzeln kurz andrücken (vorher natürlich Batterie abziehen. ohne weiteren Lötzinn, da sonst die Gefahr von Kurzschlüssen groß wird). Hast du ein Multimeter? Dann bitte danach testen, ob kurzschlüsse zwischen den Beinchen entstanden sind.
Dann nochmal alles anstecken und sehen, was nun für Werte kommen.

Thorben W
30.03.2013, 16:28
@fabqu:
Danke Problem ist behoben
Den Spannungsteiler kann ich jetzt einlöten?
Thorben

fabqu
30.03.2013, 16:34
Ja! Welche Widerstände nimmst du? 36kOhm an den beiden Beinchen des Reglers und 22kOhm anstelle des C12 funktionieren gut.

Thorben W
30.03.2013, 16:37
Dann diese beiden!
Thorben

inka
30.03.2013, 16:46
diese beiden widerstände habe untereinander kontakt an einem der beinchen des reglers, ja? Ich frage wegen dem nachlöten, da kann ich also etwas lötzinn hinzufügen?

fabqu
30.03.2013, 16:50
Ja, dort darf ein Kontakt sein. Muss nicht, darf!

Dirk
30.03.2013, 17:39
@Thorben W:
Dein LTC2990 scheint nicht ansprechbar. TCN75A funktioniert.
3V3 und Touch haben Fantasiewerte (Kabel an ADC-Mxxx angeschlossen? Jumper wie im RN-Artikel gesetzt?)

Wenn ich das DCF77 Modul (Conrad 641138 ) anschließe bekomme ich bei dem Beispielprogramm von Dirk keine Werte.
Muss ich noch einen Pull-up anschließen an Port 3?
Ja, z.B. 4,7 kOhm ODER den internen Pullup des uCs einschalten.

@inka:
LTC2990 funktioniert, Strom CBAT wird aber nicht angezeigt (alte Lib Version benutzt?).
3V3 und Touch haben Fantasiewerte (Kabel an ADC-Mxxx angeschlossen? Jumper wie im RN-Artikel gesetzt?)
RTC ist über I2C zwar ansprechbar, aber LÄUFT NICHT (Quarz richtig eingelötet? Richtiger Uhrenquarz?)

Thorben W
30.03.2013, 18:03
Hallo jetzt sieht die Aussage so aus:
3V3 Voltage: 3.3V
ADC 3V3: 681
TOUCHED!!!
ADC Touch: 1020
TNC75_Temperature: 27.6°
Temperature: 23.5°
BAT Current: 123.4mA
BAT Voltage: 7.2V
SERVO Volt.: 2.5V
VCC Voltage: 5.0V

Nur der Touch zeigt immer Toutched!!! an.

Thorben

Dirk
30.03.2013, 18:17
@Thorben W:
Das mit dem Dauer-Touch ist nicht ok.
Sieh dir nochmal die Umgebung des NE555 an. Beide Widerstände 1MOhm ok? C31 und beide Transistoren ok? NE555 richtig eingelötet? Was passiert, wenn du "Ant" direkt auf GND legst (dann müßte "NOT Touched" angezeigt werden)?

Die Servo-Spannung ist auch zu niedrig, wenn Q4 durchgeschaltet (Funktion: setServoPower(1) ) ist oder J_Servos-On geschlossen ist. Da sollten dann mind. 5V angezeigt werden.

fabqu
30.03.2013, 18:23
@Thorben: Hast du denn die Servo-Stromversorgung ausgebaut?
Dann, wie Dirk sagte, sollten es mehr als 2,5V sein. Kontrolliere bitte, ob hier alle Teile passen, vor allem R22 und R32 (liegen direkt neben den Pins, an die man die Servos anschließen kann).
Zum Touchsensor:
Ist der NE555 an den ADC angeschlossen? Also die Jumper richtig gesetzt?

Thorben W
30.03.2013, 18:53
Bei der Servo-Stromversorgung ist ein falsches Bauteil eingebaut (LT1084CT(wie in der ersten Liste angegeben!)).
Jumper sind richtig gesetzt.
Thorben

inka
30.03.2013, 20:08
@inka:
LTC2990 funktioniert, Strom CBAT wird aber nicht angezeigt (alte Lib Version benutzt?).
3V3 und Touch haben Fantasiewerte (Kabel an ADC-Mxxx angeschlossen? Jumper wie im RN-Artikel gesetzt?)
RTC ist über I2C zwar ansprechbar, aber LÄUFT NICHT (Quarz richtig eingelötet? Richtiger Uhrenquarz?)

- habe die RP6Control_MultiIOLib.c rev 1.1, ohne anpassung der strommesung (kommt noch) verwendet, externer accu wird nicht verwendet, alles läuft über den accu des RP6 - soll dann CBAT trotzdem angezeigt werden?
- kabel an der ADC-Mxxx und am ADC-M32 inzwischen angeschlossen, werte noch nicht aufgenommen, jumper überprüft
- quarz bei RTC fehlt (kommt noch)

frage:
die servoansteuerung/servobetrieb funktioniert mit SERVO I mit dem selbsttest der I/O (servo ist an dem "oberem" block der 24 pin angeschlossen). Wie mache ich das, damit es auch über den wannenstecker "ServosM32 und dem danebenliegendem pinblock läuft? Muss diesen wannenstecker mit dem I/O wannenstecker der M32 verbinden. Muss ich außerdem an der "RP6Control_MultiIO.c" was änderen, oder irgendwo einen jumper setzen?

Dirk
30.03.2013, 20:22
@Thorben W:
Ok, das erklärt die 2,5V!

@inka:

habe die RP6Control_MultiIOLib.c rev 1.1, ohne anpassung der strommesung (kommt noch) verwendet
Die ist nicht mehr aktuell! Nimm die Version 1.2, da ist der Strom-Bug gefixt.


alles läuft über den accu des RP6 (http://www.rn-wissen.de/index.php/RP6) - soll dann CBAT trotzdem angezeigt werden?
Ja, da müßte der Strom auch angezeigt werden. CBAT wird angezeigt egal von wo der Strom für die MultiIO kommt.


quarz bei RTC fehlt (kommt noch)
Ok, das erklärt, warum die RTC nicht läuft.


Wie mache ich das, damit es auch über den wannenstecker "ServosM32 und dem danebenliegendem pinblock läuft? Muss diesen wannenstecker mit dem I/O wannenstecker der M32 verbinden. Muss ich außerdem an der "RP6Control_MultiIO.c" was änderen, oder irgendwo einen jumper setzen?
Ja, der ServosM32 Wannenstecker muss mit dem I/O der M32 verbunden werden.
Die Servos werden dann an den 3x8 Pinblock daneben angeschlossen.
Software: Die M32 Servo Lib für 8 Servos.
An der RP6Control_MultiIO.c must du nichts ändern. Jumper: Nur J_Servos_On aufstecken.

fabqu
31.03.2013, 01:03
@Thorben W:
Ich kann, wenn du willst, morgen mal nachsehen, ob du diesen Spannungsregler auch verwenden kannst. Da muss man noch zwei Widerstände einbauen, um auf die 5V zu können kommen.
Grüße

inka
31.03.2013, 10:24
hallo,

Beispiel 1: LTC2990: 70mA, Messgerät: 50mA ==> C_OFFSET = -20
Beispiel 2: LTC2990: 60mA, Messgerät: 80mA ==> C_OFFSET = 20

bei mir wird der strom im terminal mit "-150mA" angezeigt, auf dem messgerät sind es 43mA. Ist die berechnung dann so:

43mA -(-150mA) = 107?

Dirk
31.03.2013, 12:12
Nimm als C_OFFSET 193!

Thorben W
31.03.2013, 12:23
@fabqu
Wäre nett wenn du für mich nachguckst.
Thorben

inka
31.03.2013, 12:42
klar, bin ich doof!

Dirk
31.03.2013, 17:00
@inka:

auf dem messgerät sind es 43mA.
Interessehalber: Sind es 43mA im Shutdown-Modus oder bei Demo 1?

- - - Aktualisiert - - -

Leute,

noch ne Frage:

Ich muss ich mich entscheiden, wo ich mich zuerst dran mache: An die Orientierungs-Lib oder die Wetter-Lib.

Da ich nicht weiß. welche Zusatzsensoren zur MultiIO (GPS, 2D-Kompass, 9D-IMU für die Orientierungs-Lib ODER/UND Helligkeits-, Temperatur-, Feuchte-, Luftdrucksensor für die Wetter-Lib) ihr gekauft habt oder wo euer Hauptinteresse hängt, mache ich zwei kurze "Umfragen":

1. Wer ist dafür, dass ich mit der Orientierungs-Lib anfange und wer, dass ich mit der Wetter-Lib anfange?

2. Für die Bumper-Platine gibt es noch die Option der Radar-Sensoren. Der Teil ist auch noch nicht in der LFSBumperLib fertig. Wer hat die gekauft bzw. starkes Interesse, damit etwas zu machen? Soll ich mich auch da dran machen?

Eure Antworten wären mir eine Hilfe, damit ich da dran arbeite, wo euer Hauptinteresse ist.

inka
31.03.2013, 18:32
hallo Dirk,
die 43mA messe ich bei demo...

1. ich wäre für die orientierungslib (2D-Kompass)
2. radarsensoren habe ich nicht...

gruss

georg

radbruch
31.03.2013, 18:40
Hallo Dirk

Echt beeindruckend wie die dich da reinhängst. Vielen Dank dafür.

Da ich GPS, 2D-Kompass und Ultraschall bestücken werde, wäre eine Orientierungs-Lib auch meine erste Wahl.

Gruß

mic

fabqu
31.03.2013, 23:15
Hi,
ja, der Dirk der ist da wirklich fix bei der Sache!!!

1. Bin auch für die Orientierung, da sie glaube ich spannender ist. Helligkeit und temp gabs ja schon ;)
2. Meines Wissens nach hat die radarsensoren niemand und man braucht ja auch erst mal ne verstärkerschaltung dafür. Daher kannst du (meiner Meinung nach) erst mal drauf verzichten.

Danke dir!
@Thorben: hast ne pn

Dirk
01.04.2013, 11:02
Ok, das ist eindeutig:

1. Orientierungs-Lib: Yes
2. Radar-Funktionen: No

Dann kanns ja losgehen ... :pray: :pray: :pray:

inka
01.04.2013, 11:56
hi,

egal ob hardware oder software, die betreuung die Dirk und Fabqu hier leisten ist hervorragend...

vielen dank auch von mir...

- - - Aktualisiert - - -

im shutdown mode (T4 und anschließend T1 gedrückt) messe ich 30mA

TrainMen
01.04.2013, 12:02
hi,
schliesse mich der Ausssage von inka an und obwohl schon entschieden wäre ich auch für die Orientierung.

gruß Trainmen

fabqu
01.04.2013, 15:23
Danke euch!
Freut mich echt, wenns gut ankommt!!! Und ich danke auch noch mal Dirk, ohne den das Projekt niemals so umfangreich hätte werden können.

Dirk
01.04.2013, 23:49
@Thorben W:

Wenn ich das DCF77 Modul (Conrad 641138 ) anschließe bekomme ich bei dem Beispielprogramm von Dirk keine Werte.
Ist schon ne Weile her, aber läuft DFC77 inzwischen bei dir?

Thorben W
02.04.2013, 19:32
Danke für die Nachfrage aber leider noch nicht.
Thorben

Dirk
02.04.2013, 20:00
@Thorben:
Du hast den Abschnitt im MultiIO-RN-Wissen-Artikel dazu aber gesehen: http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#DCF77-Library
???

Es muss also eine Änderung in der RP6M256_DCFLib.c gemacht werden. Die Lib schaltet auch den internen Pullup-Widerstand am DCF77-Eingangspin ein, so dass die Sache dann nach dem Neukompilieren eigentlich funktionieren müßte.

Thorben W
02.04.2013, 20:09
@Dirk
-
Es muss also eine Änderung in der RP6M256_DCFLib.c gemacht werden. Habe ich

-Muss ich den Pin 3 ("normal") oder 4 ("invertiert") nehmen?
Thorben

Dirk
02.04.2013, 20:18
Klemme 4!

Wenn es dann nicht klappt:
1. Abstand des DCF77-Moduls vom RP6/MultiIO mind. 20 cm?
2. Abstand DCF77-Modul vom PC/Laptop mind. 50 cm?
3. Keine Telefone, Handys, Motoren, Neonröhren ... in der Nähe?
4. Freie Sicht nach Frankfurt (z.B. am Fenster)?
5. Ferrit-Antenne des DCF77-Moduls horizontal und QUER zur Richtung nach Frankfurt angebracht?
6. Mind. 5 Minuten gewartet?

Alle Fragen sollten mit Ja beantwortet werden. :)

Thorben W
02.04.2013, 21:51
Jetzt klappt es!
Klemme 4: erfüllt
1.;2.;3.;5.;6. erfüllt
Bin ca. 3m vom RP6 entfernt, von nächsten Computer 6m :)
Thorben

Dirk
02.04.2013, 22:12
Na supi! =D>

inka
04.04.2013, 15:21
in der RP6Control_MultiIO.c gibt es die möglichkeit die uhrzeit zu setzen. Gibt es ein verfahren mit dem man die uhr einigermassen genau einstellen kann? jetzt habe ich es so probiert, dass ich eine zeit per edit eingesetzt habe, kompiliert, upgeloaded und wenn meine schreibtisch DCF uhr diese zeit anzeigte, dann das programm gestartet habe. Sehr genau ist diese methode aber nicht :-(

radbruch
04.04.2013, 16:32
wenn meine schreibtisch DCF uhr diese zeit anzeigte das programm gestartet habe.Vor dem Setzen der Uhrzeit noch eine Taste abwarten?

inka
04.04.2013, 17:11
ich habe das jetzt so gelöst, dass ich die RTC um 10sec vorgestellt habe, damit geht sie jetzt um ca 1 sec anders als die schreibtisch-DCF. Ich weiss nicht inwieweit es übertragbar ist, weil ich in der "RP6Control_MultiIO.c" den wert bei der ersten abfrage der stopwatch von 1000 auf 3000 geändert habe...

Dirk
04.04.2013, 20:26
@inka:

...wenn meine schreibtisch DCF uhr diese zeit anzeigte, dann das programm gestartet habe. Sehr genau ist diese methode aber nicht
Stimmt!
Am genialsten ist die Lösung mit einem eigenen DCF77-Modul an der MultiIO: Von ihr könnte man die DCF-Zeit -wie radbruch geschrieben hat- auf Knopfdruck oder z.B. automatisch in die RTC übernehmen.

- - - Aktualisiert - - -

Leute,

jetzt ist die Orientierungs-Library (http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Library_f.C3.BCr_die_Orientierung_im_Rau m) in der Version 0.8 online.
Leider bin ich zur MinIMU-9 v2 noch nicht gekommen, so dass erst einmal nur das GPS-Modul und der 2D-Kompass (HDMM01) angesteuert werden können.

Viel Spaß!

inka
05.04.2013, 18:52
jetzt ist die Orientierungs-Library (http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Library_f.C3.BCr_die_Orientierung_im_Rau m) in der Version 0.8 online.

im moment kann ich weder die bumper-, linienfolger- oder die orientierungslib testen. Für alle fehlen mir noch bauteile für die verbindung der I/O mit den zusatzplatinen und leider habe ich die version der orientierungslib für die M32 nicht gefunden :-(...
in arbeit? wäre toll...

Dirk
05.04.2013, 21:10
@inka:
Für alle fehlen mir noch bauteile für die verbindung der I/O mit den zusatzplatinen ... Dann habe ich ja noch Zeit! Puh! ;) Die Orientierungs-Lib für die M32 (V0.8, noch ohne MinIMU-9 Funktionen) hätte ich evtl. zum Testen für dich ... du kriegst eine Mail ...

inka
06.04.2013, 11:59
@dirk:
so wie es aussieht hast du noch zeit (die mail ist aber schon angekommen), die steckerkörper von DES sind immerhin heute gekommen, die kontakte (BUST-KONTAKT) werden nachgeliefert :-(

@fabqu:
hast du evtl. noch 50 stück, die du für eine/zwei wochen entbehren kannst? Wenn ja, bitte in einen umschlag stecken und wech...:Strahl

fabqu
06.04.2013, 18:19
Hi!
Habe Dirks neue Lib gerade in den Download-Bereich gestellt.

@Inka: Habe nicht mehr ganz so viele. Reichen dir auch 30stk? Könnte ich am Montag abschicken.

inka
06.04.2013, 20:22
nee Fabqu,

lass mal, ich habe noch 8 stück zuhause zusammengesucht, sodass ich den kompass anschliessen konnte. Der geht auch (2D) - damit bin ich die nächsten tage ausgelastet...

TrainMen
10.04.2013, 12:14
Hi,
So ich habe alles zusammen bis auf den Schalter S1. Die Kontakte habe ich erst einmal überbrückt.
Jetzt mein erster Test:

RP6Control Multi IO Selftest 1!
Writing 128 to EEPROM address 5:
Done!
Reading EEPROM address 5:
Done!
EEPROM address 5 content: 128
3V3 Voltage: 3.1V
ADC 3V3: 627
TOUCHED!!!
ADC Touch: 841
Temperature: 25.3°
RTC: 00:00:00 01.01.2000
Temperature: 24.9°
BAT Current: -239.9mA
BAT Voltage: 16.0V
SERVO Volt.: 5.4V
VCC Voltage: 4.9V

Mir ist da einiges unklar,
- Touched (Kontakt wird nicht berührt)
- Bat Current (Negative Werte ?)
- Bat Voltage (16V ? , an P_UB hängt ein 7,2V Akku)

was sagt ihr zu der Ausgabe?
in welchen Bereich sollte ich mit den Poti die Spannung ändern können ? Bei mir sind es nur 0,6 V. Ich hab ihn jetzt auf 5,4 stehen lassen.

gruss Trainmen

wenn ich an den Touched Pin direkt GND anlege dann kommt Not Touched, hier steht auch das der Jumper gesetzt werden muss. Ist der Pin nur mit M256 auslesbar ?

Korrektur: Akku geladen

3V3 Voltage: 3.1V
ADC 3V3: 630
TOUCHED!!!
ADC Touch: 845
Temperature: 24.9°
RTC: 00:00:00 01.01.2000
Temperature: 24.1°
BAT Current: -343.5mA
BAT Voltage: 16.0V
SERVO Volt.: 5.2V
VCC Voltage: 5.0V


Die Servo Spannung kann ich gut wählen 4,9 - 7,4 V
Aber BAT Current ist ja nun noch höher

Dirk
10.04.2013, 16:04
@Trainmen: Glückwunsch zur fertigen Platine. Frage: Du steuerst mit der M32? Wenn ja, hast du die Jumper auf die M32 angepaßt? Siehe: http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Multi_IO_Projekt_Library_3 ? EEPROM, 3V3, Temperatur sind ok. LTC2990 scheint auch ok, aber die Strom- und Spannungsmessung für BAT stimmt nicht (evtl. falsche Messwiderstände?). RTC ist ansprechbar, aber läuft nicht (Quarz richtig dran?). Touch: Müßte auch auf Nicht-berührt runter gehen und dann einen ADC-Wert von ca. 15 zeigen, bei Berührung ca. 1020.

TrainMen
10.04.2013, 17:35
@Dirk
Naja ich freu mich erst so richtig wenn alles OK ist ,trotzdem Danke.
Jumper sind auf M32 angepasst, Quarz ist eingelötet. Kann ich sonst noch irgendwo suchen ? was nachmessen ? optisch sieht alles gut aus
Zu den Messwiderständen müsste fabqu helfen da sie von ihm kommen.
gruss Trainmen

Nachtrag
Wenn ich den Jumper von J_3 on abziehe funktioniert Touching. Sonst habe ich 4,62V auf NE5

Dirk
10.04.2013, 21:01
@TrainMen:
1. RTC ->
Müßte mit Uhrenquarz 32768 kHz (12,5pF) funktionieren. Wenn die Sekunden nicht weiterzählen, läuft der DS1307 nicht.
Läßt sich ein neues Datum/Uhrzeit reinladen und zeigt er das dann an?
Wenn ja: Da er auf die I2C-Anfrage reagiert, gibt es wohl ein Problem in der Quarzumgebung. Dort mal suchen.
Wenn nein: Alle Pins des DS1307 genau ansehen! Kontakt? Evtl. mit dem Durchgangsprüfer die Verbindung zwischen jedem Pin und einem damit verbundenen Bauteil prüfen. J_RTC aufgesteckt?

2. Messwiderstände:
Schau mal mit Lupe nach, ob die aufgedruckten Werte der Widerstände R2, 3, 9, 10, 12, 13, 14 ok sind!

3. Touch:
Mir fällt es schwer, einen Zusammenhang zwischen J_3On und einem fixen Pegel von 4,62V an NE5 herzustellen.
Ich würde mir noch mal das Umfeld vom NE555 auf Lötbrücken ansehen: R58, 59, C31, 14, 21 und Q13, 14 auf der Unterseite.

fabqu
10.04.2013, 23:30
Hi Trainmen,

1. Da deine Uhr ja erst mal tut, was sie tut (kommunizieren) scheint es an der Verbindung Uhr <-> Quarz zu liegen.
So sollten die Pins verbunden sein:
25095
Prüfe das. Vielleicht sind die beiden Beinchen nicht richtig kontaktiert (mal kurz und vorsichtig mit dem Lötkolben drauftupfen) oder der Quarz. Auf Kurzschlüsse prüfen.

2. Vielleicht ist hier einer deiner Messwiderstände nicht gut kontaktiert. Einfach - vorsichtig - auf deren Lötpad mal kur mit der Lötkolbenspitze tupfen. Da es ja VCC und Servospannung richtig anzeigt, und ich mal den Strom außer acht lasse (könnte auch an den Variablen liegen, die DIrk hier schon mal vorgestellt hat) brauchst du erst mal nur R14 (10kOhm) und R13 (22kOhm) beachten.

3. Touch: Habe ich grade noch nicht ganz raus. Wenn du den Jumper für die 3,3V-Versorgung abziehst, geht der Sensor? Das heißt 0V ohne touch, etwa 5V für einige Sekunden nach der Berührung? Ziehe mal bitte den ADC-Wannenstecker ab und messe direkt auf Pin 1 der Wannenbuchse gegen GND. Hier sollten wieder 0V ohne, 5V mit Touch anliegen. Mit und ohne dem 3,3V-on-Jumper.

Grüße

TrainMen
11.04.2013, 04:16
Hi,
zu 1. Die Kontakte der Uhr habe ich nachgelötet (getupft) , Quarz ist nicht verdreht oder hat sichtbaren Kurzschluss und auch noch mal angetupft.
Ergebnis: unverändert

zu 2. R14 (103) und R13 (2202) kurz angetupft.
Ergebnis: unverändert

zu 3. genau, wenn ich den J3on abziehe kommt nach ein paar Sekunden Not Touched. 0V ohne Touch, 4,45V mit Touch.
Gemessen ohne ADC Stecker an Pin1 der Wannenbuchse ohne Jumper = 0V ohne Touch, 4,45V mit Touch.
Gemessen ohne ADC Stecker an Pin1 der Wannenbuchse mit Jumper J3on = 4,45V, ohne Reaktion auf den Touch.

Ich finde hier auch mit Lupe keinen Übeltäter sprich Lötbrücken oder so.
Ich bin am verzweifeln.
gruss Trainmen

zu 3. Nachtrag1 um 4:53 Uhr
nachdem ich auch noch mal den NE555 und die Umgebung angetupft habe, funktioniert das Touching jetzt mit Jumper J3_on.

zu 1. Nachtrag2 um 6:08 Uhr
nun habe ich noch mal den DS 1307 an allen Pins nachgelötet und auch C38
und die Uhr läuft. Beweislog.

3V3 Voltage: 3.1V
ADC 3V3: 629
NOT touched.
ADC Touch: 0
Temperature: 25.4°
RTC: 06:03:08 11.04.2013
Temperature: 24.8°
BAT Current: -337.4mA
BAT Voltage: 16.0V
SERVO Volt.: 5.2V
VCC Voltage: 5.0V

jetzt noch das Problem mit der Spannung, aber
ich stelle fest ich war noch garnicht im Bett.

etwas ruhiger und glücklicher
Trainmen

fabqu
11.04.2013, 11:27
Oha! Harte Nachtschicht.
Das mit dem Jumper 3Von macht mich immer noch kirre. Aber immerhin funzt es.

Bat Voltage: Kannst du mal nachsehen, welche Codes auf dem Widerständen R13 und R14 sind? es sollten 103 (10 kOhm) und 2202 (22 kOhm) sein.

inka
11.04.2013, 13:03
vo genau liegt der jumper J3VON?

TrainMen
11.04.2013, 13:05
hatte ich oben zu Punkt 2 schon geschrieben. Hier noch mal R13 (2202) R14 (103) scheinen ja die richtigen zu sein.
gruß Trainmen

@inka
an der xBus Seite unterhalb der CNY Anschlüsse.

fabqu
11.04.2013, 13:16
@Inka: Hab ich blöd geschrieben. Ist der Jumper J_3On, also der, der die 3,3V-Versorgung aktiviert.

@Trainmen: Ausgeschlafen? Die beiden Widerstände zu messen wird nicht viel bringen im eingebauten Zustand. Ein Kurzschluss an den Widerständen ist eigentlich auch auszuschließen, da sonst VBat auf GND liegen würde.
Kannst du mal die Beinchen des LTC2990 auf Kurzschlüsse testen? Der Messpin für die Bat-Spannung ist der Pin 3 (mittlerer links) . An Pin 2 (einer weiter unten) liegt der Shunt, an Pin 4 liegt die Servospannung.
Kannst du mal ein Foto dieses Platinenecks posten? Keine Ahnung, ob das hilft, aber ist ein Versuch. Oberseite der Platine wäre wichtiger, aber Unterseite wenn möglich auch.

Grüße

TrainMen
11.04.2013, 13:58
Hi,
Ausgeschlafen! in meinem Alter braucht man nicht mehr soviel davon.
Hmm ja, wenn ich genau wüsste wo der ist. Ist es auf der Rückseite der neben C41 ?
Ich teste heute Abend, mit den Bilder wird es wenig bringen. Meine Knipse ist sehr schlecht bei Nahaufnahmen, da wird es nur noch unscharf. Ich werde es probieren.
gruss Trainmen

fabqu
11.04.2013, 14:48
Ja, auf der Rückseite der einzige ic. Übrigens musst du dann die richtungsangaben von mir umdrehen... Hatte das falsch rum auf meinem Bildschirm.

inka
11.04.2013, 14:54
@fabqu: nachdem ich jetzt mehr oder weniger "zufällig" erfahren habe, dass ich die 3V per jumper einschalten muss, werden nun auch keine 2.4V, sondern 3.1V gemessen



3V3 Voltage: 3.1V
ADC 3V3: 628
TOUCHED!!!
ADC Touch: 935
Temperature: 23.0°
RTC: 14:46:12 11.04.2013
Temperature: 21.9°
BAT Current: 12.5mA
BAT Voltage: 8.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

3V3 Voltage: 3.1V
ADC 3V3: 637
NOT touched.
ADC Touch: 0
Temperature: 23.0°
RTC: 14:46:15 11.04.2013
Temperature: 21.9°
BAT Current: 14.8mA
BAT Voltage: 8.4V
SERVO Volt.: 5.0V
VCC Voltage: 5.1V

ich muss mir endlich ein bild mit den jumperpositionen und bezeichnungen erstellen!

weiss jemand woher dieses zeichen "Â" bei der temperatur kommt???

fabqu
11.04.2013, 15:33
Hi Inka.
Soll ich so ein Bild mal anfertigen?
Würde vielleicht allen helfen.

Das A bei der Temperatur ist wohl nur ein kleiner Bug, liegt vielleicht an unterschiedlichen Zeichensätzen RP6/RobotLoader. Sollte vermutlich ein "°" sein.

Grüße

inka
11.04.2013, 16:12
hi fabqu,

es wäre für den entwickler sicher einfacher soetwas zu erstellen, das was ich bisher gemacht habe ist sehr lückenhaft. Ich weiss auch nicht wer es alles bräuchte? Hilfreich wäre es allemal, es müsste halt soweit vergrößert werden können, dass man dann auch die beschriftung an der platine lesen kann, das geht an vielen abbildungen kaum...

Dirk
11.04.2013, 18:57
Leute,
es gibt doch schon mehrere einzelne Bilder zu den Jumperstellungen:

Grundstellung mit der M256: http://http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Multi_IO_Projekt_Library (http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Multi_IO_Projekt_Library)

Für den Linienfolger-Einsatz: http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Linienfolger_Demo

Für den Bumperboard-Einsatz: http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Bumper_Demo

Für den UART-Anschluß: http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#UART-Anschlu.C3.9F

Für die 3,3V-Stromversorgung: http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#3.2C3V-Stromversorgung

Für den Einsatz der MultiIO an der M128: http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Multi_IO_Projekt_Library_2

Für den Einsatz der MultiIO an der M32: http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Multi_IO_Projekt_Library_3

fabqu
12.04.2013, 16:44
Hi Dirk,

das Kabel fürs GPS ist gerade gekommen. Ich teste...
Die Ausgabe:


RP6M256 Multi IO Selftest 5!


I2C ERROR - TWI STATE: 0x20


GPS SENSOR ->



Sonst bisher (10 Minuten) nix... Das Ding steht aber am Balkon!?

Thorben W
12.04.2013, 16:55
@fabqu Ich weiß ja nicht wie viele Etagen noch über dir sind :) aber bei mir Empfange ich übers U-blox Center 11 Satelliten (an den Computer angeschlossen über den Prog Adapter vom RP6) unter dem Dachboden
Thorben

radbruch
12.04.2013, 16:57
bei mir Empfange ich übers U-blox Center 11 Satelliten (an den Computer angeschlossen über den Prog Adapter vom RP6)Wie haste denn das gemacht? Schaltbild? Link?

fabqu
12.04.2013, 17:00
Ne, Grade nix. GPS hängt außen am rp6, also freie Sicht nach oben.
@radbruch: das GPS hat 5 Pole:
5V, GNG, Schirmung und eben die seriellen. Geht also auch via USB mit dem RP6-Prog-Adapter.

Thorben W
12.04.2013, 17:17
Ich habe die Anschlüsse die man an den UART 1 anschließt mit einem Jumper umsteckbar gebaut. Ein 2 Poliger Jumper (TX / RX) diesen kann man umstecken zwischen dem Uart 1 und dem Progstecker des WLAN Moduls (Dieses muss dazu aus sein) oder einer externen Wannenbuchse
25111
Angeschlossen an RX GPS an TX und TX GPS an RX
Thorben

Dirk
12.04.2013, 20:28
@fabqu:

Die Ausgabe: RP6M256 Multi IO Selftest 5! I2C ERROR - TWI STATE: 0x20
Warum läuft da ein I2C-Fehler durch?
Wenn du NUR GPS testest und 2D-Kompass und 9D-IMU nicht angeschlossen hast, darf nur die "GPS" Definition im Config-Header (RP6M256_Orientierung.h) aktiv sein,- die beiden anderen Definitionen (COMPASS_2D, IMU_9D) müssen auskommentiert werden.
Dann läuft die Anzeige für die GPS Daten auch ohne dass schon ein Sat-Fix vorliegt durch.

fabqu
12.04.2013, 21:58
Was hab ich denn nu wieder verstellt:
make: *** No rule to make target `RP6M256_MultiIO_05.elf', needed by `elf'. Stop.

Bei allen dasselbe. das ".elf" fehlt...

Dirk
12.04.2013, 22:17
Merkwürdig ...
Heisst deine Demo Source Datei "RP6M256_MultiIO_05.c"? Wenn ja, müßte das eigentlich funktionieren.

fabqu
12.04.2013, 23:07
Ihm fehlt scheinbar nur die .elf
Wenn ich eine fremde .elf rein kopiere, kompiliert er zwar, aber lustiger weise das falsche.
Die .elf wird ja aber nach make-clear immer wieder gelöscht. Habe nix an deinen Dateien geändert!?

Dirk
13.04.2013, 09:27
Die .elf wird im Rahmen der Kompilierung erst erstellt, kann also vorher nicht fehlen.
Kopier dir das ganze Verzeichnis doch noch mal aus der MultiIO-Software Zip,- vielleicht ist im makefile irgendwas durcheinander gekommen.
Wenn das nicht geht, schicke ich dir mal ne HEX von der Demo nur mit GPS.

fabqu
13.04.2013, 11:38
Jap, mach das bitte. Ich komm hier nicht weiter. Auch bei allen älteren deiner Software-Versionen!?

TrainMen
13.04.2013, 14:41
Hi,
wenn ich Probleme mit dem kompilieren habe und diese Fehlermeldung bekomme, habe ich meisten irgendwas an der Ordnerstruktur verändert. Meistens hilft es dann den Ordner eine Ebene höher erneut zu entpacken, oder eben das Makefile anzupassen. Vielleicht hilfts.
Gruss Trainmen

Dirk
13.04.2013, 14:51
@TrainMen:

wenn ich Probleme mit dem kompilieren habe und diese Fehlermeldung bekomme, habe ich meisten irgendwas an der Ordnerstruktur verändert.
Guter Hinweis. Die Beispielordner für die MultiIO sollte man auf jeden Fall komplett kopieren und dahin tun, wo auch die anderen Progs/Demos für die M256, M128 oder M32 sind.

inka
13.04.2013, 15:42
hallo allerseits,

zwei fragen...

1) kann man bei neuen versionen der lib s davon ausgehen, dass die ursprünglich darin vorhandenen funktionen auch weiterhin enthalten sind und der inhalt der dateien nur erweitert/ergäntz wurde um neues?

2) kann man die funktion ROTATE auch verwehden um bis ZU einem bestimmten punkt im umkreis zu drehen (z.b. dem headingwert) oder geht das nur UM einen bestimmten winkel?

fabqu
13.04.2013, 15:51
Tatsächlich. War wieder mal nur falsche Ebene... Danke euch.
Doch nicht... zumindest nicht bei der neuesten Orientierungs-Sache:
Du inkludierst dort eine "#include "RP6M256uart1.h" "
Ist das richtig? Warum die "1" ? Eine Uart1 habe ich nicht... hast du da was verändert?
Sonst irgendwas, was ich anpassen müsste?

Meine Ordnerstruktur:
Hauptordner mit Ordner RP6Lib drin. Außerdem Ordner "M256". Darin dann die vier Beispiele "...01" bis "...03" und "...05"
Passt doch!?

Dirk
13.04.2013, 17:41
@fabqu:
Die Uart1 Library gibt es hier: http://www.rn-wissen.de/index.php/RP6v2_USB-RS232-Adapter#RP6M256uart1_Library

@inka:

1) kann man bei neuen versionen der lib s davon ausgehen, dass die ursprünglich darin vorhandenen funktionen auch weiterhin enthalten sind und der inhalt der dateien nur erweitert/ergäntz wurde um neues?
Ich sage erstmal: JA.
Sollte eine Funktion nicht richtig funktionieren, kann sie sich mit weiteren Versionen natürlich ändern. Aber die Funktionen selbst bleiben erhalten.

2) kann man die funktion ROTATE auch verwehden um bis ZU einem bestimmten punkt im umkreis zu drehen (z.b. dem headingwert) oder geht das nur UM einen bestimmten winkel?
Das geht mit dieser Funktion ALLEIN nur um einen bestimmten Winkel.
Aber: Das ist ja genau eine Aufgabe als Programmer des RP6! Nehmen wir an, der Headingwert beträgt aktuell 180° (S), du möchtest aber nach Osten (90°, E) fahren. Dann must du deinem Rotate-Befehl sagen, dass der RP6 um 90° nach links rotieren muss. Danach must du wieder den Headingwert bestimmen und erneut mit Rotate korrigieren oder durch den move-Befehl den neuen Kurs halten, indem du jeweils eine Kette etwas langsamer machst, wenn eine Abweichung von deiner Zielrichtung erkannt wird.
Das ist schon eine nette Herausforderung!! :)

Übrigens: Weiter gehts hier: https://www.roboternetz.de/community/threads/61640-HDMM01-und-die-orientierungslib-von-Dirk?p=576487&viewfull=1#post576487

fabqu
14.04.2013, 12:15
Juhu!
Nach ein paar Anlaufschwierigkeiten nun endlich:


GPS SENSOR ->
GPGGA NMEA sentence:
$GPGGA,101051.500,4900.4472,N,01206.1734,E,1,05,3. 9,369.6,M,46.0,M,,0000*56
Sentence OK!
Position N4900.4472
Height [m]: 369.6
Position E01206.1734
Satellites: 05


Regensburg liegt laut Wikipedia auf 343m üNN, Koordinaten stimmen ebenfalls ;)

Dirk
14.04.2013, 21:01
Leute,
von meiner Seite auch ein "Juhu!" nach einer etwas schwierigeren "Geburt". :MistPC

Die Orientierungs-Lib für die MultiIO ist in der Version 1.0 fertig: http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Library_f.C3.BCr_die_Orientierung_im_Rau m

Viel Spaß nun auch mit den MinIMU-9 v2 Funktionen!! :)

Im Config Header (RP6M256_Orientation.h) ist nur der MinIMU-9 v2 Teil aktiviert. Wenn ihr auch das GPS-Modul und/oder den 2D-Kompass angeschlossen habt, müßt ihr auch noch die Definitionen GPS und/oder COMPASS_2D aktivieren und das Ganze neu kompilieren.

fabqu
15.04.2013, 14:23
Dirks neue Software-Versionen stehen nun auch im Download-Bereich.
Habs schon getestet, hier die Ausgaben:



3D-Gyro SENSOR ->
X-axis: 18
Y-axis: -21
Z-axis: 121
Temperature [ᄚ]: 18


3D-Acceleration SENSOR ->
X-axis: -56
Y-axis: 969
Z-axis: -26
POSITION:
Pitch [ᄚ]: 3.2
Roll [ᄚ]: 76.1


3D-Compass SENSOR ->
X-axis: 406
Y-axis: 4096
Z-axis: -551
Heading [ᄚ]: 88 Direction: E
TILT COMPENSATED heading [ᄚ]: 82 Direction: E
Temperature [ᄚ]: 5.50


Was ich noch nicht verstehe: Die beiden Temperatur-Angaben...
18 Grad könnten stimmen, aber 5,50 Grad wohl eher nicht.
Wie wird denn die Richtung bestimmt? Der RP6 "schaut" richtung Westen. Auf was wird das genormt? Anders: Wo liegt bei dir, Dirk, das Modul und wo die Multi-IO?
Bei mir steckt das Modul direkt auf der Multi-IO (ohne Kabel, sondern direkt auf die Platine gesteckt) und die Multi ist bei mir hinten auf dem RP6 angebracht. Vermutlich ist sie bei dir vorne?

inka
15.04.2013, 17:36
hallo Dirk,

ich nehme an dien software für den 3d kompass läuft nur von der M256 aus?

(weil die software im M32 ordner unverändert ist?)

Dirk
15.04.2013, 20:19
@Fabian:
Danke für den Ausdruck!
Wenn du nicht im Kühlschrank getestet hast, sind die 5,5°C wirklich zu wenig. Bei mir passt das, aber ich schaue das nochmal an.
Was auch nicht gut aussieht, ist der Roll-Wert (76,1°), weil damit dein RP6 auf der rechten Seite liegen müßte.

Die Lib muss ja von einer bestimmten Achsen-Ausrichtung der Sensoren ausgehen.
Bei mir ist die MinIMU-9 v2 flach so auf dem RP6 angebracht, dass die bedruckte Seite von oben in Fahrtrichtung des RP6 (genau so wie der Aufdruck "RP6" auf dem Mainboard des RP6) lesbar ist.
Bringt man die MinIMU-9 v2 in einer anderen Lage auf dem RP6 an (die Lage der MultiIO und vorn oder hinten ist dabei unwichtig!), stimmen die Achsen nicht mit den Annahmen in der Lib überein.
Wenn du die MinIMU-9 v2 anders montieren must/willst, dann geht das auch. Man muss dann nur in allen "read"-Funktionen (readL3GD20(), readLSM303DLHC_A(), readLSM303DLHC_M() ) die Achsen anpassen (tauschen und/oder umkehren).

@inka:
Zur M32-Version bin ich noch nicht gekommen. Hast du auch eine MinIMU-9?

inka
16.04.2013, 07:42
@inka: Zur M32-Version bin ich noch nicht gekommen. Hast du auch eine MinIMU-9?

nein, haben ich nicht. Ich habe mir spasseshalber in china diese ( http://www.amazon.de/Arduino-GY-521-MPU-6050-gyroscope-accelerometer/dp/B00AZH43JC , http://playground.arduino.cc/Main/MPU-6050 ) bestellt und für 8€ auch bekommen. Wäre jetzt natürlich interessant ob der gyro auch mit deiner lib funktioniert und das liesse sich ja auch mit der M256 testen...
Könnte ich die jemanden von euch beiden (fabqu / dirk/...?) schicken?

Dirk
16.04.2013, 08:49
@inka:
Da sitzt ein anderer Gyro (MPU-6050) drauf als auf der MinIMU.
Die Software müßte also angepaßt werden und läuft nicht genau so wie mit der MultiIO-Lib.
Wenn ich da für dich was stricken soll: Gern zu mir.
Wenn es um den techn. Anschluß an die MultiIO geht: fabqu.

Übrigens: Wenn du dir zusätzlich zu der Gyro-Platine noch das LSM303DLHC-Breakout-Board (Pololu #2124) für 17,95€ kaufst, dann hast du dasselbe zusammen, wie die MinIMU-9 v2 und kannst die MultiIO-Lib komplett nutzen (nur der Gyro-Teil müßte angepaßt werden!).

Dirk
16.04.2013, 12:04
@fabqu:

Was ich noch nicht verstehe: Die beiden Temperatur-Angaben... 18 Grad könnten stimmen, aber 5,50 Grad wohl eher nicht.
So, ich habe nochmal getestet: Ich habe eine Ausgabe von 20,00° vom 3D-Kompass-Sensor und 23° vom Gyro bei einer Zimmertemperatur von 21°. Das passt also noch ohne Eichung ganz gut.
Steigt denn deine Temp.-Angabe (beide!) an, wenn du einen Finger an die Chips der MinIMU-9 v2 hältst und sinkt danach wieder ab?

fabqu
16.04.2013, 12:22
Jap, dann steigen die Temperaturen sofort.
3D-Sensor zuletzt auf 21 Grad, Gyro auf 11,75.
Ist jetzt aber erst mal kein Beinbruch... wir haben ja noch ein paar weitere Temp-Sensoren :)

Dirk
16.04.2013, 13:38
@fabqu:
OK.
Wenn ich deinen Ausdruck von gestern ansehe, dann ist aber die Temperatur vom Kompass-Sensor nicht ok.
Die müßte eigentlich stimmen. Naja ... Vielleicht kann ja noch jemand anders das mal testen.

inka
16.04.2013, 14:11
@inka:
Da sitzt ein anderer Gyro (MPU-6050) drauf als auf der MinIMU.
Die Software müßte also angepaßt werden und läuft nicht genau so wie mit der MultiIO-Lib.
Wenn ich da für dich was stricken soll: Gern zu mir.
komme gerne drauf zurück, im moment bin ich mit dem 2D kompass beschäftigt...



Übrigens: Wenn du dir zusätzlich zu der Gyro-Platine noch das LSM303DLHC-Breakout-Board (Pololu #2124) für 17,95€ kaufst, dann hast du dasselbe zusammen, wie die MinIMU-9 v2 und kannst die MultiIO-Lib komplett nutzen (nur der Gyro-Teil müßte angepaßt werden!).

das ist aber nicht der link zu pololu? Egal, dort habe ich schon geschaut, die haben ja unverschämte portokosten. Du schreibst über ein breakaut-board, wie ist die genaue bezeichnung? unter #2124 bei pololu ist ja wieder nur ein kompletter gyro...

Dirk
16.04.2013, 19:22
@inka:

unter #2124 bei pololu ist ja wieder nur ein kompletter gyro...
Nein, das ist ein Beschleunigungssensor und ein Magnetfeldsensor (Kompass) in einem Chip. Zusammen mit deinem Gyro wären die beiden Boards (fast) identisch mit der MinIMU-9 v2.

Dirk
17.04.2013, 21:06
Leute,

jetzt ist auch die vorläufig letzte Softwareversion vom 16.4.13 in der Dropbox online: https://www.dropbox.com/sh/7fab3gyweezdrcy/l4uw9djFxP (Datei: Software.zip)
Ergänzt habe ich nur noch die Version 1.0 der Orientierungs-Lib für die M32.

Natürlich bleiben wir hier am Ball. Vielleicht können wir hier ja bald auch noch konkrete Programme posten: Linienfolger, Greifarm mit Servos, einer Richtung folgen ...
Da fällt euch sicher ne Menge ein ... ;)

fabqu
20.04.2013, 23:19
Da bei mir die Frage aufkam, warum im neuen Beispiel 01 die Uhr nicht mehr startete, wollte ich Dirks Erklärung hier für alle posten:



Eigentlich gibt es beim DS1307 keinen "Startbefehl". Allerdings ist der Inhalt aller int. Register beim allerersten Start nicht festgelegt, sondern kann beliebige Werte haben.
Wenn dann zufällig im Register 0x00 (=Sekunden-Register) das CH-Bit (Bit 7) high ist, dann ist der Oszillator deaktiviert und die Uhr läuft nicht an. Auf S. 8 des Datenblattes wird darauf hingewiesen.

Das CH-Bit wird durch den "Set RTC once"-Teil der Demo gelöscht (dieser Teil ist standardmäßig auskommentiert) , d.h. nach Durchlaufen dieses Teils ist der int. Oszillator an (und bleibt dann auch immer an!).

Was man machen kann, um die Uhr bei der Erstinbetriebnahme bzw. bei leerer Batterie SICHER zu starten:
1. Einmal die Funktion DS1307_init() aufrufen. Dadurch werden alle Register auf 0 gesetzt (also auch das CH-Bit in Reg. 0x00) ODER ...
2. ... den "Set RTC once"-Teil einmalig ausführen und dann wieder auskommentieren.


Grüße

inka
21.04.2013, 13:21
hi Dirk,

bin wieder mal einen tag zuhause, wollte schauen was sich mit der software getan hat - der link geht ins leere, es heisst dort datei gelöscht oder verschoben...

fabqu
21.04.2013, 14:58
Ja, da das Projekt ja quasi abgeschlossen ist, habe ich den Ordner verschoben. Aber die Links im RN-Wissen-Artikel sind brandaktuell ;)

inka
21.04.2013, 18:14
@Dirk:

@inka:
Da sitzt ein anderer Gyro (MPU-6050) drauf als auf der MinIMU.
Übrigens: Wenn du dir zusätzlich zu der Gyro-Platine noch das LSM303DLHC-Breakout-Board (Pololu #2124) für 17,95€ kaufst, dann hast du dasselbe zusammen, wie die MinIMU-9 v2 und kannst die MultiIO-Lib komplett nutzen (nur der Gyro-Teil müßte angepaßt werden!).

also so ganz verstehe ich das immer noch nicht. das hier sind die daten des boards mit der mpu-6050, es beinhaltet einen 3axis gyro und einen dreiachsen b-messer:
---------------------------------------------------------
MPU-6050 3 Axis Gyro Gyroscope + Accelerometer Sensor Module for Arduino

Description


100% Brand new
-- Chip: MPU-6050 module (three-axis gyroscope + triaxial accelerometer)
- Power supply :3v-5v
- Communication modes: standard IIC communication protocol
- Chip 16bit AD converter, 16-bit data output
- The gyroscopes range: ± 250 500 1000 2000 ° / s
- Acceleration range: ± 2 ± 4 ± 8 ± 16g
- Immersion Gold PCB, machine welding process to ensure quality
- Pin pitch 2.54mm

-----------------------------------------------------------------

Wozu brauche ich dann das board von pololu, was auch einen 3axis gyro (magnetometer) und b-messer beinhaltet?

Dirk
21.04.2013, 19:33
@inka:

MPU-6050 module (three-axis gyroscope + triaxial accelerometer)
Sorry! Du hast Recht. Ich hatte das Datenblatt nicht gelesen.
Mit dem MPU-6050 und dem HDMM01 als Kompass hast du fast dieselben Funktionen wie bei der MultiIO-09.

TrainMen
04.05.2013, 10:38
Hi,
1. Ich habe da mal eine Frage zu der Servo Ansteuerung. Als Grenzwerte sind 147 und 471 angegeben. In diesen Bereich decke ich auch fast alles ab. Bei einem Servo brauche ich aber volle 180 Grad. Die Werte wären 90 und 460. Bei einem Versuch klappte das auch Prima. Nur wird in der Lib das nicht empfohlen.
Warum ? Ich bitte um Erleuchtung ;)

2. Ich habe die Sharps GP2D120 und berechne die Sharps mit der Formel aus http://www.rn-wissen.de/index.php/Sensorarten Ich habe die Berechnung in der Lib ausgetauscht, alles funktioniert, alles ist schön. Trotzdem würde mich interessieren, nach welcher Formel in der Lib gerechnet wird, wo kommen die Zahlen her ?

3. Wie bekomme ich die Werte von tint, cbat ,vbat auf das Display ?. Meine Versuche mit writeIntegerLengthLCD(tint, DEC, 3) bringen nicht die Ausgabe wie im Terminal.

Gruß Trainmen

Dirk
04.05.2013, 13:52
Hi TrainMen:
Zu 1:
Die Grenzwerte 143 und 471 entsprechen 0,7 bzw. 2,3ms. Das ist die Spezifikation, die die meisten Servos einhalten.
Wenn du ein Servo hast, das nur einen Impuls am linken Anschlag von 0,44ms braucht, dann kannst du natürlich auch 90 nehmen.

Zu 2:
Ich habe mit meinem Sensor eine Tabelle (ADC-Werte <-> Entfernung) angelegt und die in Excel eingetragen. Excel hat mir dann die Formel errechnet.

Zu 3:
tint, cbat, vbat sind ja keine Integer-Variablen, sondern double.
Eine Ausgabefunktion für das LCD:

/**
* Write a floating point number to the LCD.
*
* Example:
*
* // Write a floating point number to the LCD (no exponent):
* writeDoubleLCD(1234567.890, 11, 3);
*
* The value of prec (precision) defines the number of decimal places.
* For 32 bit floating point variables (float, double ...) 6 is
* the max. value for prec (7 relevant digits).
* The value of width defines the overall number of characters in the
* floating point number including the decimal point. The number of
* pre-decimal positions is: (width - prec - 1).
*/
void writeDoubleLCD(double number, uint8_t width, uint8_t prec)
{char buffer[width + 1];
dtostrf(number, width, prec, &buffer[0]);
writeStringLCD(&buffer[0]);
}
Viel Erfolg!

TrainMen
05.05.2013, 11:19
Hi Dirk,

zu 1: dann ist ja alles schön, es lass sich nur so bedrohlich in der Lib, da dachte ich frag mal nach.

zu 2: ja genau, ich habe es hier auch mit Excel gemacht. Inzwischen verstehe ich auch was Du da gemacht hast und warum es so kompliziert aussieht. Du berechnest alles in der Lib. Während ich die festen Daten schon ausgerechnet übernehme und nur noch mit den Variablen ADC Werten rechne. Alles ist schön.

zu 3: Danke

Gruß Trainmen

TrainMen
08.05.2013, 12:35
Hi,
Ich möchte gerne die Anzeige der Spannung vom Ext.Akku und vom Basis Akku.
Das ist ja nicht möglich da vbat ja abhängig ist von der Stellung von S1. Also habe ich mir alle Sensordaten von der Base hochgeholt. Dazu brauchte ich ja die anderen Libs (RP6Control_I2CMasterLib.c und .h) Das funktioniert aber nicht, weil nun der Bumpers State changed handler 2 x vorhanden ist. Einmal in der RP6Control_I2CMasterLib.c und in der RP6Control_LFSBumperLib.c
Ich habe den erst einmal auskommentiert ( mit Fragezeichen im Kopf) um weiter zu machen. Also brachte ich nun vbat und ubat zur Anzeige. Alles ist schön. Sollte aber mal der Schalter S1 in Stellung Base stehen, zeigt mir vbat 7,8 V und ubat 7,4 V an. Die müßten doch gleich sein. Wer klaut mir hier 0,4 Volt ?

Kommen wir zurück zur Bumper State Machine. Wie löse ich das Problem. Wie bekomme ich die neuen Bumper z.B in das Example_10_Move2.
bei meinen alten BackBumpern hatte ich die task_Bumpers() erweitert um die beiden neuen Variablen, jetzt aber mit M-IO Libs gibts ja den Bumper kram 2x.

Gruß Trainmen

Dirk
08.05.2013, 22:58
@TrainMen:
Ich werde mir das mal ansehen ... :-k

Dirk
09.05.2013, 20:42
@TrainMen:
So, es ist eine neue Version 1.1 der RP6Control_LFSBumperLib fertig.
Die kann man auch mit der I2CMasterLib benutzen.
Würdest du die mal testen?
Wenn ok, schicke ich sie fabqu für die Dropbox.

TrainMen
10.05.2013, 01:20
Hi Dirk,
Na das Einbinden funktioniert ja schon mal ohne Fehler.
Wenn ich in die Main aber die
MULTIIO_BUMPERS_setStateChangedHandler(MULTIIO_BUM PERS_stateChanged);
aufrufe bekomme ich beim kompilieren die Warnung
warning: implicit declaration of function 'MULTIIO_BUMPERS_setStateChangedHandler'


Gruß TrainMen

warum hier ein Leerzeichen bei Bumpers angezeigt wird, weiss ich nicht. Da ist aber keines.

TrainMen
10.05.2013, 11:57
Hi,
Ich probier natürlich viel rum, manchmal auch ohne es richtig zuverstehen.
Also die Warnung ist weg ich habe in der RP6Control_LFSBumperLib.h noch
void MULTIIO_BUMPERS_setStateChangedHandler(void (*bumperHandler)(void));
nachgetragen, weil es in der RP6Control_I2CMasterLib.h eben auch drin steht. Bis auf die warn und Fehlerfreie kompilation bin ich aber eben nicht weiter. Funktionieren tun sie immer noch nicht. Ich habe folgende Funktion geschrieben.


void MULTIIO_BUMPERS_stateChanged(void)
{
if(iobumper_l && iobumper_r)
{
sound(200,100,0);
}
else if(iobumper_l)
{
sound(200,25,10);
sound(150,25,0);

}
else if(iobumper_r)
{
sound(200,25,10);
sound(150,25,0);

}
}


Aber kein Piep (höchsten in meinen Kopf) wenn ich die Bumper drücke.
Gruß TrainMen

TrainMen
10.05.2013, 15:30
Hi,
so alles ist schön. Bumper funktionieren hinten auch.
Ich hatte vergessen die task_MULTIIO_BUMPERS() in der While Schleife mit einzubinden.
Wäre also nur noch die Korrektur in der RP6Control_LFSBumperLib.h dann könnte sie in die DropBox
Gruß Trainmen

Dirk
10.05.2013, 16:27
Die geänderte RP6Control_LFSBumperLib habe ich in meinen Post von gestern eingestellt.
Das ganze Paket geht dann wieder an fabqu.

Thorben W
10.05.2013, 18:22
Gillt die jetzt für alle Module oder nur für die M32?
Gruß
Thorben

Dirk
10.05.2013, 18:48
@Thorben W:

Gillt die jetzt für alle Module oder nur für die M32?
Im Paket ist auch eine neue Version für die RP6M256_LFSBumperLib, weil es dasselbe Problem (Unverträglichkeit der LFSBumperLib mit der I2CMasterLib) auch bei der M256 gibt. Du kannst die neue Lib für die M256 runterladen, wenn sie fabqu eingestellt hat.

Beide Versionen der LFSBumperLib (für M32 und M256) sind jetzt V1.1.
Darin sind jetzt auch basale Funktionen für die Radar-Sensoren, die aber bis jetzt nur den ADC-Wert auslesen.

fabqu
10.05.2013, 21:14
Steht online ;)

Grüße

inka
11.05.2013, 16:34
hallo allerseits,

ich konnte jetzt ein paar tage lang die diskussion nicht verfolgen, weiss nur, dass es um irgendwelche unverträglichkeiten zweier libs ging, also letztendlich um fehlerbehebung. Ich weiss jetzt auch den link zu dropbox nicht mehr...
Und wenn fehler - dankenswerterweise - behoben wurden, ist der weg dahin eher nicht mehr so bedeutsam, oder?

Wäre es evtl. möglich in den beschreibungen der software einen downloadbereich einzurichten (besser noch zu den jeweiligen varianten M256, M32) und dort eine zip datei mit allen jeweils aktuellen libs zu hinterlegen die man dann nur im eigenen libverzeichnis auspackt und - fehlerbereinigt - und auch nach längeren unterbrechungen aktuelle versionen nutzen kann? Wenn der name der zipdatei ein datum beinhalten würde wäre es ideal...

Würde den umgang mit den libs echt erleichtern...

dank im voraus...

Dirk
11.05.2013, 17:04
Hi inka,
gibt's dich noch?

Gute Anregung! Von meiner Seite schicke ich immer die Datei "Software.zip" zu fabqu, der sie in Dropbox (https://www.dropbox.com/sh/7fab3gyweezdrcy/l4uw9djFxP) einstellt (als Zip und als entpackte Version).
In den Ordnern M32, M128, M256 sind dann die Ordner mit den Beispielen zu den Libs. Die kann man 1:1 in den eigenen Ordner mit den Examples kopieren und nutzen.
Einzeln habe ich die Libs bis jetzt noch nicht in den RP6Lib\... Ordner getan, sondern in jedem Beispiel-Ordner (wie die I2CMasterLib!) gelassen. Wenn an den Libs erstmal nichts mehr geändert wird, können die alle auch in den jeweiligen RP6Lib\... Ordner.
Hast du das bei dir schon gemacht?

fabqu
11.05.2013, 18:57
Hi Inka,
wie Dirk schon sagt, sind die neuesten Libs immer in der Dropbox zu finden. Den link habe ich im RN wissen eingestellt.
Diesen link gibt es momentan NUR dort. Hat den einfachen Grund, dass ich dann bei Neuerungen des Links (z.B. neues Verzeichnis etc) nur eben diesen einen link im RN wissen ändern muss, und nicht noch hier und da in acht verschiedenen threads...

@Dirk: vielleicht sollten wir diesen link auch auf den RN-Artikel für die Software übernehmen?

Liebe Grüße,
fabian

Dirk
11.05.2013, 19:30
@fabqu:
Der Dropbox-Link kommt im Software-RN-Artikel mind. 2x vor (1. Abschnitt und in den Weblinks).

inka
11.05.2013, 21:51
@Dirk,

ja, ich habe einen libordner (dort sind alle c und h dateien, die es gibt bei RP6, M32 und IOboard) und binde je nach bedarf die entsprechenden dateien in code:blocks ein. Ein tolle programm! Muss mich um make und ähnliches nicht kümmern...

ja, es gibt mich noch, nur habe ich momentan für ne woche enkelkinder zu besuch, die sehe nur selten, also bleibt wenig zeit für anderes...

- - - Aktualisiert - - -

@Dirk, @fabqu:

Alle wichtigen Daten (Lötanleitung, Anleitung in .pdf-Form, Schaltpläne) findet ihr HIER (https://www.dropbox.com/sh/7fab3gyweezdrcy/l4uw9djFxP)

vielleicht sollte man für völlig unbedarfte auch erwähnen dass dort auch die software zu finden ist? :-)

fabqu
12.05.2013, 12:21
Habe das nun behoben...

Grüße und schönen Sonntag noch!

Dirk
12.05.2013, 12:56
Ich auch (in den Weblinks).

TrainMen
16.05.2013, 12:00
Hi,
wir sind ja leider nicht viele mit Multi-IO und die meisten haben eine M256.
Nun mir wurde die M256 unter Androhung von Folter (kein Nachtisch und keinen gute Nacht Kuss) ;) gestrichen. Also musste ich mir einen Kopf machen.
Ich habe mir nun die ADC0 und ADC1 der Base genommen und mit PF2 und PF3 des M256 Buchsesteckers verbunden und lese nun die Werte von CNY70 L1 und R1 aus. Dazu habe ich unter anderen in der RP6Control_LFSBumperLib.c folgendes geändert.


uint16_t getLFS(uint8_t channel)
{
uint16_t value;
uint16_t ADC_MULTIIO_LFS_R1;
uint16_t ADC_MULTIIO_LFS_L1;
uint8_t basadc0[2];
uint8_t basadc1[2];
switch (channel) {
case CH_LFS_L :
value = readADC(ADC_MULTIIO_LFS_L); break;
case CH_LFS_M :
value = readADC(ADC_MULTIIO_LFS_M); break;
case CH_LFS_R :
value = readADC(ADC_MULTIIO_LFS_R); break;
#ifdef FIVE_SENSORS
case CH_LFS_R1 :
I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 23); // Start Register
I2CTWI_readBytes(I2C_RP6_BASE_ADR, basadc0, 2); // Lesen von lowbyte und highbyte
ADC_MULTIIO_LFS_R1= (basadc0[0] + (basadc0[1]<<8)); // zusammensetzen
value = ADC_MULTIIO_LFS_R1;
break;
case CH_LFS_L1 :
I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 25);
I2CTWI_readBytes(I2C_RP6_BASE_ADR, basadc1, 2);
ADC_MULTIIO_LFS_L1= (basadc1[0] + (basadc1[1]<<8));
value = ADC_MULTIIO_LFS_L1;
break;
#endif
default : value = 0;
}
return value;
}



und bekomme eben jetzt auch 5 Ausgaben



RP6Control Multi IO Selftest 2!
ADC LFS_L1: 976
ADC LFS_L: 980
ADC LFS_M: 982
ADC LFS_R: 977
ADC LFS_R1: 975

ADC LFS_L1: 976
ADC LFS_L: 980
ADC LFS_M: 981
ADC LFS_R: 977
ADC LFS_R1: 973

ADC LFS_L1: 976
ADC LFS_L: 980
ADC LFS_M: 983
ADC LFS_R: 975
ADC LFS_R1: 972



Gruß TrainMen

fabqu
16.05.2013, 12:29
Hey, klasse gelöst :D
Das könnte man in die Anleitung im RN-Wissen übernehmen. Was meinst du, Dirk?

Grüße

Dirk
16.05.2013, 17:11
@TrainMen:

Nun mir wurde die M256 unter Androhung von Folter (kein Nachtisch und keinen gute Nacht Kuss) gestrichen.
Frag deinen Nachtisch-Koch und gute Nacht Kuss-Geber nach der fachlich-sachlichen Begründung!
Du bist ein guter Mann und brauchst zu deiner Weiterentwicklung unbedingt neue Herausforderungen (=M256)! :)

@fabqu:
Ja, wirklich eine tolle Lösung. Wenn mir TrainMen die ganze Demo und Lib-Änderung zur Verfügung stellt, versuche ich, was draus zu machen.

TrainMen
17.05.2013, 00:29
@Dirk
Koch und Küsschen geber ist meine Göttergattin, und jede Diskussion über alles was in meinen Arbeitszimmer verschwinden soll, ist völlig zwecklos. Da sie weiß das dann ihre Zeit mit mir kürzer wird. Das ist Liebe :wink: sagt sie.
Zurück zum Thema.
Naja soviel ist das ja nicht mehr. Das von der BumperLib.c habe ich ja schon gepostet, dann noch 3 Zeilen in der BumperLib.h
die anderen sind unverändert.

Gruß TrainMen

@fabqu
überprüfe mal die Software.zip in der Dropbox, die scheint defekt zu sein

fabqu
17.05.2013, 08:45
Hi Trainmen,
Software.zip müsste wieder gehen...

TrainMen
17.05.2013, 11:19
Hi fabqu,
ja geht wieder, aktualisierst Du auch bitte die Daten_Forum.zip, da ist noch der alte BumperHandler drin.

Gruß TrainMen

TrainMen
20.05.2013, 13:40
Hi,
es ist mir bis heute garnicht aufgefallen, meine Sharps an der Multi-IO geben bei jedem Durchlauf einen anderen Wert aus. Einen unterschied manchmal bis zu 5cm.
Gleiche Programm nur jetzt an der M32 an den extra Anschlüssen. Habe ich konstante 16 cm. Was läuft auf der Multi-IO falsch ?

TrainMen
22.05.2013, 13:29
Hi,
da es ja keine Reaktionen auf das Sharp Problem gibt, scheint es bei euch zu laufen oder kein Interesse daran, oder nicht nachvollziebar,oder,oder.

Egal was ich auch ausprobiert habe. Ich habe Sprünge von 5-6 cm nach oben sowie nach unten und da ich gerade wieder an der Abyss Steuerung fummel ist das natürlich nicht akzeptabel. Ich hatte ja schon eine Vermutung, denn diese Sprünge sind mir nicht ganz unbekannt. Aber da ich extra in Hardware zur MIO nachgefragt habe und fabqu mir mitteilte das da jetzt Tantals drauf sind und das reicht, wollte ich daran nicht glauben.
Ich hatte ja schon mal das Problem als ich meine Sharps noch an den ADC des Wannensteckers der M32 hatte. Nachdem ich dann die M32 "aufgerüstet" hatte mit Kondensator und Elko war das Problem weg.
Ich nahm mir also den Lötkolben und habe jeweils einen Elko 470 an den Pins vom Bumperbord gelötet. Was soll ich sagen. Glatte 16 cm. Kein Springen nichts, es wird schön sauber gemessen.
Ich bin sauer, hat man das denn vorher nicht ausprobiert oder liegt es daran das ich so alte Sharps GP2D120 benutze ?.

fabqu
22.05.2013, 14:12
Hi Trainmen,

es war weniger desinteresse als Ideenlosigkeit...

hast du den Elko an die Pins vom Multi-IO-Bumperboard gelötet? Dort sollten eigentlich sowohl 100nF-Kondensatoren angelötet sein, als auch ein recht dicker 100uF-Tantal auf der Rückseite, direkt an den drei Pins für die Sharps... (oder wars ein 220uF? bin gerade nicht zu Hause, kann ich aber später mal nachsehen)
Es wäre prinzipiell möglich, dass die 100uF/220uF nicht ausgereicht haben. Die Sharps machen ja mitunter ganz schöne Pulse.
Bei mir habe ich das aber noch nicht beobachtet (aber auch noch nicht übermäßig darauf geachtet).

Grüße

TrainMen
22.05.2013, 16:25
Hi fabqu,
ja hinten ist alles bestückt, mit was ? C37 mit 10-10L C0 ?? , die 100nF Kondensatoren vorne kann ich erkennen.

An den Löchern von den Sharps Anschlüssen (Bumperbord) sind bei mir Stiftleisten dran und an der Rückseite der Stifte habe ich probehalber mal je Seite ein 440uF Elko angelötet. Das sieht aber Mega Bescheuert aus mit 2 solche Brummer oben drauf. Ich weiß noch nicht wie ich das "kosmetische" Problem löse.

Dirk
22.05.2013, 18:31
@TrainMen:

...da es ja keine Reaktionen auf das Sharp Problem gibt, scheint es bei euch zu laufen oder kein Interesse daran, oder nicht nachvollziebar,oder,oder.
Ich hatte nichts dazu gesagt, weil ich deine Frage nicht für Software-relevant gehalten hatte.

Trotzdem noch mein "Senf" dazu:
Bei den älteren Sharps kann man Verbesserungen erreichen durch 3 Maßnahmen:
1. Versorgungsspannung gut abblocken (reicht eigentlich wie sie auf dem Bumper-Board ist, aber mehr kann nicht schaden). Dabei sollten die Kondensatoren aus keram. oder Folienkondensatoren mind. 100nF direkt an den Pins der 5V-Stromversorgung bestehen UND aus größeren Elkos (100..470µF).

2. Kondensator an dem analogen Ausgang des Sharp: Man kann da 4,7nF bis 100nF einsetzen, weil keine schnellen Spannungswechsel gemessen werden müssen.

3. Gehäuse-Erdung: Das Kunststoff-Gehäuse der Sharps besteht aus schwach leitendem Kunststoff. Wenn man den (z.B. an einer Befestigungsschraube) zusätzlich mit GND verbindet, werden die Ergebnisse noch besser.

Du hast ja schon Pkt. 1 verbessert, evtl. bekommst du ein ähnlich gutes Ergebnis, wenn du allein Pkt. 2 umsetzt (dann stören die "dicken Brummer" nicht mehr). Punkt 3 ist eher was für ganz Perfekte und hat nach meiner Erfahrung wenig Einfluss.

TrainMen
23.05.2013, 01:36
@Dirk:

ja sorry hätte die Frage in Hardwarefragen zur MIO stellen müssen.
Danke für die Tips, 3 kommt nicht in Frage, da die Sharps bei mir auf Servos sind und ein extra Kabel hin und her zerren fällt aus, aber wenn Tip 2 funktioniert. Die kleinen Dinger sind doch besser zu verstecken wie die Elko Brummer. In Moment sieht es aus als wenn mein Bumperbord Hörner hat. ;)
Ich finde es eben nur komisch das ich die Probleme ám Bumperbord habe, nur an der M32 gibt es keine Problem.
Ich werde Tip 2 mal testen.

fabqu
23.05.2013, 08:36
Tip 2 klingt gut.
Ich glaube, das wird auch bei den ADC-Eingängen auf der base und M32 so gemacht, oder? Da kann man doch nen großen Elko für die VCC und zwei kleine für die ADC-Leitungen nachrüsten!?
Auch eine möglichkeit wäre, den Tantal auf der Rückseite durch einen größeren (mehr als 400uF) zu ersetzen.

Grüße

TrainMen
23.05.2013, 11:53
Ich glaube, das wird auch bei den ADC-Eingängen auf der base und M32 so gemacht, oder?

ja genau und nach dem ich das damals gemacht hatte waren diese Sprünge weg. Ich versuch mal heute Nachmittag Tip 2
Das mit dem Tantal austauschen ist auch noch eine Möglichkeit.

TrainMen
23.05.2013, 16:36
Hi,
Der Kondensator 100nF direkt an den Sharps hat nicht das gebracht was ich haben will. Es waren immer noch Werte dabei die für mich nicht akzeptabel sind. Ich habe sie aber dran gelassen. Dann habe ich am Bumperbord rechts wieder einen Elko 470uF angelötet, diesmal allerdings liegend auf den Bumper. Damit ist er nicht so ganz präsent wie vorher, wenn er steht. Ich wurde dann durch ein Telefongespräch abgelenkt. Als ich weiter machte. Startete ich das Programm und war hell auf begeistert. Wieder saubere werte und vielleicht doch ein wenig sauberer als ohne Kondensator. Alles ist schön. Doch dann viel mir auf das ich ja am linken Sharp Anschluss gar keinen Elko mehr dran habe. Aber ich bekomme links auch Top Werte. Komische Welt die Elektronik. Egal ich bin zufrieden. Wenn ich mal was beim Händler bestelle lass ich mal einen >400 Tantal zu packen und probiere das denn auch mal. Kann aber dauern.

fabqu
23.05.2013, 23:02
Hi,
labet vorher waren schon immer BEIDE Sharp-Werte schlecht, oder? Der Tantal liegt auch nur an einem der sharps, ich glaube auf dem linken, was deine Beobachtung erklären würde. Jetzt sind beide gut abgestützt.
Grüße

TrainMen
24.05.2013, 01:36
@fabqu,
ich würde sagen beide waren schlecht, bin mir da aber nicht mehr wirklich sicher und ablöten tuh ich da jetzt nichts mehr. Wenn wirklich nur die eine Seite mit dem Tantal abgesichert ist, dann würde es doch auch nichts bringen da einen grösseren anzubringen. Oder?
Na jedenfalls hast Du wieder was für die V2 des Multi Bords. ;)

Dirk
24.05.2013, 08:07
@TrainMen:

Na jedenfalls hast Du wieder was für die V2 des Multi Bords.
Ich denke, auf einer V2 des Boards würde man auch kaum etwas anders machen können.

Was ich noch "verschwiegen" habe:
Natürlich kann man auch auf der Software-Seite bei deinem "Problem" etwas tun ->
Mittelwertbildung!
D.h.: Z.B. 10 Werte messen und dann den Mittelwert ausgeben.

TrainMen
24.05.2013, 11:37
@Dirk,
eigentlich war der Hinweis auf die V2 ironisch gemeint. Verstehe aber Deine Antwort nicht. Es wird doch ohne den Elko nur "Mist" gemessen.
Mit einem Elko ist alles in Ordnung. Also warum könnte man in einer V2 nicht die Option für einen zweiten Tantal oder Elko oder was weiß ich, offen lassen ?. Wer will oder braucht lötet ihn ein.
Das mit der Mittelwertbildung habe ich schon gemacht bevor ich an die M32 die zusätzlichen Kondensatoren und Elko eingelötet habe. Danach war es nicht mehr nötig und ich habe es wieder rausgenommen. Ich kann mich erinnern das ich auch nur mit frischen Akkus damit Erfolg hatte. Sonst bescherte mich ein Shutdown. Erst mit zweitem Akkupack war das sicher. Wenn das jetzt hier nicht geklappt hätte mit dem Elko hätte ich wahrscheinlich darauf zurück gegriffen.
Also "verschwiegen" hast Du nichts, ich wollte keine Software Lösung, es ging schon um die Hardware. Aber schön das Du daran gedacht hast.

Dirk
24.05.2013, 18:46
@TrainMen:

Verstehe aber Deine Antwort nicht. Es wird doch ohne den Elko nur "Mist" gemessen.
Meine Antwort beruht auf eigenen Erfahrungen, die das "Mist-Messen" nicht allgemeingültig bestätigen. Mit meinen Sharps (GP2Y0A02YK) waren die Messwerte mit der Normalbestückung sehr konstant.
Bei der Fixierung auf den Elko darf man auch nicht vergessen, dass es bei der Nutzung der Sharps auf der Bumperplatine via MultiIO auch ungünstige Bedingungen verglichen mit dem Direktanschluß an ADC0/1 der Base gibt:
Es gibt Übergangswiderstände und Störsignale durch Stecker und Kabel vom Sensor bis zum ADC-Port. Die MultiIO ist ja eine passive Platine, d.h. leitet die ADC-Pegel letztlich nur zu einer weiteren Platine (M32, M256, Base o.ä.) weiter, auf der dann der µC mit ADC-Port sitzt. Damit liegen zwischen Sensor und ADC-Eingang 3 Platinen mit 3 Steckverbindungen (Sensor-Bumperplatine, Bumperplatine-MultiIO, MultiIO-Prozessorplatine).
Zudem gibt es noch Besonderheiten der Stromversorgung: Wenn du mal nachverfolgst, wie GND vom Sensor mit AGND der µCs verbunden ist, dann kommt noch eine weitere Steckverbindung (XBUS) dazu, über die auch noch die Stromversorgung erfolgen muss. Damit gibt es auch noch Spannungsabfall über der GND Leitung bis hin zur Bumperplatine.
Nach meinen Messungen hat fabqu das trotz dieser vollgepackten Platine gut hingekriegt:
Für die Bumperplatine gibt es C3, C4, C36, C37 zur Abblockung von 5V, am Bumper-Stecker noch C15. Man kann also auch an allen diesen Positionen noch "nachrüsten", um die Abblockung zu verbessern.

fabqu
24.05.2013, 23:55
Hi,
Genau. Du kannst einfach über den 100nF, welcher Standard zwischen VCC und GND des sharps sein sollte, z.B. Einen größeren Keramik oder Tantal (10uF oder größer) drüber löten oder anstelle des 100nF anlöten.
grüße

inka
06.06.2013, 08:41
hi Dirk, fabqu,

Pirna ist geflutet und der internetzugriff nur sporadisch und langsam. Und es kann dauern, bis der knotenpunkt Pirna aus den fluten wieder auftaucht...
Gibt es irgendwo eine möglichkeit den/die artikel zu der IO platine (RN wissen) als pdf(?) runterzuladen?

fabqu
06.06.2013, 09:05
Hi Inka!
Ich habe dir die beiden Pages einfach mal als pdf gedruckt. Ist natürlich nicht der Hit, aber leider alles, was wir soweit ich weiß gerade haben.
Liegt unter den üblichen Downloads.
Grüße! Und viel Glück...

inka
06.06.2013, 09:43
danke...so kann man sich das warten etwas verkürzen. Wir persöhnlich sind vom hochwasser nicht betroffen aber die wiklichkeit - es ist unser erstes hochwasser hier - übertrift jeden bericht... aber Regensburg hats ja auch ganz schön erwischt...

Grus inka

Dirk
06.06.2013, 14:56
Hi inka,

tut mir echt leid, was da bei euch abgeht. Krass. :(

Thorben W
26.06.2013, 12:45
@Dirk wann geht es mit der Bibliothek für die Umweltsensoren weiter?
Thorben W

Dirk
27.06.2013, 18:11
@Thorben W:
Die ist noch in den Kinderschuhen. Ich hatte auch angenommen, dass sich keiner dafür interessiert.

Gibt's hier jemanden, der da noch Interesse hat?

fabqu
27.06.2013, 20:41
Immer ;)
aber mach dir mal meinetwegen keinen Stress. Mein nächster Programmpunkt, wenn mal wieder mehr zeit ist: die Multi-io in meine labview-GUI implementieren.
grüße

Dirk
27.06.2013, 21:55
Ok, dann wären wir ja schon ne Skatrunde. :p
Mal sehen, was geht.

TrainMen
28.06.2013, 13:55
ich setze mich mal dazu, Skatrunde mit 4, der Geber setzt dann aus :)

Dirk
30.06.2013, 20:30
Zur Wetter-Lib:
- Helligkeitssensoren soweit fertig, Ergebnis wird in Lux ausgegeben.
- Feuchte/Temperatur steht noch aus.
- Druck (BMP085) weigert sich noch ... Grund evtl.: Die I2C-Adresse ist 0xEE. Dieselbe hat leider auch der LTC2990 auf der MultiIO als "Global Sync Address" (Anl. S. 14),- und der ist nicht zu deaktivieren. Keine Ahnung, was man da machen kann ...

Dirk
03.07.2013, 21:53
Hallo Wetter-Fans der MultiIO:
Jetzt gibt's eine erste noch unfertige Wetter-Lib und Demo: Klick! (http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Library_f.C3.BCr_die_Messung_von_Umweltd aten)
Erstmal ist das noch die Version 0.8.
Lauffähig ist der Teil für die Helligkeitssensoren (A9060 LDRs) und für den Feuchtigkeits-/Temperatursensor HYT-221. :)

Den BMP085 habe ich noch nicht zum Laufen bekommen, siehe mein Post vom 30.6.! :MistPC

Wäre schön, wenn ihr die 2 Teile mal testet!

fabqu
09.07.2013, 19:17
Leute,
Dirk hat mir gerade die neuesten Dateien geschickt. Es ist alles wieder unter dem üblichen Link im RN-Wissen-Artikel zum Download bereit.

Viel Spaß damit!

Dirk
09.07.2013, 20:08
Hi Leute,

mit dieser vorerst letzten Version (5.0) unseres Software-Pakets für die MultiIO beende ich meine Arbeit an der Basis-Software.
Natürlich bin ich auch weiter dabei und würde mich freuen, wenn wir hier im Forum eure Programme, die die MultiIO-Libs nutzen, posten können.

Was ich mir vorstellen kann:
- RTC- und/oder DCF77-Wecker
- Ansteuerung der Servos eines Roboterarms mit der MultiIO
- Linienfolger mit der Linienfolger-Platine der MultiIO
- Nutzung der zusätzlichen Bumper hinten am RP6
- Nutzung der SHARP-Sensoren zur Raumorientierung
- Nutzung der SRF02-Sensoren zur Orientierung und zum Erstellen einer Karte der Umgebung
- Nutzung der Radar-Sensoren (Wer traut sich da dran??)
- Der RP6 orientiert sich mit GPS, Magnetfeldsensor, Gyro ... im Raum
- Der RP6 findet selbstständig seinen Weg eine Rampe hoch/runter mit dem Lage-/Beschleunigungssensor
- Eine Wetterstation mit Innen-/Außentemperatur, Feuchte, Luftdruck, Luftdruck-/Wettertrend, Logging der Daten im EEPROM der MultiIO
- Wer später auch die mitgelieferte Radio-Platine nutzen will: UKW-/KW-/MW-/LW-Weltempfänger mit RDS-Radiodatenanzeige und TMC-Staumeldungen (Das möchte ich sehen!!)
- usw., usw. ...

Es gibt viel zu tun ... ;)

fabqu
09.07.2013, 21:40
Es gibt immer was zu tun!
Yippie-Jah-Jah Yippie-Yippie-Yeah :D

Thorben W
13.07.2013, 18:51
Wenn ich PCA9685_init(50); aufrufe in meinem Programm ganz am anfang hängt sich dieses auf. Was kann der Grund dafür sein?

Thorben

Dirk
13.07.2013, 19:00
Hi Thorben,

kann man ohne dein Programm natürlich nicht beantworten!

In der Regel brauchst du diese Funktion auch nicht, weil mit multiio_init() alle Initialisierungen für die MultiIO gemacht werden.

Thorben W
13.07.2013, 19:05
Wenn ich multiio_init() aufrufe erhalte ich das selbe Ergebnis

- - - Aktualisiert - - -

Die Datei: 25999

Dirk
13.07.2013, 19:08
Fragen:
- Ist denn dein PCA9685 hardwaremäßig ok?
- Hat er schon mal funktioniert?
- Ist seine I2C-Adresse auf der MultiIO-Platine richtig gejumpert (siehe hier (http://www.rn-wissen.de/index.php/RP6_Multi_IO_Projekt_-_Software#Multi_IO_Projekt_Library) unter "Standard-Jumperstellung für die M256")?

Thorben W
13.07.2013, 19:10
Das Beispielprogramm funktioniert ja

Dirk
13.07.2013, 19:24
Ok, dann kann ich wenig helfen, weil ich dein rel. komplexes Programm nicht verstehe.
Was macht der "Webserver"?
Was willst du überhaupt machen?
Solltest du dich nicht erstmal an einfacheren Programmen versuchen? :confused:

Thorben W
13.07.2013, 19:43
Hier noch mal ein Probe programm 26003

- - - Aktualisiert - - -

Ich brauche den PCA9685 doch für die LEDs oder

Thorben W
14.07.2013, 18:45
Problem mit dem PCA9685 ist behoben
Der Luftdrucksensor funktioniert auch.

Dirk
14.07.2013, 19:01
Hi Thorben,

klingt gut. Glückwunsch! ;)

Dirk
18.07.2013, 13:29
Hi MultiIO Besitzer,

es muss doch noch eine Version der Software für die MultiIO geben.
Da werden noch kleinere Bugs gefixt. Kommt demnächst ...

fabqu
19.07.2013, 08:29
Ist online ;)

TrainMen
03.04.2014, 14:49
Hallo,

In der RP6Control_LFSBumperLib.c stehen die Funktionen void BUMPERBOARD_init(void) und void lfsbumper_init(void), letzte ruft den LFS auf und die Funktion BUMPERBOARD_init(void). Da ich hier aber den LFS im Moment nicht brauche dachte ich gleich die Bumperboard_init() aufrufen zu können. Also statt der lfsbumper_init(). Aber ich bekomme dann die warning: implicit declaration of function 'BUMPERBOARD_init' Wo ist denn da mein Denkfehler ?

Dirk
03.04.2014, 20:09
Hi TrainMen,
Wenn du die LFS bzw. das ganze LFS-Board nicht brauchst, kannst du einfach in der RP6Control_LFSBumperLib.h die Definition "LFS" auskommentieren und das Ganze neu kompilieren.
Danach wird auch die Funktion lfsbumper_init() ohne die LFS-Initialisierung ausgeführt.

TrainMen
03.04.2014, 20:41
Hi Dirk,
Also ich brauch das LFS-Board im Moment nicht. Aber es aus der LIB rausnehmen (auskommentieren) kommt nicht in Frage. Dann hätte ich ja mehrere Versionen. Nee, und wenn ich dann wieder mal eine länger Bastel Pause habe und dann wieder anfange habe ich es vielleicht vergessen.

Es ging mir auch nicht darum nun unbedingt den LFS Teil zu entfernen. Die Funktion lfsbumper_init() ruft doch den LFS Teil und die Funktion BUMPERBOARD_init() auf. Da ich das eine ja im Moment nicht brauche. Dachte ich eben gleich die Funktion BUMPERBOARD_init() in meinen Programm aufzurufen. Die lfsbumper_init() macht doch auch nichts anderes. Geht aber nicht. Warum ?

Dirk
03.04.2014, 22:02
Hi TrainMen,
ok.
Probier mal:
In die RP6Control_LFSBumperLib.h die Zeile:

void BUMPERBOARD_init(void);

... am Ende des "Bumper Board:" Abschnitts hinter:

void setRADARSPower(uint8_t pwr);
#endif

... einfügen.
Dadurch kannst du diese Funktion auch im Hauptprogramm benutzen.

TrainMen
03.04.2014, 23:29
Hi Dirk,
Ja so bin ich zufrieden, funktioniert. Danke.
Hätte man auch alleine drauf kommen können wenn man mehr von C verstehen würde.

TrainMen
23.02.2015, 14:13
Hallo Leute,

ich bin hier am verzweifeln. Ich wollte mal was ausprobieren und habe in meinem Programm die ACS abfrage wieder eingefügt. Ich benutze das ACS System sonst nicht mehr. Alles funktioniert, auf ACS wird reagiert. Fertig. Jetzt kommts, ich habe ein Funktionaufruf LTC2990_measure() in der Main Funktion stehen welche mir ein paar Daten auf das Display ausgeben soll. Funktionierte ja auch. Jetzt brauche ich die Werte nicht mehr. Wenn ich jetzt aber die Funktion LTC2990_measure() deaktiviere funktioniert das ACS nicht mehr. Kann mir jemand sagen welchen zusammenhang das hat ?
Ich pack mal den Code hier mit rein. Alles überflüssige habe ich mal gelöscht.

/*
* ************************************************** **************************
* RP6 ROBOT SYSTEM - RP6 CONTROL M32 Examples
* ************************************************** ***************************

*/


/************************************************** ***************************/
// Includes:

#include "RP6ControlLib.h" // The RP6 Control Library.
#include "RP6I2CmasterTWI.h" // I2C Master Library
#include "RP6Control_MultiIOLib.h"
#include "RP6Control_I2CMasterLib.h"
#include "RP6Control_LFSBumperLib.h"
/************************************************** ***************************/

#define IDLE 0
/************************************************** ***************************/


/************************************************** ***************************/

// Behaviour command type:


typedef struct
{
uint8_t speed_left;

uint8_t speed_right;
unsigned dir:2;
unsigned move:1;
unsigned rotate:1;
uint16_t move_value;
uint8_t state;
}

behaviour_command_t;


behaviour_command_t STOP = {0, 0, FWD, false, false, 0, IDLE};

// ************************************************** ***************************
// Cruise Behaviour:
// ************************************************** ***************************



#define CRUISE_SPEED_FWD 120 // Standard Speed wenn keine Hindernisse endeckt werden!
#define MOVE_FORWARDS 1
behaviour_command_t cruise = {CRUISE_SPEED_FWD, CRUISE_SPEED_FWD, FWD, false, false, 0, MOVE_FORWARDS};

void behaviour_cruise(void)
{

}

// ************************************************** **************************
// Escape Behaviour: Verhalten bei Bumperkontakt
// ************************************************** **************************
// Geschwindigkeit für verschiedene Bewegungen:
#define ESCAPE_SPEED_BWD 120 // 100
#define ESCAPE_SPEED_ROTATE 100 // 60
// Menüpunkte
#define ESCAPE_FRONT 1
#define ESCAPE_FRONT_WAIT 2
#define ESCAPE_LEFT 3
#define ESCAPE_LEFT_WAIT 4
#define ESCAPE_RIGHT 5
#define ESCAPE_RIGHT_WAIT 6
#define ESCAPE_WAIT_END 7
behaviour_command_t escape = {0, 0, FWD, false, false, 0, IDLE};



void behaviour_escape(void)
{

}

// ************************************************** **************************
// MIO Escape Behaviour: Verhalten bei Bumperkontakt hinten
// ************************************************** **************************
// Geschwindigkeit für verschiedene Bewegungen:
#define MIO_ESCAPE_SPEED_FWD 80// 100
#define MIO_ESCAPE_SPEED_ROTATE 60 // 60
// Menüpunkte
#define MIO_ESCAPE_BACK 1
#define MIO_ESCAPE_BACK_WAIT 2
#define MIO_ESCAPE_LEFT 3
#define MIO_ESCAPE_LEFT_WAIT 4
#define MIO_ESCAPE_RIGHT 5
#define MIO_ESCAPE_RIGHT_WAIT 6
#define MIO_ESCAPE_WAIT_END 7
behaviour_command_t mio_escape = {0, 0, BWD, false, false, 0, IDLE};


void behaviour_mio_escape(void)
{

}

// ************************************************** **************************
// AVOID Behaviour: Verhalten beim Erkennen von Hindernissen
// ************************************************** **************************



// Geschwindigkeit für verschiedene Bewegungen:
#define AVOID_SPEED_L_ARC_LEFT 50
#define AVOID_SPEED_L_ARC_RIGHT 60 // 90
#define AVOID_SPEED_R_ARC_LEFT 60 // 90
#define AVOID_SPEED_R_ARC_RIGHT 40
#define AVOID_SPEED_ROTATE 40 // 60

// Menüpunkte
#define AVOID_OBSTACLE_RIGHT 1
#define AVOID_OBSTACLE_LEFT 2
#define AVOID_OBSTACLE_MIDDLE 3
#define AVOID_OBSTACLE_MIDDLE_WAIT 4
#define AVOID_END 5
behaviour_command_t avoid = {0, 0, FWD, false, false, 0, IDLE};

void behaviour_avoid(void)
{
static uint8_t last_obstacle = LEFT;
static uint8_t obstacle_counter = 0;
switch(avoid.state)
{
case IDLE:

if(obstacle_right && obstacle_left) // Linker und Rechter Sensoren haben was endeckt
avoid.state = AVOID_OBSTACLE_MIDDLE;
else if(obstacle_left) // Linker Sensor hat was endeckt
avoid.state = AVOID_OBSTACLE_LEFT;
else if(obstacle_right) // Rechter Sensor hat was endeckt
avoid.state = AVOID_OBSTACLE_RIGHT;

break;
case AVOID_OBSTACLE_MIDDLE: //----------------------

avoid.dir = last_obstacle;
avoid.speed_left = AVOID_SPEED_ROTATE;
avoid.speed_right = AVOID_SPEED_ROTATE;
if(!(obstacle_left || obstacle_right))
{
if(obstacle_counter > 3)
{
obstacle_counter = 0;
setStopwatch4(0);
}
else
setStopwatch4(400);
startStopwatch4();
avoid.state = AVOID_END;
}
break;
case AVOID_OBSTACLE_RIGHT: //----------------------

avoid.dir = FWD;
avoid.speed_left = AVOID_SPEED_L_ARC_LEFT;
avoid.speed_right = AVOID_SPEED_L_ARC_RIGHT;
if(obstacle_right && obstacle_left)
avoid.state = AVOID_OBSTACLE_MIDDLE;
if(!obstacle_right)
{
setStopwatch4(500);
startStopwatch4();
avoid.state = AVOID_END;
}
last_obstacle = RIGHT;
obstacle_counter++;
break;
case AVOID_OBSTACLE_LEFT: //----------------------
avoid.dir = FWD;
avoid.speed_left = AVOID_SPEED_R_ARC_LEFT;
avoid.speed_right = AVOID_SPEED_R_ARC_RIGHT;
if(obstacle_right && obstacle_left)
avoid.state = AVOID_OBSTACLE_MIDDLE;
if(!obstacle_left)
{
setStopwatch4(500);
startStopwatch4();
avoid.state = AVOID_END;
}
last_obstacle = LEFT;
obstacle_counter++;
break;
case AVOID_END: //----------------------
if(getStopwatch4() > 1000) // Wir verwendeten basierte Bewegung des Timings hier!
{
stopStopwatch4();
setStopwatch4(0);
avoid.state = IDLE;
}
break;
}
}

// ************************************************** **************************
// Bumpers Event handler
// ************************************************** **************************


void bumpersStateChanged(void)
{
if(bumper_left && bumper_right)
{
escape.state = ESCAPE_FRONT;

}
else if(bumper_left)
{
if(escape.state != ESCAPE_FRONT_WAIT)
escape.state = ESCAPE_LEFT;

}
else if(bumper_right)
{
if(escape.state != ESCAPE_FRONT_WAIT)
escape.state = ESCAPE_RIGHT;

}
}

// ************************************************** **************************
// Multi_IO Bumpers Event handler
// ************************************************** **************************



void MULTIIO_BUMPERS_stateChanged(void)
{
if(iobumper_l && iobumper_r)
{
mio_escape.state = MIO_ESCAPE_BACK;
}
else if(iobumper_l)
{
if(mio_escape.state != MIO_ESCAPE_BACK_WAIT)
mio_escape.state = MIO_ESCAPE_LEFT;

}
else if(iobumper_r)
{
if(mio_escape.state != MIO_ESCAPE_BACK_WAIT)
mio_escape.state = MIO_ESCAPE_RIGHT;

}
}


// ************************************************** **************************
// ACS Event handler
// ************************************************** **************************

// Auf das Verhalten kein Einfluss!

void acsStateChanged(void)
{

}


//************************************************** ***************************
// FAHR KOMMANDO:
//************************************************** ***************************


void moveCommand(behaviour_command_t * cmd)
{

if(cmd->move_value > 0)
{
if(cmd->rotate)
rotate(cmd->speed_left, cmd->dir, cmd->move_value, false);
else if(cmd->move)
move(cmd->speed_left, cmd->dir, DIST_MM(cmd->move_value), false);
cmd->move_value = 0;
}

else if(!(cmd->move || cmd->rotate))
{
changeDirection(cmd->dir);
moveAtSpeed(cmd->speed_left,cmd->speed_right);
}

else if(isMovementComplete())
{
cmd->rotate = false;
cmd->move = false;
}
}

//************************************************** ***************************
// Display Ausgabe:
//************************************************** ***************************



void displayBehaviour(uint8_t behave)
{
static uint8_t compare = 0;
if(compare != behave)
{
compare = behave;
clearLCD();
switch(behave)
{
case 8: writeStringLCD_P("BATTERIE LEER"); setLEDs(0b0110); break;
case 5: writeStringLCD_P("MIO_ESCAPE"); setLEDs(0b0110); break;
case 4: writeStringLCD_P("ESCAPE"); setLEDs(0b0110); break;
case 3: writeStringLCD_P("AVOID"); setLEDs(0b0110); break;
case 2: writeStringLCD_P("CRUISE"); setLEDs(0b0000); break;
case 1: writeStringLCD_P("STOP"); setLEDs(0b0000); break;
}
}



}

//************************************************** ***************************
// VERHALTENS CONTROLLER
//************************************************** ***************************




void behaviourController(void)
{



behaviour_mio_escape();
behaviour_escape();
behaviour_avoid();
behaviour_cruise();



if (mio_escape.state != IDLE) // Priority - 5
{
displayBehaviour(5);
moveCommand(&mio_escape);
}
else if(escape.state != IDLE) // Priority - 4
{
displayBehaviour(4);
moveCommand(&escape);
}
else if(avoid.state != IDLE) // Priority - 3
{
displayBehaviour(3);
moveCommand(&avoid);
}
else if(cruise.state != IDLE) // Priority - 2
{
displayBehaviour(2);
moveCommand(&cruise);
}
else // Lowest priority - 1
{
displayBehaviour(1);
moveCommand(&STOP); // Default command - do nothing!
// In the current implementation this never
// happens.
}
}



//-----------------------------------------------------------------------------------

/************************************************** ***************************/
// I2C Requests:

void I2C_requestedDataReady(uint8_t dataRequestID)
{

if(!checkRP6Status(dataRequestID))
{
// Here you can Check other sensors/microcontrollers with their own
// request IDs - if there are any...
}
}

/************************************************** ***************************/
// I2C Error Event Handler

/**
* This function gets called automatically if there was an I2C Error like
* the slave sent a "not acknowledge" (NACK, error codes e.g. 0x20 or 0x30).
*/
void I2C_transmissionError(uint8_t errorState)
{
writeString_P("\nI2C ERROR - TWI STATE: 0x");
writeInteger(errorState, HEX);
writeChar('\n');
}


/************************************************** ***************************/
// Main function - The program starts here:

int main(void)
{
initRP6Control();
initLCD();


//----------------------------------------

MULTIIO_BUMPERS_setStateChangedHandler(MULTIIO_BUM PERS_stateChanged); //State Machine Bumper hinten
BUMPERS_setStateChangedHandler(bumpersStateChanged ); //State Machine Bumper vorn
ACS_setStateChangedHandler(acsStateChanged);


// ---------------------------------------
I2CTWI_initMaster(100);
I2CTWI_setRequestedDataReadyHandler(I2C_requestedD ataReady);
I2CTWI_setTransmissionErrorHandler(I2C_transmissio nError);

multiio_init();// MultiIO init!!! ( Servo Controller/ Servo power/ Voltage & current sensor / Buzzer )
BUMPERBOARD_init(); // Startet LEDS_init; MULTIIO_BUMPERS_init; SHARPS_init();


sound(180,80,25);
sound(220,80,25);

setLEDs(0b0000); // M32 LED aus
setMultiIOLEDs(0b0000); // MIO LED aus

// Betriebstest
clearLCD();
LTC2990_measure();




// ---------------------------------------
// Setup ACS power:
I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_ACS_POWER, ACS_PWR_MED);
// Enable Watchdog for Interrupt requests:
I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT, true);
// Enable timed watchdog requests:
I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT_RQ, true);

//-----------------------------------------

mSleep(3000);
clearLCD();
//-----------------------------------------




while(true)
{
task_MULTIIO_BUMPERS();
task_checkINT0();
task_I2CTWI();
behaviourController();

}
return 0;
}

TrainMen
26.02.2015, 04:03
Also in dieser Datei steckt der Teufel. Ich habe jetzt wirklich alles probiert. Neues Makefile, die komplette Datei neu eingefügt. Es bleibt dabei, das ACS funktioniert nicht wenn ich die Funktion LTC2990_measure() deaktiviere, bei anderen Funktionen aus den MultiIO Libs habe ich keine Probleme. Andere Projekte ist es völlig egal ob oder ob nicht, die funktionieren alle. Schon komisch, aber jetzt ist genug probiert, jetzt landet sie im Müll.

Dirk
26.02.2015, 15:15
Hi,

Es bleibt dabei, das ACS funktioniert nicht wenn ich die Funktion LTC2990_measure() deaktiviere, bei anderen Funktionen aus den MultiIO Libs habe ich keine Probleme. Andere Projekte ist es völlig egal ob oder ob nicht, die funktionieren alle.
Ich rate mal: Ein Timing-Problem?

TrainMen
27.02.2015, 12:07
ein Timing-Problem genau, aber ich meine die vergeudete Zeit um das Problem zu verstehen.
Aber mal im Ernst, fast identische Projekte wobei sich das fast nur auf veränderte Display und oder Terminalausgaben bezieht haben keine Probleme, nur dieses Mistding funktionierte nicht und ich habe ewig gebraucht um festzustellen das ein löschen eines Funktionsaufrufes Schuld daran ist. Ich würde es ja noch verstehen wenn was nicht funktioniert wenn man eine Funktion aufruft, aber beim deaktivieren einer Funktion ?