LCD programmable

15 sujets de 31 à 45 (sur un total de 48)

  • flype

      #241182

      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=638

      Voici 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.html

      Bon 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.

      flype

        #241184

        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/Silversurfer

        Je testerai d’abord avec Term pour voir si tout marche bien :
        http://aminet.net/package/comm/term/Term

        En 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/rxserial

        Et 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.

        flype

          #241308

          Quelqu’un sait si il y a une différence entre RS232 et TTL Serial ? Si le terme TTL représente un protocole un peu particulier j’ai peur d’avoir des soucis.

          A600 Rev 1.5 + Vampire 600 V2-128.
          A1200 Rev 1D4 + Blizzard 1230 III/50Mhz + 68882 + 256MB @ 50ns.

          sinisrus

            #241311

            Voici une réponse claire:

            http://www.chicoree.fr/w/Liaison_s%C3%A9rie_TTL

             

            Ulthar

              #241313

              La conversion RS-232 <-> TTL peut se faire avec un simple MAX232, à voir si des schéma simple existe sur internet.

               

              EDIT: Trouvé =>

              sinisrus

                #241315

                Il existe des pcb avec puce max232 pour pas cher

                flype

                  #241588

                  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.

                  flype

                    #242517

                    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.

                    flype

                      #242521

                      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.

                      flype

                        #242522

                        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.

                        flype

                          #242523

                          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.

                          Admin

                          bigdan

                            #242525

                            Merci, 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 !

                            flype

                              #242526

                              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.

                              flype

                                #242529

                                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.gif

                                Coté 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.

                                flype

                                  #242535

                                  Il y aussi un projet intéressant et récent d’interface Clockport / I2C sur le forum de la communauté Amiga polonaise :

                                  interface clockport - i2c

                                  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.

                                15 sujets de 31 à 45 (sur un total de 48)

                                • Vous devez être connecté pour répondre à ce sujet.

                                Forums AmigaOS, MorphOS et AROS Matériel LCD programmable

                                Amiga Impact