Forum: Mikrocontroller und Digitale Elektronik Ad-Wandlung am PIC und Hiperterminal-Problem


von Chris (Gast)


Lesenswert?

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

von Master S. (snowman)


Lesenswert?

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.

von Chris (Gast)


Lesenswert?

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.

von Master S. (snowman)


Lesenswert?

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...

von Master S. (snowman)


Lesenswert?

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
Noch kein Account? Hier anmelden.