|
Post by lightcalamar on Jul 20, 2017 12:59:25 GMT -8
Hi. Make time almost a year a few friends over the net, create a team to reverse and learn about FTDI screens with chip based FT8xx. We are @ TFTLCDCyg, @ lightcalamar and @ RndMnkIIIFirst of all thank the extraordinary work of @ jamesbowman and make your GD2 library. We modify from your work so that other MCUs work for example on FT81x screens, know the limitations of FT800 or FT801 by their resolution and we want to give more life to these screens. The team believe to be the best screens in the market, possibly other GPU graphics will be more complete, but we think about FTDI and its FT8xx chip. We have modified and always respecting the authorship of @ jamesbowman, we have not deleted lines, we have cleared, added more codes to make libraries to evolve in other MCUs or with screens of greater resolution. In the same line we have modified the GD2assets tool, both for Linux or Windows and for example have overcome the barrier of FT800 RAM and now operate assets with FT81x screens with 1 MegaBytes of RAM. Make less than a month working with STM32 MCUs and get FT8xx screens to work from the original @ jamesbowman library for Arduino DUE. Last success is to make microSD reader, series STM32F103x ... But we look for more horizons, wish in a few days to publish our totally altruistic collaboration with the permission of @ jamesbowman, and to repeat without its great library we can not see these beautiful screens working our projects, because times change and think that evolve to be the best. Greetings from the Team.
|
|
|
Post by jamesbowman on Jul 21, 2017 10:56:37 GMT -8
Awesome -- looking forward to what's next from your team! Just to share what my plans are for GD2 library: - FT800/FT810 support (almost all support is done now)
- support for multiple display sizes (e.g. 800x480 7" panels)
- support for maps made with the tiled map editor
The gd2-lib project is all open -- if you have patches or bugs, feel free to post them: github.com/jamesbowman/gd2-libAnd GD3 is launching soon. More details in a couple of weeks.
|
|
|
Post by lightcalamar on Jul 26, 2017 13:22:38 GMT -8
Thanks James. Today publish in our repository the library fully working on any MCU's STM32F103 with SD reader for images or Assets. Be fully compatible with any FT8XX display Still lacking to put more information in our readme.md but to guarantee our work. In few days with schemes and configurations github.com/lightcalamar/GD23STM32_F103x
The FT81x Team
|
|
|
Post by lightcalamar on Aug 6, 2017 2:29:21 GMT -8
The TF81x team do hours ago work same modified library GD23STM32 with MCUs STM32F407x with external microSD reader with success These MCUs work at 168MHz clock with 192Kb of RAM Features Core: ARM®32-bit Cortex®-M4 CPU with FPU, Adaptive real-time accelerator (ART Accelerator™) allowing 0-wait state execution from Flash memory, frequency up to 168 MHz, memory protection unit, 210 DMIPS/1.25 DMIPS/MHz (Dhrystone 2.1), and DSP instructions Memories - Up to 1 Mbyte of Flash memory - Up to 192+4 Kbytes of SRAM including 64-Kbyte of CCM (core coupled memory) data RAM - Flexible static memory controller supporting Compact Flash, SRAM, PSRAM, NOR and NAND memories LCD parallel interface, 8080/6800 modes Clock, reset and supply management - 1.8 V to 3.6 V application supply and I/Os - POR, PDR, PVD and BOR - 4-to-26 MHz crystal oscillator - Internal 16 MHz factory-trimmed RC (1% accuracy) - 32 kHz oscillator for RTC with calibration - Internal 32 kHz RC with calibration - Sleep, Stop and Standby modes - VBATsupply for RTC, 20×32 bit backup registers + optional 4 KB backup SRAM 3×12-bit, 2.4 MSPS A/D converters: up to 24 channels and 7.2 MSPS in triple interleaved mode 2×12-bit D/A converters General-purpose DMA: 16-stream DMA controller with FIFOs and burst support Up to 17 timers: up to twelve 16-bit and two 32-bit timers up to 168 MHz, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input Debug mode - Serial wire debug (SWD) & JTAG interfaces - Cortex-M4 Embedded Trace Macrocell™ Up to 140 I/O ports with interrupt capability - Up to 136 fast I/Os up to 84 MHz - Up to 138 5 V-tolerant I/Os Up to 15 communication interfaces - Up to 3 × I2C interfaces (SMBus/PMBus) - Up to 4 USARTs/2 UARTs (10.5 Mbit/s, ISO 7816 interface, LIN, IrDA, modem control) - Up to 3 SPIs (42 Mbits/s), 2 with muxed full-duplex I2S to achieve audio class accuracy via internal audio PLL or external clock - 2 × CAN interfaces (2.0B Active) - SDIO interface Advanced connectivity - USB 2.0 full-speed device/host/OTG controller with on-chip PHY - USB 2.0 high-speed/full-speed device/host/OTG controller with dedicated DMA, on-chip full-speed PHY and ULPI - 10/100 Ethernet MAC with dedicated DMA: supports IEEE 1588v2 hardware, MII/RMII 8- to 14-bit parallel camera interface up to 54 Mbytes/s True random number generator CRC calculation unit 96-bit unique ID RTC: subsecond accuracy, hardware calendarinsert code here  
|
|
|
Post by lightcalamar on Aug 7, 2017 2:53:02 GMT -8
|
|
|
Post by rayman on Aug 12, 2017 13:06:00 GMT -8
Can you also provide a dump-script to GDClass :: dumpscreen? I found the follow script for 5" 480x272 display with google as an idea ... I believe it is from jamesbowman#!/usr/bin/python
import sys import time
import serial
if __name__ == '__main__': import sys, getopt try: optlist, args = getopt.getopt(sys.argv[1:], "vh:s:")
except getopt.GetoptError, reason: print reason print print 'usage: getppm.py -h <usb port> -s <usb speed>' print print sys.exit(1) optdict = dict(optlist)
if '-s' in optdict: speed = int(optdict['-s']) else: speed = 1152000
port = optdict.get('-h', "/dev/ttyACM0") print 'Opening %s at %d' % (port, speed) ser = serial.Serial(port, speed)
ser.setDTR(0) time.sleep(0.1) ser.setDTR(1)
# Expected size of the PPM. 15 bytes for the header, then 480x272 image expected_size = 15 + (3 * 480 * 272) for frame in xrange(9999): s = ser.read(expected_size) open("shot%04d.ppm" % frame, "w").write(s) print "frame %d written" % frame
Python is unfortunately not my thing
|
|
|
Post by rayman on Aug 12, 2017 13:26:30 GMT -8
ok, i have a working variant #define REG_SCREENSHOT_EN (ft8xx_model ? 0x302010UL : 0x102410UL) // Set to enable screenshot mode #define REG_SCREENSHOT_Y (ft8xx_model ? 0x302014UL : 0x102414UL) // Y line register #define REG_SCREENSHOT_START (ft8xx_model ? 0x302018UL : 0x102418UL) // Screenshot start trigger #define REG_SCREENSHOT_BUSY (ft8xx_model ? 0x3020e8UL : 0x1024d8UL) // Screenshot ready flags #define REG_SCREENSHOT_READ (ft8xx_model ? 0x302174UL : 0x102554UL) // Set to enable readout #define RAM_SCREENSHOT (ft8xx_model ? 0x3c2000UL : 0x1C2000UL) // Screenshot readout buffer
void screenshot_800x480() { int x, y; GD.wr(REG_SCREENSHOT_EN, 1); Serial.write("P6\n800\n480\n255\n"); // PPM header for (y = 0; y < 480; y++) { GD.wr16(REG_SCREENSHOT_Y, y); GD.wr(REG_SCREENSHOT_START, 1); while (GD.rd32(REG_SCREENSHOT_BUSY) | GD.rd32(REG_SCREENSHOT_BUSY + 4)); GD.wr(REG_SCREENSHOT_READ, 1); for (x = 0; x < 800; x++) { char rgb[3]; unsigned char b = GD.rd(RAM_SCREENSHOT + (4 * x) + 0); unsigned char g = GD.rd(RAM_SCREENSHOT + (4 * x) + 1); unsigned char r = GD.rd(RAM_SCREENSHOT + (4 * x) + 2); unsigned char a = GD.rd(RAM_SCREENSHOT + (4 * x) + 3); Serial.write(r); Serial.write(g); Serial.write(b); } GD.wr(REG_SCREENSHOT_READ, 0); } GD.wr16(REG_SCREENSHOT_EN, 0); }
#!/usr/bin/python
import sys import time
import serial
if __name__ == '__main__': import sys, getopt try: optlist, args = getopt.getopt(sys.argv[1:], "vh:s:")
except getopt.GetoptError, reason: print reason print print 'usage: getppm.py -h <usb port> -s <usb speed>' print print sys.exit(1) optdict = dict(optlist)
if '-s' in optdict: speed = int(optdict['-s']) else: speed = 1152000
port = optdict.get('-h', "/dev/ttyACM0") print 'Opening %s at %d' % (port, speed) ser = serial.Serial(port, speed)
ser.setDTR(0) time.sleep(0.1) ser.setDTR(1)
# Expected size of the PPM. 15 bytes for the header, then 800x480 image expected_size = 15 + (3 * 800 * 480) for frame in xrange(9999): s = ser.read(expected_size) open("shot%04d.ppm" % frame, "w").write(s) print "frame %d written" % frame
|
|
|
Post by jamesbowman on Aug 16, 2017 9:03:11 GMT -8
|
|
|
Post by rayman on Aug 16, 2017 9:27:22 GMT -8
i have tried a GDClass::dumpscreen, whatever comes out of it, is not a ppm image ;(
|
|
|
Post by patabr on Dec 7, 2017 8:12:20 GMT -8
Hello everybody, I'm trying to run a hotmcu-FT800 screen with a STM32F103, with the GD23STM32_F103x library, I installed SAM32 in the Arduino IDE lib manager but I get a lot of missing libraries (sdFat, AT24Cxx ...) and when I have everything installed, I have another message: error: 'archivo' was not declared in this scope can you tell me what I'm doing wrong 
|
|
|
Post by lightcalamar on Dec 7, 2017 15:52:03 GMT -8
Hello everybody, I'm trying to run a hotmcu-FT800 screen with a STM32F103, with the GD23STM32_F103x library, I installed SAM32 in the Arduino IDE lib manager but I get a lot of missing libraries (sdFat, AT24Cxx ...) and when I have everything installed, I have another message: error: 'archivo' was not declared in this scope can you tell me what I'm doing wrong  Thank you for your interest in running your STM32f103 or other MCU from STM32 for FT8xx with library GD2 by jamesbowman, your compilation give error according to you and our Team FT81xmania.com publish these as needed to work. We publish libraries ready to work correctly with STM32F103 (if applicable), please visit our link; ft81xmania.com/comunidad/Foro-Librerias-compatibles-con-STM32FxxxIf you need more, you put a new theme, we offer our work totally free to your need. Greetings. Tomas
|
|
|
Post by Harry on Feb 27, 2019 1:44:16 GMT -8
ok, i have a working variant #define REG_SCREENSHOT_EN (ft8xx_model ? 0x302010UL : 0x102410UL) // Set to enable screenshot mode #define REG_SCREENSHOT_Y (ft8xx_model ? 0x302014UL : 0x102414UL) // Y line register #define REG_SCREENSHOT_START (ft8xx_model ? 0x302018UL : 0x102418UL) // Screenshot start trigger #define REG_SCREENSHOT_BUSY (ft8xx_model ? 0x3020e8UL : 0x1024d8UL) // Screenshot ready flags #define REG_SCREENSHOT_READ (ft8xx_model ? 0x302174UL : 0x102554UL) // Set to enable readout #define RAM_SCREENSHOT (ft8xx_model ? 0x3c2000UL : 0x1C2000UL) // Screenshot readout buffer
void screenshot_800x480() { int x, y; GD.wr(REG_SCREENSHOT_EN, 1); Serial.write("P6\n800\n480\n255\n"); // PPM header for (y = 0; y < 480; y++) { GD.wr16(REG_SCREENSHOT_Y, y); GD.wr(REG_SCREENSHOT_START, 1); while (GD.rd32(REG_SCREENSHOT_BUSY) | GD.rd32(REG_SCREENSHOT_BUSY + 4)); GD.wr(REG_SCREENSHOT_READ, 1); for (x = 0; x < 800; x++) { // char rgb[3]; // GD.rd is slow, speed up a little bit uint32_t pixelVal = GD.rd32(RAM_SCREENSHOT + lx*4);
// unsigned char b = GD.rd(RAM_SCREENSHOT + (4 * lx) + 0);
// unsigned char g = GD.rd(RAM_SCREENSHOT + (4 * lx) + 1);
// unsigned char r = GD.rd(RAM_SCREENSHOT + (4 * lx) + 2);
// unsigned char a = GD.rd(RAM_SCREENSHOT + (4 * lx) + 3);
unsigned char b = (unsigned char)(pixelVal & 0x000000FF);
unsigned char g = (unsigned char)((pixelVal>>8) & 0x000000FF);
unsigned char r = (unsigned char)((pixelVal>>8) & 0x000000FF);
unsigned char a = (unsigned char)((pixelVal>>8) & 0x000000FF);
Serial.write(r); Serial.write(g); Serial.write(b); } GD.wr(REG_SCREENSHOT_READ, 0); } GD.wr16(REG_SCREENSHOT_EN, 0); }
#!/usr/bin/python
import sys import time
import serial
if __name__ == '__main__': import sys, getopt try: optlist, args = getopt.getopt(sys.argv[1:], "vh:s:")
except getopt.GetoptError, reason: print reason print print 'usage: getppm.py -h <usb port> -s <usb speed>' print print sys.exit(1) optdict = dict(optlist)
if '-s' in optdict: speed = int(optdict['-s']) else: speed = 1152000
port = optdict.get('-h', "/dev/ttyACM0") print 'Opening %s at %d' % (port, speed) ser = serial.Serial(port, speed)
ser.setDTR(0) time.sleep(0.1) ser.setDTR(1)
# Expected size of the PPM. 15 bytes for the header, then 800x480 image expected_size = 15 + (3 * 800 * 480) for frame in xrange(9999): s = ser.read(expected_size) open("shot%04d.ppm" % frame, "w").write(s) print "frame %d written" % frame
|
|