Forum: Mikrocontroller und Digitale Elektronik SPI angeschlossener Chip muss nach dem Reset initialisiert


von Beranger888 (Gast)


Lesenswert?

Randbedingungen:
   • Ein über SPI angeschlossener Chip muss nach dem Reset
initialisiert werden.
   • Die SPI Routine zum Schreiben eines Registers mit einem bestimmten
Wert ist bereits
vorhanden. Sie heisst void SPI_WriteReg(UINT8 register, UINT8 value).
   • Der Chip enthält insgesamt 16 Register die von 0 bis 15
adressierbar sind.
   • Die Register des Chips müssen laut Hersteller mit folgenden Werten
in der
angegebenen Reihenfolge aufgesetzt werden:
    Register0 = 12
    Register12 = 13
    Register13 = 3
    Register15 = 56
    Register1 = 129
    Register12 = 2
    Register7 = 212
   • Die Tabelle der aufzusetzenden Register ist laut Spezifikation des
Herstellers
vorläufig. Es ist daher gut möglich, dass noch weitere Register zu
initialisieren sein
werden.

Erstellen Sie eine allgemeine ChipInit() Funktion in C um den Chip
entsprechend der Tabelle
zu initialisieren.
Achten Sie auf Erweiterbarkeit falls in Zukunft noch weitere Register
initialsiert werden
müssen.

von edi-edi (Gast)


Lesenswert?

Ahh....si j'avais le temps de faire tes devoires....

von tubbu (Gast)


Lesenswert?

^^

von Peter D. (peda)


Lesenswert?

Am elegantesten mit einer Struct-Tabelle und dann die Tabelle bis zum
Ende ausgeben (sizeof-Operator).

Die Tabelle kann dann beliebig erweitert werden.


Peter

von Beranger888 (Gast)


Lesenswert?

Hi Peter,

Kannst du mir ein Ansatz geben ? Wie meinst du mit sizeof-Operator ?
Ich bin eigentlich Neuling in den Sachen.

Ich danke dir.

Beranger

von Beranger888 (Gast)


Lesenswert?

Hallo, hier ein Problem mit dem SPI Verbingung

Randbedingungen:
• Ein über SPI angeschlossener Chip muss nach dem Reset initialisiert
werden.
• Die SPI Routine zum Schreiben eines Registers mit einem bestimmten
Wert ist bereits
vorhanden. Sie heisst void SPI_WriteReg(UINT8 register, UINT8 value).
• Der Chip enthält insgesamt 16 Register die von 0 bis 15 adressierbar
sind.
• Die Register des Chips müssen laut Hersteller mit folgenden Werten in
der
angegebenen Reihenfolge aufgesetzt werden:
o Register0 = 12
o Register12 = 13
o Register13 = 3
o Register15 = 56
o Register1 = 129
o Register12 = 2
o Register7 = 212
• Die Tabelle der aufzusetzenden Register ist laut Spezifikation des
Herstellers
vorläufig. Es ist daher gut möglich, dass noch weitere Register zu
initialisieren sein werden.

Aufgabe:

erstellen Sie eine allgemeine ChipInit() Funktion in C um den Chip
entsprechend der Tabelle
zu initialisieren.
Achten Sie auf Erweiterbarkeit falls in Zukunft noch weitere Register
initialsiert werden
müssen.

Ich danke Ihnen für eure Hilfe

Beranger

von Peter Dannegger (Gast)


Lesenswert?

"Wie meinst du mit sizeof-Operator ?"


Du solltest Dir ein C-Buch oder einen Compiler mit guter Hilfe zulegen,
um solche grundlegenden Dinge zu klären.

sizeof(x) gibt die Größe von x in Bytes zurück.

Mit sizeof(Tabelle)/sizeof(Strukturelement) hast Du also die Anzahl der
Einträge in der Tabelle und kannst sie als Abbruchbedingung in der
Ausgabeschleife verwenden.

Alternativ kann man auch einen Enderecord definieren, der dann als
letztes in die Tabelle geschrieben wird und kein gültiger Ausgabewert
sein darf. Wenn z.B. nur Register 0..15 erlaubt sind, könnte der
Enderecord die 16 sein.


Peter

von Beranger888 (Gast)


Lesenswert?

Danke Peter !


Ich werde es probieren, melde mich später noch.
:-)))

Beranger

von Rahul (Gast)


Lesenswert?

das einfachste ist doch wohl, in der ChipInit-Funktion der Reihe nach
die Register mit der SPI_WriteReg-Funktion zu beschreiben.

void ChipInit(void)
{
  SPI_WriteReg(0,12);
  SPI_WriteReg(12,13);
  SPI_WriteReg(13,3);
  SPI_WriteReg(15,56);
  SPI_WriteReg(1,129);
  SPI_WriteReg(12,2);
  SPI_WriteReg(7,212);
}

Zack, fertig... und jeder Zeit erweiterbar.

(Ich gehe jetzt davon aus, dass es sich um eine Schulhausaufgabe oder
so handelt... Vermutlich behandelter Stoff: Funktionen...)

von Beranger888 (Gast)


Lesenswert?

Hallo Rahul,

Meinst du es wurde so gehen ? Ich habe nal probieren also es schein so
nicht funktionieren. Ich komme eigentlich aus Frankreich und bin im 10.
Klasse.

Also danke für deine Antwort.


Beranger

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.