Här är min upplevelse av SeeedStudio E-Ink.
http://www.picaxeforum.co.uk/showthread.php?23583-E-ink-on-PICAXE- se-det-nu-!
Seeedstudio E-bläck är en Arduino-kompatibel sköld. (Det är dock inte helt Arduino-kompatibelt!. Se Seeedstudio Forum: http://www.seeedstudio.com/forum/viewtopic.php?p=16432#p16432)
Här är PICAXE-koden:
#PICAXE 28X2 Eeprom% 00001111, (% 00000000) '% 00000000 Eeprom% 00011111, (% 11000000)'% 11000000 Eeprom% 00101111, (% 00110000) '% 00110000 Eeprom% 00111111, (% 11110000)'% 11110000 Eeprom% 01001111, (% 00001100) '% 00001100 Eeprom% 01011111, (% 11001100)'% 11001100 Eeprom% 01101111, (% 00111100) '% 00111100 Eeprom% 011 , (% 11111100) '% 11111100 Eeprom% 10001111, (% 00000011)'% 00000011 Eeprom% 10011111, (% 11000011) '% 11000011 Eeprom% 10101111, (% 00110011)'% 00110011 Eeprom% 10111111, (% 11110011) ' % 11110011 Eeprom% 11001111, (% 00001111) '% 00001111 Eeprom% 11011111, (% 11001111)'% 11001111 Eeprom% 11101111, (% 00111111) '% 00111111 Eeprom% 11110000, (% 00000000)'% 00000000 Eeprom% 11110001, (% 11000000) ' % 11000000 Eeprom% 11110010, (% 00110000) '% 00110000 Eeprom% 11110011, (% 11110000)'% 11110000 Eeprom% 11110100, (% 00001100) '% 00001100 Eeprom% 11110101, (% 11001100)'% 11001100 Eeprom% 11110110, (% 00111100) '% 00111100 Eeprom% 11110111, (% 11111100)'% 11111100 Eeprom% 11111000, (% 00000011) '% 00000011 Eeprom% 11111001, (% 11000011)'% 11000011 Eeprom% 11111010, (% 00110011) '% 00110011 Eeprom% 11111011, (% 11110011) '% 11110011 Eeprom% 11111100, (% 00001111)'% 00001111 Eeprom% 11111101, (% 11001111) '% 11001111 Eeprom% 11111110, (% 00111111)'% 00111111 Eeprom% % 11111111) '% 11111111 paus 5000 sertxd ("Eink_8", cr, lf) setfreq m16 Symbol Eink_CS1 = S.6' Chipval för Eink-drivrutin
Symbol Eink_DC = S.5 'Data- / kommandokontroll för Eink-drivrutin Symbol GT_CS2 = S.4' Chipval för tecken ROM-symbol i = w4 Symbol Xs = b10 Symbol Xe = b11 Symbol Ys = b12 Symbol Ye = b13 Symbol Char = b14 Symbol Char16 = w8 Symbol Char16Lo = b16 Symbol Char16Hi = b17 Symbol CommandByte = b18 Symbol DataByte = b19 Symbol t = b20 HÖG Eink_CS1 HÖG Eink_DC HÖG GT_CS2 hspisetup spimode00e, spimedium sertxd ("hspisetup gjort", cr, lf) G init gjort ", cr, lf) Gosub clearScreen sertxd (" clear done ", cr, lf) Ys = 170 Xs = 2: Ys = 179 för t = 0 till 13 lookup t, (" PICAXE RULES! "), Char Ys = Ys - 8: Gosub displayChar nästa sertxd ("rad 1 klar", cr, lf) Xs = 7: Ys = 179 för t = 0 till 20 uppslag t, ("Eink från Seeedstudio"), Char Ys = Ys - 8 : Gosub displayChar nästa sertxd ("l ine 2 klar ", cr, lf) Xs = 12: Ys = 179 för t = 0 till 18 uppslag t, (" Skål, från Buzby. "), Char Ys = Ys - 8: Gosub displayChar nästa sertxd (" rad 3 gjort ", cr, lf) Gosub refreshScreen sertxd (" refreshScreen done ", cr, lf) sertxd (" Done ", cr, lf) End '===================== ================================================== skriv Komma: LÅG Eink_DC LOW Eink_CS1 hspiout (CommandByte) HIGH Eink_CS1 return '=========================================== ========================== skrivdata: HÖG Eink_DC LÅG Eink_CS1 hspiout (DataByte) HÖG Eink_CS1 retur '========== ===================================================== ===== clearScreen: CommandByte = 0x24: Gosub writeComm HIGH Eink_DC LOW Eink_CS1 För i = 0 till 3095 hspiout (0xFF) Nästa i HIGH Eink_CS1 Paus 1000 retur
'==================================================== ================ initEink: CommandByte = 0x10: Gosub writeComm 'lämnar djupt viloläge DataByte = 0x00: Gosub writeData CommandByte = 0x11: Gosub writeComm' datainmatningsläge DataByte = 0x03: Gosub writeData CommandByte = 0x44: Gosub writeComm 'ställer in RAM x adress start / slut, på sidan 36 DataByte = 0x00: Gosub writeData' RAM x adress börjar vid 00h; DataByte = 0x11: Gosub writeData 'RAM x adress slut vid 11h (17) ->72: [eftersom 1F (31) ->128 och 12 (18) ->76] CommandByte = 0x45: Gosub writeComm' ställa in RAM y adress start / slut, på sidan 37 DataByte = 0x00: Gosub writeData 'RAM y-adress börjar vid 00h; DataByte = 0xAB: Gosub writeData 'RAM y-adress börjar vid ABh (171) ->172: [eftersom B3 (179) ->180] CommandByte = 0x4E: Gosub writeComm' ställer in RAM x adressräkning till 0 DataByte = 0x00: Goste skriv = Data 0x4F: Gosub writeComm 'ställer in RAM y-adressantal till 0 DataByte = 0x00: Gosub writeData CommandByte = 0xF0: Gosub writeComm' booster feedback används, på sidan 37 DataByte = 0x1F: Gosub writeData CommandByte = 0x22: Gosub writeComm 'visar uppdateringssekvensalternativ, på sidan 33 Databyte = 0xC0: Gosub writeData 'aktiveringssekvens: clk -> CP Gosub configureLUTRegister CommandByte = 0x2C: Gosub writeComm' vcom DataByte = 0xA0: Gosub writeData CommandByte = 0x3C: Gosub writeComm 'data = 0 : Gosub writeComm 'visa uppdateringssekvensalternativ, på sidan 33 Da taByte = 0xC4: Gosub writeData 'aktivera sekvens: clk -> CP -> LUT -> initial display -> mönster display return
'==================================================== ================ configureLUTRegister: CommandByte = 0x32: Gosub writeComm 'skrivdata till LUT-register HÖG Eink_DC LÅG Eink_CS1 hspiout (0x00,0x00,0x00,0x55,0x00,0x00,0x55, 0x55,0x00,0x55, _ 0x55,0x55,0xAA, 0xAA, 0xAA, 0xAA, 0x15,0x15,0x15,0x15, _ 0x05,0x05,0x05,0x05,0x01,0x01,0x01,0x01,0x00,0x00, _ 0x00 , 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, _ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, _ 0x00,0x00,0x00,0x00,0x00 , 0x00,0x00,0x00,0x00,0x00, _ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, _ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 , 0x00, _ 0x22,0xFB, 0x22,0x1B, 0x00,0x00,0x00,0x00,0x00,0x00) HÖG Eink_CS1 retur '========================= ============================================== uppdateraSkärm: CommandByte = 0x20: Gosub writeComm Gosub closeBump Paus 2000 return '============================================== ====================== closeBump: CommandByte = 0x22: Gosub writeComm DataByte = 0x03: Gosub writeData CommandByte = 0x20: Gosub writeComm return '====== ===================================================== ========= #rem Xs --> X startadress 0 ~ 17 Xe --> X slutadress 0 ~ 17 Ys --> Y startadress 0 ~ 171 Ye --> Y slutadress 0 ~ 171 #endrem setPositionXY: LÅG Eink_CS1 LÅG Eink_DC hspiout (0x44) 'sätt RAM x adress start / slut kommando HÖG Eink_DC hspiout (Xs, Xe) LÅG Eink_DC hspiout (0x45)' ställ RAM y adress start / slut kommando HÖG Eink_DC hsput , Ye) LOW Eink_DC hspiout (0x4E) 'ställer in RAM x adressantal till Xs HIGH Eink_DC hspiout (Xs)
LOW Eink_DC hspiout (0x4F) 'set RAM y address count to Ys HIGH Eink_DC hspiout (Ys) HIGH Eink_CS1 return' ============================= ======================================== #rem-tecken i Eink-skärmen: x: X-startadressen, X-värdet kan vara 0 till 14; y: Y-startadressen, Y vlue kan vara 171 till 7; charater diplay erea är från x till x + 3 i X-position och från y till y-7 i Y-position unicode_char: teckenmaskinkoden * / tomrum E_ink :: displayChar (INT8U x, INT8U y, INT16U unicode_Char) {INT16U i ; getCharMatrixData (unicode_Char); converCharMatrixData (); setPositionXY (x, x + 3, y, y-7); skrivkomma (0x11); / * kommando för datainmatningsläge * / skrivdata (0x05); / * ställ in Y-läge: X-adress är steg och y-adress minskning * / skrivkomm (0x24); för (i = 0; i<32; i ++) {writeData (matrixdata_conver [i]); }} #endrem displayChar: 'Gör adress till karaktär i ROM Char16 = Char - 0x20 * 16' Återställ skrapbladspekaren ptr = 0 'Få 16 bytes teckendata från ROM till skrapblocket LOW GT_CS2 hspiout (0x03,0, Char16Hi, Char16Lo) (@ptrinc, @ptrinc, @ptrinc, @ ptrinc, @ ptrinc, @ptrinc, @ptrinc, @ptrinc, _ @ptrinc, @ptrinc, @ptrinc, @ ptrinc, @ ptrinc, @ptrinc, @ptrinc) HÖG GT_CS2 #rem sertxd ("chardata", cr, lf) ptr = 0 sertxd (Char, "", # @ ptrinc, ",", # @ ptrinc, ",", # @ ptrinc, ",", # @ ptrinc, ",", # @ ptrinc, ",", # @ ptrinc, ",", # @ ptrinc, ",", # @ ptrinc, ",", _ # @ ptrinc, ",", # @ ptrinc , ",", # @ ptrinc, ",", # @ ptrinc, ",", # @ ptrinc, ",", # @ ptrinc, ",", # @ ptrinc, ",", # @ ptrinc, cr , lf) för ptr = 0 till 15 b0 = @ptr sertxd (# bit7, # bit6, # bit5, # bit4, # bit3, # bit2, # bit1, # bit0, cr, lf) nästa # endrem 'Konvertera databytes i två för i = 0 till 7
ptr = i 'Få en byte b0 = @ptr' original i b0, resultera i w0 - Tack till hippy! b1 = b0 | $ 0F: Läs b1, b1 b0 = b0 | $ F0: Läs b0, b0 ptr = i + 16: @ptr = inv b0 ptr = i + 24: @ptr = inv b1 nästa i för i = 8 till 15 ptr = i 'Få en enda byte b0 = @ptr' original i b0, resultera i w0 - Tack till hippy! b1 = b0 | $ 0F: Läs b1, b1 b0 = b0 | $ F0: Läs b0, b0 ptr = i + 24: @ptr = inv b0 ptr = i + 32: @ptr = inv b1 nästa i Xe = Xs + 3 Ye = Ys - 7 Gosub setPositionXY CommandByte = 0x11: Gosub writeComm ' / * kommando för datainmatningsläge * / DataByte = 0x05: Gosub skrivData '/ * ställ in Y-läge: X-adress är steg och y-adressminskning * / CommandByte = 0x24: Gosub skrivkomm. HÖG Eink_DC LÅG @ptr) nästa HÖG Eink_CS1-retur
Det finns egentligen bara två aktiva marker på skölden, en tecken-ROM och e-bläckdrivrutinen.
Koden läser ROM för att hämta bitmönstren, ordna om bitarna och skickar sedan till E-ink-drivrutinen.
Jag kunde inte hitta någon tillverkares namn på själva E-ink-displayen, om inte tillverkaren är kallas "Bra display"!. (Det här är de enda orden på baksidan och ett artikelnummer GDE021A1) (EDIT: Jag googlade bara artikelnumret igen, och den här gången hittade det tillverkaren. Det är bra display!)
Mina tankar är att detta är perfekt för rätt applikation, jag behöver bara hitta den applikationen.