Jag börjar med ditt förra inlägg:
Tack för koden!

Vad använder du för assembler/kompilerare? Jag tycker instruktionerna skiljer sig lite från Microchip's vanliga.
Det är två saker i koden som jag inte är helt säker på:
1)
I LCD.8OUT så byter du bara plats på de båda nibbles med SWN,
men i LCD.4OUT så använder du tricket med AND för att göra (till synes) samma sak.
Varför två olika sätt?
2)
I SETCG.CGINIT så maskar du bort högsta biten (AND A,#$7F).
Vad jag kan se så förekommer den biten bara i ÅÄÖ-datans sista byte.
Först tänkte jag att det kanske var någon markör för "slut på data",
men direkt efter så verkar du anropa LCDOUT.
Så det verkar vara något jag missar här.
Över till ditt senaste inlägg:
"När det går troll i ett program brukar jag alltid börja om med att lägga till bit för bit av koden"[klipp]
Samma här. Jag är på version 2.C och den här sista versionen har jag rensat totalt många gånger.
Som jag skrivit så har jag inte ens några rutiner kvar.
Allt görs med anrop direkt till I2C-busssen.
Men inte ens det fungerar för att hamna i CGRAM.
Jag kör med din initiering och det fungerar.
Men så fort jag lägger till adresseringen av CGRAM så hamnar datan i DDRAM istället.
I mitt förra inlägg finns koden för hur jag gör för att hamna i CGRAM.
Nu har varken du eller Icecap (eller någon annan) skrivit att den koden varken är rätt eller fel,
så jag antar att den är rätt. Ni brukar ju ha falkögon när det gäller att hitta fel.
"Så mitt råd är att göra enkla rutiner från grunden och testa dessa noggrant innan nästa steg tas. Det brukar hjälpa."
Rutiner är ju ett bra sätt att få kod mer kompakt och snygg,
men det är ju även en risk eftersom det är svårare att följa hopp mm.
En "rak" lista med alla instruktioner under varandra är svår att gå vilse i,
så länge det finns kommentarer som "milstenar".
Nackdelen är förstås att en "rak" lista med instruktioner blir lång.
Men eftersom principen är likadan genom hela initieringen
(även anropet till CGRAM görs ju på samma sätt)
så behöver man bara läsa ca 6 rader för att få grepp om exakt hur det är gjort.
Därför har jag alltid sett en rak lista med instruktioner som mer grundläggande
och en bra utgångspunkt för att undvika så många fel som möjligt.
För att få det bästa av båda världar så är dessutom min lista med instruktioner
automatiskt genererad av mitt php-script som använder indata från din initiering.
Om något skulle vara fel med det scriptet så skulle man definitivt få konstig utdata redan från början.
Så jag kan inte komma på hur jag skulle kunna göra det hela mer grundläggande.
Plockar jag bort det enda som inte fungerar (anropet till CGRAM) så plockar jag
ju bort just det som jag försöker få att fungera.
Och att försöka göra det anropet mer grundläggande än att skriva direkt till I2C-bussen finns nog inte.
(Ja om man inte ska stoppa dit tre momentana brytare och knacka in ettor och nollor helt manuellt.

)
Jag kommer nog inte på något mer att prova när det gäller mjukvaran.
"Angående logikanalysatorn så var tanken att koppla E som klocka och låta denna klocka in signalerna"[klipp]
Nu förstår jag. Intressant idé.
Jag ska testa det.
"Har Du förresten möjlighet att skicka data som SPI istället för I2C? Förutsatt att det även finns en vanlig portpinne tillgänglig kan Du då använda vanliga skiftregister med latch på utgången och komma ifrån både portexpander och 4-bit mode."
SPI istället för I2C är inga problem. Men jag är osäker på om jag har några shiftregister av rätt sort.
Jag vet att jag har 4-bitars med parallell input och det går ju att ordna det med dem (och lite annat),
men det hade varit smidigt med något mer färdigt. Så det inte riskerar att bli en till felkälla.
Jag ska titta runt lite och se vad jag kan ordna.
Jo det här med att jag valt köra displayen som 4-bit istället för 8-bit:
Portexpandern har två portar med 8 pinnar i varje.
Till den behöver jag ansluta displayen och 5st knappar.
För att göra det enkelt så tar jag 1st pinne per knapp.
Då får jag över 11st för displayen.
Kör jag displayen i 8-bit så går det åt 12 pinnar. Därav mitt val att köra displayen som 4-bit.
Hm, visst ja...
Det blir lite rörigt om jag kör displayen över SPI och knapparna på en hel portexpander med I2C...
Men som test är det inga problem.