Sida 1 av 2

Börja med DSP. Tips ?

Postat: 23 september 2006, 01:18:11
av JimmyAndersson
För lite tyngre ljudprojekt har jag insett att jag behöver lära mig programmera DSP.

Säkerligen finns det några bra test/lära/utveckligs-paket, men var hittar man dem?
Finns det någon här som pysslar med DSP? Det vore intressant att se lite kod, så man vet vad man har att vänta sig.
Hur är det att programmera DSP jämfört med PIC? Är det stor skillnad?

Ja, ni ser nog åt vilket håll jag funderar. :)


När jag blivit tillräckligt varm i kläderna har jag tänkt försöka göra lite synthar i stil med wavetable, subtraktiv synthes och liknande. Hm, typiskt mig att gå direkt från traktor (PIC + Basic) till månraket (DSP). :D

Postat: 23 september 2006, 10:51:24
av björn
Jimmy, du har PM

DU kan även kolla CYR's bygge HÄR

Postat: 23 september 2006, 10:57:29
av Seven11
ja det är stor skillnad att programmera DSP jämnfört mot vanlig mikrokontrollant etc. Den stora skillnaden är att DSP:er har en harvard arkitektur (eller någon variant av ovan) som gör att program och data inte delar samma buss, dessutom kan flera delar av processorn instrueras samtidigt då en DSP oftast har flera shiftnings motorer, MAC:ar (Multiply-and-Ackumelate) och en hel drös andra beräkningsdelar... tex kan en assembler kod för DSP se ut så här:

Kod: Markera allt

start:		m1=1;
		m9=1;
		b0=input;
		l0=@input;		{ Input buffer is circular }
		i1=imag;
		l1=0;
		call dft (db);		{ Example delayed call instruction }
		  i2=real;		{ In delay field of call }
		  l2=0;			{           ''		  }
end:		idle;

{___________________________DFT Subroutine___________________________}
dft:		b8=sine;		{ Sine pointer }
		l8=@sine;
		b9=sine;		{ Derive cosine from sine by }
		i9=sine+N/4; 		{ shifting pointer over 2pi/4 }
		l9=@sine;		{ and using a circular buffer.}
		i10=0;			{ I10 is used to increment the }
		l10=0;			{ frequency of sine lookup.}
		f15=0;			{ Zero to clear accumulators }
		lcntr=N, do outer until lce;
		  f8=pass f15, m8=i10;		{ Update frequency }
		  f9=pass f15, f0=dm(i0,m1), f5=pm(i9,m8);
		  f12=f0*f5, f4=pm(i8,m8);
		  lcntr=N-1, do inner until lce;
		    f13=f0*f4, f9=f9+f12, f0=dm(i0,m1), f5=pm(i9,m8);
inner:		    f12=f0*f5, f8=f8-f13, f4=pm(i8,m8);
		  f13=f0*f4, f9=f9+f12;
		  f8=f8-f13, dm(i2,m1)=f9;	{ Write real result }
		  modify(i10,m9);		{ Increment frequency }
outer:		  dm(i1,m1)=f8;			{ Write imaginary result }
		rts;
detta var ett exmepel på hur man kan göra en N punkts reell DFT till en Analog Devices 21020 DSP. Som du ser i loopen så används flera kommandon för att instruera flera delar av enheten.

Om du vill ha tips på bra bok kan jag rekommendera "Digital Signal Processing: A practical guide for Engineers and Scientists", den finns gratis att ladda ner men jag tyckte den var så jävla bra så jag köpte den i bokform :lol:
Sen finns det en uppsjö av böcker som behandlar filter, image- / audio- processing, ANN eller vad du nu tänker hålla på...

Att få tag på utvecklingkort är aldrig lätt... men först bör du nog läsa den bok jag listade för där i står det en del om DSP processorer. Efter det för då kolla runt efter den DSP du vill ha.
BDTi brukar dessutom ha bra benchmarks tabeller för olika processorer:
http://www.bdti.com/procsum/index.htm och http://www.bdti.com/bdtimark/benchmarks.htm

Postat: 23 september 2006, 13:06:13
av cyr
Börja med Digital Signal Processing först, innan du funderar så mycket på Digital Signal Processors.

Börja med att förstå algoritmerna och skriv lite saker på datorn. Matlab kan man använda för att labba lite, och sen kan man skriva saker "på riktigt" i C.

Boken som finns på http://www.dspguide.com/ kan även jag rekommendera.

Sen när du ska överföra grejerna till hårdvara så behöver du sätta dig in i arkitekturen, kanske optimera algoritmerna för att passa den och skriva vissa kritiska saker i assembler osv, men jag tror det är fel ände att börja i.

Postat: 23 september 2006, 16:05:04
av JimmyAndersson
Med andra ord jag har ganska mycket att läsa nu. :)

Tack för alla bra tips!
Återkommer säkert med lite mer specifika frågor senare.

Postat: 23 september 2006, 16:53:00
av pheer
Om du vill ta ett billigt mellansteg så ligger dsPIC nära till hands då du använt vanliga PIC innan...

Länkar:
dsPIC
C30 - C kompilator
libs

