USb-pic som datalogger/frekvensräknare/oscilloskop?
- 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?
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?
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?
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.).
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.).
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
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
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.
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.
Beror väl på vilken typ av minne man använder.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.
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.
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.
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.