Forum: Mikrocontroller und Digitale Elektronik LPC2148 und SHT11


von Jessi (Gast)


Lesenswert?

Hallo ihr alle,
hab mir einen sht11 zugelegt und will den nun mit meinem lpc2148 
auslesen.

hab den code von der sensiron seite genommen und entsprechend auf den 
lpc2148 gemappt, aber irgendwie geht's nicht. er liefert mit immer die 
fehlernummer 2.

was kann ich noch machen???

schonmal danke im vorraus!!!

Gruß

Jessica

von Jessi (Gast)


Angehängte Dateien:

Lesenswert?

man sollte den anhang schon mit dranhängen!!!

von mthomas (Gast)


Lesenswert?

Da ist Einiges im Argen:

(1) Sensirion Beispielcode ist für 8051 mit open-collector Ausgängen. 
Mit Ausnahme der "I2C Pins" sind beim LPC2k die Ausgänge Push/Pull. Bei 
"DATA_HIGH //release DATA-line" entspricht Anweisung nicht Kommentar 
falls keine "I2C-Pins" verwendet werden also eben kein "bus release". 
IO1DIR für push/pull wäre Pin als Eingang konfigurieren (IO1DIR) 
(+externer Pullup)

(2) if (IOSET & DATA) zur Abfrage des Zustands an Data-Pin: LPC2k User's 
Manual nochmal zu Gemüte führen und Unterschied zwischen IO1SET und 
IO1PIN nachvollziehen

(3) Werden die Maximalfrequenzen/Wartezeiten eingehalten? vgl. SHT 
Datenblatt. Im Zweifel mit Scope testen.

(x) komische Makroverwendung mit ;

Martin Thomas

von Gerhard. (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe das bei einer AVR Portierung(CV) so gemacht dass ich den PIN 
input output modus entsprechend dem jeweiligen I2C Befehl immer 
umgeschalten habe und das hat auf Anhieb funktioniert.

Die Funktion sht11_handler() wird durch Timer Interrupt alle 5ms im 
Hintergrund aufgerufen und die SHT11 Werte sind automatisch immer auf 
den neuesten Stand.

Hoffe es hilft Dir weiter,

Gerhard

P.S: Habe vor diesen SHT11 code auch auf ARM2148 umzuportieren

von Jessi (Gast)


Lesenswert?

ich danke euch schon mal sehr für eure antworten und werde gleich mal 
eure vorschläge ausprobieren!!!

ein dickes danke an euch!!!

Jessica

von Jessi (Gast)


Lesenswert?

@ mthomas

zu (1) das was du da schreibst verstehe ich nicht so ganz, kannst du mir 
das vielleicht nochmal genauer erklören??

zu (2) oohh, mein fehler, nach gelesen und geändert

zu (3) timings sind ok. habe ich mit Scope überprüft.

zu (x) ja ich weiss ist ja auch nur testweise so


@ Gerhard.
habe mir deinen code noch nicht genau angeguckt werde dies aber gleich 
tun. hast vielleicht zufällig schon den code auf den lpc portiert??



vielen vielen Dank für eure bisherige Hilfe

Jessica

von Jessi (Gast)


Lesenswert?

Kann mir denn keiner helfen???

von mthomas (Gast)


Lesenswert?

>zu (1) das was du da schreibst verstehe ich nicht so ganz, kannst du mir
>das vielleicht nochmal genauer erklören??

Ich "erklör" doch gern, ist aber bei so unspezifischen Fragen nicht so 
einfach und kostet Zeit. Was ist nicht zu verstehen?

Des geht einfach darum, dass die Data-Leitung beim Lesen nicht vom LPC 
'festgenagelt' sein darf, sondern der Sensor diese beim Senden auf low 
ziehen kann.

Am einfachsten dürfte es sein, einen der I2C-Pins des LPC2k für Data zu 
nutzen (externen Pull-Up nicht vergessen), diese sind 
open-collector/open-drain und man braucht dann nicht viel anzupassen.

Ansonsten bei anderem Pin ebenfalls externen Pull-Up-Widerstand an Data 
(vgl. SHT Datenblatt/Appnote) Alternativ: Pins an Port1 von LPC213x/4x 
z.B. haben interen Pull-Ups. Im Prinzip:
- Data Ausgabe high : iodir=0 (Eingang), der pull-up 'zieht auf high'
- Data Ausgabe low: ioclr / iodir=1 (Ausgang)
- Data Eingabe: iodir=0 (Eingang) / iopin lesen
(Lässt sich optimieren: Ausgangsregister kann meist 'set' bleiben und 
geschaltet wird nur per iodir.)

> zu (3) timings sind ok. habe ich mit Scope überprüft.
Und wie sah das auf dem "Scope" aus, als der SHT auf der Data-Line 
antworten sollte?


Martin Thomas
(und nein, ich habe keinen fertigen LPC2k-Code für SHTs)

von Jessi (Gast)


Lesenswert?

Ok, super, vielen Dank. Jetzt hab ichs besser verstanden. Also schließe 
ich am besten die DATA-Leitung an P0.3 (SDA0 I2C0) an und die 
CLK-Leitung an irgendeinen anderen Port. Muss ich dann P0.3 im PINSEL0 
Register als SDA0 definieren oder normal als GPIO??

Zur Scope-Sache:
Am Scope konnte man sehen, dass vom SHT kein Acknowledge kam.

vielen vielen Dank.

von mthomas (Gast)


Lesenswert?

> Muss ich dann P0.3 im PINSEL0 Register als SDA0 definieren oder
> normal als GPIO??
Letzteres. Der Beispielcode "schaltet" den Pin und nutzt keine I2C 
Hardware (SHTxx sind ohnehin keine "richtigen" I2C devices)

von Jessi (Gast)


Lesenswert?

das heisst also, wenn ich die daten- und clockleitung an die io-pins mit 
den open-kollektor-ausgängen (i2c-pins) angeschlossen hab, muss ist der 
port durch ein  IOSET auf HIGH gezogen (durch die pull-ups) und durch 
ein IOCLR auf LOW gezogen!? Und das IODIR bleibt die ganze zeit auf "0" 
???

richtig???

ich danke dir vielmals für deine bisherige Hilfe

Gruß

Jessica

von Jessi (Gast)


Lesenswert?

ich weiss, es ist nervig, aber kann mir keiner helfen!

ich wäre euch so dankbar!!

Gruß

Jessica

von Gast (Gast)


Angehängte Dateien:

Lesenswert?

Kein schöner Code aber es geht :-)
Code ist aber füe einen 87C196

Gruß
   Ich

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.