Forum: Mikrocontroller und Digitale Elektronik SDCC & MAX1271


von Sascha (Gast)


Lesenswert?

Ich möchte in C den AD-Wandler MAX1271 ansteuern.

Bloß ich weiß nicht, wie ich in C Bits schieben kann, um Sie an einen 
Port-Pin auszugeben oder um Sie von einen Port-Pin zu lesen.
Ich muß eine Byte Bitweise ausgeben um eine AD-Wandlung zu starten.
Dann muß ich zwei Bytes Bitweise lese, um den AD-Wert zu bekommen.
Habe folgende Definitionen

P5_0 Chip-Select AD
P5_1 Dateneingang MAX1271
P5_2 Takt für Datenübertragung
P5_3 Abfrag ob Wandlung fertig 0= Wandelt noch
P5_4 Datenausgang MAX1271

Kann mir jemand behilflich sein??

Hab mit C kaum Erfahrung.

Gruss Sascha

von Sascha (Gast)


Lesenswert?

Kann mir keiner helfen?

von Tobias Arnold (Gast)


Lesenswert?

Klar kann Dir geholfen werden. Ich habe zwar keine Ahnung von 
AD-Wandlern, es geht aber mehr ums Schieben.

Geschoben wird in C mit den Operatoren >> und <<

Ein Byte 'rausshiften' geht so :

unsigned char testbyte=88;
int i;

for (i=0;i<8;++i)
{
   AusgabeBit(testbyte&1);  // 1. Bit extrahieren
   testbyte>>=1; // Testbyte eine Stelle nach rechts shiften
}

Ein Byte 'reinshiften' geht so :

unsigned char testbyte=0;
int i;

for (i=0;i<8;++i)
{
   testbyte<<=1; // Testbyte eine Stelle nach links
   testbyte+=EingabeBit();  // Bit hinzufügen
}

Wobei AugabeBit, bzw. EingabeBit deine noch zu programmierenden 
Funktionen sind, die jeweils physikalisch ein Bit einlesen oder 
ausgeben.

Gleiches gilt auch für Integerwerte 16 (statt 8).
Vorsicht ! i.d.R. immer mit unsigned Werten arbeiten, sonst wird der 
Wert beim Shift Vorzeichenrichtig betrachtet und das u.U. ungewollte 
Auswirkungen haben.

Tobias

von Sascha (Gast)


Lesenswert?

Habe die Ansteuerung endlich hinbekommen. Jetzt aber das nächste 
Problem, wie wandle ich die gelesenen Werte, um sie dezimal auf ne 
Anzeige auszugeben??

gruss sascha

von Sascha (Gast)


Lesenswert?

Um meine Frage zu verdeutlichen:

Ich habe den ADWERT, der ist 16bit. Nachdem ich mir die richtige Wert 
erechnet habe, dies ist auch wieder ein 16bit-wert. Dies will ich auf 
einem Display anzeigen, mit einem Komma. Wie z.b = 16.84V.
Das Display ist mit nem T6963C Controller, also nich ASCII kompatibel.
Hab zwar schon was von den prinf-befehlen gehört, hab sowas für die 
Display-Steuerung nicht verwendet.

von Tobias Arnold (Gast)


Lesenswert?

Wie liegt denn das Komma ? Zwischen den beiden Bytes ? Ist der 
Nachkommawert ein normales Bytes, welches Du nur als Nachkommastellen 
interpetierst, oder haben die Bits die Wertigkeit 2^-1, 2^-2, 2^-3 etc.

Die einzelnen Ziffern einzens Bytes kannst Du im allgemeinen so 
ermitteln:

unsigned char testbyte=88;

do
{
printout(testbyte%10);
testbyte/=10;
} while (testbyte!=0);

wobei printout() deine Routine ist, die ein Zeichen ausgibt.
Vorsicht. Die einzelnen Ziffern werden von rechts nach links geliefert.

Tobias

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.