mikrocontroller.net

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


Autor: Beranger888 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: edi-edi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahh....si j'avais le temps de faire tes devoires....

Autor: tubbu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
^^

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Beranger888 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Beranger888 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Beranger888 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Peter !


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

Beranger

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: Beranger888 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.