Lav et oscilloskop ved hjælp af SainSmart Mega2560 Med TFT LCD-skjoldet og 3,5-tommers farve berøringsskærm: 8 trin (med billeder)

Lav et oscilloskop ved hjælp af SainSmart Mega2560 Med TFT LCD-skjoldet og 3,5-tommers farve berøringsskærm: 8 trin (med billeder)

Indholdsfortegnelse:

Anonim

Dette instruerbare viser dig, hvordan du opbygger en bærbar berøringsskærm

Oscilloskop til mindre end 40 U $!

Oscilloskopet er et af de mest effektive elektroniske instrumenter

er tilgængelig for elektronikhobbyist, eksperimenter og ingeniører. det er

hovedsagelig bruges til at måle tidsvarierende signaler. Hver gang du har et signal

der varierer med tiden (langsomt, hurtigt og / eller periodisk), du kan bruge

et oscilloskop til at måle det, visualisere det og finde eventuelle uventede

funktioner i det.

Vi kan bruge et oscilloskop til at observere og studere signalegenskaber

at vi ellers ikke kunne se.

Du vil lære om Arduino mega analog til digital konverter (ADC).

Vi bruger den Arduino analoge A0-indgang til prøve og indsamlingstid

varierende signaler ved at skrive et program, der også viser disse signaler

i en 3,8 "TFT LCD touch display, og vi vil indtaste data for at ændre

oscilloskopadfærd, ved hjælp af berøringsfunktionerne på skærmen.

Før vi begynder at bygge og programmere, lad os gennemgå nogle grundlæggende

karakteristika ved et oscilloskop.

Disse funktioner kan du styre på de fleste oscilloskoper:

Fejningshastighed. Svejsehastighed måles normalt i tidsenheder pr. Afstand, som millisekunder / centimeter eller millisekunder per division.Dette kan også

betegnes som den horisontale følsomhed.

Lodret følsomhed. Det er målet for, hvor følsomt displayet er

er at spænding anvendes til indgangsterminalerne. Det måles normalt i

volt / centimeter eller volt pr. division.

EN udløser signal kan genereres, når signalværdien når nogle

bestemt niveau - udløserniveauet. I de fleste tilfælde kan du indstille udløseren

niveau til en spændingsværdi efter eget valg. En trigger bruges til at fange og

stabilisere bølgeformen på skærmen eller vente på en begivenhed før

fange dataene

Oscilloskopet, som min 4-kanal DC DVM, vil ikke være så præcis som

en kommerciel enhed, men det virker ret godt for lavspænding og lave frekvenser.

forsyninger:

Trin 1: OPDATERING: Skitse til konvertering af oscope til 3-kanals DVM med grafisk skærm + Lego-indkapsling

Tak til alle, der stemte for mig! Denne Instructable vandt 3. præmie i Arduino konkurrencen, og førstepræmien i Gadget konkurrencen …

Inkluderet er billeder og kode til at konvertere dit oscope til en 3-kanal DVM og for at vise udgangen af ​​hver kanal individuelt i displayet ved at trykke på en softkey på displayet. (den tredje knap fra toppen)

du vil have brug for en L-formet stik til kvinder, hvis du vil have fleksibilitet til at indsætte hoppere, ellers kan du bare bøje stifterne på den ene side af jumperne for at indsætte dem i de analoge kanaler (A0-A3) for at bruge dem som dine sonder.

Bare download skitsen og upload den til Arduino.

Du kan mærke hver kanal individuelt, bare ændre ordlyden på skissen.

Jeg har også lavet et lego kabinet til omfanget. Check ud billederne.

Trin 2: Dele liste

Du får brug for:

  • A Sainsmart mega2560 bord med 3,5 "tft LCD touch-modul display og skjold kit
  • En pc med arduino IDE og en gratis USB-port.
  • Et USB-kabel
  • Jumperkabler
  • UTFT bibliotek og UTouch bibliotek fra Henning Karlsen. web:

Trin 3: Byg hardware.

Konstruktion af oscilloskopet er ret simpelt. Du skal bare sætte delene af Sainsmart-kit sammen. Alt du skal gøre er at tilføje to jumpers; en til jorden, og den anden til at bruge som din oscilloskop test probe.

