SDCC & MAX1271

Gast #4307
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
Gast #4309
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
Gast #4311
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.
Gast #4312
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.