Voor de PIC12F1840 zou ik graag het programma-geheugen efficient willen gebruiken om data in te plaatsen.
Het gaat om audio-samples van dierengeluiden. De geheugenplaatsen zijn 14bits en de samples 8 bits. Er blijven nu dus steeds 6 bits ongebruikt.
De samples kunnen verkleind naar 7 bits door het LSbit weg te laten.
Dan passen er 2 samples in 1 geheugenplaats.
De vraag is hoe ik m.b.v. een programma (?) alle samples kan verkleinen en per twee samenvoegen. Handmatig wordt dat monnikenwerk.
Is er een manier om dit voor elkaar te krijgen?
Een bestand ziet er nu zo uit in bless hex editor:
80 80 80 7F 7F 7F 7F 7F 80 7F 80 80 80 80 80 7F 7F 7F 7F 7F 7F 7F 80 80 80 80 80 7F 80 80 80 7F 7F 7F 7F 7F 80 80 80 7F 80 80 80 80 80 80 80 7F 7F 7F 7F 80 80 80 80 80 80 80 80 7F 7F 7F 7F 7F 7F 7F 7F 7F 80 80 80 80 80 7F 80 80 80 80 7F 7F 7F 7F 7F 7F 7F 80 80 80 80 7F 7F 7F 7F 7F 7F 80 80 80 80 80 80 7F 80 7F 7F 80 80 7F 7F 7F 7F 7F 80 80 7F 80 80 80 7F 80 80 7F 7F 7F 7F 7F 7F 7F 80 80 80 80 80 80 7F 7F 7F 80 7F 7F 7F 7F 80 7F 80 80 80 80 80 80 80 80 7F 7F 7F 7F 7F 7F 80 80 80 80 81 80 7F 7F 7F 7F 7F 7F 7F 7F 7F 80 80 80 80 80 80 80 80 80 7F 7F 7F 7E 7E 7F 7F 80 80 80 80 80 80 80 7F 7F 7F 7F 7F 80 80 7F 7F 7F 7E 7F 7E 7F 7F 80 81 81 81 81 80 80 7F 7E 7E 7E 7E 7F 7F 7F 80 80 80 81 81 81 81 80 7F 7F 7E 7E 7D 7D 7E 7F 80 82 83 83 82 82 80 7E 7D 7C 7C 7C 7E 7F 81 82 83 83 82 81 80 7E 7C 7C 7C 7D 7E 80 82 83 85 85 84 82 7F 7C 7A 78 78 79 7C 80 84 87 89 8A 89 85 80 7B 77 74 73 74 78 7D 82 88 8B 8D 8D 8A 86 81 7C 77 73 70 70 72 76 7C 83 8A 90 93 93 90 8A 82 79 71 6B 68 69 6D 75 80 8A 93 9A 9C 99 92 88 7C 70 66 60 5F 63 6C 79 88 97 A2 A7 A6 9E 90 7F 6D 5E 54 52 58 65 77 8B 9E AB B1 AF A4 93 7E 69 59 4E 4C 52 60 73 89 9D AD B6 B5 AC 9B 85 6E 5A 4B 44 48 55 6A 83 9C B1 BE C0 B7 A4 8B 6F 56 43 3C 3F 4E 66 82 9E B5 C3 C6 BC A9 8E 71 55 41 36 38 46 5E 7C 9C B7 C9 CF C7 B3 96 73 53 39 2B 2C 3B 57 7A 9F BF D4 DA D1 B9 97 71 4D 31 23 24 36 54 7A A2 C4 DA E1 D7 BE 9A 71 4A 2B 1C 1D 30 51 7A A5 CA E1 E9 DD C1 9A 6D 44 24 15 17 2C 4F 7B A8 CF E7 EE E2 C4 9B 6C 40 1E 0E 11 27 4D 7D AD D6 F0 F7 E8 C7 99 67 38 16 06 0C 26 50 82 B4 DD F6 FA E9 C5 95 61 33 11 03 0B 27 52 85 B7 E0 F8 FB E9 C5 94 5F 30 0E 00 08 26 52 87 BB E4 FC FE E9 C3 90 5B 2C 0B 00 0A 29 57 8B BE E5 FB FC E6 C0 8E 5A 2C 0C 01 0C 2B 58 8D BF E6 FB FB E6 BF 8C 58 2A 0C 01 0D 2D 5B 8F C1 E6 FA F9 E2 BB 89 56 29 0C 03 0F 2F 5C 90 C1 E7 FB F9 E2 BB 88 54 27 0A 01 0F 31 60 95 C6 EA FC F7 DE B5 82 4F 25 0A 05 14 37 65 98 C6 E8 F8 F3 DA B1 80 4F 26 0E 08 18 39 67 99 C6 E7 F5 EF D5 AD 7C 4D 26 0F 0C 1D 3F 6C 9C C7 E5 F1 E9 D0 A8 7A 4D 29 14 11 22 42 6E 9C C5 E2 EE E7 CE A7 7A 4D 29 15 12 23 44 6F 9D C6 E2 ED E5 CB A4 77 4C 29 16 15 26 47 72 9F C6 E1 EB E2 C8 A2 76 4B 2A 18 17 29 4A 74 9F C6 DF E9 DF C6 A0 74 4B 2B 19 1A 2C 4D 76 A1 C6 DE E6 DC C2 9D 72 4B 2C 1C 1E 30 50 79 A2 C5 DB E2 D8 BF 9B 72 4C 2E 1F 21 33 52 79 A1 C3 DA E0 D6 BC 98 70 4B 2E 20 23 35 55 7C A3 C5 DA DF D3 B9 96 6E 4A 2F 22 25 38 58 7E A5 C5 D8 DD D1 B7 94 6D 49 2F 22 27 3A 5A 80 A7 C6 D9 DD D0 B5 91 6A 46 2D 22 27 3C 5D 84 A9 C8 D9 DB CD B1 8D 67 44 2D 24 2B 40 61 87 AB C8 D8 D9 CA AE 8A 65 44 2D 25 2D 43 64 89 AD C9 D8 D8 C8 AC 88 62 42 2C 25 2E 45 67 8C B0 CA D8 D6 C5 A8 84 5F 40 2C 26 31 48 6A 8F B1 CB D7 D4 C3 A5 82 5E 3F 2C 28 33 4B 6C 91 B3 CB D7 D3 C0 A3 7F 5C 3F 2D 2A 35 4E 6F 93 B3 CA D5 D0 BE A1 7E 5B 3F 2E 2C 37 50 71 94 B4 CA D4 CF BC 9F 7C 5A 3E 2E 2C 39 52 73 95 B4 CA D2 CC B9 9C 7A 59 3F 30 2F 3C 55 75 96 B4 C9 D1 CA B7 9B 79 59 3F 31 30 3D 56 76 98 B5 C9 D1 CA B6 99 77 57 3E 31 31 3F 58 78 99 B6 C9 D0 C8 B4 97 76 57 3E 31 32 40 59 79 9A B6 C8 CF C7 B3 96 75 56 3E 32 33 42 5B 7B 9B B7 C9 CE C5 B1 94 73 55 3E 33 35 44 5D 7C 9C B6 C7 CC C3 AF 92 73 55 3F 34 36 45 5E 7D 9C B7 C7 CC C3 AE 92 72 54 3F 34 37 46 5F 7E 9D B6 C7 CB C1 AD 91 72 55 3F 35 38 47 5F 7E 9C B6 C6 CA C1 AD 91 72 55 40 35 38 47 60 7E 9C B6 C6 CA C1 AC 91 71 55 40 36 39 48 60 7E 9C B5 C5 C8 BF AB 90 72 56 41 37 3A 49 61 7E 9C B4 C4 C7 BE AB 8F 71 56 42 39 3C 4B 62 7F 9C B4 C3 C6 BD A9 8E 71 56 43 3A 3D 4C 64 80 9D B4 C2 C5 BB A7 8D 70 56 43 3B 3E 4D 65 82 9D B4 C1 C3 BA A6 8B 6F 55 43 3B 3F 4F 66 82 9E B4 C1 C3 B9 A5 8B 6F 55 43 3C 40 4F 66 82 9E B4 C1 C3 B8 A5 8A 6E 55 43 3C 40 50 67 83 9E B3 C0 C2 B8 A4 8A 6F 56 44 3D 41 50 67 82 9D B3 BF C1 B7 A4 8A 6E 56 45 3E 42 51 68 83 9E B3 BF C0 B6 A2 89 6E 56 46 3F 44 53 6A 84 9E B3 BE BF B4 A1 88 6D 56 46 40 45 54 6B 86 9F B3 BE BE B3 9F 86 6C 55 45 40 46 56 6D 87 A0 B3 BD BD B1 9E 85 6B 54 45 41 47 57 6E 88 A1 B3 BD BC B0 9D 83 6A 54 46 41 48 58 6F 89 A1 B3 BC BB AF 9C 83 6A 54 46 42 49 59 70 89 A1 B3 BC BB AF 9B 83 6A 54 46 43 49 59 70 89 A1 B2 BB B9 AE 9A 82 6A 55 48 44 4B 5B 71 89 A0 B2 BA B9 AD 9A 82 6A 56 48 45 4B 5B 71 89 A0 B1 BA B8 AD 9A 82 6A 56 49 45 4C 5C 72 8A A0 B1 B9 B7 AC 99 81 6A 56 49 46 4C 5C 72 8A A0 B1 B9 B7 AB 99 81 6A 56 49 46 4D 5D 72 8A A0 B1 B8 B7 AB 98 81 6A 56 4A 47 4D 5D 72 8A A0 B0 B8 B6 AB 98 81 6A 56 4A 47 4E 5D 72 8A A0 B0 B7 B6 AA 98 81 6A 57 4A 47 4E 5D 72 89 9F AF B7 B5 AA 98 81 6B 58 4B 48 4E 5D 72 89 9E AE B6 B4 A9 98 82 6B 59 4D 49 4F 5E 72 88 9D AC B4 B3 A9 98 83 6D 5B 4F 4C 51 5E 71 86 9A A9 B1 B0 A7 97 84 6F 5E 53 4F 53 5F 71 84 97 A5 AD AD A5 97 86 73 63 58 54 57 61 70 81 92 9F A7 A8 A2 97 87 77 69 5F 5A 5B 63 6F 7E 8D 99 A0 A2 9E 96 8A 7C 70 66 61 61 66 6F 7B 87 91 98 9B 99 93 8A 80 76 6E 68 67 6A 70 79 82 8A 90 94 94 91 8B 84 7C 75 70 6E 6F 73 78 7E 84 8A 8D 8E 8C 89 85 7F 7B 77 74 74 76 79 7D 80 84 87 88 88 87 85 82 7E 7C 7A 78 79 7A 7C 7E 81 83 84 84 84 83 82 80 7E 7D 7C 7C 7C 7D 7E 7F 81 82 82 82 82 81 80 7F 7E 7E 7D 7E 7E 7F 7F 80 81 81 81 81 80 80 7F 7F 7E 7F 7F 7F 80 80 81 81 81 80 80 80 7F 7E 7E 7E 7E 7E 7F 7F 80 81 81 81 81 81 80 7F 7F 7E 7D 7E 7E 7E 7F 80 81 81 82 82 82 81 80 7F 7E 7D 7D 7D 7D 7E 7F 80 81 82 83 83 82 81 80 7F 7E 7D 7D 7D 7D 7E 7F 80 81 82 82 82 82 81 80 7F 7E 7D 7D 7D 7D 7E 7F 80 81 82 82 82 81 80 7F 7F 7E 7E 7E 7E 7E 7F 7F 80 80 81 81 81 81 81 80 80 80 7F 7F 7F 7F 7E 7E 7F 7F 7F 80 81 81 81 81 81 81 80 80 7F 7E 7E 7D 7D 7D 7E 7F 81 81 82 82 82 81 80 7F 7E 7D 7C 7C 7D 7E 7F 81 82 82 83 82 82 81 80 7F 7D 7D 7C 7C 7D 7F 80 82 83 83 83 82 80 7F 7E 7D 7D 7D 7D 7E 7F 80 81 82 82 81 81 80 7F 7F 7E 7E 7E 7E 7F 7F 80 81 81 81 81 80 7F 7F 7E 7E 7E 7E 7F 7F 80 81 81 81 80 80 80 7F 7F 7F 7F 7F 7F 7F 80 80 81 81 81 80 80 80 7F 7F 7F 7E 7E 7F 80 80 80 81 80 80 80 7F 7F 7F 7E 7E 7E 7F 7F 80 80 80 80 81 80 80 7F 7F 7F 7F 7F 7F 7F 7F 80 80 81 81 81 81 80 80 7F 7F 7F 7E 7F 7F 7F 80 80 80 81 81 81 80 80 7F 7F 7F 7E 7F 7F 7F 7F 80 80 80 80 80 80 80 7F 7F 7E 7E 7E 7E 7F 7F 80 80 80 80 80 80 80 80 7F 7F 7F 7F 7F 7F 80 80 80 80 80 80 80 80 80 80 7F 7F 7F
ik zou dat in Excel doen.... Met de functies HEX2BIN (naar binary), LEFT (knip 7 linker bits) en CONCAT (strings aan elkaar plakken ) kom je een heel eind! Eerst even je data omzetten naar 1 waarde per regel (kan in Notepad++ door de spatie om te zetten naar een CRLF (\r\n) bijvoorbeeld)
Waardes zien er dan zo uit:
Formules zo:
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik kan er wel een klein pc programmaatje voor maken, is vrij simpel te doen...
(je kunt ook ADPCM overwegen, spaart ook 50% geheugen uit...)
[Bericht gewijzigd door Arco op (29%)]
Dat klinkt hoopvol.
Die ADPCM , moet dat dan weer ge-decomprimeerd worden in het PIC-programma?
Ik heb notepad++ opgehaald en het is al gelukt om alles onder elkaar te plaatsen.
Excel heb ik niet maar ik ga kijken of dat ook met Libreoffice-calc kan.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Op zaterdag 5 april 2025 22:40:41 schreef Zonnepaneeltje:
Die ADPCM , moet dat dan weer ge-decomprimeerd worden in het PIC-programma?
Ja, dat klopt.
ADPCM is geen verliesvrije (de)compressie, geluid gaat iets in kwaliteit maar is meestal geen probleem...
Ik heb notepad++ opgehaald en het is al gelukt om alles onder elkaar te plaatsen.
Excel heb ik niet maar ik ga kijken of dat ook met Libreoffice-calc kan.
Zoals gezegd: wil er wel een programmaatje voor maken. (dan moet ik wel een 8 bit sourcefile hebben om te testen...)
Paulinha_B
Honourable Member
"Ik spreek Spaans tegen God, Italiaans tegen de vrouwen, Frans tegen mannen en Duits tegen mijn paard." Dixit Carlos V, Römisch-deutscher Kaiser
In python moet dat ook best lukken, en nog meer in C waarin er volop commando's zijn voor bit/byte-manipulatie. Ook bij mij is een privebericht welkom, met een voorbeeldbestand in bijlage.
Op zaterdag 5 april 2025 22:40:41 schreef Zonnepaneeltje:
Excel heb ik niet maar ik ga kijken of dat ook met Libreoffice-calc kan.
Ik had het ook ff in LibreOffice Calc gedaan hoor. Gaat werken.. Als iemand een programmatje wil schrijven is dat nog makkelijker... Wil ik zelf ook wel doen... laat ons maar horen.
Fripster
Dank voor jullie reacties. Dat ADPCM is iets om in het achterhoofd te houden.
Arco, super als je er een programmaatje voor wilt maken, dat zou heel mooi zijn.
Even wat extra info:
Voor heel korte geluiden heb ik al het nodige werkend, maar de afspeeltijd is nu een halve seconde, daar kan je niet heel veel mee.
Met het programma Audacity (fantastisch mooi programma) haal ik een geluid van joetube. In Audacity werk ik het wat bij en exporteer het als 8bit unsigned PCM met een samplefrequentie van 8kHz.
Dan laad ik het in Bless hex-editor en doe een copy-paste naar MPLAB 8.92.
Dan nog wat omzetting naar het juiste formaat voor de assembler. dt 0x80 enz.
Met een 100 Ω luidsprekertje direct aan de PIC en verder geen enkel ander component komt er een verbazingwekkend goed geluid uit!
De PIC draait op 32 MHz , PWM frequentie 31.25 kHz 125kHz.
Hierbij een bestandje van de Koekoek, de tweede helft van het Koekoek-geluid.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Ik kom op:
#include <stdio.h>
int main (int argc, char **argv)
{
int x1, x2, y;
char sep;
int p = 0;
while (1) {
if (scanf ("%x", &x1) != 1) break;
if (scanf ("%x", &x2) != 1) break;
y = (x1 >> 1) | ((x2 >> 1) << 7);
if ((p % 16) == 15) sep = '\n';
else sep = ' ';
printf ("%4x%c", y, sep);
p++;
}
printf ("\n");
}
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik denk dat je dit bedoelt. (even snel gemaakt, filenaam in dos window op de commandline ingeven: 16to14bit filenaam, nieuwe file heet 14bit.out)
'***********************************************************************************************
#COMPILE EXE "16to14bit.exe"
#DIM ALL
'***********************************************************************************************
Global FInName, InBuff As string, Byte1, Byte2 As Byte, Word1 As Word
'***********************************************************************************************
FUNCTION PBMAIN () AS LONG '
Local lCnt As Integer '
If IsFile (Command$) Then 'Sourcefile exists?
Open Command$ For Binary As #1 'Open it
If IsFile ("14bit.out") Then Kill "14bit.out" 'Open outputfile
Open "14bit.out" For Binary As #2 '
Get$ #1, Lof(#1), InBuff 'Read file
For lCnt = 1 to Len(InBuff) Step 2 'Handle bytes
Byte1 = Asc(Inbuff, lCnt) '
Byte2 = Asc(InBuff, lCnt+1) '
Shift Right Byte1, 1 'Adjust values
Word1 = Byte1 * 256 + Byte2 '
Shift Right Word1, 1 '
Byte1 = Hi(Byte, Word1) '
Byte2 = Lo(Byte, Word1) '
Put$ #2, Mkbyt$(Byte1) 'Write to file
Put$ #2, Mkbyt$(Byte2) 'Write to file
Next '
Word1 = Lof (#1) '
Close #1, #2 'Close files
MsgBox "File: 14bit.out created. " & $Cr & _ 'Msg success
"Length: " & Format$(Word1) & " bytes" & $Cr & _ '
$Cr & _ '
"Source: " & Command$,%MB_ICONINFORMATION, "Info" '
Else '
Msgbox "File: " & Command$ & " not found",_ 'Msg file not found
%MB_ICONERROR,"Info:" '
End If '
END FUNCTION '
'***********************************************************************************************
[edit] foutje, aangepast...
Knap dat jullie zoiets kunnen schrijven, assembly is veel makkelijker 
Met wat gehannes met WIN11 heb ik de file van Arco werkend gekregen.
Als ik de naam verander van 14bit.out naar 14bit.txt is het zichtbaar in Bless hex-editor.
Als eerste regel krijg ik :
20 40 20 40 20 3F 1F BF 1F BF
Bless laat Bytes zien.
Na omzetten naar binair krijg je 0010 0000 0100 0000
Bij weglaten van de eerste nul klopt het(?)
Word1 = Byte1 * 256 + Byte2
* 256 ? Ik zou denken * 128 in dit geval.
Oh, nee. De shift op de volgende regel zet het weer goed. 
[Bericht gewijzigd door deKees op (26%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
De waarde is in de laagste 14 bits, dus de hoogste 2 bits (die toch altijd '0' zijn), doen niet mee...
Op zondag 6 april 2025 19:32:04 schreef deKees:
* 256 ? Ik zou denken * 128 in dit geval.
Oh, nee. De shift op de volgende regel zet het weer goed.
De * 256 doet een left shift 8 van Byte1, en de volgende regel doet een shift right van het hele Word...
Als er nog iets moet worden aangepast hoor ik het wel...
Ik kan het bestand op geen enkele andere manier zichtbaar maken dan met Bless.
Hoe krijg ik dit zichtbaar binnen MPLAB 8.92. MPLAB wil dit niet eens herkennen als bestand op de computer. Ook niet als ik de naam verander in 14bit.asm.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Hoe noem je 'm nu dan en hoe importeer je die file? (.raw herkent mplab zeker ook niet)
Maak je er een table van in de sourcefile? Geef eens een voorbeeld van een werkende file.
(ik gebruik Hex Editor Neo voor lezen van de file)
[Bericht gewijzigd door Arco op (13%)]
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bedoel je zoiets? (maakt een data tabel aan genaamd SndTab in file 14bit.inc, kun je Includen)
'***********************************************************************************************
#COMPILE EXE "16toInc.exe"
#DIM ALL
'***********************************************************************************************
Global FInName, InBuff As string, Byte1, Byte2 As Byte, Word1 As Word
'***********************************************************************************************
FUNCTION PBMAIN () AS LONG '
Local lCnt As Integer '
If IsFile (Command$) Then 'Sourcefile exists?
Open Command$ For Binary As #1 'Open it
If IsFile ("14bit.inc") Then Kill "14bit.inc" 'Open outputfile
Open "14bit.inc" For Output As #2 '
Print #2, "SndTab:" '
Get$ #1, Lof(#1), InBuff 'Read file
For lCnt = 1 to Len(InBuff) Step 2 'Handle bytes
Byte1 = Asc(Inbuff, lCnt) '
Byte2 = Asc(InBuff, lCnt+1) '
Shift Right Byte1, 1 'Adjust values
Word1 = Byte1 * 256 + Byte2 '
Shift Right Word1, 1 '
Print #2, " Data 0x" & Hex$(word1,4) '
Next '
Word1 = Lof (#1) '
Close #1, #2 'Close files
MsgBox "File: 14bit.inc created. " & $Cr & _ 'Msg success
"Length: " & Format$(Word1) & " bytes" & $Cr & _ '
$Cr & _ '
"Source: " & Command$,%MB_ICONINFORMATION, "Info" '
'
Else '
Msgbox "File: " & Command$ & " not found",_ 'Msg file not found
%MB_ICONERROR,"Info:" '
End If '
END FUNCTION '
'***********************************************************************************************
Het probleem blijkt te zijn dat Windows achter de filenaam .txt plaatst.
In Linux zie ik dat 14bit.out is veranderd naar 14bit.out.txt
Is met geen mogelijkheid weg te krijgen.
MPLAB pikt zo'n bestandsnaam niet en geeft een foutmelding bij importeren.
Over de schrijfwijze van de data, die zet ik gewoon achteraan in het PIC-programma erbij. Zo:
ORG 0x800 ; begin van audiodata geluid2
Table2:
dw 0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF
dw 0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF,0x3FFF
TABLE2_END
Ahhh, zo simpel kan het dus zijn. Rename...
Het is gelukt, heb de bestandsnaam veranderd naar 14bit.asm en kan het nu zien in MPLAB!
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Zo dus:
'***********************************************************************************************
#COMPILE EXE "16to14bit.exe"
#DIM ALL
'***********************************************************************************************
Global FInName, InBuff As string, Byte1, Byte2 As Byte, Word1 As Word
'***********************************************************************************************
FUNCTION PBMAIN () AS LONG '
Local lCnt, lCnt2 As Integer '
If IsFile (Command$) Then 'Sourcefile exists?
Open Command$ For Binary As #1 'Open it
If IsFile ("14bit.inc") Then Kill "14bit.inc" 'Open outputfile
Open "14bit.inc" For Output As #2 '
Print #2, " Org 0x0800 ;Begin audiodata geluid2" 'Print header
Print #2, "Table2:" '
Get$ #1, Lof(#1), InBuff 'Read file
For lCnt = 1 to Len(InBuff) Step 2 'Handle bytes
Byte1 = Asc(Inbuff, lCnt) '
Byte2 = Asc(InBuff, lCnt+1) '
Shift Right Byte1, 1 'Adjust values
Word1 = Byte1 * 256 + Byte2 '
Shift Right Word1, 1 '
Select Case lCnt2 Mod 16 '16 values per line
Case 0 'First entry is special
If lCnt > 1 Then Print #2 'Not line 1? Then Cr/Lf
Print #2, " dw 0x" & Hex$(word1,4); '
Case Else '
Print #2, ",0x" & Hex$(word1,4) ; 'Rest of the entries
End Select '
incr lCnt2 '
Next '
Print #2, $Cr & "Table2_End" 'Print footer
Word1 = Lof (#1) '
Close #1, #2 'Close files
MsgBox "File: 14bit.inc created. " & $Cr & _ 'Msg success
"Length: " & Format$(Word1) & " bytes" & $Cr & _ '
$Cr & _ '
"Source: " & Command$,%MB_ICONINFORMATION, "Info" '
'
Else '
Msgbox "File: " & Command$ & " not found",_ 'Msg file not found
%MB_ICONERROR,"Info:" '
End If '
END FUNCTION '
'***********************************************************************************************
Windows plakt er trouwens standaard geen .txt achter, ligt aan welke extensie je bij 'save' hebt gekozen.
(als er geen extensie is, kiest Windows Notepad default wel ".txt")
Voor files die ge-include worden, wordt meestal de extensie ".inc" gebruikt...
roadrunner84
Meep! Meep!
gooi 1 bit weg en plak 2 samples van 7 bit in iedere cel
#python
inputSamples = "80 80 80 7F 7F 7F 7F 7F 80 7F 80 80 80 80 80 7F 7F 7F 7F 7F 7F 7F 80 80 80 80 80 7F 80 80 80 7F 7F 7F 7F 7F 80 80 80 7F 80 80 80 80 80 80 80 7F 7F 7F 7F 80 80 80 80 80 80 80 80 7F 7F 7F 7F 7F 7F 7F 7F 7F 80 80 80 80 80 7F 80 80 80 80 7F 7F 7F 7F 7F 7F 7F 80 80 80 80 7F 7F 7F 7F 7F 7F 80 80 80 80 80 80 7F 80 7F 7F 80 80 7F 7F 7F 7F 7F 80 80 7F 80 80 80 7F 80 80 7F 7F 7F 7F 7F 7F 7F 80 80 80 80 80 80 7F 7F 7F 80 7F 7F 7F 7F 80 7F 80 80 80 80 80 80 80 80 7F 7F 7F 7F 7F 7F 80 80 80 80 81 80 7F 7F 7F 7F 7F 7F 7F 7F 7F 80 80 80 80 80 80 80 80 80 7F 7F 7F 7E 7E 7F 7F 80 80 80 80 80 80 80 7F 7F 7F 7F 7F 80 80 7F 7F 7F 7E 7F 7E 7F 7F 80 81 81 81 81 80 80 7F 7E 7E 7E 7E 7F 7F 7F 80 80 80 81 81 81 81 80 7F 7F 7E 7E 7D 7D 7E 7F 80 82 83 83 82 82 80 7E 7D 7C 7C 7C 7E 7F 81 82 83 83 82 81 80 7E 7C 7C 7C 7D 7E 80 82 83 85 85 84 82 7F 7C 7A 78 78 79 7C 80 84 87 89 8A 89 85 80 7B 77 74 73 74 78 7D 82 88 8B 8D 8D 8A 86 81 7C 77 73 70 70 72 76 7C 83 8A 90 93 93 90 8A 82 79 71 6B 68 69 6D 75 80 8A 93 9A 9C 99 92 88 7C 70 66 60 5F 63 6C 79 88 97 A2 A7 A6 9E 90 7F 6D 5E 54 52 58 65 77 8B 9E AB B1 AF A4 93 7E 69 59 4E 4C 52 60 73 89 9D AD B6 B5 AC 9B 85 6E 5A 4B 44 48 55 6A 83 9C B1 BE C0 B7 A4 8B 6F 56 43 3C 3F 4E 66 82 9E B5 C3 C6 BC A9 8E 71 55 41 36 38 46 5E 7C 9C B7 C9 CF C7 B3 96 73 53 39 2B 2C 3B 57 7A 9F BF D4 DA D1 B9 97 71 4D 31 23 24 36 54 7A A2 C4 DA E1 D7 BE 9A 71 4A 2B 1C 1D 30 51 7A A5 CA E1 E9 DD C1 9A 6D 44 24 15 17 2C 4F 7B A8 CF E7 EE E2 C4 9B 6C 40 1E 0E 11 27 4D 7D AD D6 F0 F7 E8 C7 99 67 38 16 06 0C 26 50 82 B4 DD F6 FA E9 C5 95 61 33 11 03 0B 27 52 85 B7 E0 F8 FB E9 C5 94 5F 30 0E 00 08 26 52 87 BB E4 FC FE E9 C3 90 5B 2C 0B 00 0A 29 57 8B BE E5 FB FC E6 C0 8E 5A 2C 0C 01 0C 2B 58 8D BF E6 FB FB E6 BF 8C 58 2A 0C 01 0D 2D 5B 8F C1 E6 FA F9 E2 BB 89 56 29 0C 03 0F 2F 5C 90 C1 E7 FB F9 E2 BB 88 54 27 0A 01 0F 31 60 95 C6 EA FC F7 DE B5 82 4F 25 0A 05 14 37 65 98 C6 E8 F8 F3 DA B1 80 4F 26 0E 08 18 39 67 99 C6 E7 F5 EF D5 AD 7C 4D 26 0F 0C 1D 3F 6C 9C C7 E5 F1 E9 D0 A8 7A 4D 29 14 11 22 42 6E 9C C5 E2 EE E7 CE A7 7A 4D 29 15 12 23 44 6F 9D C6 E2 ED E5 CB A4 77 4C 29 16 15 26 47 72 9F C6 E1 EB E2 C8 A2 76 4B 2A 18 17 29 4A 74 9F C6 DF E9 DF C6 A0 74 4B 2B 19 1A 2C 4D 76 A1 C6 DE E6 DC C2 9D 72 4B 2C 1C 1E 30 50 79 A2 C5 DB E2 D8 BF 9B 72 4C 2E 1F 21 33 52 79 A1 C3 DA E0 D6 BC 98 70 4B 2E 20 23 35 55 7C A3 C5 DA DF D3 B9 96 6E 4A 2F 22 25 38 58 7E A5 C5 D8 DD D1 B7 94 6D 49 2F 22 27 3A 5A 80 A7 C6 D9 DD D0 B5 91 6A 46 2D 22 27 3C 5D 84 A9 C8 D9 DB CD B1 8D 67 44 2D 24 2B 40 61 87 AB C8 D8 D9 CA AE 8A 65 44 2D 25 2D 43 64 89 AD C9 D8 D8 C8 AC 88 62 42 2C 25 2E 45 67 8C B0 CA D8 D6 C5 A8 84 5F 40 2C 26 31 48 6A 8F B1 CB D7 D4 C3 A5 82 5E 3F 2C 28 33 4B 6C 91 B3 CB D7 D3 C0 A3 7F 5C 3F 2D 2A 35 4E 6F 93 B3 CA D5 D0 BE A1 7E 5B 3F 2E 2C 37 50 71 94 B4 CA D4 CF BC 9F 7C 5A 3E 2E 2C 39 52 73 95 B4 CA D2 CC B9 9C 7A 59 3F 30 2F 3C 55 75 96 B4 C9 D1 CA B7 9B 79 59 3F 31 30 3D 56 76 98 B5 C9 D1 CA B6 99 77 57 3E 31 31 3F 58 78 99 B6 C9 D0 C8 B4 97 76 57 3E 31 32 40 59 79 9A B6 C8 CF C7 B3 96 75 56 3E 32 33 42 5B 7B 9B B7 C9 CE C5 B1 94 73 55 3E 33 35 44 5D 7C 9C B6 C7 CC C3 AF 92 73 55 3F 34 36 45 5E 7D 9C B7 C7 CC C3 AE 92 72 54 3F 34 37 46 5F 7E 9D B6 C7 CB C1 AD 91 72 55 3F 35 38 47 5F 7E 9C B6 C6 CA C1 AD 91 72 55 40 35 38 47 60 7E 9C B6 C6 CA C1 AC 91 71 55 40 36 39 48 60 7E 9C B5 C5 C8 BF AB 90 72 56 41 37 3A 49 61 7E 9C B4 C4 C7 BE AB 8F 71 56 42 39 3C 4B 62 7F 9C B4 C3 C6 BD A9 8E 71 56 43 3A 3D 4C 64 80 9D B4 C2 C5 BB A7 8D 70 56 43 3B 3E 4D 65 82 9D B4 C1 C3 BA A6 8B 6F 55 43 3B 3F 4F 66 82 9E B4 C1 C3 B9 A5 8B 6F 55 43 3C 40 4F 66 82 9E B4 C1 C3 B8 A5 8A 6E 55 43 3C 40 50 67 83 9E B3 C0 C2 B8 A4 8A 6F 56 44 3D 41 50 67 82 9D B3 BF C1 B7 A4 8A 6E 56 45 3E 42 51 68 83 9E B3 BF C0 B6 A2 89 6E 56 46 3F 44 53 6A 84 9E B3 BE BF B4 A1 88 6D 56 46 40 45 54 6B 86 9F B3 BE BE B3 9F 86 6C 55 45 40 46 56 6D 87 A0 B3 BD BD B1 9E 85 6B 54 45 41 47 57 6E 88 A1 B3 BD BC B0 9D 83 6A 54 46 41 48 58 6F 89 A1 B3 BC BB AF 9C 83 6A 54 46 42 49 59 70 89 A1 B3 BC BB AF 9B 83 6A 54 46 43 49 59 70 89 A1 B2 BB B9 AE 9A 82 6A 55 48 44 4B 5B 71 89 A0 B2 BA B9 AD 9A 82 6A 56 48 45 4B 5B 71 89 A0 B1 BA B8 AD 9A 82 6A 56 49 45 4C 5C 72 8A A0 B1 B9 B7 AC 99 81 6A 56 49 46 4C 5C 72 8A A0 B1 B9 B7 AB 99 81 6A 56 49 46 4D 5D 72 8A A0 B1 B8 B7 AB 98 81 6A 56 4A 47 4D 5D 72 8A A0 B0 B8 B6 AB 98 81 6A 56 4A 47 4E 5D 72 8A A0 B0 B7 B6 AA 98 81 6A 57 4A 47 4E 5D 72 89 9F AF B7 B5 AA 98 81 6B 58 4B 48 4E 5D 72 89 9E AE B6 B4 A9 98 82 6B 59 4D 49 4F 5E 72 88 9D AC B4 B3 A9 98 83 6D 5B 4F 4C 51 5E 71 86 9A A9 B1 B0 A7 97 84 6F 5E 53 4F 53 5F 71 84 97 A5 AD AD A5 97 86 73 63 58 54 57 61 70 81 92 9F A7 A8 A2 97 87 77 69 5F 5A 5B 63 6F 7E 8D 99 A0 A2 9E 96 8A 7C 70 66 61 61 66 6F 7B 87 91 98 9B 99 93 8A 80 76 6E 68 67 6A 70 79 82 8A 90 94 94 91 8B 84 7C 75 70 6E 6F 73 78 7E 84 8A 8D 8E 8C 89 85 7F 7B 77 74 74 76 79 7D 80 84 87 88 88 87 85 82 7E 7C 7A 78 79 7A 7C 7E 81 83 84 84 84 83 82 80 7E 7D 7C 7C 7C 7D 7E 7F 81 82 82 82 82 81 80 7F 7E 7E 7D 7E 7E 7F 7F 80 81 81 81 81 80 80 7F 7F 7E 7F 7F 7F 80 80 81 81 81 80 80 80 7F 7E 7E 7E 7E 7E 7F 7F 80 81 81 81 81 81 80 7F 7F 7E 7D 7E 7E 7E 7F 80 81 81 82 82 82 81 80 7F 7E 7D 7D 7D 7D 7E 7F 80 81 82 83 83 82 81 80 7F 7E 7D 7D 7D 7D 7E 7F 80 81 82 82 82 82 81 80 7F 7E 7D 7D 7D 7D 7E 7F 80 81 82 82 82 81 80 7F 7F 7E 7E 7E 7E 7E 7F 7F 80 80 81 81 81 81 81 80 80 80 7F 7F 7F 7F 7E 7E 7F 7F 7F 80 81 81 81 81 81 81 80 80 7F 7E 7E 7D 7D 7D 7E 7F 81 81 82 82 82 81 80 7F 7E 7D 7C 7C 7D 7E 7F 81 82 82 83 82 82 81 80 7F 7D 7D 7C 7C 7D 7F 80 82 83 83 83 82 80 7F 7E 7D 7D 7D 7D 7E 7F 80 81 82 82 81 81 80 7F 7F 7E 7E 7E 7E 7F 7F 80 81 81 81 81 80 7F 7F 7E 7E 7E 7E 7F 7F 80 81 81 81 80 80 80 7F 7F 7F 7F 7F 7F 7F 80 80 81 81 81 80 80 80 7F 7F 7F 7E 7E 7F 80 80 80 81 80 80 80 7F 7F 7F 7E 7E 7E 7F 7F 80 80 80 80 81 80 80 7F 7F 7F 7F 7F 7F 7F 7F 80 80 81 81 81 81 80 80 7F 7F 7F 7E 7F 7F 7F 80 80 80 81 81 81 80 80 7F 7F 7F 7E 7F 7F 7F 7F 80 80 80 80 80 80 80 7F 7F 7E 7E 7E 7E 7F 7F 80 80 80 80 80 80 80 80 7F 7F 7F 7F 7F 7F 80 80 80 80 80 80 80 80 80 80 7F 7F 7F"
decimalSamples = [int(sample, 16) for sample in inputSamples.split(" ")]
oddSamples = decimalSamples[::2]
evenSamples = decimalSamples[1::2]
compactSamples = [((a>>1)<<7) + (b>>1) for a, b in zip(oddSamples, evenSamples)]
stringSamples = ["%04x"%sample for sample in compactSamples]
outputSamples = " ".join(stringSamples)
print (outputSamples)Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Arco, dank, het ziet er goed uit. Ik heb het er al bij geplaatst.
Het werkt nog niet helemaal goed maar dat ligt niet aan jouw progje.
Ik zit nog te hannesen met de ruimte in het geheugen.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Toegang tot alle bits van het programmageheugen is bij een 12/14/16/18f processor altijd wat omslachtig, omdat die een 8 bits structuur hebben...
Dat kun je wel zeggen ja.
Ik krijg onterecht de foutmelding "section can not fit the absolute section".
De lengte van de sectie wordt ook foutief als 2x zo lang gegeven als hij werkelijk is. Maar zelfs als dat zo was zou het nog passen.
Alles 10x nagekeken, bij kleinere hoeveelheid data gaat het assembleren wel goed. Alles staat dan correct op de juiste geheugenplaatsen.
)