Spionerende I2C-kommunikasjon mellom temperatursensoren og Arduino gjennom Digital Discovery og NI LabVIEW - Elektronikknett
Digilent-cover

Spionerende I2C-kommunikasjon mellom temperatursensoren og Arduino gjennom Digital Discovery og NI LabVIEW

Fag_vignett_80x80

Arduino er en plattform med åpen kildekode som er utstyrt med en mikrokontroller, og brukes mye til å bygge ulike systemer og programmer. Du kan programmere Arduino-plattformer med objektorientert språk (f.eks. C++) og ta i bruk utallige biblioteker og abstraksjoner for å kjøre en rekke enkle og komplekse oppgaver. Du kan feste sensorer på Arduino-plattformen og hente miljødata gjennom digitale kommunikasjonsprotokoller.

I likhet med mange systemdesignprosesser kan du støte på ulike problemer i Arduino-prosjektet, som for eksempel at du ikke får maskinvaren til å fungere som forventet. Arduino-feilsøking kan imidlertid være litt mer komplisert. En av grunnen til det er at Arduino ikke kommer med et tilpasset feilsøkingsverktøy.

En logikkanalysator kan gjøre det enklere å feilsøke fysiske problemer i Arduino-prosjektet. Hvis for eksempel en sensor ikke anerkjenner adressen i I2C-kommunikasjonen, kan du bruke en logikkanalysator til å visualisere tidsdiagrammet og analysere bussen for å oppdage problemet.

I denne opplæringen får du vite hvordan du bruker Digilent Digital Discovery, logikkanalysator og mønstergenerator samt NI LabVIEW til å feilsøke I2C-kommunikasjonen mellom Digilent Pmod TMP3, en temperatursensor og Arduino Uno.

Nødvendig maskinvare
1. Arduino Uno
Arduino Uno er et mikrokontrollerkort basert på ATmega328P. Det har 14 digitale inngangs-/utgangspinner (hvorav seks kan brukes som PW-utganger), seks analoge innganger, en keramisk resonator på 16 MHz (CSTCE16M0V53-R0), en USB-tilkobling, en strømkontakt, en ICSP-kontakt og en tilbakestillingsknapp.

2. Pmod TMP3
Pmod TMP3 er en omgivelsestemperatursensor bygget rundt mikrochipen TCN75A. Brukerne kan konfigurere utdataene gjennom I2C til opptil 12 biters oppløsning, i tillegg til å stille inn en utløser som aktiveres når en brukerdefinert temperaturgrense nås.

3. Digital Discovery 
Digilent Digital Discovery™ er en kombinert logikkanalysator og mønstergenerator som kan konfigureres til å være hvilket som helst av følgende instrumenter:

  1. 32-kanals digital logikkanalysator (1.2…3.3V CMOS, åtte kanaler ved 800MS/s*, 16 kanaler ved 400MS/s*og 32 kanaler ved 200MS/s)
  2. Digitale bussanalysatorer (SPI, I²C, UART, CAN, parallell)
  3. 16-kanals mønstergenerator (1.2…3.3V CMOS, 100MS/s)
  4. 16—kanals virtuell digital I/O inkludert knapper, brytere og LED-lampe – perfekt til opplæringsprogrammer for logikk
  5. En programmerbar strømforsyning på 1.2…3.3V/100mA. Den samme spenningen forsyner logikkanalysatorens inngangsbuffere og inngangs-/utgangsbufferne til mønstergeneratoren, slik at kompatibiliteten med kretsens logikknivå opprettholdes under testing.

Nødvendig programvare
1. Arduino IDE
Arduino IDE kjører på Linux, Windows og Mac OS. Du bruker IDE til å programmere programvaredesignet til Arduino slik at Pmod TMP3 fungerer på Arduino Uno

2. NI LabVIEW
NI LabVIEW tilbyr en grafisk programmeringstilnærming for å gjøre det enklere å visualisere hvert aspekt av programmet, inkludert maskinvarekonfigurasjon, måledata og feilsøking. Fordeler ved bruk av LabVIEW: 

  • Programmer på samme måten som du tenker på med intuitiv grafisk programmering
  • Koble til nesten enhver maskinvare med uovertruffen maskinvarestøtte
  • Du kan raskt samle inn og visualisere data
  • Du kan samhandle med andre programvareverktøy

 Du vil bruke kostnadsfrie NI LabVIEW Community Edition

Maskinvareoppsett
For det første må du koble Pmod TMP3 til Arduino Uno basert på skjemaene og ledningsanvisningene nedenfor. Deretter laster du den oppgitte Pmod TMP3-skissen til Arduino Uno i Arduino IDE.

Pmod TMP3-pinne Arduino Uno-pinne
VCC 3V3
GND GND
SCL A5 (SCL)
SDA A4 (SDA)

 

Bilde1

Når du har lastet opp skissen, skal du se resultatet nedenfor. Temperaturen vises på den serielle skjermen.

