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:

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.

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...)

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.

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");
}

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...

16to14bit.zip

Knap dat jullie zoiets kunnen schrijven, assembly is veel makkelijker :D

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. 8)7

[Bericht gewijzigd door deKees op (26%)]

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. 8)7

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.

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%)]

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                                                    '

'***********************************************************************************************

16toInc.zip

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

Windows command prompt:

ren 14bit.out.txt 14bit.out

Linux shell:

mv 14bit.out.txt 14bit.out

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!

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                                                            '

'***********************************************************************************************

16to14bit.zip

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...

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)

Dat gebeurt toch ook al? (daarom heet 't ook van 16 naar 14 bits... :+ )

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.

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.