Du bliver nødt til at bøje stifterne på den ene side af jumperkablerne og indsætte dem i Adu-pin og GND-stiftet på Arduino (se billeder til detaljer), inden du installerer skærmbilledet, da skærmen dækker portene en gang den er på plads.

Sæt skærmen i Arduino, og sæt skærmen i skærmen, og du er færdig !!!

Lad os nu teste displayet, før vi gør det til et oscilloskop.

Trin 4: Softwaren: UTFT Library Test.

Hvis du er færdig med at sætte dit kit sammen, skal du sætte det i USB-kablet, der forbinder til din pc, der kører Arduino IDE.

Hvis du ikke har gjort det, skal du downloade UTFT- og UTouch-bibliotekerne og kopiere dem til bibliotekets mappe, hvor du har installeret arduino IDE.

Hvis bibliotekerne installeres korrekt, vil du se UTFT og UTouch-indstillingerne, når du klikker på indstillingen Filer og ruller ned til eksempler.

Hvis UTFT-indstillingen er i din menulinje, vælg den, vælg derefter arduino og endelig UTFT_Demo_320x240. Dette vil indlæse det kølige demo-program.

Med det program, der er lagt i IDE, skal du rulle ned for at se følgende kode:

// Uncomment den næste linje for Arduino 2009 / Uno

// UTFT myGLCD (ITDB32S, 19,18,17,16); // Husk at ændre modelparameteren, så den passer til dit displaymodul!

// Uncomment den næste linje for Arduino Mega

UTFT myGLCD (ITDB32S, 38,39,40,41); // Husk at ændre modelparameteren, så den passer til dit displaymodul!

Kommentere kommandoen til FN, og frigør kommandoen til Mega, som jeg gjorde.

Gå nu til værktøjsmenuen, klik på bord og vælg Arduino Mega 2560 eller Mega ADK, hvis den ikke allerede er valgt.

Klik på bekræft for at kompilere programmet. Hvis der ikke er nogen fejl, skal du klikke på upload for at indlæse og udføre programmet.

Hvis alt er Ok, vil du se et sejt demo-program, der kører. Billeder i dette trin viser skærmbilleder af demoen, der kører.

Trin 5: Softwaren: UTouch Library Test.

Nu skal vi teste Utouch-biblioteket

Gå til filmenuen og vælg; Eksempler> UTouch> Arduino> Utouch_ButtonTest og indlæs programmet til IDE.

Bekræft og kør programmet.

Du skal se et tastaturudvalg i displayet, og når du trykker på taltasterne, skal de vises nederst på skærmen.

Hvis alt gik godt, er vi klar til at indlæse Oscilloskop-softwaren.

Trin 6: Oscilloskopet

Nedenfor finder du skitsen til oscilloskopet. Før vi kopierer og indsætter programmet, lad os gennemgå nogle begrænsninger og forklare programmet.

Jeg har måttet foretage en hel del forskning for at komme op med koden, og mange uddrag er blevet "lånt" fra flere kilder.

Jeg opdelte programmet i flere underrutiner for at gøre det lettere at forstå. Koden er veldokumenteret, men hvis du har problemer med at forstå det, skal du forlade en kommentar, og jeg vil forsøge at forklare det.

Oscilloskopbåndbredden er begrænset til ca. 1 khz, men der er plads til forbedring.

Indgangen er begrænset til en 5 volt peak to peak bølgeform, medmindre du bruger en spændingsdeler ved indgangen, og også begrænset til positive bølgeformer fra 0 til 5 volt.

Jeg brugte nogle kode, jeg fandt på: http://www.microsmart.co.za/technical/2014/03/01/advanced-arduino-adc/ for at justere ADC-prøveperioden.

Grafikken og berøringsfunktionerne blev modificeret og lånt fra Henning Karlsen-eksemplerne i sine biblioteker.

Jeg brugte en LM 317 spændingsregulator og en 555 IC timer som en astabil ocillator for at skabe de signaler, der bruges til at teste oscilloskopindgangen.

