Bonjour à vous, je débute totalement dans l'univers Arduino et C, et je galére un peu à faire marcher un LCD Samsung 0282A basé sur un Chip M50530.
J'ai bien trouvé la librairie du M50530 qui a l'air de marcher sur un Arduino UNO, mais que je n'arrive pas à adapter au Arduino Mega, je pense que c'est une question de port qui ne sont pas les méme sur les deux cartes arduino cité, mais bon comme je débute vraiment je ne sais pas comment adapter le code pour que celui ci fonctionne sur le Atmega 2560, mon soucis viendrait donc de ce bout de code:
// Data and Control signals can be connected to different ports!
// data port, LCD signals DB4-DB7 have to be connected to P0-P3
#define LCDDATAPORT PORTB
#define LCDDATADIR DDRB
#define LCDDATAPIN PINB// control port, LCD signals RW, EX, I/OC1, I/OC2
#define LCDCTRLPORT PORTD
#define LCDCTRLDIR DDRD//#define LCDCTRLPIN PIND
#define LCDPIN_RW 4
#define LCDPIN_IOC1 7
#define LCDPIN_IOC2 5
#define LCDPIN_EX 6
Mes questions sont donc comment brancher l'Afficheur LCD sur l'arduino Mega?, qu'elles sont les changements à effectuer dans le bout de code pour que celui ci soit compatible?, et comment avez vous fait pour les définir?
Vous remerciant par avance de vos éventuelles réponses.
Je vous joint:
le M50530.h
#ifndef M50530_H
#define M50530_H
#include <avr/io.h>
// Data and Control signals can be connected to different ports!
// data port, LCD signals DB4-DB7 have to be connected to P0-P3
#define LCDDATAPORT PORTB
#define LCDDATADIR DDRB
#define LCDDATAPIN PINB
// control port, LCD signals RW, EX, I/OC1, I/OC2
#define LCDCTRLPORT PORTD
#define LCDCTRLDIR DDRD
//#define LCDCTRLPIN PIND
#define LCDPIN_RW 4
#define LCDPIN_IOC1 7
#define LCDPIN_IOC2 5
#define LCDPIN_EX 6
// display commands
#define LCD_CMD_SETFUNCTIONMODE 0xc0 // SF
#define LCD_CMD_SETENTRYMODE 0x40 // SE
#define LCD_CMD_SETDISPLAYMODE 0x20 // SD
#define LCD_CMD_SHIFTCURDISPADDRESS 0x10 // MA
#define LCD_CMD_SETUNDERLINEMODE 0x0C // SU
#define LCD_CMD_WRITERAMUNDERLINEBIT 0x08 // WU
#define LCD_CMD_SETBLINKINGFREQUENCY 0x04 // SB
#define LCD_CMD_CURSORHOMESTARTADDR 0x03 // MH
#define LCD_CMD_CLEARCURSORDATAADDRHOME 0x01 // CH
#define LCD_CMD_NOOPERATION 0x00 // NOP
// SF - Set Function Mode constants
#define sfIO8BIT 0x20 // bit 5
#define sfIO4BIT 0x00
#define sfFont5x8 0x10 // bit 4
#define sfFont5x12 0x00
// SD - Set Display Mode constants
#define dmDisplayOn 0x10
//#define dmDisplayOn 16
#define dmCursorOn 0x08
#define dmUnderline 0x04
#define dmCursorBlink 0x02
#define dmCharacterBlink 0x01
// SU - Set Underline Mode constants
#define suSetUnderline 0x03
#define suResetUnderline 0x02
#define suNoUnderline 0x00
// SB - Set Blinking Frequency constants
#define sbSlow 0x00
#define sbNormal 0x01
#define sbFast 0x02
#define sbFastest 0x03
// SE - Set Entry Mode constants
// base definitions cursor
#define LCD_EM_CursorRead 0x08
#define LCD_EM_CursorWrite 0x10
#define LCD_EM_CursorIncrement 0x00
#define LCD_EM_CursorDecrement 0x20
// base definitions display
#define LCD_EM_DisplayRead 0x01
#define LCD_EM_DisplayWrite 0x02
#define LCD_EM_DisplayIncrement 0x00
#define LCD_EM_DisplayDecrement 0x04
// constants for cursor
#define emCursorNoChange 0x00
#define emCursorIncRead LCD_EM_CursorIncrement | LCD_EM_CursorRead
#define emCursorIncWrite LCD_EM_CursorIncrement | LCD_EM_CursorWrite
#define emCursorIncReadWrite LCD_EM_CursorIncrement | LCD_EM_CursorRead | LCD_EM_CursorWrite
#define emCursorDecRead LCD_EM_CursorDecrement | LCD_EM_CursorRead
#define emCursorDecWrite LCD_EM_CursorDecrement | LCD_EM_CursorWrite
#define emCursorDecReadWrite LCD_EM_CursorDecrement | LCD_EM_CursorRead | LCD_EM_CursorWrite
// constants for display start address
#define emDisplayNoChange 0x00
#define emDisplayIncRead LCD_EM_DisplayIncrement | LCD_EM_DisplayRead
#define emDisplayIncWrite LCD_EM_DisplayIncrement | LCD_EM_DisplayWrite
#define emDisplayIncReadWrite LCD_EM_DisplayIncrement | LCD_EM_DisplayRead | LCD_EM_DisplayWrite
#define emDisplayDecRead LCD_EM_DisplayDecrement | LCD_EM_DisplayRead
#define emDisplayDecWrite LCD_EM_DisplayDecrement | LCD_EM_DisplayWrite
#define emDisplayDecReadWrite LCD_EM_DisplayDecrement | LCD_EM_DisplayRead | LCD_EM_DisplayWrite
extern int LCDIsBusy(void);
extern void LCDSend(unsigned char AControl, unsigned char AData);
extern char LCDInit(void);
extern void LCDSetCursorPos(const unsigned char y, const unsigned char x);
extern const char LCDWrite(const char * c);
extern void LCDWritePGM(const char * c);
// schreibt das übergebene Zeichen an die aktuelle Cursor-Position
#define LCDWriteChar(c) LCDSend(_BV(LCDPIN_IOC2), c)
// setzt den Display-Modus
// man verwende die oben deklarierten Konstanten ;)
#define LCDSetDisplayMode(mode) LCDSend(0, mode | 32)
#define LCDSetEntryMode(mode) LCDSend(0, mode)
// setzt den Cursor an die angegebene Adresse
//#define LCDSetCursorAddress(address) LCDSend((1<<LCDPIN_IOC1) | (1<<LCDPIN_IOC2), address)
#define cls(void) LCDSend(0, LCD_CMD_CLEARCURSORDATAADDRHOME);
#endif