Hantering av signed integers i C
Postat: 13 juni 2005, 23:54:59
Tänkte att det var lika bra att starta en ny tråd när det är ett nytt problem. Det är fortfarande en atmega32.
Håller på och samplar en signal i differential mode på AD0 och AD1 då den svänger runt nollan och jag vill ha med tecknet.
Problemet är att från AD:n får jag ett 10-bitars signed värde och det ska jag lagra i en signed 16-bitars integer så jag måste flytta tecknet.
Trodde att det bara var att göra på följande sätt:
Men de negativa värdena tenderar att hamna på -500, dvs nära min för ett 10-bitars signed värde. Jag misstänker att det är nån form av två-komplementsrepresentation som jag missar... men är alldeles för trött av en dags trial and error 
Vore tacksam för lite hjälp.
Håller på och samplar en signal i differential mode på AD0 och AD1 då den svänger runt nollan och jag vill ha med tecknet.
Problemet är att från AD:n får jag ett 10-bitars signed värde och det ska jag lagra i en signed 16-bitars integer så jag måste flytta tecknet.
Trodde att det bara var att göra på följande sätt:
Kod: Markera allt
s16 buffert[250];
Kod: Markera allt
buffert[samplecounter] = a2dConvert10bit(ADC_CH_1_0_DIFF10X);
// Check if sign bit is set
if((buffert[samplecounter] & 0b0000001000000000)==0b0000001000000000)
{ // move the sign to the 16th bit instead of the 10th
buffert[samplecounter] &=~0b0000001000000000;
buffert[samplecounter] |=0b1000000000000000;
}

Vore tacksam för lite hjälp.