Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > Hallo, > mit folgenden kleinen Änderungen funktionierts. > > // 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[4]; // 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 > > Str_WriteWord(ADC_Wert,10,ausgabe,0,0); // Ist die USB Schnittstelle nicht angesteckt, > Serial_WriteText(ausgabe); // sind diese Zeilen nicht erforderlich. > Serial_Write(CR); // Alle Msg_Write... Befehle werden dann direkt > } // über die RS232 Schnittstelle ausgegeben. > > //------------------------------------------------------- > // Hauptprogramm > // > > void main(void) > { > char ausgabe[5]; > 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(500); > } > } > Gruß > Reiner > > > 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