Bilde2

Pmod TMP3 kommuniserer med Arduino Uno gjennom en I2C-kommunikasjonsprotokoll. For å forstå hvordan protokollen fungerer, kan du bruke digitale signaler fra Pmod TMP3 til Digital Discovery.

  1. Koble SCL på Pmod TMP3 til Digital Discovery DIO 24
  2. Koble SDA på Pmod TMP3 til Digital Discovery DIO 25
  3. Koble GND på Pmod TMP 3 til Digital Discovery-jording
Bilde3

Programvareoppsett
Du må opprette VI-er for et delt bibliotek slik at du kan bruke biblioteker og funksjoner i WaveForms' Software Development Kit (SDK). WaveForms' SDK gir tilgang til et offentlig programmeringsgrensesnitt (API) som gir brukere muligheten til å opprette egendefinerte dataprogrammer.

Opprett delte biblioteker i VI
Åpne NI LabVIEW og opprett en ny tom VI. Fra menylinjen åpner du Verktøy → Importer → Delt bibliotek (.dll) …. Klikk Opprett VI-er for et delt bibliotek og klikk deretter Neste.

Velg C:\Windows\System32\dwf.dll som delt bibliotek og C:\Program Files (x86)\Digilent\WaveFormsSDK\inc\dwf.h som hovedpostfil, og klikk deretter Neste.

Fig3

La det neste vinduet være slik det er – bare klikk på Neste-knappen. Når hovedpostfilen er analysert, vises en liste over tilgjengelige funksjoner. Veiviseren oppretter en VI for de valgte funksjonene på denne listen. Trykk Neste for å fortsette.

Fig4

I følgende vindu kan du angi navnet og plasseringen til VI-biblioteket. Som standard oppretter veiviseren biblioteket i mappen med LabVIEW-brukerbiblioteker, med samme navn som det delte biblioteket (dwf i dette tilfellet). Trykk Neste for å fortsette.

Fig5

Under Velg feilhåndteringsmodus velger du Enkel feilhåndtering ettersom feilsignalet gjør at feilsøkingen går raskere.

Fig6

Enkelte egenskaper for hver funksjon kan redigeres i det følgende, men ettersom dwf-biblioteket inneholder flere hundre funksjoner, er det mer tidsbesparende å beholde standardinnstillingene for hver funksjon og kun redigere enkelte funksjoner før de brukes. Etter at et generasjonssammendrag er vist, begynner veiviseren å generere VI-ene fra de delte biblioteksfunksjonene. Prosessen tar tid, så vær tålmodig.

Når generasjonsprosessen er ferdig, er VI-biblioteket klart til bruk. For enkelte funksjoner må imidlertid den genererte VI-en redigeres.

Fig7

Redigere genererte VI-er
For enkelte funksjoner kan det være nødvendig å gjøre noen endringer ved den genererte VI-en før den brukes. Dette gjøres ved å åpne LabVIEW, opprette en ny tom VI og deretter åpne blokkdiagrammet (med Ctrl + E eller fra menylinjen under Vindu-menyen). Høyreklikk på det tomme diagrammet og velg Brukerbiblioteker → dwf → VI-er, og plasser deretter funksjonen du bil bruke på blokkdiagrammet. I dette eksempelet redigeres F Dwf Digital I2c Read VI (du kan bruke søkeknappen til å finne en bestemt funksjon).

Dobbeltklikk på en VI for å åpne innholdet, og åpne deretter blokkdiagrammet (med Ctrl + E eller fra menylinjen under Vindu-menyen). Definisjonen til knappen vil vises, og under den vises én enkel blokk med kontroller på siden for inndata (til venstre) og indikatorer på siden for utdata (til høyre).

Herfra kan du endre funksjonen slik du ønsker. I denne demonstrasjonen endres datatypen til lesedatabufferen.

Fig8

Dobbeltklikk på blokken (oransje trekant med noe svart mønster på) og velg deretter Parametere i vinduet som åpnes.

Fig9

I WaveForms' SDK-referansemanual søker du etter den valgte funksjonen. Funksjonsbeskrivelsen viser at bufferen for lesedataene er rgbRx av typen unsigned char*.

Fig10

I LabVIEW velger du rgbRx fra Parametere-vinduet. Funksjonen kan brukes enklere hvis denne parameteren ikke er en streng, men en matrise med tegn. I rullegardinmenyen Type velger du Matrise, og i rullegardinmenyen Data velger du Unsigned 8-bit Integer (det er samme størrelse som unsigned char). Godta endringene.

Fig11

På blokkdiagrammet sletter du kontroll- og indikatorelementene som er koblet til den valgte parameteren. Slett også ledningene som er koblet til dem. Hold musepekeren over rgbRx-parameteren på utdatasiden (til høyre) til blokken, høyreklikk på den og velg opprett indikator. Ettersom den valgte parameteren er en buffer for lesedataene, er de ikke nødvendig å opprette et kontrollelement for den. Trykk Ctrl + U for å organisere diagrammet.

