mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Treiber datenblatt


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Fraenki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen



Bevor ich ein Register schreibe, möchte ich zuerst einmal wissen, wie 
der Inhalt des Registers aussieht. Hier ist das Datenblatt:



https://www.nxp.com/docs/en/data-sheet/PCA9956B.pdf



Es steht hier nur, dass ich auch lesen kann, ohne das Register zuvor 
beschrieben zu haben. Wenn ich das mache, dann lese ich gerade das 
Register aus, das zuletzt beschrieben wurde, auf den also noch der 
letzte Pointer zeigt. Fig. 18, Seite 35



Angenommen ich möchte das Register LEDOUT0 lesen, wie bewerkstellige ich 
das nun, wenn ich laut Bus transactions Fig. 18, S. 35 keine 
Registeradresse angeben muss?

Nur Slaveaddress und Daten? Ich verstehe das leider nicht.

Kann jemand weiterhelfen?



Grüsse

Autor: Clemens L. (c_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> In this case, the data sent out is from the register pointed to by the
> control register (written to during the last write operation).

Das heißt, du schreibst die Register-Adresse (ohne Auto-Increment), und 
machst dann ReSTART (oder STOP und später START) für das Lesen.

Autor: K. S. (the_yrr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fraenki schrieb:
> Angenommen ich möchte das Register LEDOUT0 lesen

zwei Möglichkeiten:


1:
Du hast zuvor LEDOUT0 gelesen/geschrieben und auto Inkrement ist aus
oder du hast zuvor das Register VOR LEDOUT0 gelesen/geschrieben und 
autoinkrement ist an

-> du schreibst nur Device Address + Read Bit, und ließt dann die Daten 
ein (sendest dabei ein ACK), beendet wird durch NACK + STOP.

2: Die Adresse /Mode im Control register ist nicht durch vorheriges 
lesen/schreiben richtig gesetzt:

-> du schreibst Device Address (cleared Read bit), dann schreibst du das 
Control register, nach dem ACK sendest du ein RESTART, dann nochmal 
Device Address + Read Bit, jetzt ließt du wieder Daten bis du mit NACK + 
STOP beendest.


Du musst nur dann keine Registeradresse angeben, wenn du die beim 
letzten schreiben/lesen (+ autoinkrement wenn es an ist) verwendete 
nochmals benutzen willst. Sonst gilt Fig17. direkt da drüber.


Fraenki schrieb:
> Es steht hier nur, dass ich auch lesen kann, ohne das Register zuvor
> beschrieben zu haben.

kannst du, ergibt wenig Sinn. Guck ins Datenblatt, da steht drin welchen 
Wert das Register bei Initialisierung hat.

für LEDOUT0 ist das 0b10101010, oder für je LDR0-3 0b10, oder übersetzt 
PWMx bzw. PWMALL kontrolliert die Helligkeit jeder LED einzeln.

: Bearbeitet durch User

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.

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