Forum: Mikrocontroller und Digitale Elektronik 896 Bytes 14bittig in PIC-Flash ablegen


von Sascha (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Chris (Gast)


Lesenswert?

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.

von Frank K. (fchk)


Lesenswert?

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

von Sascha (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.