Nu ville jag ha en smal och smidig kabel och tänkte därför använda displayens SPI interface. Men när jag väl hade köpt displayen förstod jag att den behövde mer än SPI - trådarna R/W, #CSB, RS och #RESET skulle ha signal in också. ( # = invert-tecken). Tyckte detta var korkat att de inte kunnat implementera dessa i SPI interfacet. Nu behövdes det ändå en massa trådar! Men så kom jag på att om jag gör första byten i meddelandet till en "specialbyte" som sätter trådarna #CSB, RS och #RESET så kunde jag även använda den byten till att styra lysdioder och även läsa av knapparna...
Så jag använde shiftregistret 74HC164, (utan latch):

Funktion:
Schema.
Från processorn har jag linjerna SCK, MISO, MOSI och SS.
Första byte är en "startbyte" som alltså inte läses in av DOMG-displayen. Denna byte har följande funktioner:
Bit.nr funktion
b0 - RS till display ( instruktion eller data växel)
b1 - CSB till display (etta = select, nolla = not select)
b2 - RESET till display ( etta = RESET, 0 = ingen verkan)
b3 - BGLIGHT BIT0 (low power)
b4 - BGLIGHT BIT1 (high power)
b5 - RÖD LED , 1 = on
b6 - GRÖN LED, 1 = on
b7 - STARTBIT - ska alltid vara etta
CSB och RESET aktiveras när första byten är klar och motsvarande databitar är etta.
LED och BGLIGHT aktiveras först när SS går hög, dvs efter avslutad sändning.
Knapparnas tillstånd läses in och skickas till processorn i första byten. resten ger 0xFF.
Detaljer om hur jag löst det hela i hårdvara:
Då SS (chip select) är hög ( = inaktiv) så är shiftregistret resettat, dvs alla utgångar = 0 . (dessa inverteras till linjerna #RESET och #CSB så att dessa går höga. #CSB är alltså displayens egen "chip select").
När CS går låg och klockan börja gå så shiftas alltså första byten data in i shiftregistret samtidigt som #CSB är hög, dvs. displayen ignorerar denna byte. Men databit7 (den först sända biten) i första byten är alltid en etta - när den åttonde klockpulsen går hög shiftas denna bit ner till utgång Q7 på 74HC164. Q7 går via en OR-grind tillbaks till klockingången på shiftregistret och låser således klockan - shiftregistrets innehåll fryses.
När Q7 går hög släpps signalerna fram från Q1 och Q2 till #SCB och #RESET via var sin NAND-grind. Q0 går direkt till RS - detta fungerar eftersom RS bara läses av displayen då sista biten shiftats in från en byte, RS kan därför anta vilket värde som helst innan shiftregistret fryses, men sedan är det fixerat.
Nu om #CSB är nolla, så kommer de följande byten att läsas in av displayen. När SS går hög igen sker två saker: dels resettas 74HC164 så att alla datautgångar blir noll igen, dels får D-vipporna i 74HC174 en klockpuls. Då resetten till HC174 är fördröjd med ett par hundra nanosekunder så läses data från Q3-Q6 in i D-vipporna. Utgångarna från dessa styr sedan bakgrundsbelysning och LED.
Sen har jag ytterligare ett shiftregister med parallell load dit jag således kan koppla upp till 7 knappar (D0-D6) . D7 kommer inte med. Jag har anslutit knappar till D0,D1 och D2. Knapparnas tillstånd avläses då SS går låg och shiftas ut till MISO under första byten.
Stöter på problem....
på vägen har det hänt en massa saker som bara varit onödiga och so tagit onödig tid:
Jag beställde kretsar från DigiKey , men just 74HC164 råkade jag beställa fel sort av så jag fick DIP-kapslar

Som tur räddades jag av DeVille som hjälpsamt skickade mig några st i SOIC-kapsel.

När allt väl var monterat upptäckte jag att några av viorna inte var tillräckligt genompläterade. Mönsterkorten från Cogra var försenade pga produktionsproblem, och ett problem var just badet där det pläterades... Mina kort var inte elektriskt testade och dom blev kassa. Kunde dock åtgärda genom att trä i trådar i viorna och löda. (men då kunde jag ju likaväl ha etsat hemma!)
Och nu har jag stött på nästa problem: Mitt shiftregistersystem fungerar bra, både för lysdioderna, bakgrundsbelysningen och knapparna. Men displayen är svart!
Började leta fel och upptäckte något som jag tror är ett fel i DOGM:S datablad: Kolla nere till höger på sidan 4. Där har det visat hur jag kopplar diplayen i SPI-mode för 5 volt VCC. Jag kopierade den utan eftertanke. Men nu ser jag att R/W är ju kopplad till +5V. I databladet står det att READ = 1 och WRITE = 0. Jag har alltså hårdvarulåst R/W till +5V, dvs READ! Jag antar att det är felet , så nästa steg blir att skära i kretskortet och lägga den pinnen till GND istället.
Så än har jag inte fått fram "HEJSAN" på displayen. Nästa inlägg kommer förmodligen att innehålla koden till processorn (en AVR ATmega644P) och om det hjälpte med att ändra R/W till GND.