Ad-Wandlung am PIC und Hiperterminal-Problem

Gast #1850386
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
#1850854
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.
Gast #1852343
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.
#1853272
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren