www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik A/D --> serielle Ausgabe


Autor: Thomas Kronschläger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !

Ich möchte mit meinem C167CR-LM Board einen Wert, den der
A/D Wandler einliest, auf die serielle Schnittstelle
ausgeben.
Die Ausgabe an sich funktioniert schon, nur muss ich meiner
Methode eine String übergeben und der A/D Wandler gibt eine
10 Bit Binärzahl zurück. Tja, mein Problem dabei ist jetzt
wohl die Umwandlung der Binärzahl in einen String.

In diesem Forum war ein solches Thema, die Umwandlung von
int in ascii code, schon einmal in Diskussion. Es wurde auf
die Funktion itoa verwiesen, die aber mein Compiler (Keil)
glaube ich für den C167 nicht kennt. Oder müsste ich dazu
spezielle Headerfiles inkludieren ?


Mfg, Thomas

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

unter http://www.avr-asm-tutorial.net/avr_de/rechnen/index.html hat's
ein paar clevere Routinen, allerdings in Assembler. Vielleicht hilft's
Dir ja.

Sebastian

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
//*********************int Zahl in BCD umrechnen ******************
void Convert_Numb (int Zahl)
        {
        int Help;

            Help  = Zahl / 1000;
            Byte_T  = Help + 0x30;

            Zahl = Zahl - (Help * 1000);
            Help  = Zahl / 100;
            Byte_H  =  Help + 0x30;

            Zahl = Zahl - (Help * 100);
            Help  = Zahl / 10;
            Byte_Z  =  Help + 0x30;

            Zahl = Zahl - (Help * 10);
            Help  = Zahl;
            Byte_E  =  Help + 0x30;

        }
//***************************************************************

Autor: Thomas Kronschläger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi !

Habe das Problem schon anders gelöst, trotzdem danke für eure
Tipps !

//10 Bit binär (Rückgabewert des A/D Wandlers)
//auf die serielle Schnittstelle ausgeben:
//-----------------------------------------------------------

void main(void)
{

unsigned int x;
char i[13];
int j;
int k;
int x1;

init();


  while( 1 ) {
    ADCON = (0xF080 | 9);
    while (ADBSY == 1) {};
    x = (ADDAT & 0x3ff);

  for( j=0;j<10;j++ ) {
    x1=x;
    for( k=0;k<j;k++) {
      x1=x1/2;
    }
    x1=x1%2;

    if(x1==1) {
      i[9-j]='1';
    }
    else {
      i[9-j]='0';
    }
  }
  i[10]='\r';
  i[11]='\n';
  i[12]=0;
  asc_writestring( i );

}
//------------------------------------------------------

Grüße, Thomas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.