Sida 1 av 1

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

Postat: 6 maj 2011, 17:35:26
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

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

Postat: 6 maj 2011, 17:48:59
av sodjan
Som vanligt får du bättre hjälp om du anger länkar till allt som du nämner.

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

Postat: 6 maj 2011, 20:08:56
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)

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

Postat: 6 maj 2011, 20:20:45
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.

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

Postat: 7 maj 2011, 12:56:11
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;
	}
}

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

Postat: 8 maj 2011, 16:48:36
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.

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

Postat: 9 maj 2011, 21:48:58
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

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

Postat: 9 maj 2011, 22:09:15
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;
	}
}