mit den Status LEDs der Base klappts auch nicht:
Code:print("LEDs_Base:"); printInteger(I2C_REG_LEDS); print("\n");
mit den Status LEDs der Base klappts auch nicht:
Code:print("LEDs_Base:"); printInteger(I2C_REG_LEDS); print("\n");
Also das mit den LEDs klappt! Doofer fehler.
Aber wie lese ich denn vernünftig die ganzen ADCs der M128 aus und sende sie?
Vg
> printInteger(ADC_Read(void));
void übergibt man i.d.R. nicht - das ist nur nen platzhalter bei der Deklaration von Funktionen und steht für NIX.
Aber das nur nebenbei.
Teste es doch einfach mal mit dem Beispielprogramm Example_03_IO_Threads
Da werden alle ADCs ausgelesen (den Start Taster paar mal drücken!).
MfG,
SlyD
Danke dir, hab das mal gemacht:
erste Frage: Was soll das tmp[16]?Code:char tmp[16]; word result; ADC_Set(ADC_VREF_VCC,0); // Kanal wählen... Thread_Delay(25); // ... warten ... result = ADC_Read(); // ... und auslesen. // Messwert ausgeben: print("ADC_M128(0): "); Str_WriteInt(result,tmp,0); Serial_WriteText(0,tmp); print("\n"); ADC_Set(ADC_VREF_VCC,7); // Kanal wählen... Thread_Delay(25); // ... warten ... result = ADC_Read(); // ... und auslesen. // Messwert ausgeben: print("ADC_M128(7): "); Str_WriteInt(result,tmp,0); Serial_WriteText(0,tmp); print("\n");
Zweite: Wo kann ich das Setzen des ADCs (ADC_Set(ADC_VREF_VCC,0) ) und das thread_delay sonst hintun?
Ich brauche ja nach dem ADC-anschalten etwas Zeit, um die Messung abzuwarten... oder kann man das einfach rauslassen?
> Was soll das tmp[16]?
für den String.
Ist lange lange her aber ich glaube der Code wurde geschrieben bevor es eine Funktion printInteger in der RP6CCLib gab.
Die macht natürlich das gleiche.
> Wo kann ich das Setzen des ADCs (ADC_Set(ADC_VREF_VCC,0) ) und das thread_delay sonst hintun?
Da wo es in Deinem Programm hinpasst?!
![]()
Auf der CCPRO Unit kannst Du - wie das Beispielprogramm auch zeigt - Multithreading benutzen d.h. während des Delays können andere Threads laufen.
MfG,
SlyD
Aber bei mir geht das leider nicht richtig, seit ich oben gezeigte Codezeilen drin hab, stockt das Programm ziemlich und der RP6 reagiert nur noch langsam.
Habe es gerade ganz ohne Delay gemacht, klappt wunderbar
Grüße
So, jetzt gibts ein neues Problem.
Ich habe nun zum Register, das die M128 ausließt, die Base-LED-Zustände hinzugefügt sowie die Adresse und den Tastencode von RC5-Daten:
Und genau dort muss ein Fehler liegen, irgendwie beim Registerlesen von den RC5-Daten. Genauer, bei Auslesen von RC5_adr. Denn wenn ich diese Zeile rausnehme, läuft mein Programm wunderbar. Habe ich diese Zeile drinnen, kommt mein Programm gerne ins stocken. Um genau zu sein, geht alles gut,bis ich einen Fahrbefehl rausgebe. Solange der RP6 sich bewegt, dauert es locker drei-vier Sekunden, bis das ACS Objekte erkennt bzw. erkennt, dass sie nicht mehr da sind.Code:void getAllSensors(void) { RP6_readRegisters(RP6_BASE_ADR, I2C_REG_POWER_LEFT, messageBuf, 27); mleft_power = messageBuf[0]; mright_power = messageBuf[1]; mleft_speed = messageBuf[2]; mright_speed = messageBuf[3]; mleft_des_speed = messageBuf[4]; mright_des_speed = messageBuf[5]; mleft_dist = messageBuf[6] + (messageBuf[7]<<8); mright_dist = messageBuf[8] + (messageBuf[9]<<8); adcLSL = messageBuf[10] + (messageBuf[11]<<8); adcLSR = messageBuf[12] + (messageBuf[13]<<8); adcMotorCurrentLeft = messageBuf[14] + (messageBuf[15]<<8); adcMotorCurrentRight = messageBuf[16] + (messageBuf[17]<<8); adcBat = messageBuf[18] + (messageBuf[19]<<8); adc0 = messageBuf[20] + (messageBuf[21]<<8); adc1 = messageBuf[22] + (messageBuf[23]<<8); RC5_adr = messageBuf[24]; RC5_data = messageBuf[25]; status_leds_base = messageBuf[26]; }
Wär schön zu wissen, was da schief läuft...
Danke Euch
Geändert von fabqu (05.12.2011 um 16:56 Uhr)
Lesezeichen