USb-pic som datalogger/frekvensräknare/oscilloskop?

Planering och tankar kring eventuella framtida projekt.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

USb-pic som datalogger/frekvensräknare/oscilloskop?

Inlägg av PHermansson »

Satt igår och försökte mäta lite med mitt ljudkort och Xoscope. Gick inget vidare, ljudkortets ingång är ju inte direkt anpassad för att mäta signaler.
Funderade sedan lite mer på detta, och kom på att det ligger några Pic4550 och 2550 och skräpar här.
Skulle man inte kunna använda en 2550 för att bygga ett enkelt PC-kopplat mätinstrument?

På ingångsidan för man ha skyddskretsar och en spänningsdelare. Konstruktionen av det kan man nog hitta på nätet. Detta kopplas sedan till en AD-ingång. Finns ju flera AD, så man skulle kunna ha flera kanaler.
Som utgång skickas data till PC'n, men det vore även smidigt med en LCD.

Antingen styr man funktionen från PC'n, eller så kanske ett par knappar för att växla funktion och mätområde?

Edit: Undrar hur mycket plats det finns över i en 99:-'s multimeter? Man kanske kan koppla in sig i en sådan?
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Du får ju bestämma dig för om du ska lagra all data i µC:n och sedan föra över det till datorn eller om du ska köra direkt över USB.

Sparar du alla samples i µC:n så måste du ha gott om minne. Fördelen är att du kan sampla utan tillgång till dator.

Kör du direkt via USB så blir du väl nästan tvungen att köra med Interrupt-överföring(?), vilket kanske inte går så snabbt. Men du kan å andra sidan lagra samples för nästan hur lång tid som helst.

Jag har nyligen börjat på något liknande, fast med AVR istället. Det jag behöver är en liten fristående grej som samplar någon spänning lite då och då, och sparar detta till ett Flash-minne. Det borde bli klart ganska snart.

Fungerar det bra hade jag tänkt bygga vidare på den och lägga till fler funktioner (frekvensräknare, logikanalysator, enkelt oscilloskop mm.).
sigma84
Inlägg: 54
Blev medlem: 13 maj 2005, 15:26:32

Inlägg av sigma84 »

Vi byggde ett sådant instrument i skolan för ett tag sen.
Det va ioförsig en seriell överföring till matlab, och vi sampla 200 mätpunkter med picen och sen skicka över detta.

Ska man dels sampla in värden och skicka över så kan tiden mellan sampelvärdena bli kritiskt. Så skulle jag göra detta skulle jag ha en som samplar och en som skickar.

Så ta och fundera på vad du har för krav på de signalerna som ska mätas är mitt råd
Homebrew
Inlägg: 14
Blev medlem: 13 november 2006, 17:03:28
Ort: Hult
Kontakt:

Inlägg av Homebrew »

Ja precis. PIC-kretsar är inte särskilt snabba. Bara att skicka en byte data till en minneskrets tar väl en 5-10 cykler, eftersom chippinnarna måste switchas mellan adress och data. Tror man tar PIC:en klocka i MHz, delar med 2, delar med antal cykler för att skicka så många bytes som behövs för ett mätvärde. Skickar du ett värde mellan 0 och 1 med 4 decimalers precision behövs 2 byte.

Men är hastigheten i storleksordningen 100-tals KHz eller lägre borde det gå fint att pytsa över data med en sån här:

http://www.arduino.cc/en/Main/Buy

22€, inte så blodigt.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46906
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

Ja precis. PIC-kretsar är inte särskilt snabba. Bara att skicka en byte data till en minneskrets tar väl en 5-10 cykler, eftersom chippinnarna måste switchas mellan adress och data. Tror man tar PIC:en klocka i MHz, delar med 2, delar med antal cykler för att skicka så många bytes som behövs för ett mätvärde.
Beror väl på vilken typ av minne man använder.
I2C flashminnen är ju man låst och begränsad till I2C specen, samma gäller SPI.
Kör man med vanliga minnen så kan man köra full fart dvs 40 Mhz/4 x instuktionerna att läsa ut data på portarna, dvs i princip:
-Uppdatera Addressräknare
-Skriv addressräknare till port
-skriv Data till port
-Sätt WR/CE

Misstänker att detta är ett minimum av kod som behövs dvs 4 instruktionscykler på en PIC och vid 40 Mhz klocka blir det en datahastighet på 2,5 Mhz ungefär, dvs 2,5 miljoner samples per sekund sen behövs det lite mer naturligtvis, så om man fyller minnet i en 18F8622
med samples så kan man nog skicka dessa med en hastighet om ca 1 miljon per sekund eller så, med lite smart kodning.

Så jag förstår inte ditt resonomang att det skulle vara långsamt.
Homebrew
Inlägg: 14
Blev medlem: 13 november 2006, 17:03:28
Ort: Hult
Kontakt:

Inlägg av Homebrew »

Mja mjo burst kanske då. Men om han har ett 256KB SRAM så är det ju fullt på 1/4 sekund! (Plus att man kanske vill välja samplingsfrekvens och inte köra på 1MHz jämt.) Sustained är en annan femma. Antar att man startar ett timerinterrupt med rätt intervall och skriver en tight loop som väntar på interruptpuls, läser 2 bytes analoga ingångens port, pratar med USB och skickar 2 bytes (ingen aning om hur många instruktioner som krävs där), triggar nytt interrupt. (Om 8-bit precision räcker så kan man ju nöja sig med 1 byte istf 2 byte.)

Det är bara dumt att mellanlagra i ett minne - då måste man ju läsa 128K samples, skicka 256K data över USB, läsa 128K samples... då blir det ju luckor i datan.

Den PIC:en jag länkade till hade 16MHz.

Jag bara vidarebefordrar min mer erfarne kompis Eriks intryck av att PIC:ar är långsammare än det ser ut på papperet. Alltså, PIC:ar är toppen, men jag nämnde att läsa in seriell data i 500kbps (för ett eget projekt) och då trodde han inte det skulle gå med en PIC. Sen verkar ju ATmega8 faktiskt riktigt bra jämfört med andra.

Tyckte bara det var ett fiffigt billigt kort att experimentera med! Tar ju bara ett par timmar att klura ihop ett testprogram som kollar högsta möjliga sample rate.
sodjan
EF Sponsor
Inlägg: 43244
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> men jag nämnde att läsa in seriell data i 500kbps

Alltså ca 50 KB/s, låter väl inte speciellt mycket.
Men det beror också på vad du tänker gör med datat...
Homebrew
Inlägg: 14
Blev medlem: 13 november 2006, 17:03:28
Ort: Hult
Kontakt:

Inlägg av Homebrew »

Om man inte ska ha logik som konverterar från seriellt till parallellt så måste CPUn läsa en bit i taget från valfri I/O-pinne. Sen att skicka 62.5 KB/s in över USB är ju att överkomligt problem. :) Men det var till mitt projekt, inte PHermanssons.
Skriv svar