LCD programmable

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

  • flype

    • Messages : 1097
    #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

    • Messages : 1097
    #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

    • Messages : 1097
    #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

    • Messages : 2382
    #241311

    Voici une réponse claire:

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

     

    Ulthar

    • Messages : 115
    #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

    • Messages : 2382
    #241315

    Il existe des pcb avec puce max232 pour pas cher

    flype

    • Messages : 1097
    #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

    • Messages : 1097
    #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

    • Messages : 1097
    #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

    • Messages : 1097
    #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

    • Messages : 1097
    #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

    • Messages : 4724
    #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

    • Messages : 1097
    #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

    • Messages : 1097
    #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

    • Messages : 1097
    #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