www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem Cortex M3 (LM3S3748)


Autor: Jens Sonnek (jens_s31)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe für mein Technikerprojekt erstmal ein kleines
Programm geschrieben um mich in den Controller einzuarbeiten.
Es soll über PortA PIN 6,7 ein Software I2C nachgebildet werden.

Jetzt hab ich das Problem das ich wenn ich das ACK abfrage die SDA nicht 
auf
High geht und somit kein ACK gelesen werden kann.
char SW_I2C_ACK(void)
{
unsigned char Temp,x;
  GPIO_PORTA_DATA_R  |= 0x80;           //SDA High  
  Delay_us(10);
  Temp = GPIO_PORTA_DATA_R;              //Port sichern
  GPIO_PORTA_DATA_R  |= 0x40;          //SCL High
  GPIO_PORTA_DIR_R  ^= 0x80;          // SDA INPUT  
  Delay_us(20);
  x=GPIO_PORTA_DATA_R;
  if ((x & 0x80)==0)    //  Überprüfen SDA Low (ACK)
  {
    GPIO_PORTA_DIR_R  ^= 0x80;          // SDA OUTPUT
    GPIO_PORTA_DATA_R = Temp;              // PORT wieder zurückschreiben
    Delay_us(10);
    return 0x01;
  }
  else
  {
    GPIO_PORTA_DIR_R  ^= 0x80;          // SDA OUTPUT
    GPIO_PORTA_DATA_R = Temp;              // PORT wieder zurückschreiben
    Delay_us(10);
    return 0x00;
  }
  
}

Habe das gefühl das zwar das sezten von GPIOs übers DATA Register geht 
aber das einlesen will net immer funktionieren.
Hat jemand erfahrung mit dem Controller?

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kp. wie deine Registerdefinitionen sind, einlesen tut man einen Port 
aber über das "Pin"-Define.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Abschnitt Lesen 
aus Registern

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Edit: Argh, falscher Controller =/ Vergiss, was ich gesagt habe..

Autor: Frank K. (fchk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde vielleicht SDA auf zwei Pins aufspalten, einem Input-Pin zum 
Lesen des Zustandes und einem Output-Pin, der über einen Transistor oder 
das Gate eines HC125-Gatters, dessen Input auf Ground liegt, SDA 
herunterzieht. Ich könnte mir durchaus vorstellen, dass das Umschalten 
der Datenrichtung länger dauert als das Setzen eines Bits.

fchk

Autor: Jens Sonnek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dafür sind die 20us delay da. Es ist aber so noch was denn selbst mit 
dem Jtag debugger will der Pin dann net mehr so. Aufm Oszibild sa aber 
alles passend aus. Layout ist vorerst mal fest platine schon vorhanden.
Glaub eher das der Controller irgendwas vergisst wenn man richtung 
umschaltet. Datenblatt ist da auch meist sehr dürftig.

Autor: Frank K. (fchk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na, ein 74AHC1G125 im SOT363-5 wird ja wohl noch irgendwo hinpassen.

Die Pullups am I2C sind auch alle vollzählig da?

fchk

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.