Håber du nød at læse og forhåbentlig opbygge dette instruerbare. Hvis du finder det nyttigt, bedes du stemme for mig i konkurrencerne.

Bemærk: Jeg omfattede sKetch, UTFT og UTouch-biblioteker i biblioteket libraries.zip for de af jer, der har problemer.

Kopier og indsæt skitsen til din Arduino IDE

// ---------------------- START PROGRAM

/*--------------------------------------------------------------

Program: OscopetouchLCDmega

Beskrivelse: Digital oscilloskop med data vises

på farve TFT LCD med touch screen

Hardware: sainsmart mega2560 bord med 3,5 "tft LCD touch-modul display og skjold kit

http: //www.sainsmart.com/home-page-view/sainsmart …

Software: Udviklet ved hjælp af Arduino 1.0.3 software

Dette program kræver UTFT biblioteket og

UTouch bibliotek fra Henning Karlsen.

web:

Version 1.00

Dato: 5. april 2014

Forfatter: johnag

--------------------------------------------------------------*/

#omfatte

#omfatte

// Erklære hvilke skrifttyper vi vil bruge

ekstern uint8_t SmallFont;

// Initialiser skærm og berøringsfunktioner

UTFT myGLCD (ITDB32S, 38,39,40,41);

UTouch myTouch (6,5,4,3,2);

// Erklære variabler

char buf 12;

int x, y;

int Input = 0;

byte prøve 320;

byte OldSample 320;

int StartSample = 0;

int EndSample = 0;

int Max = 100;

int Min = 100;

int mode = 0;

int dTime = 1;

int tmode = 0;

int Trigger = 0;

int SampleSize = 0;

int SampleTime = 0;

int dgvh;

int hpos = 50; // sæt 0v på vandret gitter

int vsens = 4; // vertikal følsomhed

// Definer forskellige ADC prescaler

const unsigned char PS_16 = (1 << ADPS2);

const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);

const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);

const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

// ------------ Start underrutiner ---------------------------------- -

// -------- tegne knapper sub

void knapper () {

myGLCD.setColor (0, 0, 255);

myGLCD.fillRoundRect (250, 1, 310, 50);

myGLCD.fillRoundRect (250, 55, 310, 105);

myGLCD.fillRoundRect (250, 110, 310, 160);

myGLCD.fillRoundRect (250, 165, 310, 215);

}

// ------- touchscreen position sub

void touch () {

mens (myTouch.dataAvailable ())

{

myTouch.read ();

x = myTouch.getX ();

y = myTouch.getY ();

forsinkelse (500);

hvis ((y> = 1) && (y <= 50)) // Forsink række

{

hvis ((x> = 250) && (x <= 300)) // Delay Button

waitForIt (250, 1, 310, 50);

mode = tilstand ++;

{

myGLCD.setColor (255, 0, 0);

myGLCD.drawRoundRect (250, 1, 310, 50);

// Vælg forsinkelsestider

hvis (mode == 0) dTime = 0;

hvis (mode == 1) dTime = 1;

hvis (mode == 2) dTime = 2;

hvis (mode == 3) dTime = 5;

hvis (mode == 4) dTime = 10;

hvis (mode == 5) dTime = 20;

hvis (mode == 6) dTime = 30;

hvis (mode == 7) dTime = 50;

hvis (mode == 8) dTime = 100;

hvis (mode == 9) dTime = 200;

hvis (mode == 10) dTime = 500;

hvis (tilstand> 10) mode = 0;

}}

hvis ((y> = 70) && (y <= 120)) // Trigger række

{

hvis ((x> = 250) && (x <= 300)) // Trigger Button

waitForIt (250, 55, 310, 105);

tmode = tmode ++;

{

myGLCD.setColor (255, 0, 0);

// Vælg Software trigger value

myGLCD.drawRoundRect (250, 55, 310, 105);

hvis (tmode == 1) Trigger = 0;

hvis (tmode == 2) Trigger = 10;

hvis (tmode == 3) Trigger = 20;

hvis (tmode == 4) Trigger = 30;

hvis (tmode == 5) Trigger = 50;

hvis (tmode> 5) tmode = 0;

}}

hvis ((y> = 130) && (y <= 180)) // H position række

{

hvis ((x> = 250) && (x <= 300)) // H position knappen

waitForIt (250, 110, 310, 160);

hpos = hpos ++;

{

myGLCD.setColor (255, 0, 0);

myGLCD.drawRoundRect (250, 110, 310, 160);

myGLCD.clrScr ();

knapper ();

hvis (hpos> 60) hpos = 50;

}}}}

