mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fehlersuche bei I2C [MSP430]; UCBBUSY bleibt gesetzt


Autor: I2C Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
zurzeit kämpfe ich während der Inbetriebnahme meiner neu 
zusammengebauten Schaltung mit dem I2C - Bus. Am Bus hängen 3 ICs.
Ich weiße die  I2C Pins dem USCI_B0 Modul zu und initialisiere 
anschließend den ersten Baustein (TMP100) entsprechend einem 
Beispielcode von TI zum senden:

  UCB0CTL1 |= UCSWRST;                        // Enable SW reset
  UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;       // I2C Master, synchronous 
mode
  UCB0CTL1 = UCSSEL_2 + UCSWRST;              // Use SMCLK, keep SW 
reset
  UCB0BR0 = 80;                               // fSCL = SMCLK/80 = 
100kHz
  UCB0BR1 = 0;
  UCB0I2CSA = 0x48;                           // Set slave address
  UCB0CTL1 &= ~UCSWRST;                       // Clear SW reset, resume 
operation
  UCB0I2CIE |= UCNACKIE;
  IE2 |= UCB0TXIE;                            // Enable TX ready 
interrupt

Anschließend frage ich UCBBUSY ab, ob der Bus frei ist, allerdings 
bleibt dieses Bit immer gesetzt.

Hat zufällig jemand einen Tip für mich, wie ich soft- und hardwaremäßig 
dem Fehler auf die Spur kommen kann? Bisher habe ich schon die ICs auf 
richtigen Einbau und korrekten Anschluß hin überprüft.

Danke schon mal im Vorraus,
Martin


P.S. Wo finde ich den Formatierungsbefehl zum einfügen von 
Codeschnipseln in einen Beitrag?

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

Bewertung
0 lesenswert
nicht lesenswert
>Anschließend frage ich UCBBUSY ab, ob der Bus frei ist, allerdings
>bleibt dieses Bit immer gesetzt.
SDA und SCL sind beide high? Busy wird direkt nach der initialisierung 
abgefragt?
Mit dem Busy hatte ich auch (oder immer noch) so meine Probleme. Wenn 
man auf einen Slave zugreifen will, die Adresse aber ins leere geht, 
bleibt bei mir der I2C Bus vom MSP auch auf Busy stehen und SDA (oder 
war's SCL?) bleibt auf low stehen. Meine bisherige Abhilfe ist in jedem 
Zyklus abzufragen ob der Bus Busy ist und wenn ja den I2C Bus neu zu 
starten (UCB0CTL1 |= UCSWRST;).


>P.S. Wo finde ich den Formatierungsbefehl zum einfügen von
>Codeschnipseln in einen Beitrag?
Steht direkt über dem Eingabefenster :)

Autor: I2C Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mir bleibt SDA auf low.
Aber bei der Initialisierung wird doch die Adresse noch gar nicht 
gesendet, oder? Die wird doch erst übertragen, wenn ich eine START 
condition sende.
Kann es noch eine andere Ursache dafür geben, dass SDA auf low gezogen 
wird?

Autor: I2C Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gerade habe ich SCL und SDA mal ans Oszi gehängt und gesehen, dass der 
Zustand SCL high und SDA low schon beim einschalten herrscht und sich 
gar nichts daran ändert.
Anscheinend funktioniert da etwas grundlegendes nicht. Stimmt eigentlich 
die Initialisierung, wie ich sie oben geschrieben habe?

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I2C Neuling wrote:
> Bei mir bleibt SDA auf low.
> Aber bei der Initialisierung wird doch die Adresse noch gar nicht
> gesendet, oder? Die wird doch erst übertragen, wenn ich eine START
> condition sende.
> Kann es noch eine andere Ursache dafür geben, dass SDA auf low gezogen
> wird?

Sind denn die externen Pull-Ups an den Leitungen?

Autor: I2C Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Sind denn die externen Pull-Ups an den Leitungen?

Ja, jeweils 4k7 Ohm.

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

Bewertung
0 lesenswert
nicht lesenswert
PxSEL gesetzt?

Autor: I2C Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>PxSEL gesetzt?

Ja, hier ein Ausschnitt aus meiner Initialisierung:

void msp_init(void)
{
  volatile unsigned int i;
  
  WDTCTL = WDTPW + WDTHOLD;             // halte watchdog an
  
//...
  
  P3DIR |= 0x0f9;                       // Set P3 output direction
  P3SEL |= 0x36;                        // Set P3 function
  P3OUT |= 0x00;                        // Set P3 initial value
  
//...
  
  BCSCTL1 |= XTS + DIVA_3;              // HF XTAL + ACLK/8               
  BCSCTL3 |= LFXT1S_3;                  // ext. Taktquelle fuer LFXT1
  BCSCTL3 &= ~XCAP0;                    // XCAP ~ 1pF
  do {                                  
    IFG1 &= ~OFIFG;                     // loesche OSCFault Flag
    for (i=0; i<256; i++) _NOP();       // Zeit zum setzen des Flags
  } while((IFG1 & OFIFG) != 0);         // warte, bis externer Oszillator angeschwungen (OSCFault Flag noch gesetzt?)
  BCSCTL2 = SELM_3 + SELS;              // schalte auf externen Takt
}

Autor: I2C Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AAAAAAAAAArgh!

Gerade habe ich mein Programmier- und Debuginterface (das aus dem 
eZ430-RF2500 Set) abgezogen:
---> Die Schaltung läuft!

Dumme Frage: Warum bekomme ich die Schaltung nicht zum laufen, wenn ich 
das Interface dranlasse? Anscheinend kommt sich da irgendwas ins Gehege. 
Die Schnittstelle zu dem Interface habe ich so beschaltet wie beim 
eZ430-RF2500 Set (lediglich V+ vom Adapter habe ich nicht mit der 
Schaltung verbunden, da diese separat versorgt wird).

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

Bewertung
0 lesenswert
nicht lesenswert
Um welchen MSP geht's überhaupt?

Autor: I2C Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Um welchen MSP geht's überhaupt?

Um einen MSP430F2272.
Das programmieren und debuggen mache ich über Spi-Bi Wire.

Autor: I2C Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AAAAAAAAAArgh! (Teil2)

Jetzt tritt der oben genannte Fehler auf einmal wieder auf, obwohl ich 
an der I2C - Initialisierung nichts geändert habe.
Hatte schon mal jemand hier ein ähnliches Problem?

Autor: I2C Neuling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Tip in diesem Beitrag hier
Beitrag "PIC I2C Fehler mit CCS Compiler in MPLAB"
scheint geholfen zu haben, jedenfalls funktioniert die Geschichte im 
Moment wieder.

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.