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


von Jens S. (jens_s31)


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.
1
char SW_I2C_ACK(void)
2
{
3
unsigned char Temp,x;
4
  GPIO_PORTA_DATA_R  |= 0x80;           //SDA High  
5
  Delay_us(10);
6
  Temp = GPIO_PORTA_DATA_R;              //Port sichern
7
  GPIO_PORTA_DATA_R  |= 0x40;          //SCL High
8
  GPIO_PORTA_DIR_R  ^= 0x80;          // SDA INPUT  
9
  Delay_us(20);
10
  x=GPIO_PORTA_DATA_R;
11
  if ((x & 0x80)==0)    //  Überprüfen SDA Low (ACK)
12
  {
13
    GPIO_PORTA_DIR_R  ^= 0x80;          // SDA OUTPUT
14
    GPIO_PORTA_DATA_R = Temp;              // PORT wieder zurückschreiben
15
    Delay_us(10);
16
    return 0x01;
17
  }
18
  else
19
  {
20
    GPIO_PORTA_DIR_R  ^= 0x80;          // SDA OUTPUT
21
    GPIO_PORTA_DATA_R = Temp;              // PORT wieder zurückschreiben
22
    Delay_us(10);
23
    return 0x00;
24
  }
25
  
26
}

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?

von Marcel (Gast)


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

von Marcel (Gast)


Lesenswert?

Edit: Argh, falscher Controller =/ Vergiss, was ich gesagt habe..

von Frank K. (fchk)


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

von Jens Sonnek (Gast)


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.

von Frank K. (fchk)


Lesenswert?

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

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

fchk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.