// ---------- vent på touch sub

void waitForIt (int x1, int y1, int x2, int y2)

{

mens (myTouch.dataAvailable ())

myTouch.read ();

}

// ---------- tegne rutenummer

void DrawGrid () {

myGLCD.setColor (0, 200, 0);

for (dgvh = 0; dgvh <5; dgvh ++) {

myGLCD.drawLine (dgvh * 50, 0, dgvh * 50, 240);

myGLCD.drawLine (0, dgvh * 50, 245, dgvh * 50);

}

myGLCD.drawLine (245, 0, 245, 240);

myGLCD.drawLine (0, 239, 245, 239);

myGLCD.setColor (255, 255, 255);

myGLCD.drawRoundRect (250, 1, 310, 50);

myGLCD.drawRoundRect (250, 55, 310, 105);

myGLCD.drawRoundRect (250, 110, 310, 160);

myGLCD.drawRoundRect (250, 165, 310, 215);

}

// ------ Vent til input til at være større end trigger sub

void trigger () {

mens (Input <Trigger) {Input = analogRead (A0) * 5/100;

}}

// --------------- Slut underrutiner ----------------------

void setup ()

myGLCD.InitLCD ();

myGLCD.clrScr ();

myTouch.InitTouch ();

myTouch.setPrecision (PREC_MEDIUM);

knapper ();

pinMode (0, INPUT);

// oprette ADC

ADCSRA & = ~ PS_128; // Fjern bits indstillet af Arduino bibliotek

// Du kan vælge en prescaler nedenunder.

// PS_16, PS_32, PS_64 eller PS_128

ADCSRA

void loop () {

mens (1) {

DrawGrid ();

røre ved();

udløser();

// Saml de analoge data i en matrix

StartSample = micros ();

for (int xpos = 0;

xpos <240; xpos ++) {Sample xpos = analogRead (A0) * 5/102;

delayMicroseconds (dTime);

}

EndSample = micros ();

// Vis de samlede analoge data fra array

for (int xpos = 0; xpos <239;

xpos ++)

{

// Slet tidligere visning

myGLCD.setColor (0, 0, 0);

myGLCD.drawLine (xpos + 1, 255-OldSample xpos + 1 * vsens-hpos, xpos + 2, 255-OldSample xpos + 2 * vsens-hpos);

hvis (xpos == 0) myGLCD.drawLine (xpos + 1, 1, xpos + 1, 239);

// Tegn de nye data

myGLCD.setColor (255, 255, 255);

myGLCD.drawLine (xpos, 255-prøve xpos * vsens-hpos, xpos + 1, 255-prøve xpos + 1 * vsens-hpos);

}

// Bestem stikspændingsspidsen til toppen

Max = Prøve 100;

Min = Prøve 100;

for (int xpos = 0;

xpos <240; xpos ++)

{

OldSample xpos = Prøve xpos;

hvis (Sample xpos> Max) Max = Sample xpos;

hvis (Prøve xpos <Min) Min = Prøve xpos;

}

// vise prøve tid, forsinkelsestid og trigger niveau

myGLCD.setBackColor (0, 0, 255);

myGLCD.setFont (SmallFont);

myGLCD.setBackColor (0, 0, 255);

myGLCD.print ("Delay", 260, 5);

myGLCD.print ("", 270, 20);

myGLCD.print (itoa (dTime, buf, 10), 270, 20);

myGLCD.print ("Trig.", 260, 60);

myGLCD.print ("", 270, 75);

myGLCD.print (itoa (Trigger, Buf, 10), 270, 75);

myGLCD.print ("H Pos.", 260, 120);

myGLCD.print (itoa (hpos, buf, 10), 270, 135);

//myGLCD.setBackColor (0, 0, 0);

SampleTime = (EndSample-StartSample) / 1000;

myGLCD.print ("Sec.", 205, 210);

myGLCD.print ("", 280, 30);

myGLCD.print (itoa (SampleTime, buf, 10), 205, 220);

// Område 0 til 64 * 78 = 4992 mV

SampleSize = (Max-Min) * 78;

myGLCD.print ("mVolt", 5, 210);

myGLCD.print (itoa (SampleSize, buf, 10), 5, 220);

myGLCD.print (itoa (analogRead (A0) * 4,15 / 10,23, buf, 10), 110, 220);

}}

