Atmega8, OLED 4pin, I2c

Předpokládám, že se jedná o OLED displej s řadičem SSD1306.

Vzhledem k tomu, že jsi sem nedal výpis funkce i2c_write_byte, pak předpokládám, že start condition a stop condition řeší právě tahle funkce. To sice zajišťuje přenos dat, ale ne komunikaci s displejem.

Jedna tuhle funkci musíš rozdělit na odesílání Data nebo Command.

I2C komunikaci s displejem (funkci SendCommand) mám vyřešenou takhle :]Start condition/:m]
]I2C Slave adresa zařízení s požadovaným stavem R/W/:m]
]Control byte (0x00) - tedy jestli se bude jednat o data nebo command/:m]
]vlastní byte/:m]
]Stop condition/:m]

Nastavení pracovní oblasti displeje -

ldi r16,SET_COLUMN_ADDRESS ; Set Working Area
rcall i2c_write_byte
ldi r16,0 ; Columns 0 - 127
rcall i2c_write_byte
ldi r16,127
rcall i2c_write_byte
ldi r16,SET_PAGE_ADDRESS
rcall i2c_write_byte
ldi r16,0 ; Rows (Pages) 0 - 7
rcall i2c_write_byte
ldi r16,7
rcall i2c_write_byte

by mělo vypadat nějak takto :

ldi r16,SET_COLUMN_ADDRESS
rcall i2c_write_Command
ldi r16,0x00
rcall i2c_write_Command
ldi r16,0x7F
rcall i2c_write_Command

ldi r16,SET_PAGE_ADDRESS
rcall i2c_write_Command
ldi r16,0x00
rcall i2c_write_Command
ldi r16,0x07
rcall i2c_write_Command

Funkce i2c_write_Command musí nejenom odesílat hodnotu z r16, ale zajišťovat to, co jsem popisoval pro funkci SendCommand.

Jak píšu každýmu. Je potřeba číst datasheety - a to PEČLIVĚ !!!