OpenAVRc

Bon, je cherche encore la séquence d'init spécifique au 1309 qui me manque. Pour l'instant j'ai trouvé celle du 1306 et ces quelques commandes particulières au 1309 :
//For SSD1309
#define NOP 0xE3
#define SETCMD 0xFD
#define SETCMD_LOCK 0x16
#define SETCMD_UNLOCK 0x12
#define SETGPIO 0xDC
#define SET_LOW_POWER 0xD8

Mais je doute de l’intérêt de cette découverte. Dans un code exploré, il était ajouté un délais delay(40) dans le initReset du 1309.
 
Si ton SSD procède une pin "RST" ou reset, il faut y placer un condo et une résistance pour le faire ce reset ....

Certain on relié cette pin sur la carte Mega aussi mais je ne sais plus ou. C'est dans le forum.
 
Merci Bracame, pour cette piste et le temps passé à m'aider.

j'ai un épilogue à cette histoire depuis 2 minutes. Étonné de ne pas trouver grand chose pour la différence entre les SSD 1309 et 1306, j'ai écrit à mon vendeur oriental.
La réponse reçue ce matin, après un dialogue rendu bizarre par les divers niveaux de traduction avec le chinois, dit que c'est une puce SH1116 !!

Je viens de recompiler avec le SH1106 (ben oui, je n'avais même pas essayé, honte à moi) et, miracle, j'ai un affichage qui me semble normal !!

Bref cet écran de 1.54 pouces est en fait un SH1116 et pas un SSD1309 comme indiqué, et il semble correctement géré par le driver SH1106 du projet. On peut considérer que ma requête est close.
 
je me complète moi-même. Le SH1116 fonctionne PRESQUE normalement avec le driver SH1106. En fait il y a un décalage de 2 pixel de l'écran.

J'ai contourné ça en éditant le driver OpenAVRc/targets/lcd/lcd_sh1106_driver.cpp. Dans le code de void lcdRefreshFast(), j'ai supprimé le "-2" de la commande i2c_writeReg.

Ainsi :
p = displayBuf;
i2c_writeReg(SH1106_ADDRESS, SH1106_DATA, (p-2 + (LCD_W*state)), (LCD_W + 4)); // Send datas ( 888 Khz I2C bus ;-)
lcdSendCommand(SH1106_SETPAGENUMBER | ++state);
i2c_writeReg(SH1106_ADDRESS, SH1106_DATA, (p-2 + (LCD_W*state)), (LCD_W + 4)); // Send datas ( 888 Khz I2C bus ;-)
devient
p = displayBuf;
i2c_writeReg(SH1106_ADDRESS, SH1106_DATA, (p + (LCD_W*state)), (LCD_W + 4)); // Send datas ( 888 Khz I2C bus ;-)
lcdSendCommand(SH1106_SETPAGENUMBER | ++state);
i2c_writeReg(SH1106_ADDRESS, SH1106_DATA, (p + (LCD_W*state)), (LCD_W + 4)); // Send datas ( 888 Khz I2C bus ;-)
et tout rentre dans l'ordre.

Si ça peut servir à d'autres... Bon week-end.
 
Encore un écran "presque" compatible !!!
Heureux que tu sache faire les modifs, on pourrait pas suivre toutes ces version d'écran chinois tous presque "presque" !!!!
Le DIY devient dur à transmettre avec de tels vendeurs et leurs annonces pleine d'erreur.
Bon courage
 
Haut