Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Serielle Messwertausgabe Kategorie: Verschiedenes (von Peter S - 26.08.2005 17:16)
Als Antwort auf Re: Serielle Messwertausgabe von Ralf Broeske - 23.08.2005 19:38
Ich nutze:
C-Control Pro Mega32, CC-Pro 32 Application Board
Hallo,

sorry wegen der Verzögerung, aber ich habe momentan viel zu tun. Mit folgenden Code kann man Zahlen
in einen Text ausgeben:

char Ausgabe[6];
word ADC_Wert;

// schreibt ein word in den String mit einem offset von 0 (also direkt an den Anfang)
// die Basis ist 10 (also dezimal), und die minimale Breite ist 0 (bei grö�eren Werten wird der Text
// evtl. mit Nullen am Anfang aufgefüllt)
Str_WriteWord(ADC_Wert,10,Ausgabe,0,0);

Am besten mal mit den Werten rumspielen un den String dann mit Msg_WriteText in die Debugausgabe
schicken. Sicherheitshalber den String schon mal länger definieren, z.B. char Ausgabe[12];

Gruss Peter

> Hallo Peter,
>
> vielen Dank für deine Antwort...ich verzweifle an diesem Ding. Leider ist die begeleitende
> Einführung der C-Control pro nichts für Anfänger...
> Ich habe mir aus den Beispielprogrammen was zusammengebastelt, mit dem msg-Befehlen sehe ich
> auch das Egebnis im Debugfenster. Jetzt muÃ? allerdings der Messwert 'ADC_Wert' offensichtlich um-
> gewandelt werden um ihn mit dem 'Serial_Write' Befehl über RS232 ausgeben zu können. Aber
> mit den vorleigenden Angaben bekomme ich das nicht geregelt. Meine Frage lautet somit wie muÃ?
> ich die Umwandlung des ADC Messwertes vornehmen um den String dann ausgeben zu können ?
> Ich möchte lediglich eine Zahl für den Messwert erhalten dann Zeilenumbruch, neuer Messwert etc...
>
> anbei das Programm wie es jetzt ist..
>
> kannst du helfen ??
>
> // ADC_0: Messwertausgabe
> // Eingang ADC0 PA0 (PortA.0)
> // erforderliche Library: IntFunc_Lib.cc
>
> // Der Me�wert wird über die serielle Schnittstelle ausgegeben
>
> // Der ADC hat eine Auflösung von 10 Bit.
> // Bei einer Referenzspannung von 5V bedeutet dies 4,8828mV/Bit. (5V/1024Bit)
> // Als Referenzspannung kann Vcc, die interne Referenz(2,56V)
> // oder eine externe Spannung verwendet werden.
>
> // Deklaration der Formatierungsvariablen
> #define LF 0x0A
> #define CR 0x0D
> #define SPACE 0x20
>
> //------------------------------------------------------------------------------
> // Auswertung der am verwendeten Eingang anliegenden Spannung unter
> // Berücksichtigung der angegebenen oberen und unteren Limits.
> //
>
>
> void ADC_Check_Limit(byte channel,word limit_low, word limit_high)
> {
>     word ADC_Wert;                      // In dieser Variablen wird der
>                                         // gemessene Wert gespeichert.
>     char Ausgabe[6];                    // In dieser Variablen wird der Messwert
>                                         //gespeichert und seriell ausgegeben
>     ADC_Set(ADC_VREF_VCC, channel);     // Festlegung der BezugsgröÃ?e des Eingangskanals
>                                         // und Bestimmung des verwendeten Kanals.
>                                         // In diesem Fall werden alle gemessenen
>                                         // Werte auf 5V bezogen.
>     ADC_Wert=ADC_Read();                // Einlesen des Wertes des Kanals
>
>     Msg_WriteChar(CR);                  // Ausgabe: Wagenrücklauf
>     Msg_WriteChar('A');                 // Ausgabe: A
>     Msg_WriteChar('D');                 // Ausgabe: D
>     Msg_WriteChar('C');                 // Ausgabe: C
>     Msg_WriteChar(channel|0x30);    // Ausgabe der Kanalnummer über eine
>                                      // bitweise ODER-Verknüpfung mit dem
>                                         // Hexwert des ASCII-Zeichens 0.
>     Msg_WriteChar(SPACE);           // Ausgabe: Leerzeichen
>     Msg_WriteChar(':');             // Ausgabe: :
>     Msg_WriteChar(SPACE);           // Ausgabe: Leerzeichen
>     Msg_WriteWord(ADC_Wert);         // Ausgabe: gemessener Wert
>
>     Serial_WriteText(Ausgabe);
>     Serial_Write(CR);
>     Serial_Write(LF);
>
> }
> //-------------------------------------------------------
> // Hauptprogramm
> //
> void main(void)
> {
> Serial_Init(SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD9600);
>
>
>     while (1)
>     {
>         // Funktionsaufruf mit Angabe des verwendeten Kanals,
>         // des unteren und des oberen Limits.
>         // Beide Limits wurden in Bezug auf die verwendete Referenzspannung
>         // ADC_VREF_VCC (5V) berechnet.
>         // unteres Limit 3,5V: 3,5V/4,8828mV = 717 (0x02CD)
>         // oberes Limit 4,5V:  4,5V/4,8828mV = 922 (0x039A)
>
>         ADC_Check_Limit(ADC0,0x02CD, 0x039A);
>
>         // Der Eingang wird alle 500ms gelesen und ausgewertet.
>         AbsDelay(50);
>     }
> }
>
>
>
>
> > Hallo Ralf,
> >
> > wie möchtest Du denn die Daten über die serielle ausgeben? Mit Serial_Write() kann man ein Byte auf
> > die Serielle schicken, oder man konvertiert die Werte in einen Text String und gibt sie dann mit
> > Serial_WriteText() aus. Es gibt mehrere Beispielprogramme, wie man Text in einen String schreibt.
> > Man kann die Messwerte z.B. mit Str_WriteInt() in den String schreiben und dann ausgeben.
> >
> > Gruss Peter
> >
> > > Hallo liebe Anwender,
> > >
> > > kann jemand einem C-Neuling eine Hilfestellung geben. Wir versuchen einen Messwert vom
> > > ADC-Port über die serielle Schnittstelle auszugeben. Textausgaben funktionieren, aber wie
> > > bekomme ich den Messwert direkt über die Schnittstelle gesendet ? Kann hier jemand helfen ?
> > >
> > > Vielen Dank
> > >
> > > Ralf


    Antwort schreiben


Antworten:

Re: Serielle Messwertausgabe (von Reiner S. - 29.08.2005 15:51)