Postat: 23 september 2006, 17:49:52
av $tiff
Och på andra sidan Atmel-Microchip-slagfältet har vi AVR32:
http://www.atmel.com/products/AVR32/
http://en.wikipedia.org/wiki/AVR32
IAR-C
Acte säljer t.ex. i sverige

Fast jag vet inte om den har varit ute länge nog för att det ska vara lönt att satas på. dsPIC har definitivt försprång här.

Postat: 24 september 2006, 02:34:22
av JimmyAndersson
dsPIC var en bra idé. Det kanske är bättre att mellanlanda där istället för att kliva direkt till de "stora DSP'erna".
Det roliga är att många dsPIC'ar även finns som PDIF-kapslingar.

edit: Har kollat igenom datablad på en dsPIC (30F3010) och det ser väldigt roligt ut. Mer kapacitet och fler bitar men ändå en välbekant grund. Riktigt trevligt! Dessutom är de ganska billiga.

Nästa fråga blir då programmeraren. Wisp628 stödjer inte dsPIC (om jag inte missat något.) Hm, det känns som om det är läge att anropa Sodjan. :)

Postat: 24 september 2006, 10:19:57
av Seven11
kommer inte cyr:s ICSP programmerare fungera med dsPIC tror du da?

Postat: 24 september 2006, 11:54:47
av JimmyAndersson
Det kan den nog göra. Tänkte inte på det.
Men nu hittar jag inte tråden. Länk?

Postat: 24 september 2006, 12:01:37
av cyr
Det bör den göra, ihop med rätt mjukvara.

Senaste betaversionen av mjukvaran till EPIC (www.melabs.com) stöder dsPIC, dock så är det *inte* freeware (vilket står på sidan där man kan ladda ner).

:vissla:

Jag har inte testat, men jag har några dsPIC30F2010 nånstans...

Postat: 24 september 2006, 21:04:01
av sodjan
> Wisp628 stödjer inte dsPIC (om jag inte missat något.)

Nej, det har du inte... :-)

Jag har en annan programmerare liggandes som stöder många dsPIC
som du skulle kunna "låna" ett tag. Det ser ut så här :
http://www.embedinc.com/easyprog/index.htm.

Den har inte senaste firmware laddad, men den kan du plocka ner
och flasha i en extra 16F628A med din Wisp628.

Det finns även en modifierad variant av EasyProg's firmware som använder
Wisp628 hårdvaran, men den gjordes innan EasyProg fick dsPIC stöd.
Jag har haft lite ideer (men ingen tid) att göra om samma sak med dagens
version av EasyProg firmware för att få en Wisp628 hårdvaran att även
flasha dsPIC...

Postat: 25 september 2006, 02:25:15
av JimmyAndersson
Det vore bra. Jag kanske skulle kunna hyra den? :)

En annan tanke är att bygga en sådan programmerare. Såg att det fanns schema i länken. Det ena jag inte hittade på Elfa var transistorerna (2N4401 och 2N4403). Sedan behövs förstås lite mjukvara i datorn...

Jag skulle kunna fixa en kretslayout och löda programmeraren ganska snabbt, men vore det onödigt jobb? Tänker på ifall dsPIC-firmwaren för Wisp628 väntar "runt hörnet" inom någon månad.. :) Själva arbetet med att bygga programmeraren gör mig inget.

Postat: 25 september 2006, 14:02:49
av sodjan
"Hyra" ?? Det går väl att ordna. :-)

> En annan tanke är att bygga en sådan programmerare.

Kolla BOM'en en gång till. Olin (som för övrigt är jäkligt duktig)
har gjort en liten tabbe i designen, alla motståndsvärden är valda
ur E96 serien, och de stämmer inte riktigt överens med de värden
som de flesta har i sina E12/24/48 satser. En del värden är lite
kritiska eftersom de påverkar t.ex spänningen på Vpp.

Detta med en del "udda" värden i designen var huvudkritiken mot
programmeraren när Olin presenterade den för något år sedan. Det
gör den lite strulig för hemma-pulare...

Jag har även en liggandes som jag har byggt utifrån ett blank PCB (original
från Olin) men som jag aldrig fick riktigt igång. Jag gjorde aldrig
någon riktig felsökning, utan Olin skickade en komplett komp.sats till
en komplett EasyProg. Den fungerade direkt efter montering och den första
blev liggandes. Den kan du få mot för ett par hundra mot att du felsöker
den själv. Den är komplett förrutom en 648A med senaste firmware (inkl
ZIF sockeln). En 648A med senaste firmware kan du bränna själv med din
Wisp628...

Jag tror att det i alla fall blir enklare en att bygga upp en helt från "scratch".

/Janne.

Postat: 25 september 2006, 20:06:02
av JimmyAndersson
"Jag har även en liggandes som jag har byggt utifrån ett blank PCB" ... "Den kan du få mot för ett par hundra mot att du felsöker den själv."

Det låter bra. Blir som sagt enklare än att bygga en från grunden.
Ska bara inventera min PIC-hylla, (den börjar bli tom), sedan får du ett PM. :)