PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : fertig mit usart?



katiiiiii
14.04.2005, 09:43
hallo leute!

so, jetzt hab ich euren vorschlag mit union verwirklicht. nun habe ich das problem, dass 4 warning kommen mit der meldung: code has no effect!
wär jemand so nett und könnt sich das mal anschaun und kontrollieren was da vl falsch sein könnte?

wär ganz toll!


liebe grüße kati

PicNick
14.04.2005, 09:54
Hi, Katiiiiiiiiiiii !

for(i=0; i<4; i++)
{
x.mag_xc[i];
}
diese Zeile in der for-schleife hat mal sicher keinen effekt.

Es wär besser (bei compiler-fehlern) wenn du die *.LST -datei (mit den Compile -Meldungen) schicken tätest.

EDIT: nachträglich alles Gute !

katiiiiii
14.04.2005, 10:10
hi!

danke!

was könnt ich den da anders machen? ich hab des ja so geschrieben, wie mir geraten ist worden.

mfg
kati

katiiiiii
14.04.2005, 10:11
aja, die lst-datei, kann i net hinzufügen. ist nicht erlaubt,aber i könnts zippen!

liebe grüße kati

PicNick
14.04.2005, 10:12
temperatur.temp=1623;
x.mag_x=1672122;
y.mag_y=1672312;
z.mag_z=1672312;


hier befüllst du in deinen unions die Double-Werte. Gut

In der timer-routine willst du sie schicken. in nehm als beispiel den ersten transmit-code, die anderen sind eigentlich genauso



void USART_Transmit()
{
while(!(UCSRA.5)); // warten, bis Buffer leer
temp1=temperatur.tempc[0]; // das erste byte des double
UDR=temp1; // weg damit
while(!(UCSRA.5)); // wieder warten, bis Buffer leer
temp2=temperatur.tempc[1]; // das 2. byte des double
UDR=temp2; // weg damit
while(!(UCSRA.5)); // wieder warten, bis Buffer leer
temp3=temperatur.tempc[2]; // das 3. byte des double
UDR=temp3; // weg damit
while(!(UCSRA.5)); // wieder warten, bis Buffer leer
temp4=temperatur.tempc[3]; // das 4. byte des double
UDR=temp4; // weg damit
}


Da aber der Compiler bezahlt ist (nehm ich an), soll er was arbeiten. Das Gleiche, aber kompakter:




void USART_Transmit()
{
unsigned char i;
for (i=0;i<4;i++)
{
while(!(UCSRA.5));
UDR=temperatur.tempc[i];
}
}


Verständlich ?

katiiiiii
14.04.2005, 10:22
hi! danke, das war schon verständlich!
i hab das jetzt zwar ausgebessert, aber hat trotzdem die gleichen fehlermeldungen.

hier, send ich gleich die lst-datei mit.

liebe grüße
kati

PicNick
14.04.2005, 10:51
So dala.

Ich hab den Code mal auf das zusammengeschraubt, was direkt zum senden der vier Werte notwendig ist.

Die sagenhafte "union" gibt's nur einmal, die wird nur direkt beim senden verwendet.

Die Werte sind in 4 normalen doubles (ohne union), weil außer zum senden hast du ja nix davon.

Noch was: "Warnings" heißt nur, daß dem Compiler irgendwas seltsam vorkommt. Technisch ist das Programm aber o.k.

Schau mal, ob der Fuzzy das übersetzen kann, theoretisch sollte es auch funktionieren, ich hab nur hier im Büro keinen Mega zum ausprobieren, das täte auch blöd ausschauen.

katiiiiii
14.04.2005, 11:12
danke für alles!

aber i hab noch eine frage, wie werden die vier bytes aufgeteilt? in int werte? und wie sollen wir sie dann wieder zusammenrechnen, weil mein schulkollege ein java programm dafür geschrieben hat.

liebe grüße
katrin

katiiiiii
14.04.2005, 11:13
danke für alles!

aber i hab noch eine frage, wie werden die vier bytes aufgeteilt? in int werte? und wie sollen wir sie dann wieder zusammenrechnen, weil mein schulkollege ein java programm dafür geschrieben hat.

liebe grüße
katrin

PicNick
14.04.2005, 11:41
Es sind immer dieselben 4 bytes, aber als "double" definiert gehören sie zusammen, als "char" nehmen wir sie einzeln
die effektive speicheraddresse von dem "double" und "char[0]" ist die gleiche
A propo: der Kollege mit dem Java-Häferl hat das gleiche problem. Er muß die 4 einzelnen Bytes von dir zusammenhängen, dann aber zusammen als "double" oder "float" oder sowas "re"-definieren. Ich nehm halt mal an, das er das eh kann.

katiiiiii
14.04.2005, 11:57
danke für deine antwort. der mit dem java-häferl, weiß net so ganz wie er des zusammen fügen muss.

zur zeit hat er des so gemacht, wie ihm des der lehrer gesagt hat, aber der kennt sich no weniger aus als wir.

