-
Danke dir.
Er kompiliert zwar, bringt aber folgenden Fehler:
[code]Compiling: ../../Library/RP6control/RP6Control_I2CMasterLib.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=../../Library/RP6control/RP6Control_I2CMasterLib.lst -I../../Library -I../../Library/RP6control -I../../Library/RP6common -std=gnu99 -MD -MP -MF .dep/RP6Control_I2CMasterLib.o.d ../../Library/RP6control/RP6Control_I2CMasterLib.c -o ../../Library/RP6control/RP6Control_I2CMasterLib.o
../../Library/RP6control/RP6Control_I2CMasterLib.c: In function 'getAllSensors':
../../Library/RP6control/RP6Control_I2CMasterLib.c:172: warning: array subscript is above array bounds[\code]
Was kann ich denn gegen das ADC-Problem auf der M32 machen?
Wie schreibe ich deren Werte in zwei Buffer?
Grüße
-
uint8_t sensorBuf[24];
sensorBuf[] ist nicht groß genug für leds = sensorBuf[26];
-
ahh, klar. Danke !!!
Das hab ich Vergessen :|
Und die ADC-Sache?
-
Hi!
Ich möchte gerade die ADCs der M128 via BT senden.
Habe dafür folgendes im Manual gefunden:
Code:
Syntax
word ADC_Set(byte v_ref,byte channel);
Sub ADC_Set(v_ref As Byte,channel As Byte) As Word
Beschreibung
Die Funktion ADC_Set initialisiert den Analog-Digital_Wandler. Die Referenzspannung und der Messkanal
werden ausgewählt, und der A/D Wandler für die Messungen vorbereitet. Der Meßwert wird danach mit
ADC_Read() ausgelesen.
Parameter
channel Portnummer (0..7) des ADC (Port A.0 bis A.7 bei Mega32, Port F.0 bis F.7 bei
Mega128)
v_ref Referenzspannung (siehe Tabelle)
Ich mache das mit Fabian E.'s Code:
Code:
print("Bat:");
printInteger(adcBat);
print("\n");
oldBat = adcBat;
Daher, denke ich, muss es dann folgendermaßen aussehen:
Code:
ADC_Set(ADC_VREF_VCC,0)
print("ADC0_M128:");
printInteger(ADC_Read(void));
print("\n");
Leider kommt da nix bei mir an...
Vg,
Fabian
-
Was ist "nix"? Null?
Was hast du an PF0 (ADC-Stecker Pin 4) angeschlossen?
-
Gar nix:
Code:
#*#*#
[DATA]
PowerL:3
LightL:887
LightR:875
[/DATA]
[DATA]
PowerL:4
LightL:886
LightR:874
Temp:2469
[/DATA]
Code ist wie oben, erst et, dann print(read).
-
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:
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");
erste Frage: Was soll das tmp[16]?
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?