Vielleicht ein "Mittelweg" : eine Lib für die beiden Boards Linie und Bumper? Vielleicht auch noch fürs Radio?
Vielleicht ein "Mittelweg" : eine Lib für die beiden Boards Linie und Bumper? Vielleicht auch noch fürs Radio?
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.
Gruß
Dirk
wie wäre es mit einer "hauptlib" und einer fürs "zubehör"?
gruß inka
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.
@Fabian:
Ok, wird so gemacht. Ein bisschen Geduld ...![]()
Gruß
Dirk
hi,
das kompilieren der RP6Control MultiIO.c hat funktioniert, beim starten kommen im terminal folgende meldungen (ausschnitt)
was bedeuten die zwei I2C errors am anfang?Code: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]
ist sonst noch was für die experten zu erkennen was falsch ist?
gruß inka
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??
Geändert von Dirk (24.03.2013 um 14:23 Uhr)
Gruß
Dirk
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
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:
Viel Erfolg!Code:/** * 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]); }
Gruß
Dirk
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
Lesezeichen