Ljud i en PIC18 med hjälp av Roman Black BTc?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
ImperioN
Inlägg: 3
Blev medlem: 6 maj 2011, 16:04:25

Ljud i en PIC18 med hjälp av Roman Black BTc?

Inlägg av ImperioN »

Hej

Jag arbetar med ett projekt där jag vill spela upp en kort ljudsekvens. Då jag endast (för tillfället) har tillgång till PIC18F2550 och PIC18F4550 vill jag försöka använda mig av dem. Har googlat runt och hittat Roman Blacks hemsida, har även tittat på gamla trådar här på forumet.

I BTc har jag fått ut min WAV-fil som .c-fil. Den kan jag dock inte kompilera i MPLAB. Jag har faktiskt ingen aning om hur jag skall skriva koden i programmet. Är det någon som har erfarenhet av BTc och som kan ge mig tips och råd?

Tack på förhand
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ljud i en PIC18 med hjälp av Roman Black BTc?

Inlägg av sodjan »

Som vanligt får du bättre hjälp om du anger länkar till allt som du nämner.
Mindmapper
Inlägg: 7118
Blev medlem: 31 augusti 2006, 16:42:43
Ort: Jamtland

Re: Ljud i en PIC18 med hjälp av Roman Black BTc?

Inlägg av Mindmapper »

Trodde du hade om inte svart bälte i google så åtminstonne lite google kunskap! :humm:

Första träffen:
http://www.romanblack.com/picsound.htm

Håller faktiskt med dig Sodjan, det blir jobbigt när det är så många källor som man ska leta igenom! 8)
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46998
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Ljud i en PIC18 med hjälp av Roman Black BTc?

Inlägg av TomasL »

Det är väl bara att infoga filen i projektet, sedan hanteras den som en vanlig konstant (array) beroende på hur koden är gjord.
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Ljud i en PIC18 med hjälp av Roman Black BTc?

Inlägg av bearing »

ImperioN skrev:I BTc har jag fått ut min WAV-fil som .c-fil. Den kan jag dock inte kompilera i MPLAB. Jag har faktiskt ingen aning om hur jag skall skriva koden i programmet. Är det någon som har erfarenhet av BTc och som kan ge mig tips och råd?
Har du lyckats kompilera någon kod alls? d.v.s vet du hur man gör för att ställa in saker såsom projektet så att det använder C-kompilatorn för 18-serien, och kommer åt include-filer och liknande?

Om Roman Blacks kod är skriven för en PIC ur 16-serien kan den behöva skrivas om lite.

Ändring:

Laddade hem programmet nu. Det ger en fil som innehåller en funktion med inline assembler:

Kod: Markera allt

void sound_data1()    org (1 * 256) 
{ 
   asm retlw 0xBD ; 
   asm retlw 0xA9 ; 
   asm retlw 0x21 ; 
   asm retlw 0x25 ; 
   asm retlw 0x6E ; 
   asm retlw 0xEE ; 
...
}
Jag skulle nog byta ut funktionen till en array av typen "const unsigned char" istället. En variabel deklarerad som const borde sparas i flash-minnet. Genom att använda "sök och ersätt" eller liknande funktion borde det gå enkelt att göra om filen till array-syntax istället för inline assembler.
Exempel:

Kod: Markera allt

const unsigned char sound_data1[] = {
   0xBD,
   0xA9,
   0x21,
   0x25,
   0x6E,
   0xEE,
...
}

Sedan behöver du skriva ett C-program som använder datan i arrayen enligt algoritmen som Roman Black presenterar på sin hemsida. Är det implementationen av algoritmen du behöver hjälp med?

Implementationen borde se ut nått sånt här:

Kod: Markera allt

static volatile unsigned char bit_pattern, bit;
static volatile unsigned int i;

void timer_interrupt()
{
	if ((bit_pattern & bit) != 0)
	{
		//Set output pin
	}
	else
	{
		//Clear output pin
	}

	bit <<= 1;
	if (bit == 0)
	{
		bit_pattern = sound_data1[i];
		i++;
		
		bit = 1;
	}
}
ImperioN
Inlägg: 3
Blev medlem: 6 maj 2011, 16:04:25

Re: Ljud i en PIC18 med hjälp av Roman Black BTc?

Inlägg av ImperioN »

Det är implementeringen jag behöver hjälp med, bearing. Har programmerat en del i MPLAB och fått ut en ton på en gammal datorhögtalare med PWM.

Ska pröva din kod och se om jag kan få ut något ljud.
ImperioN
Inlägg: 3
Blev medlem: 6 maj 2011, 16:04:25

Re: Ljud i en PIC18 med hjälp av Roman Black BTc?

Inlägg av ImperioN »

Hallå igen,

Har suttit under dagen och försökt få fram en fungerande kod, helt utan framgång.
Jag fattar inte alls hur koden skall skrivas. Har läst att det skall vara 'väldigt enkelt' så jag har försökt göra en kod som går igenom den array som skapas av BTc och lägger ut den element för element på en pin som kopplats till en högtalare.

Har dessutom tittat på sidan nedanför och försökt följa göra som personen där, men ska erkänna att jag inte förstår den till fullo.

Är jag helt ute och cyklar?

http://www.mikroe.com/forum/viewtopic.php?f=9&t=25862
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Ljud i en PIC18 med hjälp av Roman Black BTc?

Inlägg av bearing »

Varför postar du inte någon kod, eller utgår från min kod? Hur ska vi annars kunna veta ifall du är "ute och cyklar"?!

Såg nu att det står att bitarna ska spelas upp från vänster till höger. Shiftningen ska alltså ske åt andra hållet. Koden är gjord för den enklaste 1-bit varianten, där endast en I/O samt ett enkelt RC-filter används. Har testat en del i programmet, och jag tycker det låter ungefär lika risigt med alla algoritmer.

Kod: Markera allt

void timer_interrupt()
{
	if ((bit_pattern & bit) != 0)
	{
		//Set output pin
	}
	else
	{
		//Clear output pin
	}

	bit >>= 1;
	if (bit == 0)
	{
		bit_pattern = sound_data1[i];
		i++;
		
		bit = 128;
	}
}
Skriv svar