// ------------------------- END PROGRAM

Trin 7: Video af oscen i aktion

Trin 8: En anden video

Runner Up i

Arduino Contest

Andenpris i

Gadget Hacking and Accessories Contest

4 personer lavede dette projekt!

  • scottm214 lavede det!

  • e.ma.niak lavede det!

  • Whitmore12 gjorde det!

  • grumpyboots lavede det!

Har du lavet dette projekt? Del det med os!

anbefalinger

  • Mash Up Arduino Code Samples

  • Opensource Ornithopter Prototype. Arduino Powered og Fjernstyret.

  • Internet af Things Class

  • Party Challenge

  • Arduino Contest 2019

  • IoT Udfordring

84 Diskussioner

0

DavidPatterson

4 år siden på introduktion

En fremragende artikel!

Jeg vil lede efter en tft til min mega!

Hvilken slags opdateringsfrekvens tror du, at din tft har?

Har du overvejet at læse den analoge port ved at afbryde

Jeg har et 153K oscilloskop design ved hjælp af en mega med hardware og software triggering.

http: //www.instructables.com/id/Arduino-High-speed …

Det ville være interessant at bringe de to begreber sammen.

7 svar 0

johnag DavidPatterson

Besvar 4 år siden på Indledning

Undskyld for forsinkelsen i at reagere. Tak for din kommentar. Jeg kender ikke opdateringshastigheden på skærmen, har ikke tjekket detaljerne detaljeret. Det ville helt sikkert forbedre omfanget, hvis du kunne øge båndbredden ved at bruge dit design. Hvis du får kittet og prøv dine koncepter på det, skal du dele. Hvis jeg har tid, kan jeg prøve det selv. Tak tak.

0

DavidPatterson johnag

Besvar 4 år siden på Indledning

Den 3,2 tommer skærm og Shield endelig ankom. Jeg brugte min Mega i stedet for Sainsmart.

Montering var let-Jeg tilføjede tilslutninger til analog port, pwm10, nul og 5V. Programmering var ikke svært - Henning, biblioteksforfatteren har fremragende dokumentation. Jeg fandt ingen problemer med gennemførelsen af ​​hans protokoller.

Mit omfang løber op til 237-238 Khz.

SD-kortlæseren, der er på skærmen, virker og åbner mulighed for dataspare. (For ikke at nævne at tilføje billeder)

Dette har produceret et meget godt stand-alone oscilloskop.

Tak for dit arbejde.

0

waqasbadarwb DavidPatterson

Besvar 4 år siden på Indledning

Kan du give koden?

0

hemal1 waqasbadarwb

Besvar 4 år siden på Indledning

Hej, Hvilket bibliotek bruger du til dette?

0

Hamzaikky DavidPatterson

Besvar 4 år siden på Indledning

Hvordan har du tilføjet billeder?

0

DavidPatterson Hamzaikky

Besvar 4 år siden på Indledning

Hej, Til denne applikation brugte jeg

Hennings loadBitmap-funktion - som er dokumenteret i eksemplerne

leveret med hans bibliotek. Dette kræver, at du konverterer en skærmstørrelse

(eller mindre) billede til råformat. Han leverer et program med sit bibliotek

download til dette. Eller du kan bruge sin online-konverter til:

http: //www.henningkarlsen.com/electronics/t_imagec …

Jeg brugte en skærmstørrelse (320 x 240) fil.

#omfatte

#omfatte

#omfatte

#omfatte

// Initialiser skærm og berøringsfunktioner

UTFT myGLCD (ITDB32S, 38,39,40,41);

