Fórum témák

» Több friss téma
Fórum » Színes LCD + PIC
 
Témaindító: pici, idő: Feb 19, 2008
Témakörök:
Lapozás: OK   45 / 46
(#) pipi válasza szucsistvan123 hozzászólására (») Ápr 9, 2019 / 1
 
Nem pic, de felhasználhatod forrásként, adaptálhatod picre:
Bővebben: Link
bmp-t, jpg-t tud, vagyis "bármivel" szerkesztheted a képed
(#) szucsistvan123 válasza pipi hozzászólására (») Ápr 9, 2019 /
 
Köszi!

Én valami olyasmit keresnék, ami a mikrokontroller számára előkészített kódot közvetlenül betölti az MPLAB-ba. De ha nagyon nincs más, akkor megpróbálok ebből kihozni valamit!
(#) pipi válasza szucsistvan123 hozzászólására (») Ápr 9, 2019 / 1
 
Ez elég tág fogalom, miből mit akarsz...
Ha pl képfájlból akarsz C forrást akkor pl Bővebben: Link
(#) sdrlab válasza szucsistvan123 hozzászólására (») Ápr 10, 2019 / 1
 
Van a microchip-től egy olyan, hogy Graphics Resource Converter. Pl az MLA része, de talán a harmony-ban is benne van. Az tud ilyet, képeket, fontokat konvertál bináris állománnyá, amit utána használni lehet a programban.
(#) Peppe válasza szucsistvan123 hozzászólására (») Ápr 10, 2019 / 1
 
image2lcd a neked kellő SW.
(#) szucsistvan123 hozzászólása Ápr 10, 2019 /
 
Köszi a válaszokat!
(#) szucsistvan123 hozzászólása Szept 25, 2019 /
 
Üdv!

Van egy 320*480 as ILI9488 TFT-tm, mindenféle kiegészítő panel nélkül. Szeretnék csinálni egy fejlesztőpanelt hozzá, és arra lennék kíváncsi, hogy érdemes-e hozzá tenni flash memóriát? (Ahogy néztem a kiegészítőpaneles kijelzőket ott szinte mindegyiken volt.)
A hozzászólás módosítva: Szept 25, 2019
(#) AZoli hozzászólása Feb 16, 2020 /
 
Sziasztok!

PIC24EP.. használatával hajtok meg RA8875 vezérlős TFT-t.
BMP kép kirajzolásával kapcsolatban lennének kérdéseim.
Sebeség és helytakarékosság miatt csak RGB332 kódolást használnék, viszont nem találok olyan konvertert ami ezt képes lenne megcsinálni a bmp-ből.
Hiába mentem a fáljt képszerkesztőben csak 256 színnek, akkor is color palette-t használ a fáljban. Csinált már valaki ilyet?
(#) benjami válasza AZoli hozzászólására (») Feb 16, 2020 / 1
 
Az st oldaláról (e-mail címes regsztráció után) után letölthetőek a különböző stm32 mikrovezérlőcsaládokhoz tartozó firmware csomagok. Ez tartalmaz egy windows alatt futtatható BmpCvtST.exe nevű programot. Ezzel lehet mindenfajta bitmélységre konvertálni (a 8 bitesek közül választható a 233, 323, 332 változat is) konvertálni, ráadásul C forrásfájlba is tud menteni.
(#) AZoli válasza benjami hozzászólására (») Feb 16, 2020 /
 
Köszönöm a gyors választ, megnéztem a programot, jó kis progi, de nem egészen erre gondoltam. Azt szeretném, ha nem lenne paletta a bmp fájlban, hanem a bittérképben közvetlenül a pixelek színei RGB332 formátumban lennének. Ezt nem tudtam megoldani a BmpCvtST.exe -vel. Vagy valamit rosszul csináltam? Tudnia kéne ezt?
(#) benjami válasza AZoli hozzászólására (») Feb 16, 2020 /
 
Nem tudom te melyik programot nézted, de ez nekem RGB332-nek tünik (a mellékelt képen).
Ha bele is teszi a palettát, a C forrásból könnyen ki tudod törölni.
A hozzászólás módosítva: Feb 16, 2020
(#) AZoli válasza benjami hozzászólására (») Feb 16, 2020 /
 
Igen, ezt használom.
A csatolt képen egy 4x4 pixeles kép van, és ennek a konvertált formája. A kijelölt 16 byte a bittérkép, de ott nem azt látom, amit várnék: 8x 0xE0 (red) és 8x 0xFF (white).

4x4.jpg
    
(#) benjami válasza AZoli hozzászólására (») Feb 16, 2020 / 1
 
Csináltam én is egy próbát a 2x2 pixeles képpel. C fájlként mentve a mellékletben levőt kaptam, ahol a pixel értékek: 0xFF, 0xFF, 0x03, 0x03

2x2.c
    
(#) AZoli válasza benjami hozzászólására (») Feb 17, 2020 /
 
Köszönöm! Találtam egy újabb verziót, (5.32) és ott már több opció van. Amit először próbáltam az még nem is c fáljba mentett.
(#) AZoli válasza AZoli hozzászólására (») Feb 17, 2020 /
 
Közben volt időm kicsit próbálkozni.
Próbáltam az options menüben a big endian módot is, de sehogy nem jön ki az R3 G3 B2 sorrend. Mindenáron Bx Gy Rz -t csinál a program... ahogy nálad is. Pedig az RA8875 -el ez volna egyszerű, mint a csatolt képen.
Közben megnézem hogy a PIC24EP.. -n hány utasításciklusból tudom leggyorsabban megfordítani a bitsorrendet.
A hozzászólás módosítva: Feb 17, 2020

RA8875.jpg
    
(#) Zsora válasza AZoli hozzászólására (») Feb 17, 2020 / 1
 
Az a legegyszerűbb, ha írsz egy saját konverter programot. Az pontosan azt fogja csinálni, amit te akarsz. Pl. Visual Basicben nem nagy cucc.
(#) benjami válasza Zsora hozzászólására (») Feb 17, 2020 / 1
 
Sőt megírhatja a mikrovezérlőre is akár. STM32-re én megírtam a 24bites BMP -> 16 bites C forrás átalakítót. Szerintem minimális módosítással átírható PIC-re is, a Color888to565 függvény meg könnyen átalakítható az igényelt Color888to332-re.
  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include "main.h"
  4. #include "fatfs.h"
  5.  
  6. #define  Delay(t)     HAL_Delay(t)
  7. #define  GetTime()    HAL_GetTick()
  8.  
  9. #define  BMP_HEADERSIZE  0x36
  10. #define  BMP_FILENAMEEXT ".bmp"
  11.  
  12. uint16_t Color888to565(uint8_t r, uint8_t g, uint8_t b)
  13. {
  14.   uint16_t c; c = r >> 3; c <<= 6; c |= g >> 2; c <<= 5; c |= b >> 3;
  15.   return c;
  16. }
  17.  
  18. // ----------------------------------------------------------------------------
  19. // 24bites (RGB888) bmp fájl 16bites (RGB565) C forrásra konvertálása
  20. void bmpfile_processing(char* pth, char* fn)
  21. {
  22.   struct __packed BMP_PIXEL
  23.   {
  24.     unsigned char blue;
  25.     unsigned char green;
  26.     unsigned char red;
  27.   }rgb888;
  28.   uint16_t rgb565;
  29.   unsigned int r, i, x;
  30.   FIL sfile, tfile;
  31.  
  32.   char f[256];
  33.   sprintf(f, "%s/%s", pth, fn);
  34.   if(f_open(&sfile, f, FA_READ) == FR_OK)
  35.   {
  36.     for(i = strlen(f); i > 0; i--)
  37.       if(f[i] == '.')
  38.         {f[i] = 0; break;}
  39.     strcat(f, ".c");
  40.     if(f_open(&tfile, f, FA_CREATE_ALWAYS | FA_WRITE) == FR_OK)
  41.     {
  42.       printf("processing:%s/%s -> %s\r\n", pth, fn, f);
  43.       f_printf(&tfile, "static const unsigned short bitmap[] = {\n");
  44.  
  45.       for(i = 0; i < BMP_HEADERSIZE; i++)
  46.       {
  47.         f_read(&sfile, &rgb888.red, 1, &r);
  48.       }
  49.  
  50.       f_read(&sfile, &rgb888, sizeof(rgb888), &r);
  51.       rgb565 = Color888to565(rgb888.red, rgb888.green, rgb888.blue);
  52.       f_printf(&tfile, "  0x%04x", rgb565);
  53.       f_read(&sfile, &rgb888, sizeof(rgb888), &r);
  54.       rgb565 = Color888to565(rgb888.red, rgb888.green, rgb888.blue);
  55.       x = 1;
  56.       for(;;)
  57.       {
  58.         if(!r)
  59.         {
  60.           f_printf(&tfile, "}\n");
  61.           f_sync(&tfile);
  62.           break;
  63.         }
  64.         if(!x)
  65.           f_printf(&tfile, "  0x%04x", rgb565);
  66.         else
  67.           f_printf(&tfile, ", 0x%04x", rgb565);
  68.         if(x >= 7)
  69.         {
  70.           f_printf(&tfile, ",\n");
  71.           x = 0;
  72.         }
  73.         else
  74.           x++;
  75.         f_read(&sfile, &rgb888, sizeof(rgb888), &r);
  76.         rgb565 = Color888to565(rgb888.red, rgb888.green, rgb888.blue);
  77.       }
  78.       f_close(&tfile);
  79.     }
  80.  
  81.     f_close(&sfile);
  82.   }
  83. }
  84.  
  85. // ----------------------------------------------------------------------------
  86. // végigkeresi a 'path'-ban megadott helytől kezdve az 'ext'-ben megadott kiterjesztésü fájlokat
  87. // és meghívja az 'fp'-ben megadott függvényt
  88. FRESULT scan_files(char* path, char* ext, void (*fp)(char* pth, char* fn))
  89. {
  90.   FRESULT res;
  91.   DIR dir;
  92.   UINT i;
  93.   static FILINFO fno;
  94.  
  95.   UINT el = strlen(ext);                // kiterjesztés hossza
  96.   res = f_opendir(&dir, path);          // kutatás kezdete
  97.   if (res == FR_OK)
  98.   {
  99.     for (;;)
  100.     {
  101.       res = f_readdir(&dir, &fno);
  102.       if (res != FR_OK || fno.fname[0] == 0) break;  // vége?
  103.       if (fno.fattrib & AM_DIR)         // DIR ?
  104.       {
  105.         i = strlen(path);
  106.         sprintf(&path[i], "/%s", fno.fname);
  107.         res = scan_files(path, ext, fp);// alkönyvtár tartalmának felkutatása
  108.         if (res != FR_OK) break;
  109.         path[i] = 0;                    // kilépünk az alkönyvtárbol
  110.       }
  111.       else
  112.       {                                 // file ?
  113.         if(!strcmp(ext, (char *)fno.fname + strlen(fno.fname) - el))
  114.           fp(path, fno.fname);
  115.       }
  116.     }
  117.     f_closedir(&dir);
  118.   }
  119.   return res;
  120. }
  121.  
  122. //-----------------------------------------------------------------------------
  123. void mainApp(void)
  124. {
  125.   char buff[256];
  126.  
  127.   Delay(500);
  128.   printf("Start\r\n");
  129.   printf("SDPath:%s\r\n", SDPath);
  130.  
  131.   if(f_mount(&SDFatFS, SDPath, 1) == FR_OK)
  132.   {
  133.     printf("FatFs ok\r\n");
  134.     strcpy(buff, SDPath);
  135.     if(buff[strlen(buff) - 1] == '/')
  136.       buff[strlen(buff) - 1] = 0; // utolso / jelet lecsapjuk, mert egyébként duplázva lesz
  137.     scan_files(buff, BMP_FILENAMEEXT, bmpfile_processing); // bmp konverzio
  138.   }
  139.   else
  140.     printf("FatFs error !!!\r\n");
  141.  
  142.   printf("End\r\n");
  143.  
  144.   while(1)
  145.   {
  146.     Delay(100);
  147.   }
  148. }
(#) Peppe válasza AZoli hozzászólására (») Feb 17, 2020 / 1
 
Próbáld ki ezt is:
image2lcd
SSD1963-hoz használtam, nekem bevált.
(#) AZoli válasza Peppe hozzászólására (») Feb 18, 2020 /
 
Köszönöm mindenkinek a segítséget, végül írtam saját programot rá.
(#) AZoli hozzászólása Márc 14, 2020 /
 
Sziasztok!
Működik rendesen a PIC24EP és RA8875 páros kommunikáció ha egyszerűen a TRIS PORT és LAT regisztereket használom, de a PMP perifériát nem tudom működésre bírni. Nincs valakinek működő kódrészlete?
Init:
  1. PMCON = 0;
  2.     PMCONbits.ADRMUX = 0b00; //00 = Address and data appear on separate pins
  3.     PMCONbits.PTBEEN = 0; //PMBE port is disabled
  4.     PMCONbits.PTWREN = 1; //PMWR/PMENB port is enabled
  5.     PMCONbits.PTRDEN = 1; //PMRD/PMWR port is enabled
  6.    
  7.     PMCONbits.CSF = 0b10; //PMCS1 and PMCS2 function as chip select
  8.     PMCONbits.ALP = 0; //
  9.     PMCONbits.CS2P = 0; //
  10.     PMCONbits.CS1P = 0; //Active-low (PMCS1/PMCS)        
  11.     PMCONbits.BEP = 0; //
  12.     PMCONbits.WRSP = 0; //For Master Mode 1 (PMMODE<9:8> = 11):  Enables strobe active-low
  13.     PMCONbits.RDSP = 0; //For Master Mode 1 (PMMODE<9:8> = 11): Enables strobe active-low
  14.  
  15.     PMMODE = 0;
  16.     PMMODEbits.IRQM = 0b00; //No Interrupt is generated
  17.     PMMODEbits.INCM = 0b00; //No increment or decrement of address
  18.     PMMODEbits.MODE16 = 0; //8-bit mode: data register is 8 bits, a read/write to the data register invokes one 8-bit transfer
  19.     PMMODEbits.MODE = 0b11; //Master Mode 1 (PMCSx, PMRD/PMWR, PMENB, PMBE, PMA<x:0> and PMD<7:0>)
  20.     PMMODEbits.WAITB = 0b11; //Data wait of 4 TP (demultiplexed/multiplexed); address phase of 4 TP (multiplexed)
  21.     PMMODEbits.WAITM = 0b1111; //Wait of additional 15 TP
  22.     PMMODEbits.WAITE = 0b11; //Wait of 4 TP
  23.    
  24.     PMADDR = 0b0100000000000000; //Chip Select 1 is active
  25.     PMAEN = 0b0100000000000000; //PMA14 functions as either PMA<14> or PMCS1
  26.     PMSTAT = 0;
  27.     PADCFG1 = 0; //PMP module uses Schmitt Trigger input buffers
  28.            
  29.     PMCONbits.PMPEN = 1; //On


És így próbálom írni: (az else ágban rendesen működik, de ha bekapcsolom PMP -t, akkor szkóppal sem látok semmi mozgást)
  1. void LCD_CmdWrite(byte Cmd)
  2. {
  3.     if(PMCONbits.PMPEN == 1) //PMP
  4.     {    
  5.         rs = 1;
  6.         PMDOUT1 = Cmd;
  7.     }
  8.     else //8080 mode
  9.     {
  10.         while (!WAIT_INT);
  11.         rd = 1;
  12.         rs = 1;
  13.         cs = 0;
  14.         DATA_BUS_DIR = WriteDIR;
  15.         DATA_BUS_WR = Cmd;
  16.         wr = 0;
  17.         Nop();
  18.         wr = 1;
  19.         cs = 1;
  20.         rs = 0;
  21.     }
  22. }
(#) Peppe válasza AZoli hozzászólására (») Márc 14, 2020 /
 
PMCONbits.PMPEN = 1; //On helyett nem PMCONbits.ON = 1; lenne a helyes? Most néztem meg az adatlapban.
A hozzászólás módosítva: Márc 14, 2020
(#) AZoli válasza Peppe hozzászólására (») Márc 14, 2020 /
 
Én nem látok ilyen bitet. Ezt az adatlapot nézed?
Bővebben: Link
Itt pedig az FRM:
Bővebben: Link
(#) Peppe válasza AZoli hozzászólására (») Márc 14, 2020 /
 
Jogos én a sima PIC24 adatlapját néztem. Az init kódod jónak tűnik.
Én a helyedben 0xAA és 0x55 írnék az adat regiszterbe. Hogy van e mozgás az adat buszon.
Írtad, hogy nem láttál semmit. Sanszos hogy a PMP nincs engedélyezve.
Én ilyenkor a konfig regisztert is vissza szoktam olvasni. Vagy debuggerrel megnézni.
(#) AZoli válasza Peppe hozzászólására (») Márc 14, 2020 /
 
Igen, ezeket néztem.
Nekem az sem világos, hogy egyszerűen a PMDOUT1 reg írásával már indul is a kommunikáció, vagy kell még valamit beállítani? Egyáltalán a PMDOUT -ba kell írni? Neten se találtam példa kódot...
(#) Peppe válasza AZoli hozzászólására (») Márc 14, 2020 / 1
 
PIC32MX esetén nekem ennyi volt az init:
///*****************************************************************************
//Configure SSD1963-PIC32PMP
//Configure PMP Lines
PMCONbits.PTWREN= 1; //Write Enable Strobe ON
PMCONbits.PTRDEN= 1; //Read Enable Strobe ON
PMCONbits.CSF = 2; //PMCS1,2 as Chip Select
PMAENbits.PTEN15= 0; //A15,14,0 = PMP (CS1,CS2, PMA0)
PMAENbits.PTEN14= 1;
PMAENbits.PTEN13= 0;
PMAENbits.PTEN12= 0;
PMAENbits.PTEN11= 0;
PMAENbits.PTEN10= 0;
PMAENbits.PTEN9= 0;
PMAENbits.PTEN8= 0;
PMAENbits.PTEN7= 0;
PMAENbits.PTEN6= 0;
PMAENbits.PTEN5= 0;
PMAENbits.PTEN4= 0;
PMAENbits.PTEN3= 0;
PMAENbits.PTEN2= 0;
PMAENbits.PTEN1= 0;
PMAENbits.PTEN0= 0;
//Bus Type and width
PMMODEbits.MODE16= 1; //16 bit mode
PMMODEbits.MODE= 2; //INTEL Bus Style
PMMODEbits.MODE0= 0;
PMMODEbits.MODE1=1;
//Bus Timing
PMMODEbits.WAITB= 0; //3
PMMODEbits.WAITM= 0;//15
PMMODEbits.WAITE= 0;//3
//Switching module ON
PMCONbits.ON = 1;
PMADDR=0X4000; //

És az írás:
//Write data 16bit
void Write_Data16 (unsigned int Data_16 )
{
//PMADDR=0X4000;
DC=1;
Delay_1us();
PMDIN=Data_16;
Delay_1us();
DC=0;
}
A hozzászólás módosítva: Márc 14, 2020
(#) AZoli válasza Peppe hozzászólására (») Márc 15, 2020 /
 
Köszönöm!
Ez azért jelentős különbség:
  1. PMDOUT1 = Cmd;
  2. PMDIN=Data_16;

Bár nem egészen értem miért IN, de kipróbálom.
DMA -val használtad?
(#) Peppe válasza AZoli hozzászólására (») Márc 15, 2020 /
 
Ez egy kezdetleges kód volt PIC32re. Aztán beláttam hogy kevés lesz és STM32 lett a végére.
STM32 esetében meg STemWin lett.
(#) Peppe válasza AZoli hozzászólására (») Márc 15, 2020 /
 
A következő kódrészlet egy PIC24 könyvből van. Nem PIC24EP-hez!!!!
De itt is PMDIN-be pakolja a kimenő adatokat.
For our convenience, we will also define a couple of constants that will help us, hopefully, make the
following code more readable:
#define LCDDATA 1 // RS = 1 ; access data register
#define LCDCMD 0 // RS = 0 ; access command register
#define PMDATA PMDIN1 // PMP data buffer
To send each command to the LCD module, we will select the command register (setting the address
PMA0 = RS = 0) first. Then we will start a PMP write sequence by depositing the desired command
byte in the PMP data output buffer:
(#) AZoli válasza Peppe hozzászólására (») Márc 15, 2020 /
 
Igen, pont most próbáltam ki, ez volt a baj. PMDIN -be kell pakolni a küldendő adatot. Köszi a segítséget! Működik!
(#) Peppe válasza AZoli hozzászólására (») Márc 16, 2020 / 1
 
Ez tipikus Microchip gondolkodás!!(fordított) Nem egyszer szívtam már meg.
Örülök hogy megy a kódod.
Következő: »»   45 / 46
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem