Copie d'ecran GLCD vers SDcard station easypic 3
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Copie d'ecran GLCD vers SDcard station easypic 3



  1. #1
    invite3d33f9e2

    Copie d'ecran GLCD vers SDcard station easypic 3


    ------

    Voila presque tous est dans le titre.
    Je bosse sur un 16f876 avec une station easypic3 et un compilateur microbasic.
    Mon programme donne ceci sur un ecran graphique lcd:

    Date :15:06:2006
    Heure:18H35M25S
    Accés:245896

    Je voudrais savoir s'il existe un moyen de copier simplement le contenu de mon ecran vers une SDcard au format texte.

    Merci d'avance pour votre aide.

    -----

  2. #2
    umfred

    Re : Copie d'ecran GLCD vers SDcard station easypic 3

    Il suffit d'aller lire dans les adresses de l'affichage (la DDRAM normalement), tu récupèrera les caractère ascii affichés, ensuite il faut créer une structure de fichier texte sur la SDcard, qu'il faudra remplir avec les caractères récupérés sur l'affichage.

  3. #3
    umfred

    Re : Copie d'ecran GLCD vers SDcard station easypic 3

    Pour l'interfacage avec la SD card tu peux peut-être t'inspirer cette note d'application, les sources (sdcard.c et sdcard.h)
    sont installés dans 'C:\MCHPMSD\MSD\system\sdcard' après avoir lancé le fichier contenu dans le zip.

  4. #4
    invite3d33f9e2

    Re : Copie d'ecran GLCD vers SDcard station easypic 3

    Salut Umfred et merci pour ton aide.
    Je vais tester tous ça j'ai aussi ce code mais il est pour un 18f452 et je bosse sur un 16f876
    mais je pense qu'il doit etre assez facilement adptable.

    Code:
    program SD_test
    
    dim data                 as  byte[512]
        serial_buffer        as  byte[2]
        data_for_registers   as  byte[16]
        received_character, serial_pointer                as  byte
        first_byte, second_byte, third_byte, fourth_byte  as  byte
        i, px, k        as  word
        sector_address  as  longint
        we  as  byte
    
    sub procedure printhex(dim ix  as  byte)
    dim hix, lox  as  byte
      hix = ix and 0xF0               ' High nibble
      hix = hix >> 4
      hix = hix + $30
      if hix > $39  then
      hix= hix + 7
      end if
      lox = (ix and 0x0F) + $30       ' Low nibble
      if lox > $39  then
      lox= lox + 7
      end if
      USART_Write(hix)
      USART_Write(lox)
    end sub
    
    sub procedure USART_Out(dim byref text as char[40])
    dim im, jm as byte
      im = 0
      jm = text[0]
      while jm <> 0
           USART_Write(jm)
           inc(im)
           jm = text[im]
      wend
    end sub
    
    sub procedure USART_Out_Ln(dim byref text as char[40])
    dim im, jm as  byte
    
      im = 0
      jm = text[0]
      while jm <> 0
           USART_Write(jm)
           inc(im)
           jm = text[im]
      wend
      USART_Write(13)  ' LF
      USART_Write(10)  ' CR
    end sub
    
    main:
      PORTC =0
      USART_Init(19200)
      TRISC = $D3
      USART_Out_Ln("PIC-Started") ' see if PIC is there
    
      ' Beffore all, we must initialise a SD card
      i = SD_Init(PORTC,2)
    
      if i = 0 then
        USART_Out_Ln("SD Init-OK")     ' write if card is plug-in
      else
        USART_Out_Ln("SD Init-Error") ' there is no card
      end if
    
      for i = 0 to 511
       data[i] = "r" ' Fill SD buffer with same characters
      next i
      i = SD_Write_Sector(55, data)
    
      if i = 0 then  Usart_Out_Ln("Write-OK")
               else  Usart_Out_Ln("Write-Error")
               end if
      ' Reading of CID and CSD register on SD card.....
    
        i = SD_Read_CID(data_for_registers)
        if i = 0 then
                  for k=0 to 15
                    printhex(data_for_registers[k])
                    if (k <> 15) then USART_Write("-")
                    end if
                  next k
                  USART_Write(13)
           else
              Usart_Out_Ln("CID-Error")
           end if
        USART_Write(13)
    
        i = SD_Read_CSD(data_for_registers)
        if i = 0 then
              for k=0 to 15
                  printhex(data_for_registers[k])
                  if (k <> 15) then USART_Write("-")
                  end if
              next k  
              USART_Write(13)
              USART_Write(10)
    
        else
          Usart_Out("CSD-Error")
        end if
      ' Variables initialisation
      serial_pointer = 0
      LCD_Cmd(LCD_SECOND_ROW)
    
      ' MAIN loop
      while true
        if USART_Data_Ready<>0 then
          serial_buffer[serial_pointer] = USART_Read()    ' Get the received character
          inc(serial_pointer)
          if (serial_pointer >=2) then
            serial_pointer = 0
            ' geting 4 byte to colect longint value for long address!
            if (serial_buffer[0] = "S") then first_byte  = serial_buffer[1]
            end if
            if (serial_buffer[0] = "s") then second_byte = serial_buffer[1]
            end if
            if (serial_buffer[0] = "E") then third_byte  = serial_buffer[1]
            end if
            if (serial_buffer[0] = "e") then fourth_byte = serial_buffer[1]
            end if
            if (serial_buffer[0] = "R") then
              if (serial_buffer[1] = "r") then
                sector_address = (first_byte << 24) or (second_byte << 16) or
                                  (third_byte << 8)  or fourth_byte
                i = SD_Read_Sector(sector_address,data)
                if i = 0 then
                  for k=0 to 511
                    printhex(data[k])
                    USART_Write(" ")
                    if word((k+1) mod 16)=0 then
                      USART_Write(" ")
                      for px=(k-15) to k
                        we=data[px]
                        if (we > 33) and (we < 126) then
                          USART_Write(data[px])
                        else
                          USART_Write(".")
                        end if
                      next px
                      USART_Write(13)
                    end if
                    next k
                  USART_Write(13)
                  USART_Write(10)
                else
                   USART_Out("Rd-Error")
                end if   
                USART_Write(13)
                USART_Write(10)
              end if
            end if
              
            if serial_buffer[0] = "W" then
              if serial_buffer[1] = "w" then
                'generate 32-bit sector address
                sector_address = (first_byte << 24) or (second_byte << 16) or
                                  (third_byte << 8)  or fourth_byte
                for k=0 to 511
                  data[k] = received_character  ' fill RAM buffeer with receiving characters
                next k
                i = SD_Write_Sector(sector_address, data)       ' write buffer to SD
                if (i = 0) then  USART_Out_Ln("Wr-OK")
                end if
                if (i = 1) then  USART_Out_Ln("Wr-Sending-Error")
                end if
                if (i = 2) then  USART_Out_Ln("Wr-Writing-Error")
                end if
              end if
            end if
            if serial_buffer[0] = "C" then received_character = serial_buffer[1]
            end if
            
          end if
        end if
     wend
      
      
    end.

  5. A voir en vidéo sur Futura
  6. #5
    umfred

    Re : Copie d'ecran GLCD vers SDcard station easypic 3

    Je pense que oui. il n'y a qu'à s'assurer que les sous programmes soient disponible pour le 16f876, sinon il faudra juste les réécrire (en s'aidant des datasheet des 2 PICs et comparer leur instructions et registres tu devrait pouvoir t'en sortir).

  7. #6
    invite3d33f9e2

    Re : Copie d'ecran GLCD vers SDcard station easypic 3

    J'espere le premiere prog c'est toujours un peu a taton.
    Surtout que j'ai trois prog different a melanger pour arrivé au resutat voulu.
    Aprés ca une fois que le prog fonctionnera (s'il fonctionne un jour ) je dois remplacer le module clavier qui me sers de testeur par le clavier de mon alarme en esparant que ca ne pose pas de probléme pour la centrale, mais bon la je pense pas.
    Je posterais le code bientôt des que je l'aurais complété pour voir si je suis sur le bon chemin et si ça peu servir a quelqu'un ça serais cool.

  8. #7
    invite3d33f9e2

    Re : Copie d'ecran GLCD vers SDcard station easypic 3

    J'ai pensé a metre une memoire 24lc256 a la place de la sdcard.
    Selon vous combien d'infos type:

    Date :15:06:2006
    Heure:18H35M25S
    Accés:245896

    je pourais enregistrer dans ce genre de memoire.
    http://ww1.microchip.com/downloads/e...Doc/21203M.pdf

  9. #8
    umfred

    Re : Copie d'ecran GLCD vers SDcard station easypic 3

    Si il ny'a que les infos dates, heures et codes d'accès en 6 chiffres (ou caractères), il faudrait 12 octets pour coder un enregistrement (ou "écran").
    - 1 octet pour l'heure,
    - 1 octet pour les minutes,
    - 1 octet pour les secondes (est-ce utile?),
    - 1 octet pour la date,
    - 1 octet pour le mois,
    - 1 octet pour l'année (seulement le 06, le 20xx ne sert pas)
    - 1 octet par caractère du code d'accès (donc a priori 6).

    Donc dans la mémoire 24LC256 (qui contient 256k bits soit 32 Ko), on peut y mettre : 32*1024*12= 2730 enregistrements + 8 octets.

    Si tu passe la longueur de l'enregistrement à 16 octets, tu pourra mettre 2048 enregistrements.

    Attention au temps d'écriture entre 2 enregistrements ou commande 'Write', la mémoire stocke les données dans une mémoire tampon de 64 octets avant de les écrire physiquement en interne. Ce cycle d'écriture dure 5 ms maximum, donc je te conseille fortement et par expérience de mettre une temporisation de 5 ou 6 ms après un cycle d'écriture

  10. #9
    invite3d33f9e2

    Re : Copie d'ecran GLCD vers SDcard station easypic 3

    Ok merci beaucoup pour ton aide umfred.
    Il est clair que je vais suprimer les secondes et le 20 de 2006 de toutes manieres 2730 enregistrements suffises largements mais on sais jamais .

Discussions similaires

  1. Copie vinyls vers CD
    Par goel22 dans le forum Matériel - Hardware
    Réponses: 9
    Dernier message: 10/08/2009, 16h17
  2. Copie d'écran
    Par Ravaner dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 10/10/2007, 19h23
  3. copie 33t vers cd
    Par germain54 dans le forum Matériel - Hardware
    Réponses: 23
    Dernier message: 01/07/2007, 13h10
  4. Copie d'écran
    Par pmdec dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 24/06/2006, 15h56
  5. SVP comment faire une copie d'écran d'une liste d'options
    Par roro123 dans le forum Logiciel - Software - Open Source
    Réponses: 9
    Dernier message: 14/05/2006, 09h40
Découvrez nos comparatifs produits sur l'informatique et les technologies.