рдХрд╛рд░рддреВрд╕ рдЬреАрд╡рди рдмрдврд╝рд╛рдПрдБ

рд▓реЗрдЬрд░ рдкреНрд░рд┐рдВрдЯрд░ рдХреЗ рдХреБрдЫ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛рд░рддреВрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдЕрдк-рдЯреВ-рдбреЗрдЯ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП EEPROM рдореЗрдореЛрд░реА рдЪрд┐рдкреНрд╕ рдХреЛ рдХрд╛рд░рддреВрд╕ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рд╕реИрдорд╕рдВрдЧ MLT-D104X (700 рдкреГрд╖реНрда) рдпрд╛ MLT-D104S (1500 рдкреГрд╖реНрда) рдХреЛ рдкреНрд░рд┐рдВрдЯрд░ рдХреЗ рд▓рд┐рдП рдорд╛рдирддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рд╕реИрдорд╕рдВрдЧ ML-1665ред рдЗрди рдХрд╛рд░рддреВрд╕реЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред I2C рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ EEPROM рдЪрд┐рдк рдХрд╛рд░рддреВрд╕ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ... рдХрд╛рд░рддреВрд╕ рдХрд╛рдлреА рдорд╣рдВрдЧреЗ рд╣реИрдВ (рд▓рдЧрднрдЧ $ 70), рдЗрд╕рд▓рд┐рдП рдХрд╛рд░рддреВрд╕ рдХреЛ рдПрдХ рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд╕реЗрд╡рд╛ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд╣рд╛рдВ рд╡реЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рднрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреГрд╖реНрда рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд░реАрд╕реЗрдЯ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдореАрдЯрд░ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рдИрдВрдзрди рднрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИ! рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ рдХрд┐ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдЦреБрдж рдХреЛ рдХреИрд╕реЗ рд░реАрд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдХреЗрд╡рд▓ рд░рд┐рдлрд┐рд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рд░рддреВрд╕ (рд▓рдЧрднрдЧ 10 рд░реБрдкрдпреЗ рдХреЗ рд▓рд┐рдП) рджрд┐рдпрд╛ рдЬрд╛рдПред

рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:
рдкреНрд░рд┐рдВрдЯрд░ рд╕реИрдорд╕рдВрдЧ ML-1665ред рдХрд╛рд░рддреВрд╕ рд╕реИрдорд╕рдВрдЧ MLT-D104Xред

рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
рдкреЗрдЬ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░реЗрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕рдХреЗ рдХрд╛рдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред

рд╕рдорд╛рдзрд╛рди:
рдЕрдЪрд╛рдирдХ, рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ рдХрд┐ рдЧреНрд░рдореНрдмреЛ рдкрд╛рдИ рд░реЛрдмреЛрдЯреЛрдВ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдмреЛрд░реНрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ!

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЧреНрд░реИрдореНрдмреЛ рдкрд╛рдИ рдмреЛрд░реНрдб рдореЗрдВ I2C рд╕рд╣рд┐рдд рдХрдИ рдорд╛рдирдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдмреЛрд░реНрдб рд╕реНрд╡рдпрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ USB <-> I2C рдХрдирд╡рд░реНрдЯрд░ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдерд╛ - рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд▓рдЧрднрдЧ рдПрдХ рдкреГрд╖реНрда рдХрд╛ рдкрд╛рдаред рдЗрд╕рдореЗрдВ рдкрд╛рдпрдерди GUI рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд╛рд░рддреВрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЫрд╡рд┐

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдХрд╛рд░рддреВрд╕ рдХреЛ I2C рдмрд╕ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдЫрд╡рд┐

рдХрд╛рд░рддреВрд╕ рдкрд░ рд╕рдВрдкрд░реНрдХреЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ ... рдпрд╣ рдмрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдпрджрд┐ рдЙрджреНрджреЗрд╢реНрдп рд╣реИ, рддрд╛рдХрд┐ рд▓реЛрдЧ рдЦреБрдж EEPROM рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ!

рдЫрд╡рд┐

рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрди рдЧрдИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ EEPROM рдЪрд┐рдк рдХреНрдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ Google рдореЗрдВ рдЕрдВрдХрди рдкрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ)ред рдореБрдЭреЗ рд╕рднреА I2C рдкрддреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдерд╛ред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдЪрд┐рдк 25, 30 рдФрд░ 40 рдХреЗ рдкрддреЗ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддреА рд╣реИред рдкрддреЗ 40 рдкрд░, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореЗрдореЛрд░реА рдкреЗрдЬ рдирдВрдмрд░ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ 30 рдкрддреЗ рдкрд░ рдбреЗрдЯрд╛ рд╕реНрд╡рдпрдВ рдирд┐рдХрд▓рд╛ред рдкрд░реАрдХреНрд╖рдг рдкреГрд╖реНрда рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ 2 рдмрд╛рд░ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ рдХрд┐ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╕рдордп рдХреМрди рд╕реЗ рдмрд╛рдЗрдЯреНрд╕ рдмрджрд▓рддреЗ рд╣реИрдВред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрд┐рд╕ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: 4 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рддрд┐ рдЖрдВрдЦ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВред рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЖрд▓рд╕реНрдп рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрднреА рднреА рдЕрднреА рднреА "рд▓рд╛рдЗрд╡" рдХрд╛рд░рддреВрд╕ рдХреЗ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг 700 рдкреГрд╖реНрдареЛрдВ рдХреЗ рдкрд╛рд╕ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░, рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛ рд╕рд╣реЗрдЬреЗ рдЧрдП рдореВрд▓реНрдп рдкрд░ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░реЗрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрд╛рд░рддреВрд╕ рдХреА рдЬрдЧрд╣ рдХреЗ рд▓рд┐рдП рджреЗрд░реА рд╣реЛ рд░рд╣реА рд╣реИ, рдЙрдореНрдореАрдж рд╣реИ, рдЕрд╕реАрдорд┐рдд рд╕рдордп!

Grambo Pi рдмреЛрд░реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб
#include <supply> new ioBuffer[32] read( i2cAddr, chipAddr, cnt ) { new wr[2] wr[0] = chipAddr // IO operation at I2C bus. setLed( 3 ) new res = i2cIo( i2cAddr, wr, 1, ioBuffer, cnt, 500 ) setLed( 0 ) // Operation result. setIo( 1, res ) new i for ( i=0; i<cnt; i++ ) setIo( i+2, ioBuffer[i] ) return res } write( i2cAddr, chipAddr, cnt ) { ioBuffer[0] = chipAddr new i for ( i=0; i<cnt; i++ ) ioBuffer[i+1] = io( i+4 ) // IO operation at I2C bus. setLed( 3 ) new res = i2cIo( i2cAddr, ioBuffer, cnt+1, ioBuffer, 0, 500 ) setLed( 0 ) return res } main() { new led = 0 // Reset command at the very beginning. setIo( 0, 0 ) setI2cEn( 1 ) for ( ;; ) { new i2cAddr new devAddr new cnt new res // Check if read operation? if ( io( 0 ) == 1 ) { i2cAddr = io( 1 ) devAddr = io( 2 ) cnt = io( 3 ) res = read( i2cAddr, devAddr, cnt ) setIo( 1, res ) setIo( 0, 0 ) } // Else check if write operation? else if ( io( 0 ) == 2 ) { i2cAddr = io( 1 ) devAddr = io( 2 ) cnt = io( 3 ) res = write( i2cAddr, devAddr, cnt ) setIo( 1, res ) // Report operation is completed setIo( 0, 0 ) } // Else it is unrecognized and just reset! else setIo( 0, 0 ) // Some delay. msleep( 50 ) // Blinking LED number 1. setLed( led ) if ( led == 0 ) led = 1 else led = 0 // When IO takes place both LEDs should blink. } } 


