HAllo, Ich bin noch ein Anfänger mit dem folgenden Problem. Ich habe ein Zigbee-Modul mit einem PIC18 MCU. Ich möchte ein Signal übertragen, habe aber ein Problem mit der Darstellung am Empfangs-Hiperterminal. Ich habe das Signal am 10bit AD-Wandler angeschlossen und die Digitaldaten in den Sendepuffer übertragen: Sender: unsigned int16 adresult; //AD-Wert //Einstellung der Register für AD-Wandlung - - while (1) //Start AD-Wandlung //Warten bis Convert-Ende, dann: adresult = ADRESL; //Get the 8 bit result adresult += (ADRESH << 8) // Get the 2 bits MSB result FlushTx(); // löschen des Sendepuffer WriteData(adresult); //senden der Daten --------------------------------------------------------- Empfänger: - - for (i=0; i < rxFrame.Payloadsize; i++) consoleput(rxFrame.Payload[i]) // hier wird byteweise ausgelesen ---------- void consoleput(Byte C) //hier wird byte für byte an Terminal übertragen { while( !consoleIsPutReady() ); TXREG = c; } --------------------------- Jetzt mein Problem. Auf dem Hiperterminal bekomme ich nichts lesbares. Muss ich die Werte erst umwandeln? Wie mache ich das? Hoffe auf Hilfe! VG
1. glaube ich nicht, dass der sendebuffer aus uint16 besteht sondern aus uint8. also übertrage die beiden ADC-bytes auch als solche und setzte sie dann beim empfänger zusammen. 2. möglicherweise wird bei "adresult += (ADRESH << 8)" der shift zuerst ausgeführt (dann ergibt deine klammer immer null) und wird dann addiert. mach mal das so (ich weiss, es gibt elegantere lösungen): adresult = ADC_highbyte; adresult <<= 8; adresult += ADC_lowbyte; 3. wenn du den wert aber sowieso wieder via hyperterminal byteweise überträgtst, wieso dann überhaupt zu einem uint16 zusammensetzen? fazit: belass das messresultat so lange als 2 bytes bis zu dem punkt, an dem du den wert zum berechnen oder anzeigen brauchst; das wäre in deinem fall nach dem hyperterminal.
Hallo, Danke für die antwort. Punkt "4" macht Sinn! Ich übertrage also ADRESH und ADRESL byteweise zum Empfänger und sende es dann byteweise zum Terminal. Was muss ich denn machen, dass im Terminal diese 2 bytes (ADRESL + ADRESH) als ein 10-Bit Wert angezeigt werden. Also z.B. soll die Bitfolge 0b00000111 (AdDRESH) und 0b11111111 (ADRESL) am Terminal als 3 Volt angezeigt werden.
ich vermute mal, dass dein terminal deine "anzeige" ist? also muss das terminal programmiert werden (geht das?) oder dann muss die letzte instanz vor dem terminal die umrechnung vom 10bit-ADC-wert in die einzelnen char-zeichen machen und diese zeichen dann einzeln an dein terminal senden. kommt halt darauf an, ob dein terminal die letzte "funktion" ist...
es wäre sehr hilfreich, wenn du ein schema zeigen könntest, wie das mit zigbee, PIC18, terminal etc alles zusammen geschlossen ist..
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.