Dette er en gjennomgang for å forstå en DS2401 og OneWire protokollen.
Mål
En DS2401+ er en komponent som returnerer en unik identifikator. Målet er å hente ut den unike koden.
Komponenten bruker OneWire protokollen og målet er å få kommunisert med denne og få verifisert resultatet. For å gjøre dette så kobles det to DS2401+ på samme pin.
Utstyr
- En arduino (I dette tilfellet en Mega ADK)
- 2x DS2401+ (En er nok, men for å teste kommunikasjon med flere enhet trengs to.)
- 4,7K ohm motstand
Krets
Bibliotek
Bruker OneWire biblioteket hentet her.
Program
Koden kan lastes ned her.
#include <OneWire.h> /** * Pin the DS2401 is connected to. */ #define ONEWIRE_PIN 10 /** * Address size. */ #define ONE_WIRE_ADDRESS_SIZE 8 /** * Serial baud speed. */ #define SERIAL_BAUD 9600 /** Object for communicating with the OneWire bus. */ OneWire onewire(ONEWIRE_PIN); /** Address of the component found. */ byte owAddr[ONE_WIRE_ADDRESS_SIZE]; void setup() { /** Serial communication speed. This is only for serial information back. */ Serial.begin(SERIAL_BAUD); /** Initalize onewire. */ onewire.reset(); } void loop() { /** * Verify that component is present. */ boolean present = onewire.search(owAddr); printPresent(present); if (present) { /** * Print component address. */ printData(); /** * Calculate crc code. It should be equal to the last byte. */ byte crc = OneWire::crc8(owAddr, 7); printCrc(crc); } } /** * Print present result. */ void printPresent(int present) { Serial.print("Present: "); Serial.println(present); } /** Print data. */ void printData() { Serial.print("Data: "); for (int i = 0; i < ONE_WIRE_ADDRESS_SIZE; i++) { Serial.print(owAddr[i], HEX); Serial.print(" "); } Serial.println(); } /** Print crc result. */ void printCrc(byte crc) { Serial.print("CRC: "); Serial.println(crc, HEX); }
Data resultat
Present: 1 Data: 1 87 23 84 18 0 0 5C CRC: 5C Present: 0 Present: 1 Data: 1 58 8 83 18 0 0 B2 CRC: B2
Det i blått er første komponent og orange er komponent to.
Byte 1 i begge dataene har verdi 1 og er familie koden.
Byte 2-7 er den unike adressen.
Byte 8 er CRC verdien og skal være lik den beregnete CRC verdien.

Du må være logget inn for å legge inn en kommentar.