Hoi iedereen die dit leest, in ieder geval alvast bedankt voor de intresse die je toont. Ik zit weer met een probleemp wara ik niet aan uit kom:

Ik wil een ISD-chip aansturen met m'n microcontroller, zodat ik mijn robot wat geluid mee kan geven onderweg. Het is een robot welke aandacht nodig hefet om te "overleven".

Ik heb poort D in totaal voor de isd chip gebruikt: V+, 0, en D0-D8. Dit om het mogelijk te maken op te nemen/af te spelen vanaf een bepaald adres. Dit opnemen gaat prima, het geselecteerd afspelen helaas niet. Wie kan me helpen?

Hieronder heb ik wat plaatjes gezet van m'n circuit en hoe de adressen zouden moeten werken.

http://i88.photobucket.com/albums/k167/X-Qlusive/CircuitISD.jpg
http://i88.photobucket.com/albums/k167/X-Qlusive/ADDRESSISD.jpg

Ik stuur dit alles (of wil dit alles aansturen) door de volgende code:

PORTDbits.RD0 = 0;
PORTDbits.RD1 = 0;
PORTDbits.RD2 = 0;
PORTDbits.RD3 = 0;
PORTDbits.RD4 = 0;
PORTDbits.RD5 = 0;
PORTDbits.RD6 = 0;
PORTDbits.RD7 = 0;

PORTCbits.RC6 = 1;

(Begin afspelen vanaf het begin)

als het jou lukt wil ik het graag horen ik wil namelijk ook een robot bouwen die kan vertelen wat die doet en standaart begroetingen.

stef

Ik zal het posten :) Ik had je vorige post, "autonome robot" of zoiets, gelezen; ben je al wat verder? Die ISD chip kost op zich al 15 euro dus houdt r wel rekeing mee dat 't allemaal bij elkaar niet goedkoop is he ;-)

Moet je niet een 0 op poort c pin 6 zetten om hem te laten spelen? wederom, kijk even in de datasheet en lees bij de uitleg van de pinnen of er bij staat hoe of wat, of, of je naast tabellen voor welke adressen je moet instellen ook kunt vinden of er ook een tabel of tabellen zijn die weergeven hoe eea ingesteld moeten worden voor record en playback enzo.
gr madthijs

ps ik ben erg lui, heb je toevallig een link naar de datasheet?

ja volgens mij moet het inderdaad ook "0" zijn om hem af te laten spelen. Ik declareer C6 eerst tot 1 om zweven te voorkomen. Helaas blijft het geluid steeds afspelen of helemaal niet... het doet niet echt wat ik wil, terwijl de robot wel gewoon doorgaat met het programma (hij blijft dus niet ergens in een loop hangen ofzo).

En de link naar de datasheet ;) Het is nogal een flinke... 33 pagina's

Hoi, 33 pagina's geven niet :) datasheet-tjes zijn lief, ze bijten niet!
op pagina 7 staan PLAYL en PLAYE met een lijntje erboven... dat lijntje betekend 'inverted' dus, active LOW.

je hebt 2 manier om de chip z'n audio te laten spelen, namelijk, Level activated, of Edge activated.. dus, vrij vertaalt, geactiveerd door signaalhoogte, of door een flank.

en flank is een overgang van 1 naar 0 of 0 naar 1.
signaalhoogte wil zeggen, is m'n signaal 1 of 0? (zolang het signaal 1 is, of in dit geval dus, zolang het signaal 0 is)

op pagina 25 staat nog een en ander aan uitleg.

lees dit eens goed door. en kijk hoe jij in jou geval de aansturing doet.

gr madthijs

Vind datasheets ook steeds fijner :) had er nooit mee gewerkt eigenlijk, maar staat enorm veel info in ja.

Zo had ik ook deze datasheet gelezen en volgens mij had ik het schema goed aangepast: de PLAYE (edge) wordt mijn C6 uitgang, de PLAYL (level) trek ik altijd omhoog door een rechtstreekse pull-up naar de Vcc.