рдкрд╛рдпрдерди рдЬреАрдпреВрдЖрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрдд рдХреЛрдб
 #!/bin/python import xmlrpclib from Tkinter import * from time import sleep from supplyctrlusb import * # Data obtained with pages count 580 # 16 32 3 255 <183> 254 <122 0 63> 255 <183> 254 51 16 32 3 0 0 0 0 0 0 0 0 0 0 0 8 37 15 232 16 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 28 133 101 101 0 160 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 # Data obtained with pages count 581 # 16 32 3 255 <151> 254 <138 255 201> 255 <151> 254 51 16 32 3 0 0 0 0 0 0 0 0 0 0 0 8 37 15 232 16 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 28 133 101 101 0 160 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 # After zerowing attempt. # 16 32 3 255 124 254 35 255 189 255 124 254 51 16 32 3 0 0 0 0 0 0 0 0 0 0 0 8 37 15 232 16 class Application(Frame): DELAY = 0.1 TRIES = 50 FRAME = 4 def read( self, i2cAddr, devAddr, cnt ): print "read " + str(i2cAddr) + ", " + str(devAddr) + ", " + str(cnt) io = self.io io.setIo( 1, i2cAddr ) io.setIo( 2, devAddr ) io.setIo( 3, cnt ) # Start reading data pp = io.io( 0 ) print "pp = " + str( pp ) io.setIo( 0, 1 ) # Waiting for completion for t in range( self.TRIES ): finished = io.io( 0 ) print "finished = " + str( finished) if ( finished == 0 ): res = io.io( 1 ) print "res = " + str( res ) if res != 0: return (res, []) d = [] for i in range(cnt): v = io.io( 2+i ) d.append( v ) print "data", d return ( res, d ) sleep( self.DELAY ) print "Read timeout" def write( self, i2cAddr, devAddr, data ): io = self.io io.setIo( 1, i2cAddr ) io.setIo( 2, devAddr ) cnt = len( data ) print "write " + str(i2cAddr) + ", " + str(devAddr) + ", " + str(cnt) io.setIo( 3, cnt ) for i in range( cnt ): io.setIo( 4+i, data[i] ) # Start writing data. io.setIo( 0, 2 ) # Waiting for completion for t in range( self.TRIES ): finished = io.io( 0 ) print "finished = " + str( finished) if ( finished == 0 ): res = io.io( 1 ) print "res = " + str( res ) return res sleep( self.DELAY ) print "Write timeout" def readI2c( self ): # Clear output self.text.delete( 1.0, END ) i2cAddr = int( self.i2cAddr.get(), 2 ) # Binary number print "i2cAddr = " + str( i2cAddr ) devAddr = int( self.devAddr.get() ) print "devAddr = " + str( devAddr ) cnt = int( self.bytesCnt.get() ) print "bytesCnt = " + str( cnt ) # Return before real device interaction. #~ return for i in range( 0, cnt, self.FRAME ): res, data = self.read( i2cAddr, devAddr+i, self.FRAME ) if res > 0: print "res = " + str( res ) return for k in range( len( data ) ): self.text.insert( END, str( data[k] ) + " " ) def writeI2c( self ): i2cAddr = int( self.i2cAddr.get(), 2 ) # Binary number print "i2cAddr = " + str( i2cAddr ) devAddr = int( self.devAddr.get() ) print "devAddr = " + str( devAddr ) cnt = int( self.bytesCnt.get() ) print "bytesCnt = " + str( cnt ) data = self.text.get( 1.0, END ) print "data = ", data d = data.split() print "data = ", d data = [] for i in range( len(d) ): data.append( int(d[i]) ) print "data = ", data # Return before executing critical changes. #~ return for i in range( 0, cnt, self.FRAME ): d = [] for k in range( self.FRAME ): d.append( data[i+k] ) res = self.write( i2cAddr, devAddr+i, d ) if res > 0: print "res = " + str( res ) return print "Ready" def toString( self ): stri = self.text.get( 1.0, END ) d = stri.split() stri = "" cnt = len( d ) print "Characters cnt = " + str( cnt ) for i in range( cnt ): ch = chr( int( d[i] ) ) print "ch[" + str( i ) + "] = " + str( ch ) stri += ch print stri def createWidgets(self): self.lblI2cAddr = Label( self, text='I2C addr:' ) self.lblI2cAddr.grid( row=0, column=0, rowspan=1, columnspan=1 ) self.i2cAddr = Entry( self ) self.i2cAddr.insert( 0, "11110" ) self.i2cAddr.grid( row=0, column=1, rowspan=1, columnspan=1 ) self.lblDevAddr = Label( self, text='Dev addr:' ) self.lblDevAddr.grid( row=0, column=2, rowspan=1, columnspan=1 ) self.devAddr = Entry( self ) self.devAddr.insert( 0, "0" ) self.devAddr.grid( row=0, column=3, rowspan=1, columnspan=1 ) self.lblCnt = Label( self, text='Bytes cnt:' ) self.lblCnt.grid( row=0, column=4, rowspan=1, columnspan=1 ) self.bytesCnt = Entry( self ) self.bytesCnt.insert( 0, "128" ) self.bytesCnt.grid( row=0, column=5, rowspan=1, columnspan=1 ) self.i2cReadBtn = Button( self, text='Read I2C' ) self.i2cReadBtn["command"] = self.readI2c self.i2cReadBtn.grid( row=1, column=0, rowspan=1, columnspan=1 ) self.i2cWriteBtn = Button( self, text='Write I2C' ) self.i2cWriteBtn["command"] = self.writeI2c self.i2cWriteBtn.grid( row=1, column=5, rowspan=1, columnspan=1 ) self.text = Text( self ) self.text.grid( row=2, column=0, rowspan=5, columnspan=6 ) self.toTextBtn = Button( self, text = 'To string' ) self.toTextBtn["command"] = self.toString self.toTextBtn.grid( row=8, column = 3 ) def __init__(self, master=None): Frame.__init__(self, master) self.pack() self.createWidgets() self.io = Supply() pp = self.io.io( 0 ) print "initial pp = " + str( pp ) #~ for a in range( 24, 127 ): #~ res, d = self.read( a, 0, 4 ) #~ print " addr = " + str( a ) + ", res = " + str( res ) root = Tk() app = Application( master=root ) app.mainloop() 

Source: https://habr.com/ru/post/In203356/


All Articles