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
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
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
ich danke euch schon mal sehr für eure antworten und werde gleich mal eure vorschläge ausprobieren!!! ein dickes danke an euch!!! Jessica
@ 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
>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)
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.
> 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)
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
ich weiss, es ist nervig, aber kann mir keiner helfen! ich wäre euch so dankbar!! Gruß Jessica
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.