Áls het geluid word afgespeeld wordt dit ook goed gedaan: dus een compleet geluidsfragment. Maar ik heb geen controle over wanneer het geluid afgespeeld wordt. Heb ik misschien toch iets te simpel gedacht over het doorlinken van de PLAYL ofzoiets?

Of zit er toch iets fout in m'n code?


TRISC = 0b00111111;  		//C6-C7 = output (C6 = PLAYE), C0-C5 = input (knopjes)
PORTC = 0b11000000;             //voor de zekerheid port geconfigureerd

while(1) {		
	PORTCbits.RC6 = 1;      //wordt elke keer weer hoog gezet
	PORTCbits.RC0 = 0;
	PORTCbits.RC1 = 0;
	PORTCbits.RC2 = 0;

	if (PORTCbits.RC1 == 1) {	// totdat een knop ingedrukt wordt		
			PORTCbits.RC6 = 0;  //begin dan afspelen
        }
} 

De code lijkt me zo simpel, hier kan toch haast niks fout gaan? Of lees ik over iets heen ofzo? Je begint aan alles te twijfelen als je niet wete wara het aan ligt he :)

[Bericht gewijzigd door XQlusive op ]

nou, met de info die je voorhanden hebt dan stap voor stap alles dubbelchecken.. is even vervelend, maar het resultaat is des te mooier aan het eind! als het werkt!

waarom
zet je PORTCbits.RC0 = 0;
PORTCbits.RC1 = 0;
PORTCbits.RC2 = 0;

in je while lus?

heb je een breadboard? misschien kan je eens proberen om playe zelf een edge te geven dmv een knopje zoals in het schema op pagina 24 van de datasheet.

maak anders een programmaatje wat na bijv 3 seconden een edge geeft, en kijk of dat wel werkt. probeer anders eens om ipv playe playl te gebruiken.
je selecteerd verder wel de juiste adressen etc?

PORTCbits.RC0 = 0;
PORTCbits.RC1 = 0;
PORTCbits.RC2 = 0;

Hoefde eigenlijk niet, maar om zeker te zijn dat de knopjes weer op 0 werden gezet heb ik dit toegevoegd. Beetje dubbel op misschien, maar wilde zeker zijn dat het daar niet aan lag.

Ondertussen heb ik alles al 10 keer gechecked, maar ik zal het nog eens simpel op gaan bouwen vanaf het begin. De adressen ben ik 99,9% zeker van dat ik dat goed doe; er is nog weinig te adresseren ook, want er staat maar 1 geluidje op (wat start aan het begin).

Zoals gezegd zal ik het allemaal nog eens door gaan spitten, zit niks anders op, ik zie ehct niet wat ik fout doe namelijk, zal wel weer iets kleins zijn (zijn de irritante foutjes :) ). In ieder geval weer bedankt voor je bijdrage Madthijs ;-)

Ik heb er mee zitten spelen, maar het gedonder blijft. Ik heb even een stap terug gedaan en kwam tot het volgende:

Kan het niet zijn dat de microcontroller (18f4550) een ingebouwde pulldown heeft? Waardoor de poort automatisch soms laag wordt en dus afspeeld? Als dit zo is, zou ik dit dan kunnen omzeilen door ook een pull-up naar de Vcc te doen? En hoe groot moet die weerstand zijn? 10k genoeg of 100k, zoals in het schema bij de andere poort?

(Of zit ik verkeerd te dneken en is een software matige pull-up genoeg in dit verhaal? (wat niet werkt overigens) )

zitten er in die poort die je gebruikt toevallig open-drain of open-collector uitgangen? dan kun je nogal onduidelijke problemen van krijgen....

zie de datasheet

fripster

edit: ff in datasheet gekeken. PortD is een TTL port. Dat is het dus niet....

[Bericht gewijzigd door fripster op ]

fripster, ik moet eerlijk zeggen dat ik niet goed weet wat je met open-drain en open-collector bedoeld, maar ik gebruik PORTD voor de adressering, BIT C6 gebruik ik als "knopje".