SHT71 Feuchtesensor - kurze Frage zu einem Beispielcode

Gast #2815839
Lesenswert?

Hallo!

Ich bin gerade dabei, meinen noch nicht funktionierenden Code zur 
Ansteuerung eines SHT71-Feuchtesensors von Fehlern zu befreien. Dabei 
bin ich hier in diesem Forum auf diesen Beitrag gestoßen 
(Beitrag "SHT71 Assembler Code für Atmega8"), indem in Beitrag #4 ein 
Programm-Listing angehängt ist.

Dort heißt es in der Initialisierung:

                      push r16
                      cbi data_dir,data_pin      ; Eingang
                      cbi data_out,data_pin      ; L

                      sbi sck_dir, sck_pin       ; Ausgang
                      cbi sck_out, sck_pin       ; L

                      ldi r16,MEASURE_TEMP       ; Befehl nach Puffer
                      sts temperature,r16

                      ldi r16,MEASURE_HUMI       ; Befehl nach Puffer
                      sts huminity,r16

                      ldi r16,STATUS_REG_R       ; Befehl nach Puffer
                      sts sht11_status,r16

                      pop r16
                      ret

Nun wollte ich fragen, was hier sck_out und data_out für Register sind. 
Die "dir"-Register scheinen ja eindeutig die Datenrichtungsregister 
(DDRx) der SCK bzw. DATA-Leitung zu sein.
Bei den anderen hatte ich erst gedacht, das es sich hierbei um die Port 
Data Register (PORTx) handelt, aber wieso benutzt dieser Programmierer 
dann hierfür z. B. data_in und data_out?

Kann mich jemand eventuell kurz aufklären?

Und eine zweite Frage: Die drei unteren Puffer-Befehlsketten sind doch 
für die Intialisierung nicht von nöten, oder?


Mit freundlichen Grüßen

R.M.
Gast #2815843
Lesenswert?

> was hier sck_out und data_out für Register sind

Das sind die Ports.

> wieso benutzt dieser Programmierer dann hierfür
> z. B. data_in und data_out?

Damiot er es später auf andere POrts legen kann,
durch Neudefinition von data_in/data_out ohne den
Programmtext ändern zu müssen.

> Die drei unteren Puffer-Befehlsketten sind doch
> für die Intialisierung nicht von nöten,

Na ja, damit das Programm nachher richtig funktioniert,
der SHT Sensor bekommt diese Daten aber nicht gesendet,
schon richtig.
Gast #2815847
Lesenswert?

Danke für die Antwort. Meine Frage war aber, wieso er data_IN und 
data_OUT verwendet, wo er doch für beides z. B.

cbi PORTD, PD7

schreiben könnte. Es ist ja doch so, dass die DATA-Leitung an einem PIN 
des Mikrocontrollers hängt, oder etwa nicht?
Gast #2816134
Lesenswert?

Kann mir eventuell einer kurz sagen, wo ich hier in der 
Hauptprogrammroutine etwas vergessen haben könnte?

Es geht um die Ansteuerung des SHT71-Feuchtesensors, sht71_input ist ein 
Register, in dem sind Werte, die an den Sensor gesendet werden, und 
sht71_output ist ein Register für das Auslesen.

Es geht darum, einen 8-bit-Feuchtewert auszulesen. Dazu muss zuerst das 
SREG des Sensors angesprochen werden (ich will SREG beschreiben 
(0b00000110)) und dann der entsprechende Befehl gesandt werden 
(0b00000001). Schließlich muss eben noch der Wert angefordert werden.

HUMIDITY_DETERMINATION:
rcall HUMIDITY_SENSOR_INIT
rcall WAIT
rcall HUMIDITY_SENSOR_START_CONDITION
rcall WAIT
ldi   sht71_input, 0b00000110
rcall HUMIDITY_SENSOR_INPUT_BYTE
rcall WAIT
ldi   sht71_input, 0b00000001
rcall HUMIDITY_SENSOR_INPUT_BYTE
rcall WAIT
rcall HUMIDITY_SENSOR_START_CONDITION
ldi   sht71_input, 0b00000101
rcall HUMIDITY_SENSOR_INPUT_BYTE
rcall WAIT
rcall HUMIDITY_SENSOR_OUTPUT_BYTE
rcall WAIT
;Displayausgabe ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren