mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C Master SW kurze Frage


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin aktuell dabei für den MSP430(FG4618) eine I2C(Master) SW zu 
schreiben. Dabei bin ich mir bei einem Punkt etwas unsicher.
Ich habe SDA und SCL, beide sind mit Pullup Widerständen an VDD 
angeschlossen. Solange ich den Pin als Input betreibe sollte eigentlich 
alles funktionieren, der Pin registriert ob HIGH oder LOW anliegt und 
die SW verarbeitet das.
Wenn ich nun einen der Pins als Output schalte und versuche das Signal 
auf LOW/HIGH zu ziehen, muss ich dabei etwas beachten?
Meiner bisherigen Überlegung nach, sollte es auf jeden Fall unkritisch 
sein, wenn ich den Pin auf High schalte.
Kritisch denke ich könnte es nur werden, falls der Pin auf LOW 
geschaltet wird. Es liegt VDD an und der Pin versucht das Signal auf GND 
zu ziehen. Kann dabei was schiefgehen, kann ich dafür nur bestimmte Pins 
benutzen oder ist da unkritisch?

Vielen Dank schonmal für alle Antworten, würd da gerne mehr wissen, 
bevor ich den Code austeste und dabei im schlimmsten Fall meinen µC 
kaputt mach...

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da der MSP keine Open Drain Ausgänge hat, muss man das Risiko eines 
Kurzschlusses eingehen. Soweit ich das weiss ist das aber beim MSP eher 
unkritisch. Die Ausgänge haltet das i.d.R. aus.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> muss man das Risiko eines Kurzschlusses eingehen.

Wieso Kurzschluss? Er hat doch einen PullUp-Widerstand dazwischen.

> Ich habe SDA und SCL, beide sind mit Pullup Widerständen an VDD
> angeschlossen.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man den Pin auf Ausgang schaltet könnte es womöglich vorkommen das 
er auf high steht. Steht Slave dabei auf low -> Kurzschluss. Das wäre 
halt der Worst-Case.

Autor: doofi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für so Zwecke gibts es PxDIR und ev. PxREN.

D.h. für ein 0 am Ausgang schaltet man den Pin mit PxDIR auf Ausgang.
Für eine 1, wie nicht anders zu erwarten: als Eingang.
Vorher natürlich eine 0 in das PxOUT-Register.
Mit den internen Pullups kann man sich meist die externen ersparen.

Du solltest Dir erstmal die Beratungsmuster von TI zu Gemüte führen.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Beratungsmuster von TI sind gerade mein Problem. TI hat zu I2C 
einiges an Beispielcode, der allerdings immer die HW I2C Schnittstelle 
verwendet. Allerdings läuft von sämtlichen Beispielen kein einziges bei 
mir. Ich habe leider keinen Logicanalyzer sondern nur ein Oszi zum 
auswerten des Datenverkehrs auf SDA und SCL. Um zu überprüfen, was von 
dem Code, der Master oder Slave, Probleme macht, war meine Idee, dass 
ich den I2C Master als SW gestalte, dann wenn der I2C Master richtig 
läuft, weiss ich ob mein Slave Code oder mein Master Code Probleme 
macht. Soweit ich aus dem was das Oszi liefert schlau werde, läuft 
aktuell folgendes ab:
- Master sendet Startbedingung: funktioniert
- Master sendet Adresse: funktioniert
- Master sendet R/W Bit: funktioniert
- Slave sendet bei der passenden Adresse ein ACK: funktioniert
- Daten nach UCB1TXBUF schreiben: funktioniert
- Master sendet die Daten die in UCB1TXBUF stehen: funktioniert nicht
Das passiert mit meinem selbergeschriebenen Code für die HW I2C 
Schnittstelle. Bei dem TI Beispielcode seh ich nichtmal eine 
Startbedingung.

>D.h. für ein 0 am Ausgang schaltet man den Pin mit PxDIR auf Ausgang.
>Für eine 1, wie nicht anders zu erwarten: als Eingang.
>Vorher natürlich eine 0 in das PxOUT-Register.
>Mit den internen Pullups kann man sich meist die externen ersparen.
=> Wenn ich die internen PullUps benutze und die 1 und die 0 so schalte, 
dann dürften aber weder Clockstretching noch ACK's des Slaves 
funktionieren, oder?

>Für so Zwecke gibts es PxDIR und ev. PxREN.
Leider hat der MSP430FG4618 kein PxREN Register.

Schonmal Danke für alle Antworten. Ich denke ich werde die I2C Master HW 
Funktionen mal schreiben und bevor ich sie dann benutze hier posten. Ich 
würd mich sehr freuen, wenn dann einer von euch mal kurz drüberschauen 
würde, ob ich da irgendwo großen Mist gebaut habe.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe leider keinen Logicanalyzer sondern nur ein Oszi zum auswerten
>des Datenverkehrs auf SDA und SCL.
Solange es ein Speicheroszi ist, ist das doch ausreichend.

Also an deiner Stelle würde ich mit HW I2C weiter machen. Zum testen 
würde ich einfach mal ein EEPROM o.ä. dran hängen, dann weiss man das 
der Slave auch 100%ig funktioniert.

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.