Hej igen och tack för all respons.
Jag ska kolla in isoleringskretsen och jag ska vara noga med det. Enbart ett 9v-batteri ska driva instrumentförstärkaren. Och jag ska
inte köra 9V genom kroppen!
Grunden till basicprogrammet hittade jag på internet - någon hade gjort ett förenklat oscilloskop som ritade kurvan på insignalen med hjälp av DLL-filen FMOD. Jag har modifierat programmet en del, men har absolut inte gjort något EKG-program av det, jag har bara testat så att jag kan lagra den data jag får in med väldigt låg samplingshastighet (då 44100 Hz är lite onödigt för en EKG-kurva!) samtidigt som jag visar inkommande data i realtid på skärmen.
Nu var det ett tag sen jag pysslade med det programmet - projektet har legat nere ett par månader (mycket jobb och familj) och jag upptäckte att jag gjort några olika versioner och minns inte vilken som är vad (jag orkar inte boota Windows nu där jag har min freebasic)
Så här ser det i alla fall ut, skrivet i FreeBASIC:
' Catching waveform direct from microphone or line-in
' I have a much better example here...
' M a t t h e w H a r t
' modified by Jens Hallgren
OPTION EXPLICIT
#INCLUDE ONCE "fmod.bi"
' Init constants for FMOD
CONST FALSE = 0
CONST BUFFERSIZE = 2^14
CONST BUFFERBYTES = BUFFERSIZE * 2
CONST SAMP = 11025 ' 44100 original
IF( FSOUND_Init(SAMP, 32, 0) = FALSE ) THEN
PRINT "Can't initialize FMOD"
END 1
END IF
DIM AS INTEGER Rec_Buffer
' for sample lock
DIM s_ptr1 AS SHORT PTR
DIM s_ptr2 AS SHORT PTR
DIM offset AS INTEGER
DIM length AS INTEGER
DIM s_len1 AS UNSIGNED INTEGER
DIM s_len2 AS UNSIGNED INTEGER
DIM i AS INTEGER
DIM c AS INTEGER
DIM x AS INTEGER
DIM AS INTEGER itr,cycles
DIM AS DOUBLE t
DIM j AS DOUBLE
DIM y AS INTEGER
' nya
DIM max AS DOUBLE
DIM mmax AS DOUBLE
DIM medel AS DOUBLE
DIM s AS INTEGER ' position på skärmen från 75 till 640
DIM amp AS DOUBLE
' This is the amount of bytes behind the
' record cursor that we want to lock.
' Each sample is 2 bytes, so we want
' to get twice the width of the screen
' in bytes.
length = 128
' set screen resolution
SCREENRES 640,480,8,1
' create the palette
FOR i = 0 TO 255
IF i > 127 THEN c = i*2
IF i < 32 AND i>1 THEN c=64-i
IF i > 192 THEN x = i * 1.7
PALETTE i,i,c,x
NEXT i
' start the record buffer
Rec_Buffer = FSOUND_SAMPLE_Alloc (FSOUND_UNMANAGED, _
BUFFERSIZE, FSOUND_NORMAL, SAMP, 255, _
128, 255)
FSOUND_Record_StartSample ( Rec_Buffer, 1)
t = TIMER
itr = 0
s = length/2+10
DO
max=0
IF TIMER > (t + 1) THEN
t = TIMER
cycles = itr
itr = 0
LINE (s,y-10)-(s,y),255
END IF
itr += 1
offset = (FSOUND_Record_GetPosition() * 2) - length
IF offset < 0 THEN offset += (BUFFERBYTES)
IF FSOUND_Sample_Lock (Rec_Buffer, offset, _
length, @s_ptr1, @s_ptr2, @s_len1, _
@s_len2) = 1 THEN
SCREENLOCK
' plot buffer contents
LINE (0,0)-(length/2+1,479),0,bf
PSET (-1,y),255
x = 0
y = 240
FOR i = 0 TO (s_len1 SHR 1) -1
j = ((s_ptr1)*.002)+y
IF abs(j-y)>max THEN max=abs(j-y)
LINE -(x,j),255
x+=1
IF x > 640 THEN x = 0:y += 150: PSET (-1,y),200
NEXT i
' if the buffer has wrapped then get the
' second chunk (at the start of the buffer)
IF s_ptr2 THEN
LOCATE 3,1: COLOR 200: PRINT "Wrapped!"
FOR i = 0 TO (s_len2 SHR 1) -1
j = ((s_ptr2)*.002)+y
IF ABS(j-y)>max THEN max=ABS(j-y)
LINE -(x,j),200
x+=1
IF x > 640 THEN x = 0:y += 150: PSET (-1,y),200
NEXT i
END IF
LOCATE 1,3: COLOR 255: PRINT "Real-Time Audio Data Capture ";
IF max>mmax THEN mmax=max
medel=(medel*100+max)/101
mmax*=.99
IF mmax<0 THEN mmax=0
s +=1
IF s>640 THEN
s=length/2+10
'LINE (0,0)-(639,479),0,bf
END IF
PRINT "Cycles per second: = "; cycles ;" max = ";INT(mmax*500);INT(medel *500)
amp=3
LINE (s+1,12)-(s,479),0
LINE (s,y+mmax*amp)- (s,y-mmax*amp),(mmax*2 AND 255)+10
LINE (s,y+medel*amp)- (s,y-medel*amp),s/5+50
LINE (s,y)- (s,y-max*amp),s/6+90
pset (s,y),255
SCREENUNLOCK
FSOUND_Sample_UnLock (Rec_Buffer, @s_ptr1, @s_ptr2, s_len1, s_len2)
ELSE
PRINT "Something CRAZY just happened!"
END IF
SLEEP 1
LOOP WHILE INKEY$ = ""
FSOUND_Record_Stop
FSOUND_Sample_Free(Rec_Buffer)
FSOUND_Close
SLEEP
END
Readme-fil:
Caption
program för att fånga insignalen från mic eller line-in
---
Av Jens Hallgren ( tack till Matthew Hart )
skapad med Freebasic och JellyFish Pro Editor
---
installation:
lägg programmet (capture.exe) samt filen fmod.dll i samma mapp
starta genom att dubbelklicka på capture.exe
avsluta genom tangenttryckning
en gång - ger stillbild
en andra gång - stänger programmet
capture.bas är källkoden i Free-basic
---
felsökning:
" hittar ej fmod.dll" - prova att lägga fmod.dll i mappen C:\windows\
slät linje / ingen signal - gå in i volymkontrollen (högerklicka på högtalaren i windows)
välj "öppna volymkontroller" - alternativ - egenskaper
välj inspelning - (tryck OK) - justera volymkontroller för inspelning
kolla att "ljud av" inte är markerat
---
skärmbild:
fältet till vänster visar vågformen momentant
kurvan till höger är uppdelad i tre fält som alla visar volym.
avståndet mellan två vita linjer motsvarar en sekund förfluten tid
1) momentant värde
2) medelvärde under de senaste sekunderna
3) maxvärde som sjunker logaristmiskt med tiden.
---
utdata
- data till fil - ej klart
[/quote]
och en screenshot på en variant av programmet som visar bla. medelvärde av insignalen... (skulle användas i ett annat sammanhang)

en variant av programmet

en annan variant (mest lik koden ovan)[/quote]
EDIT: jag vet inte varför bilderna inte visas, men här är en länk:
screendump