Fig12

Dobbeltklikk på den opprettede indikatoren for å fremheve den på frontpanelet. Klikk på en tom terminal øverst i høyre hjørne av frontpanelet (hvit firkant) på terminalvelgeren (1), og klikk deretter på rgbRx-indikatorfeltet (2).

Lagre endringene og lukk frontpanelet. Du vil se at en utgangsterminal vises på blokken til den redigerte VI-en med navnet rgbRx av typen Unsigned 8-bit Integer Array.

Fig13

Last ned og pakk ut den oppgitte eksempelfilen spy_tmp3.zip og dobbeltklikk på den for å åpne den med LabVIEW Community. Alle funksjonene som brukes i eksempelet kan brukes i din egen VI. Prøv deg frem og se hva annet du kan opprette.

Når enhetene er koblet til og de brukte DIO-linjene og slaveadressen er spesifisert, kan programmet startes med Kjør-knappen på frontpanelet. Termometrene viser samme temperatur som den som måles av Arduino, mens de mottatte rådataene vises i heksadesimalt format i det respektive tekstfeltet.

Fig14

Virtuelt instrumentasjonsdesign
Et virtuelt LabVIEW-instrument består av to deler: frontpanelet og blokkdiagrammet. Frontpanelet inneholder alle kontroller og indikatorer for inn- og utdata og fungerer som et brukergrensesnitt når programmet kjører. Blokkdiagrammet inneholder blokkene som vises er til stede på frontpanelet, i tillegg til andre blokker som er nødvendige for informasjonsbehandling og forbindelsene mellom disse blokkene. Du kan legge til en ny blokk i begge vinduer ved å høyreklikke på et tomt område i det tilsvarende vinduet og velge den nødvendige blokken fra et bibliotek. Blokker som allerede er til stede i vinduet kan endres ved å høyreklikke på den respektive blokken. I det følgende presenteres frontpanelet og blokkdiagrammet til dette eksempelet.

Frontpanel
Frontpanelet inneholder stoppknappen, som stopper programmet og lukker Digital Discovery for å gjøre det tilgjengelig for annen programvare, i tillegg til tre kontrollelementer. Inndatafelt for å definere DIO-linjer for Digital Discovery som er koblet til Arduinos I2C-data, samt klokkelinjer og et inndatafelt for å angi I2C-slaveadressen i heksadesimalt format.

Under kontrollelementene plasseres det to termometre for å vise den målte temperaturen i grader, i Celsius og Fahrenheit. Nederst er det to tekstfelt: et for å indikere feil og et for å vise de mottatte dataene i heksadesimalt format.

Bilde4

Blokkdiagram
I dette eksempelet har blokkdiagrammet tre hoveddeler. Den første delen er ansvarlig for å konfigurere Digital Discovery. Den første funksjonen (F Dwf Device Close All) lukker alle Digilent test- og måleinstrumenter for å gjøre dem tilgjengelig for dette programmet. Funksjonen F Dwf Device Open med inndataparameteren -1 åpner den første tilgjengelige enheten og sender enhetsbehandleren for alle de andre funksjonene i denne VI-en.

I2C-klokkefrekvensen settes til 100 KHz, og deretter defineres SCL- og SDA-pinnene. DIO-pinnene til Digital Discovery nummereres fra 24 (i standardmodus), slik at 24 må trekkes fra de angitte numrene, 24 blir DIO 0 og 25 blir DIO 1. Funksjonen F Dwf Digital I2c Clear sjekker hentingene på de serielle dataene og klokkelinjene og returnerer 0 hvis det er en feil ved forbindelsen.

Fig16

Vedvarende mottakelse av data startes kun hvis det ikke var noen feil ved hentesjekken. Hvis sjekken mislykkes, vises det en feilmelding og datamottak startes ikke.

Ved hver iterasjon av en while-løkke mottas det to byte med data fra den definerte adressen på frontpanelet. Funksjonen F Dwf Digital I2c Read redigeres, slik at den leste databufferen sendes ut til en Unsignet 8-bit Integer Array og ikke til en streng. (se: Redigere genererte VI-er).

De to mottatte bytene settes sammen og forskyves til høyre med fire biter, og deretter konverteres rådata til grader Celsius og Fahrenheit og vises på frontpanelet ved hjelp av termometrene. De mottatte bytene konverteres til heksadesimale strenger, og settes deretter sammen med «0x» og vises i det respektive feltet på frontpanelet.

Løkken avsluttes hvis det oppstår en feil, eller hvis stoppknappen trykkes.

Fig17

Når løkken avsluttes, tilbakestilles de digitale inn- og utinstrumentparametrene, og deretter lukkes enheten for å gjøre den tilgjengelig for annen programvare. Eventuelle feil blir håndtert.

Fig18

Digital Discovery er tilgjengelig gjennom Distrelec, den autoriserte distributøren i Norge

Kommentarer