UTFT_tinyFAT myFiles (& myGLCD);

UTouch myTouch (6,5,4,3,2);

boolsk logo = true;

ord res;

const int chipSelect = 53; // sd vælg pin

void setup () {

pinMode (chipSelect, OUTPUT);

myGLCD.InitLCD ();

myGLCD.clrScr ();

int picsize_x = myGLCD.getDisplayXSize ();

int picsize_y = myGLCD.getDisplayYSize ();

hvis (logo) {

hvis (file.initFAT () == 0) {

skifte (picsize_x);

res = myFiles.loadBitmap (0, 0, picsize_x, picsize_y, "LOGO.RAW");

hvis (res == 0) {

forsinkelse (5000);

myGLCD.clrScr ();

}

}

}

// mere setup stuff

}

Brugen af ​​råfilen til en enkelt visning er fint.

Imidlertid

at skulle konvertere flere filer syntes lidt tidskrævende for mig.

Så jeg skrev en tilføjelse til Hennings udft bibliotek til at behandle 24 bit

bmp filer direkte. Dette virker godt og kræver ikke UTFT_tinyFat

og tinyFat. SD-kortet kan fås ved hjælp af standard arduino sd

bibliotek. Min patch vil indlæse en skærmstørrelsesbitmap i 1.79S, hvilket er en

lidt hurtigere end Hennings system.

Jeg har også udnyttet sd til dataoptagelse.

Alt i alt har John detaljeret et meget nyttigt skjold og lcd!

0

DavidPatterson johnag

Besvar 4 år siden på Indledning

Hej, Jeg bestilte lcd for en måned siden - tilsyneladende er det et sted mellem Kina og Storbritannien.

I mellemtiden har jeg udviklet kode, der kører på

237,3 Khz, med konfigurerbar software triggering.

http:? //forum.arduino.cc/index.php PHPSESSID = 3e1pvs …

Jeg har også skrevet software, der kører ved 1.2MHz ved hjælp af en TLV571, også med software triggering.

0

ValtherN

1 år siden

Har nogen pr. Chance lavet en 3D printbar boks til dette?

0

hackerh

1 år siden

Hej

Jeg har en forespørgsel til at gøre det muligt at oprette Oscilloskop ved Arduino UNO og have en hurtig analogRead kan læse signalet med høj hastighed til 200KHz.

Hvis det er muligt, hjælper det mig med at udføre det

Er det muligt at give mig et eksempel på dette er et lille program, der viser ADC's handling hurtigt for at tage stikprøven på 200KHz

Denne email er [email protected]

Takke

0

pipern8536d

1 år siden

Kan denne enhed installeres ved hjælp af den nye oled fleksible skærm?

0

AMSR1

1 år siden

Det ser ud til at koden virker, men knapperne (Delay, Trig osv.) Virker ikke. Er der nogen der har det samme problem?

0

kevinmaker2018

1 år siden

Koldt projekt. Jeg lavede det med min Mega 2560 og den 3,2 tommer TFT display. Det virker fint. Tak fordi du delte.

0

jwzumwalt

1 år siden

Hvad betyder "fungerer fint for lav spænding og lave frekvenser" betyder? Medtag venligst nogle relavent specs i den første eller to afsnit, så vi kan se om projektet er relevant for vores behov …

2 svar 0

PatrickT90 jwzumwalt

Besvar 1 år siden

Han forklarer spørgsmålet i sin anden instruerbare, som er knyttet til den spørgsmålstegnede sætning.

0

jwzumwalt PatrickT90

Besvar 1 år siden

Åh … Så dette er klik agn og ikke meningen at være virkelig informativ?

0

Lasersystem

1 år siden

Hej, Hvordan kan jeg bruge Arduino DUE med TFT LCD Sheild med touch.

Tusind tak

0

Harry N4HBM

2 år siden

Jeg brugte SainSmart boards og det virker som en charme.

0

Nonametruck

2 år siden

Endelig fundet et godt projekt, du tog lidt tid på at sætte min her på her tak fordi du tog tiden..

0

brawls01

2 år siden

Hvordan ville du ændre koden for at vise et signal mellem 0,2 og -0,2 volt?