User Tools

Site Tools


pii2clcd
import smbus, time
 
bus = smbus.SMBus(1)            # otwarcie szyny i2c numer 1                                                                                                            
addr = 0x38                     # adres PCF8576 na szynie i2c                                                                                                           
 
bcd_to_7seg = {
    0: 1 << 1 | 1 << 2 | 1 << 3 | 1 << 5 | 1 << 6 | 1 << 7,
    1: 1 << 1 | 1 << 5,
    2: 1 << 2 | 1 << 1 | 1 << 4 | 1 << 7 | 1 << 6,
    3: 1 << 2 | 1 << 1 | 1 << 4 | 1 << 5 | 1 << 6,
    4: 1 << 3 | 1 << 4 | 1 << 1 | 1 << 5,
    5: 1 << 2 | 1 << 3 | 1 << 4 | 1 << 5 | 1 << 6,
    6: 1 << 2 | 1 << 3 | 1 << 5 | 1 << 6 | 1 << 7 | 1 << 4,
    7: 1 << 2 | 1 << 1 | 1 << 5,
    8: 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 5 | 1 << 6 | 1 << 7,
    9: 1 << 1 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 6 | 1 << 5,
}
 
bus.write_byte(addr, int('11011101', 2)) # mode-set                                                                                                                     
bus.write_byte(addr, int('11100000', 2)) # device-select                                                                                                                
 
for i in range(10):
    bus.write_i2c_block_data(addr, 0, [bcd_to_7seg[i], bcd_to_7seg[i], bcd_to_7seg[i], 0])
    time.sleep(1)
 
# wyłaczenie wyświetlacza                                                                                                                                               
bus.write_i2c_block_data(addr, 0, [0, 0, 0, 0])

Często zdarzały się błędy transmisji i żeby od nowa mogła działać należało wykonać komende device-select bo bez tego PCF8576 nie chciał odpowiadać na dane.

update: ten sam PCF8576 bez problemu współpracuje z PICem, gdzie i2c zrobiłem softwareowo (zegar). Być może szybkość transmisji z rpi była za szybka?

pii2clcd.txt · Last modified: 2016/07/18 15:19 by dmz