Forum: Mikrocontroller und Digitale Elektronik SHT71 Feuchtesensor - kurze Frage zu einem Beispielcode


von R.M. (Gast)


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.

von MaWin (Gast)


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.

von R.M. (Gast)


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?

von (prx) A. K. (prx)


Lesenswert?

R.M. schrieb:
> Es ist ja doch so, dass die DATA-Leitung an einem PIN
> des Mikrocontrollers hängt, oder etwa nicht?

Das schon, aber aus PORTD zu lesen bringt keine Feuchtigkeit, sondern 
garnix. Lesen muss er aus PIND, schreiben in PORTD, folglich gibts 
getrennte Namen.

von R.M. (Gast)


Lesenswert?

Da stand ich wohl gestern Abend auf dem Schlauch. Danke für die Antwort!

von R.M. (Gast)


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 ...

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.