public void serialEvent(SerialPortEvent e) {

switch (e.getEventType()) {
case SerialPortEvent.DATA_AVAILABLE:
try {
while (in.available() > 0) {

temp1 = in.read();
temp2 = in.read();
temp3 = in.read();
temp4 = in.read();

mag_x1 = in.read();
mag_x2 = in.read();
mag_x3 = in.read();
mag_x4 = in.read();

mag_y1 = in.read();
mag_y2 = in.read();
mag_y3 = in.read();
mag_y4 = in.read();

mag_z1 = in.read();
mag_z2 = in.read();
mag_z3 = in.read();
mag_z4 = in.read();

i++;
setValue();

}

} catch (IOException ev) {
}
break;
}

}

public static void addition() {

temp_all = temp1 + (temp1 * 256) + (temp3 * 65536)
+ (temp4 * 16777216);
mag_x_all = mag_x1 + (mag_x2 * 256) + (mag_x3 * 65536)
+ (mag_x4 * 16777216);
mag_y_all = mag_y1 + (mag_y2 * 256) + (mag_y3 * 65536)
+ (mag_y4 * 16777216);
mag_z_all = mag_z1 + (mag_z2 * 256) + (mag_z3 * 65536)
+ (mag_z4 * 16777216);

}

public static void setValue() {
System.out.print("\n\n Durchgang: " + i);
System.out.print("\n Temp:" + temp_all);
System.out.print("\n Magnetfeld X:" + mag_x_all);
System.out.print("\n Magnetfeld Y:" + mag_z_all);
System.out.print("\n Magnetfeld Z:" + mag_x_all);

kennst du dich damit vl auch aus?

liebe grüße Kati

bad-joker
14.04.2005, 12:03
Hallo Kati
Darf ich mal ganz blöd fragen was ihr denn da machts. Ihr messts mit vier Sensoren (Temperaturen oder Magnetfelder) und berechnet daraus ein gesamtes Magnetfeld, bzw die Komponenten in den drei Raumrichtungen. Wäre es möglich genauere Informationen über die Sensoren und den Auswertealgorithmus (sagen wir mal übers ganze Projekt ;-) ) zu kriegen?
Gruss
Thomas

katiiiiii
14.04.2005, 12:15
also, wir machen als projekt eine magnetfeldmessanlage, welche uns die 3 verschiedenen ausrichtungen vom magnetfeld und die temperatur(nur als zusatz) ausgibt. wir sind 4 schüler und jeder von uns muss allein etwas schaffen. i bin fürs übertragen eingeteilt worden und unser lehrer kennt sich halt nix aus und ist uns nicht wirklich eine große hilfe.

als sensoren verwenden wir fluxgate sensoren, die wir aber noch nie bekommen haben.

hier ist unsere aufgabenstellung:
a. Basisstation: Die Basisstation besteht aus einem µC, welcher die Frequenz aus den Impulsen von 3 Fluxgatesensoren mittels ?Timer? errechnet. Zusätzlich wird für die Kalibrierung der aktuelle Temperaturwert eingelesen und mit den Messergebnissen abgeglichen.
b. Funkübertragung: Für die Funkübertragung wird ein Bluetoothmodul mit RS232 Anbindung verwendet. Die Daten (fx, fy, fz, t und temp) werden mittels Packet- Kapselung (Frames) per RS232 übertragen.
c. PC: Die Daten werden mittels RS232 am PC eingelesen und weiter verarbeitet. Die Ausgabe am PC erfolgt mittels Diagrammen. Als Programmiersprache wird Java verwendet.

nur das mit der funkübertragung wird sich nicht ausgehn.

mfg
kati

bad-joker
14.04.2005, 12:20
Danke für die Infos. Das kling schon recht interessant. Ihr messts also die Erdmagnetfelder oder?
Ansonsten noch viel Glück
Thomas

PicNick
14.04.2005, 12:24
@bad joker: lesen hilft. Du wirst sehen, wir sind noch bei den absoluten roots. Jetzt gehts mal um den datentransfer und sonst nix. Nix algorithmus, nix biorhythmus, es gibt auch nur eine Raumrichtung: Mega-->PC und der Vektor geht mitten durch die UART und den MAX232.

@Katiiiii : Bin leider kein Javerianer. Aber die Addtion klappt SO keiner Sprache. Du schickst ein double, und das besteht aus exponent und Mantisse, beides digital verwurstelt.
Er braucht UNBEDINGT sowas ähnliches wie "union" / "cast" oder "redefine", sonst endet es tragisch.
Es gibt im Forum ein paar Java-Gurus, mir fällt leider grad kein Name ein.
Aber ich find einen.

bad-joker
14.04.2005, 12:40
War nur so ne Frage
Aus dem Quellcode von Kati entnehme ich, dass sie/ihr das Magnetfeld für die x,y,z-Achse berechnets. Diese drei Achsen werden auch als die drei Raumrichtungen bezeichnet.
nix für ungut
Thomas

PicNick
14.04.2005, 12:45
@joker: alles klar, auch nicht bös gemeint. Aber schon Berthold Brecht sagte: Erst kommt die UART, und dann kommt die Moral
(offensichtlich auch ein Megaxx-Bastler)

PicNick
14.04.2005, 12:49
@Katiii: Einen hab' ich gefunden, ich weiß nicht, ob er online ist.
Schreib ihm vielleicht eine PN oder sowas.

MJA