Ich habe viele Algorithmen für Schrittzähler gefunden, die eine schnelle CPU mit einer anständigen ALU und hohen Abtastraten voraussetzen, die ich nicht habe. (Z80) Der LIS3DH hat jedoch verschiedene Optionen zum Erzeugen von Unterbrechungen, wenn eine bestimmte Bedingung eintritt.
Wie kann ich es so konfigurieren, dass es Interrupts erzeugt, wenn ich gehe? Eine hohe Genauigkeit ist nicht erforderlich, ich muss nur wissen, ob sich der Benutzer bewegt oder nicht.
Ich habe das Datenblatt durchgesehen, aber es gibt mehr Optionen, als ich mir vorstellen kann. Die Klickerkennung sah vielversprechend aus, lieferte jedoch nutzlose, halbzufällige Ergebnisse, vielleicht weil sie nur schnelle Klicks und keine Gehgeschwindigkeiten erkennt. Es gibt auch Optionen für Freifallunterbrechung, Trägheitsunterbrechung, Orientierungserkennung, Hochpassfilter, FIFO und mehr.
Ich werde morgen darüber schlafen und mich abmühen, aber weise Worte sind sehr willkommen.
Abschnitt 6.3.2 und 6.3.3 des Anwendungshinweises erläutern, wie ein Interrupt ausgelöst wird, wenn eine Achse einen bestimmten Wert überschreitet. In Kombination mit einem Hochpass-Interrupt, um den Schwerkraftvektor loszuwerden, konnte ich einen wirklich niedrigen Schwellenwert festlegen, der bei 64 mg auslöst.
call DelayFrame ; raise CS
ld a, LIS3DH_REG_WHOAMI
ld b, a
call ReadRegister
ld a, c
ldh [hWhoAmI], a
call DelayFrame ; raise CS
; based on application note section 6.3.2-3
ld a, LIS3DH_REG_CTRL1
ld b, a
ld a, $77 ; CTRL1: enable all axes, 400HZ
ld c, a
call WriteRegister
ld a, $0F ; CTRL2: high-pass filter on everything
call SPITransfer
ld a, $00 ; CTRL3: not used
call SPITransfer
ld a, $88 ; CTRL4: BDU, high resolution, 2g
call SPITransfer
ld a, $08 ; CTRL5: latch interrupt on INT1_SRC
call SPITransfer
call DelayFrame ; raise CS
ld a, LIS3DH_REG_INT1CFG
ld b, a
ld a, %00101010 ; int1 config: enable high int on all axes
ld c, a
call WriteRegister
ld a, 0 ; src
call SPITransfer
ld a, 4 ; threshold
call SPITransfer
ld a, 0 ; minimum duration
call SPITransfer
gbulmer
Pepijn
gbulmer