Forum: Mikrocontroller und Digitale Elektronik 10 bit Wandlung ATmega128


von Carsten Köditz (Gast)


Lesenswert?

Tag zusammen!

Ich hab eine 10 bit Wandlung versucht weiter zu brechnen.

Schaut mal:

unsigned char wandlung_Lspg;
unsigned char wandlung2_Lspg;
unsigned int a;
unsigned int a1;

read_adc(0x00);
wandlung_Lspg  = ADCL;
wandlung2_Lspg = ADCH;
a  = (wandlung2_Lspg << 8);
a1 = (a | wandlung_Lspg);
laserspg = a1 * 0.01961;

Bei der Version sagt mein Compiler aber:

shift result will be 0

Kann mir einer sagen wieso? Was mach ich denn da falsch?

Jetzt schon Danke!

Gruß

Carsten

von Dieter B (Gast)


Lesenswert?

Hallo

Da du wenig schreibst welchen Compiler du nimmst, nehme ich an, du
nimmst WINAVR.

Bei mir läuft der Code im Simulator. Ich nehme ja an, das du auch Komma
Stellen haben möchtest, dann würde sich ein float an bieten. Auch
kannst du mit ADCW auf den ADC Wert zugreifen.


float static laserspg;

laserspg =  ADCW * 0.01961;

Klappt im Simulator gut.

MFG
Dieter

von crazy horse (Gast)


Lesenswert?

weiss nicht genau, ob sich alle Compiler gleich verhalten.
a  = (wandlung2_Lspg << 8);
kann heissen, wandlung2_Lspg (ist ja ein char) wird um 8 Stellen
verschoben und dann dem int zugewiesen und ist damit immer 0. Die
andere Alternative wäre, dass es erst zugewiesen (16bit) und dann
geschoben wird.
funktionieren muss auf jeden Fall:

a=wandlung2_Lspg;
a=a<<8

oder:
a=(int) wandlung2_Lspg<<8;

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.