Ich will mit einem PIC12F617 (2kWords, kann Flash selbst auslesen) 1bit-Sound ausgeben. Dazu habe ich die gewünschten zwei Soundclips mit diesem Programm (http://www.romanblack.com/picsound.htm) erzeugt. Wenn man nach .btc exportiert, bekommt man ein Hexfile welches die Bits enthält (e8 03 de f2 ...). Diese Daten möchte ich in den Sourcecode integrieren, allerdings nicht mit einer retlw-Tabelle (entsprechender Speudobefehl DT), sondern indem alle 14bit eines Flash-Words genutzt werden (Speudo-Befehl DA). Die beiden Clips bestehen aus jeweils 7168 Samples, das entspricht 896 Bytes bzw. 512 14bit-Words. Es wird also 1kWord mit Samples belegt, die andere Hälfte ist für den Programmcode. Und das ist das Problem: die Daten liegen als Bytes vor, eine Flashzelle ist aber 14bit breit. Man kann zwar DA 0xE803 DA 0xDEF2... schreiben, das ist aber erstens schreibaufwändig und zweitens werden alle Zahlen auf 14bit begrenzt, aus DA 0xE803 DA 0xDE04 würde DA 0x2803 DA 0x1EF2 werden. Ich suche also eine Möglichkeit, 896 Bytes in 512 14bit-Stücke zu zerteilen und diese in der Form DA 0x3A00 DA 0x3DEF... auszuspucken. Ich vermute das geht am Einfachsten mit einer Linux-Kommandozeile, eine solche ist vorhanden, aber leider keine Kenntnisse von Daten/Stringmanipulation. Im Anhang die beiden Hexfiles, falls jemand damit experimentieren möchte.
Du musst dir ueberlegen, wie du die Daten willst. z.B kannst du anstelle von 8bit 7bits verwenden, dies ist vielleicht am einfachsten. Eine andere Moeglichkeit ist ein Block von 4x14 bit und dies zu 7 bytes zu machen, sprich einen Cache von 7 bytes zu haben, aus dem ausgelesen wird, und welcher bei Bedarf nachgefuellt wird. Auch eine Moeglichkeit, zuerst alle lower 8bit benutzen, und dann die higher 4x6bit zu 3x8bit zusammenzufuegen. Wie warscheinlich auch noch X andere kombinationen.
Nimm doch einen PIC18F..., der hat 16 Bit Flash. Oder wie viel 100000 Stück möchtest Du davon fertigen lassen, damit der Preisunterschied zwischen 12F und 18F relevant wird? Oder nimm gleich einen dsPIC333f128GP802, der hat analog Stereo out mit 14 Bit und DMA. fchk
> Du musst dir ueberlegen, wie du die Daten willst. > z.B kannst du anstelle von 8bit 7bits verwenden, dies ist vielleicht > am einfachsten. > Eine andere Moeglichkeit ist ein Block von 4x14 bit und dies zu 7 bytes > zu machen, sprich einen Cache von 7 bytes zu haben, aus dem ausgelesen > wird, und welcher bei Bedarf nachgefuellt wird. Wie meinst du das? Die Software auf dem PIC liest eine Flashzelle, dabei wird das 14bit-Word in zwei 7bit-Hälften aufgeteilt und diese in 8bit-SFRs geschrieben. Diese werden dann ein Bit nach dem anderen ausgegeben. Ich könnt höchstens hergehen und dem 12F617 ne Software-UART verpassen. Dann schieb ich ihm die Bytes rüber, er puffert sie intern und schreibt sie passend in seinen Flash. Bei Reichelt gibt es keine 18F mit 8 Pins, ich müsste ihn erst bestellen und der Platz ist beschränkt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.