Forum: Mikrocontroller und Digitale Elektronik LPC2129 GPIO


von Matthias Fromme (Gast)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

ich habe ein Problem mit dem GPIO beim LPC2129.
Ich habe mal einen Screenshot vom Memoryfenster angehängt.

Mein Problem ist, das wenn ich an den Ausgängen die spannung messe, 
diese nicht den Pegel haben den sie haben sollten, beispielsweise ist 
Pin 0.0 auf HIGH. Das ändert sich auch nicht, wenn ich die Register 
IOCLR0 oder IOSET0 schreibe. Das Problem scheint aber nur bei den 
unteren Pins zu bestehen, da ich die LED auf dem Board blinken lassen 
kann.

Ich habe übrigens das Olimex LPC2129 Board hier aus dem Shop.

MFG
Matthias Fromme

von Martin Thomas (Gast)


Lesenswert?

Einige Pins an diesem Controller habe keine "push-pull"-Ausgänge sondern 
lediglich "open-drain". Ist aber in der Pinbeschreibung im Manual auch 
erläutert. Das sind inbesonderen die Pins, die auch für I2C genutzt 
werden können. Man kann diese lediglich von "high-z" auf "output low" 
schalten. "output high" gibt es also nicht wirklich. Abhilfe: externer 
Pull-Up-Widerstand zum "Hochziehen" auf high.

Martin Thomas

von Matthias Fromme (Gast)


Lesenswert?

Ich habe mich vielleicht nicht ganz eindeutig ausgedrück.
Das mit den open-drain Ausgängen ist soweit schon klar, das eigentliche 
Problem ist, das ich am Ausgang "HIGH" messe, obwohl das Das Bit im 
Register 0 ist. Das es ein open-drain Ausgängen kommt ja nur zum tragen 
wenn ich ein HIGH-Signal erwarten würde, wenn ich das richtig sehe.

Matthias Fromme

von Dietmar (Gast)


Lesenswert?

Manchmal stolpert man auch über die grundlegendsten Dinge:

Sind IODIR und IOPIN richtig gesetzt?

Dietmar

von Matthias Fromme (Gast)


Lesenswert?

Ja, sollten sie sein.
IODIR ist bis auf die JTAG-Pins als Output gesetzt, und IOPIN ist wenn 
ich es richtig sehe read-only.

von Dietmar (Gast)


Lesenswert?

Sorry, sollte IODIR und PINSEL heißen, nichts mit IOPIN.

Wieso ist IOPIN readonly?

Ach ja, diese Geschichte. Druckfehler im User Manual.
2 Seiten weiter ist ein Beispiel, wie man die I/O mit IOPIN
ansteuert anstatt mit IOSET und IOCLR.

Dietmar

von Matthias Fromme (Gast)


Lesenswert?

Tatsächlich ein Druckfehler, hatte ich gar nicht bekerkt :-).
Also am PINSEL habe ich nichts verändert, das sollte für meinen 
Pinbereich in Ordnung sein, da diese per default auf GPIO eingestellt 
sind (benutze momentan nur die unteren 11 Pins).

Matthias

von Dietmar (Gast)


Lesenswert?

Bei mir gehts:
1
  while (1)
2
  {// Loop forever
3
    PINSEL0 &= 0xFFFFFFFC;      // P0.0 ist GPIO
4
    IODIR0 |= 0x01;             // P0.0 ist Ausgang
5
    IOSET0 = 0x01;              // P0.0 bekommt High-Pegel
6
    IOCLR0 = 0x01;              // P0.0 bekommt Low-Pegel
7
    IOPIN0 ^= 0x01;             // P0.0 bekommt High-Pegel
8
    IOPIN0 ^= 0x01;             // P0.0 bekommt Low-Pegel
9
  } // while(1)

Mit Oszi an P0.0, sehe ich schön, wie der Pin sowohl sauber auf High als 
auch auf Low geht.

Dietmar

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.