Forum: Mikrocontroller und Digitale Elektronik Int zu String


von chn (Gast)


Lesenswert?

hallo,

ich benutze einen 16bit ad wandler um Messwerte von einem Sensor 
einzulesen.
die Bits, welche ich vom ad wandler bekomme werden in eine "unsigned 
int" variable gespeichert.
Wie kann ich die diese variable nun in einen "char" umwandeln um sie auf 
die serielle schnittstelle legen zu können?


Programm zum einlesen der einzelnen bits vom ad wandler:

unsigned int spi_readData()
{
  int i;
  unsigned int rByte=0;

  CS=0;

  for(i=0;i<16;i++)
  {
    rbyte<<=1;
    rByte|=DIN;

    SCLK=0;
    SCLK=1;

  }

  CS=1;
  return rByte;
}

von Rahul, der Trollige (Gast)


Lesenswert?

Hex- oder dez-Datsrellung?

von pumpkin (Gast)


Lesenswert?

rbyte_blumenkohl = rbyte % 0x100;
rbyte_buletten = rbyte / 0x100;

pumpkin

von Michael Wilhelm (Gast)


Lesenswert?

> for(i=0;i<16;i++)
> {
>    rbyte<<=1;
>    rByte|=DIN;
>    SCLK=0;
>    SCLK=1;
>  }


for(i=0;i<16;i++)
{
    rByte|=DIN;
    if (rbyte < 15) rbyte<<=1;

    SCLK=0;
    SCLK=1;
}
Das ist mir als erstes aufgefallen. Du schiebst bevor du schreibst. Das 
bedeutet, dass das MSB immer 0 ist (wenn die Variable vor dem 
Schleifendurchlauf gelöscht wird.
Ansonsten:
unsigned char low,high;
low = (unsigned char rByte;
high = rByte >> 8;

MW

von Michael Wilhelm (Gast)


Lesenswert?

low = (unsigned char) rByte;

Eine Klammer im casting vergessen.

MW

von pumpkin (Gast)


Lesenswert?

> Das bedeutet, dass das MSB immer 0 ist [...]

halte ich für ein gerücht. die wird in jedem fall zum schluss oben 
'rausgeschoben'. ergo: irrelelvant. und die typecast aktion finde ich 
auch mehr als bedenklich - imho sollte man das nur von klein nach groß 
machen, umgedreht nur wenn man weiss was da tatsächlich geschieht.

pumpkin

von Michael Wilhelm (Gast)


Lesenswert?

@ pumpkin,
hast recht, hab mich vertan.

MW

von chn (Gast)


Lesenswert?

an Rahul

am besten wäre dez darstellung!

von chn (Gast)


Lesenswert?

an pumpkin

rbyte_blumenkohl = rbyte % 0x100;
rbyte_buletten = rbyte / 0x100;

dann hätte ich zwie char mit je 8bit, nur wie kann ich die dann auf die 
serielles schnittstelle legen?

von Rahul, der Trollige (Gast)


Lesenswert?

rInt sei Rückgabewert:

unsigned char s[6];
uint_16 n = 10000;
unsigned char i=0;

s[0]= '0';
s[5] = '\0';
while (rInt>0)
{
  while (rInt>=n)
  {
    s[i]++;
    rInt -= n;
  }
  n /= 10;
  i++;
}


oder guck in die K&R-Bibel...

von pumpkin (Gast)


Lesenswert?

die zwei acht bit werte legst du in den buffer der seriellen 
schnittstelle. (wenn ich dich richtig verstehe willst du den 
kladderadatsch wieder per SPI rausschieben?!?!)

pumpkin

von chn (Gast)


Lesenswert?

an pumpkin

also muss ich nur die bits einzeln in den buffer der seriellen 
schnittstelle legen; verbindung erfolgt mit serieller schnittstelle (rx 
,tx) und nicht über spi (din, dout,...)

von Karl H. (kbuchegg)


Lesenswert?

> also muss ich nur die bits einzeln in den buffer der seriellen
> schnittstelle legen

Hast du dir schon mal das Tutorial angeschaut?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Der_UART

Nein, das musst du nicht. Die Serielle hat ein
Datenregister. Dort schreibst du dein Byte rein
und um den Rest kümmert sich die serielle
Schnittstellenkomponente im µC.

von chn (Gast)


Lesenswert?

ok danke leute

mfg chn

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.