Hallo, ich lese mir gerade die LowPowerLab für das RFM69 Funkmodul durch und verstehe eine Sache nicht. Es geht um folgende Zeilen: https://github.com/LowPowerLab/RFM69/blob/master/RFM69.cpp#L408-L414 https://github.com/LowPowerLab/RFM69/blob/master/RFM69.cpp#L399-L406 Was wird dort mit der Adresse gemacht und warum? Danke und Gruß M
marabou schrieb: > Was wird dort mit der Adresse gemacht Dort wird das Bit 7 (das oberste im Byte) entweder auf 1 gesetzt (in der Write Routine) bzw. es wird definitiv auf 0 gesetzt (in der Read Routine) > und warum? Was sagt das Datenblatt zum RFM69 über irgendwelche Besonderheiten im Adressbyte?
marabou schrieb: > Was wird dort mit der Adresse gemacht und warum?
1 | void RFM69::writeReg(uint8_t addr, uint8_t value) |
2 | {
|
3 | select(); //Wähle das SPI Gerät |
4 | SPI.transfer(addr | 0x80); //Wähle das Register "addr" zum schreiben |
5 | SPI.transfer(value); //Schreibe Wert von "value" in das Register |
6 | unselect(); //Wähle das Gerät wieder ab |
7 | }
|
8 | |
9 | uint8_t RFM69::readReg(uint8_t addr) |
10 | {
|
11 | select(); //Wähle das SPI Gerät |
12 | SPI.transfer(addr & 0x7F); //Wähle das Register "addr" zum lesen |
13 | uint8_t regval = SPI.transfer(0); //Lese den Wert aus dem Register |
14 | unselect(); //Wähle das Gerät wieder ab |
15 | return regval; //Gib den gelesenen Wert zurück! |
16 | }
|
Martin schrieb: > SPI.transfer(addr & 0x7F); Allerdings würde ich hier sagen das das SPI.transfer(addr | 0x7F); anstatt SPI.transfer(addr & 0x7F); sein muss...
Martin schrieb: > Martin schrieb: >> SPI.transfer(addr & 0x7F); > > Allerdings würde ich hier sagen das das > SPI.transfer(addr | 0x7F); > anstatt > SPI.transfer(addr & 0x7F); > sein muss... Nein, das würde ich nicht sagen. Du hast gerade eine fertige Lib unbrauchbar gemacht.
Karl Heinz schrieb: >> und warum? > > Was sagt das Datenblatt zum RFM69 über irgendwelche Besonderheiten im > Adressbyte? Auf Seite 44, in der unteren Hälfte, steht die Erläuterung zum 'warum' in deinem Code.
Karl Heinz schrieb: > Nein, das würde ich nicht sagen. > Du hast gerade eine fertige Lib unbrauchbar gemacht. Warum wird dann zum schreiben
1 | SPI.transfer(addr | 0x80); |
verwendet und zum lesen
1 | SPI.transfer(addr & 0x7F); |
?
Martin schrieb: > Karl Heinz schrieb: >> Nein, das würde ich nicht sagen. >> Du hast gerade eine fertige Lib unbrauchbar gemacht. > > Warum wird dann zum schreiben ... Lies das verdammte Datenblatt. Der Hersteller hat das nicht deswegen herausgegeben, dass man es ignoriert. Wenn ich, der noch nie etwas mit dem Baustein zu tun hatte, die gesuchte Information da drinn in unter 60 Sekunden finden kann, dann kannst du das auch. Zumal aus dem Code heraus recht klar ist, wonach man suchen muss.
Martin schrieb: > Karl Heinz schrieb: >> Nein, das würde ich nicht sagen. >> Du hast gerade eine fertige Lib unbrauchbar gemacht. > > Warum wird dann zum schreiben > SPI.transfer(addr | 0x80); > verwendet und zum lesen > SPI.transfer(addr & 0x7F); > ? Ah habs mir gerade selber beantwortet :)
Ah ok jetzt hab ich es gerafft. Der Bezug von der Zeile Quellcode zu dem Teil im DB war für mich zu Beginn nicht so schlüssig. Macht wohl die Erfahrung. Danke für die Tipps ;)
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.