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.
> 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.
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?
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.
Da stand ich wohl gestern Abend auf dem Schlauch. Danke für die Antwort!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.