LCD programmable
-
En fait si ! On en trouve encore des cartes RS232 neuves, pour port horloge :
http://www.vesalia.de/e_silvsurf%5B7330%5D.htm
http://amigakit.leamancomputing.com/catalog/product_info.php?products_id=638Voici la chaine de connexion que je vais tenter :
A1200 Clockport ==> SilverSurfer ==> Câble RS232 ==> LCD avec interface Série.
A priori, c’est possible aussi comme çà :
A1200 Clockport ==> RapidRoad ==> Câble USB ==> LCD avec interface USB.
Pour le LCD Série ou USB, il y a celui-là chez Adafruit, ou Lextronic en France :
http://www.adafruit.com/products/782
http://www.lextronic.fr/P30186-afficheur-serie-2-x-16-caracteres.htmlBon cà fait un peu de bazard dans le mildeux mais pas tant que cà, les cartes étant relativement compactes. L’idéal serait toujours une connexion directe au clockport. Le LCD avec Backplate Serial n’a besoin que de 3 fils : 5v, Masse, et un seul fil pour les datas (envoi de caractères ASCII ou commande 0xFE + Arg). Un seul fil pour les datas, le clockport peut peut-être gérer cà directement. Mais n’étant pas expert, je me lance dans une solution à priori standard. On verra bien :-).
A600 Rev 1.5 + Vampire 600 V2-128.
A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.Ca avance 🙂
. Silver Surfer commandé via AmiBay pour 16€ (fdp inclus).
. LCD RGB Série commandé via Lextronic pour 35,40€ (ttc + fdp).Bon ok, cà représente un certain coût.
Mais maintenant c’est fait, y’a plus qu’à attendre 🙂Coté software,
Il me faudra installer le pilote de la Silver Surfer :
http://wiki.icomp.de/wiki/SilversurferJe testerai d’abord avec Term pour voir si tout marche bien :
http://aminet.net/package/comm/term/TermEn principe, c’est tout bête, chaque caractère saisi + envoi devrait s’afficher sur le LCD.
Puis, je testerai avec HippoPlayer + RxSerial :
http://aminet.net/package/mus/play/hippoplayer
http://aminet.net/package/util/rexx/rxserialEt si tout cà marche nickel, alors je pourrai vraiment faire joujou avec en C.
A600 Rev 1.5 + Vampire 600 V2-128.
A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.Merci pour vos retours les gars.
Donc oui, çà confirme que çà m’inquiète un peu (rien de grave, au pire je m’en servirai sur mon PC et puis çà coûte pas un bras non plus).
Je viens de recevoir aujourd’hui mon afficheur LCD 🙂
en kit par contre, il faut le souder soi-même à la carte USB/Serial.C’est facile qu’ils disent sur la notice. Ouais, mais moi qui n’ai jamais fait la moindre soudure de ma vie, je vais avoir quelques gouttes de sueurs 🙂 mais bon çà va le faire hein.
J’attends toujours ma Silver Surfer…
A600 Rev 1.5 + Vampire 600 V2-128.
A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.Petit up. J’ai reçu la Silver Surfer, pas encore testée.
Le LCD fonctionne à merveille. J’ai soudé l’écran à l’interface série chez un pote qui a du matos. Çà marche nickel en USB sur mon PC. J’ai facilement pu le programmer en faisant une petite include pour les commandes spéciales en PureBasic (comme quoi je maintiens que c’est un formidable langage pour faire des tests, rapidement).
J’ai aussi pu le tester en série sur un Arduino UNO et sur un MEGA (toujours chez mon pote), çà c’est génial aussi. On choisit sur quel Pin on branche le fil de Data (en plus du 5V et de la masse), et çà ce code facilement, en C simplifié. On injecte le code et roule ma poule. Je suis assez séduit par ce qu’on peut faire (facilement) avec un Arduino.
Sur mon Amiga çà va être une autre paire de manche par contre…
A600 Rev 1.5 + Vampire 600 V2-128.
A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.Voici l’include PureBasic si çà intéresse quelqu’un un jour :
;======================================================= ;== HD44780 LCD Display ;== flype, 2015 ;======================================================= DeclareModule LCD ; CONSTANTS Enumeration 0 #LCD_AUTOSCROLL_ON = $51 #LCD_AUTOSCROLL_OFF = $52 #LCD_BRIGHTNESS = $98 #LCD_BRIGHTNESS2 = $99 #LCD_COLOR = $D0 #LCD_COMMAND = $FE #LCD_CONTRAST = $50 #LCD_CONTRAST2 = $91 #LCD_CURSOR_HOME = $48 #LCD_CURSOR_BACK = $4C #LCD_CURSOR_FORWARD = $4D #LCD_CURSOR_POSITION = $47 #LCD_CURSOR_ON = $53 #LCD_CURSOR_OFF = $54 #LCD_CUSTOM_CHAR = $4E #LCD_CUSTOM_CHAR_LOAD = $C0 #LCD_CUSTOM_CHAR_SAVE = $C1 #LCD_DISPLAY_CLEAR = $58 #LCD_DISPLAY_ON = $42 #LCD_DISPLAY_OFF = $46 #LCD_SIZE = $D1 #LCD_SPLASH_SCREEN = $40 #LCD_UNDERLINE_ON = $4A #LCD_UNDERLINE_OFF = $4B EndEnumeration ; FUNCTIONS Declare AutoScroll(OnOff) Declare Blink(OnOff) Declare Brightness(Value.b) Declare Clear() Declare Close() Declare Color(Value.l) Declare Contrast(Value.b) Declare Display(OnOff) Declare Home() Declare Open(Name.s) Declare Position(Column.b, Row.b) Declare Write(Text.s) Declare WriteAt(Column.b, Row.b, Text.s) EndDeclareModule ;======================================================= Module LCD ;===================================================== ;== GLOBALS ;===================================================== Global port = 0 ;===================================================== ;== PRIVATES ;===================================================== Procedure SendByte(Value.b) WriteSerialPortData(port, @Value, 1) EndProcedure Procedure SendCommand(Value.b) SendByte(#LCD_COMMAND) SendByte(Value) EndProcedure Procedure SendString(Text.s) WriteSerialPortString(port, Text, #PB_Ascii) EndProcedure ;===================================================== ;== PUBLICS ;===================================================== Procedure AutoScroll(OnOff) If OnOff SendCommand(#LCD_AUTOSCROLL_ON) Else SendCommand(#LCD_AUTOSCROLL_OFF) EndIf EndProcedure Procedure Blink(OnOff) If OnOff SendCommand(#LCD_CURSOR_ON) Else SendCommand(#LCD_CURSOR_OFF) EndIf EndProcedure Procedure Brightness(Value.b) SendCommand(#LCD_BRIGHTNESS) SendByte(Value) EndProcedure Procedure Clear() SendCommand(#LCD_DISPLAY_CLEAR) EndProcedure Procedure Close() CloseSerialPort(port) EndProcedure Procedure Color(Value.l) SendCommand(#LCD_COLOR) SendByte(Red(Value)) SendByte(Green(Value)) SendByte(Blue(Value)) EndProcedure Procedure Contrast(Value.b) SendCommand(#LCD_CONTRAST) SendByte(Value) EndProcedure Procedure Display(OnOff) If OnOff SendCommand(#LCD_DISPLAY_ON) SendByte(0) Else SendCommand(#LCD_DISPLAY_OFF) EndIf EndProcedure Procedure Home() SendCommand(#LCD_CURSOR_HOME) EndProcedure Procedure Open(Name.s) port = OpenSerialPort(#PB_Any,Name,9600,#PB_SerialPort_NoParity,8,1,#PB_SerialPort_NoHandshake,1024,1024) ProcedureReturn port EndProcedure Procedure Position(Column.b, Row.b) SendCommand(#LCD_CURSOR_POSITION) SendByte(Column) SendByte(Row) EndProcedure Procedure Write(Text.s) SendString(Text) EndProcedure Procedure WriteAt(Column.b, Row.b, Text.s) LCD::Position(Column, Row) SendString(Text) EndProcedure EndModule ;=======================================================
Ce n’est pas encore exhaustif car je pourrai aussi ajouter des fonctions pour gérer (générer) des caractères spéciaux.
A600 Rev 1.5 + Vampire 600 V2-128.
A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.Et un petit exemple d’utilisation – une simple horloge :
IncludeFile "HD44780.pbi" If LCD::Open("COM3") LCD::Display(1) LCD::Color(#Red) LCD::Home() LCD::Clear() If OpenWindow(0, 10, 10, 100, 50, "LCD") Repeat LCD::WriteAt(4, 1, FormatDate("%dd/%mm/%yyyy", Date())) LCD::WriteAt(5, 2, FormatDate("%hh:%ii:%ss", Date())) Until WaitWindowEvent(1000) = #PB_Event_CloseWindow CloseWindow(0) EndIf LCD::Display(0) LCD::Close() EndIf
A600 Rev 1.5 + Vampire 600 V2-128.
A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.Et un petit player de mods :
IncludeFile "HD44780.pbi" Global exit.l = #False InitSound() ;======================================================= Procedure update(music) Protected row, pos, startdate = Date() Protected fileName.s = "AmigaModules\ProjectX_intro.mod" Protected filePart.s = GetFilePart(fileName) Protected filePartLen = Len(fileName) Protected scrollIndex = 1 If LoadMusic(0, fileName) PlayMusic(0) fileName = ReplaceString(fileName, ":", "_") fileName = ReplaceString(fileName, "/", "_") fileName = ReplaceString(fileName, "\", "_") LCD::WriteAt(1, 2, "000/000") While exit = #False LCD::WriteAt(1, 1, LSet(Mid(fileName, scrollIndex, filePartLen - scrollIndex), 16, " ")) LCD::WriteAt(9, 2, FormatDate("%hh:%ii:%ss", Date()-startdate)) If pos <> GetMusicPosition(music) LCD::WriteAt(1, 2, RSet(Str(pos), 3, "0")) pos = GetMusicPosition(music) EndIf If row <> GetMusicRow(music) LCD::WriteAt(5, 2, RSet(Str(row), 3, "0")) row = GetMusicRow(music) EndIf Delay(200) scrollIndex + 1 If scrollIndex > filePartLen scrollIndex = 1 EndIf Wend EndIf EndProcedure ;======================================================= If LCD::Open("COM3") LCD::Display(1) LCD::Color(#Red) LCD::Home() LCD::Clear() If OpenWindow(0, 10, 10, 100, 50, "LCD") Thread0 = CreateThread(@update(), 0) Repeat Until WaitWindowEvent() = #PB_Event_CloseWindow CloseWindow(0) exit = #True EndIf WaitThread(Thread0) LCD::Display(0) LCD::Close() EndIf
A600 Rev 1.5 + Vampire 600 V2-128.
A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.AdminMerci, je viens de recevoir le mien aussi (LCD bleuté).
Je vais tenter direct depuis le port horloge du 1200 et au pire je ferais comme toi depuis un port série ou depuis le port //.
Par contre, je vais tenter de bidouiller en C 😉
Aucun intérêt ou presque (le seul intérêt est pédagogique) de le faire sur un PCul ou un arduino puisque cela à déjà été fait des dizaines de milliers de fois !
Sur PC et Arduino, c’est clair que je n’ai pas inventé l’eau chaude 🙂 (à part l’include purebasic, finger in the nose).
Pour le clockport, à priori çà devrait le faire mais il faut une dizaine de fils et un or-gate sur un des fils. Il faut que je retrouve une discussion intéressante à ce sujet.
A600 Rev 1.5 + Vampire 600 V2-128.
A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.Selon la doc de l’HD44780 :
Cliquer pour accéder à HD44780.pdf
Page 40 ==> Explique la séquence d’initialisation pour écrire du texte sur le LCD
Concernant la connectique :
HD44780 ==> Amiga Clockport ---------------------------------------------------- RS (Register Select) ==> A2 (Address Bus Bit 2) RW (Read/Write) ==> GND (Ground) EN (Enable/Clock) ==> IO_W + SPARE_CS (IO Write) D0 (Data Bit 0) ==> Data Bit 0 D1 (Data Bit 1) ==> Data Bit 1 D2 (Data Bit 2) ==> Data Bit 2 D3 (Data Bit 3) ==> Data Bit 3 D4 (Data Bit 4) ==> Data Bit 4 D5 (Data Bit 5) ==> Data Bit 5 D6 (Data Bit 6) ==> Data Bit 6 D7 (Data Bit 7) ==> Data Bit 7
Remarque importante :
IO_W est pour tout type de signals. Il faut donc en principe un Logic Gate.
On a besoin d’un Or-Gate entre IO_W et SPACE_CS et le connecter à EN du HD44780.
Pour le Or-Gate, on doit pouvoir faire comme çà :
http://hyperphysics.phy-astr.gsu.edu/hbase/electronic/ietron/dior.gifCoté Amiga 1200, en C ou ASM,
Le Clockport est accessible sur cette plage d’adresses :
De $D80000 à $D8FFFF$D80000 ==> HD44780 Instruction Register $D80004 ==> HD44780 Data Register
A600 Rev 1.5 + Vampire 600 V2-128.
A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.Il y aussi un projet intéressant et récent d’interface Clockport / I2C sur le forum de la communauté Amiga polonaise :
Cliquer pour accéder à akuhei.pdf
http://www.ppa.pl/forum/elektronika/33082/adapter-i2c-na-clockport#m482007
A600 Rev 1.5 + Vampire 600 V2-128.
A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Matériel › LCD programmable