Hallo
da die von mir entwickelte FT800-Unit fast fertig ist, möchte ich mal um "Mitarbeit" bitten.
Was kann diese Unit. Man kann damit LCD-Displays bis 515*512 Pixel mit bis zu 264k Farben betreiben. Der Chip ist kostengünstig zu beziehen, Farnell ruft ca 5,50 € dafür auf und einige Anbieter haben auch ganze Boards im Angebot, die beiden (320*240 und 480*272 Pixel) mit denen ich das entwickelt habe sind von FTDI (Vertrieb Farnell) für ca 60 € zu mir gewechselt.
Der Chip hat nicht wie übelich einen Framebuffer in den man schreiben muß, sondern eine Pipeline in die man fertige Objekt ablegt, so gibt es Tasten, Schieberegler, Uhren, Knobs, Slieder, Progressbars, Linien, Rechtecke, Kreisen, Tachometer, Spinner etc. Ich war zum Anfang auch eher skeptisch ob das funktioniert, aber das ist beeindruckend, quasi Echtzeit. Und das bei Anschluß über SPI+2 Leitung für Powerdown(notwendig) und Interupt(kann) und zusätzlichen CS-ROM(kann). Dazu benutzt der Chip 2 Displaylisten von denen eine zur Anzeige benutzt wird und die anderen kann man schon beschreiben und auf Befehl hin wird zwischen beiden gewechselt. EIne Liste kann 4 KByte groß sein, um eine Progressbar darzustellen braucht man 20 Bytes, wenn man vorher noch die Farben wechselt sind es 32 Bytes. Bei jedem dieser Objekte kann man einstellen ob sie durch auf den integrierten Touchcontroller (inklusive Interupt) reagieren sollen und somit sind mit ein paar Zeilen fertige Screens mit Interaktion fertig. Das ganze wird noch durch die Soundausgabe gekrönt, ok die Jungs bezeichne das als Syntesizer, naja ein klasse Rechteckgenerator, aber um ein Tastenklick zu erzeugen geht nix einfacher, den erzeugt man inklusive Volumkontrolle mit 3 Bytes. Der Chip kann nebenher noch JPEG darstellen und WAV-Dateien abspielen. Dazu ist ein 256 KB großer Buffer im Chip, in dem man diese ablegen kann und dann mit ca 32 Bytes eine solche Grafik anzeigt oder ein WAV abspielt. Da ich festgestellt habe das 256 KB nicht so viel sind, spendiere ich dem Treiber ein SPI-ROM inklusive Verwaltung das man dort bis zu 4 MByte an Dateien vorhalten kann und diese bei Bedarf in den Chip schiebt und dort dann anzeigen kann. Der dazu nötige Resourcenverwalter ist soweit fertig.
Meine Idee ist jetzt der ganzen Sache noch einen Editor zu spendieren um sich die Screens quasi zusammen zuklicken und daher interessieren mich mal Eure Meinungen, wie weit das gehen soll. Im Prinzip erzeugt der grafische Screeneditor dann Source der ungefähr so aussieht:
Das ist der Source für das Mainfenster im Demovideo. Der Editor übernimmt eigenständig Optimierungen, bei der Farbeinstellung, wenn also alle keine Farbe gewechselt wird werden auch keine Befehle dafür erzeugt. Desweiteren dachte ich mir, das man als Farbe nicht unbedingt das gesamt Spectrum benutzt sondern dies aus eine Palette nimmt, das spart (so denke ich mir) ein bisschen Source, weil man dann ja nur ein Byte und nicht 4 benutzt. Und mal ehrlich, was will man auf so einem Display mit 256k Farben, schon 256 Farben aus 256 K Farben sind gewaltig. Da betrifft nicht Grafiken, die werden im Orginal angezeigt. Aber jeder Button hat nun mal nur eine Farbe für Disable, eine für gedrückt und eine für Normal, und ich denke kaum einer wird 200 Buttons darstellen und jeder soll eine andere Farbe haben. Im Anhang ist noch die MPG-Datei mit der man sich das ganze mal anschaun kann, oder hier der Link für die YouToub-Variante
FT800-Eve-Demo
So das sollte erstmal reichen, ich freue mich auf Anregungen, Wünsche, Kritik etc.
cu rage
P.S: Piceditor neue Version vom 27.05.2019
Piceditor
da die von mir entwickelte FT800-Unit fast fertig ist, möchte ich mal um "Mitarbeit" bitten.
Was kann diese Unit. Man kann damit LCD-Displays bis 515*512 Pixel mit bis zu 264k Farben betreiben. Der Chip ist kostengünstig zu beziehen, Farnell ruft ca 5,50 € dafür auf und einige Anbieter haben auch ganze Boards im Angebot, die beiden (320*240 und 480*272 Pixel) mit denen ich das entwickelt habe sind von FTDI (Vertrieb Farnell) für ca 60 € zu mir gewechselt.
Der Chip hat nicht wie übelich einen Framebuffer in den man schreiben muß, sondern eine Pipeline in die man fertige Objekt ablegt, so gibt es Tasten, Schieberegler, Uhren, Knobs, Slieder, Progressbars, Linien, Rechtecke, Kreisen, Tachometer, Spinner etc. Ich war zum Anfang auch eher skeptisch ob das funktioniert, aber das ist beeindruckend, quasi Echtzeit. Und das bei Anschluß über SPI+2 Leitung für Powerdown(notwendig) und Interupt(kann) und zusätzlichen CS-ROM(kann). Dazu benutzt der Chip 2 Displaylisten von denen eine zur Anzeige benutzt wird und die anderen kann man schon beschreiben und auf Befehl hin wird zwischen beiden gewechselt. EIne Liste kann 4 KByte groß sein, um eine Progressbar darzustellen braucht man 20 Bytes, wenn man vorher noch die Farben wechselt sind es 32 Bytes. Bei jedem dieser Objekte kann man einstellen ob sie durch auf den integrierten Touchcontroller (inklusive Interupt) reagieren sollen und somit sind mit ein paar Zeilen fertige Screens mit Interaktion fertig. Das ganze wird noch durch die Soundausgabe gekrönt, ok die Jungs bezeichne das als Syntesizer, naja ein klasse Rechteckgenerator, aber um ein Tastenklick zu erzeugen geht nix einfacher, den erzeugt man inklusive Volumkontrolle mit 3 Bytes. Der Chip kann nebenher noch JPEG darstellen und WAV-Dateien abspielen. Dazu ist ein 256 KB großer Buffer im Chip, in dem man diese ablegen kann und dann mit ca 32 Bytes eine solche Grafik anzeigt oder ein WAV abspielt. Da ich festgestellt habe das 256 KB nicht so viel sind, spendiere ich dem Treiber ein SPI-ROM inklusive Verwaltung das man dort bis zu 4 MByte an Dateien vorhalten kann und diese bei Bedarf in den Chip schiebt und dort dann anzeigen kann. Der dazu nötige Resourcenverwalter ist soweit fertig.
Meine Idee ist jetzt der ganzen Sache noch einen Editor zu spendieren um sich die Screens quasi zusammen zuklicken und daher interessieren mich mal Eure Meinungen, wie weit das gehen soll. Im Prinzip erzeugt der grafische Screeneditor dann Source der ungefähr so aussieht:
Code
Procedure DrawMainLoop;
var s:String[32];
Begin
FT800WaitCmdFIFOIsempty;
FT800WaitDisplayListIsempty;
Ft800WriteCMDStart; // Start CMDlist
SetBackGroundColorRGB(200,200,200); //Hintergrund schwarz
SetClearFlag(True,True,True);
ClearTag(255);
s:=ByteToStr(RTCGetHour:2:'0')+':'+ByteToStr(RTCGetMinute:2:'0')+':'+ByteToStr(RTCGetSecond:2:'0');
SetColorRGB(240,240,240);
DrawText(350,0,25,0,s);
s:=ByteToStr(RTCGetDay:2:'0')+'.' +ByteToStr(RTCGetMonth:2:'0')+'.2013';
DrawText(400,32,21,0,s);
SetColorRGB(0,0,0);
DrawLine (0,49,479,48,1);
s:=ByteToStr(RTCGetHour:2:'0')+':'+ByteToStr(RTCGetMinute:2:'0')+':'+ByteToStr(RTCGetSecond:2:'0');
SetColorRGB(240,240,240);
DrawText(100,60,31,0,s);
SetColorRGB(255,255,255);
DrawSlider (20,272-90-20,440,10,OPT_FLAT,Word(SliderValue),65535,1); //OK
DrawProgress(20,272-60-20,440,10,OPT_FLAT,Word(SliderValue),65535,0); //OK
if Recording then
SetVGColorRGB(64,64,64);
SetColorRGB(32,32,32);
ClearTag(2);
DrawButton(000,272-60,130,60,25,OPT_FLAT,'Start',0);
else
SetColorRGB(255,255,255);
if MainPressed=2 then
SetVGColorRGB(20,20,255);
else
SetVGColorRGB(20,20,128);
endif;
DrawButton(000,272-60,130,60,25,OPT_FLAT,'Start',2);
endif;
if not Recording then
SetVGColorRGB(64,64,64);
SetColorRGB(32,32,32);
ClearTag(3);
DrawButton(130,272-60,130,60,25,OPT_FLAT,'Stop',0);
else
SetColorRGB(255,255,255);
if MainPressed=3 then
SetVGColorRGB(20,20,255);
else
SetVGColorRGB(20,20,128);
endif;
DrawButton(130,272-60,130,60,25,OPT_FLAT,'Stop',3);
endif;
SetColorRGB(255,255,255);
if MainPressed=4 then
SetVGColorRGB(20,20,255);
else
SetVGColorRGB(20,20,128);
endif;
DrawButton(260,272-60,220,60,25,OPT_FLAT,'Touch',4);
SetVGColorRGB(20,20,255);
if ToggleButton then
DrawToggle(300,60,80,18,OPT_FLAT,0,'On','Off',5);
else
DrawToggle(300,60,80,18,OPT_FLAT,65535,'On','Off',5);
endif;
if Recording then
DrawSpinner(28,10,0,1);
endif;
Ft800WriteCMDEnd;
SwapDisplaylist;
Ft800CMDUpdate;
end;
loop
if TimerOK then
//PropertyScreen;
DrawMainLoop;
TimerOK:=False;
endif;
b:=GetTouchValue(wValue);
if B=1 then
SliderValue:=wValue;
b:=Lo(SliderValue shr 10)+64;
BackLED(b);
DrawMainLoop;
else
if MainPressed<>B then
if (B=0) and (MainPressed<>0) then //Taste wurde losgelassen, also ausführen
if MainPressed=4 then
StopSound;
DrawPropertyScreen;
elsif MainPressed=5 then
ToggleButton:=not ToggleButton;
PlaySound($51,0,127);
elsif MainPressed=2 then
Recording:=True;
DrawMainLoop;
elsif MainPressed=3 then
Recording:=False;
DrawMainLoop;
endif;
elsif (B<>0) and (MainPressed=0) then //neue Taste erkannt
if Touch[B-1].PlaySound then //Ton abspielen
PlaySound(Touch[B-1].Note,Touch[B-1].Effect,Touch[B-1].Volume);
endif;
endif;
MainPressed:=B;
DrawMainLoop;
endif;
endif;
endloop;
var s:String[32];
Begin
FT800WaitCmdFIFOIsempty;
FT800WaitDisplayListIsempty;
Ft800WriteCMDStart; // Start CMDlist
SetBackGroundColorRGB(200,200,200); //Hintergrund schwarz
SetClearFlag(True,True,True);
ClearTag(255);
s:=ByteToStr(RTCGetHour:2:'0')+':'+ByteToStr(RTCGetMinute:2:'0')+':'+ByteToStr(RTCGetSecond:2:'0');
SetColorRGB(240,240,240);
DrawText(350,0,25,0,s);
s:=ByteToStr(RTCGetDay:2:'0')+'.' +ByteToStr(RTCGetMonth:2:'0')+'.2013';
DrawText(400,32,21,0,s);
SetColorRGB(0,0,0);
DrawLine (0,49,479,48,1);
s:=ByteToStr(RTCGetHour:2:'0')+':'+ByteToStr(RTCGetMinute:2:'0')+':'+ByteToStr(RTCGetSecond:2:'0');
SetColorRGB(240,240,240);
DrawText(100,60,31,0,s);
SetColorRGB(255,255,255);
DrawSlider (20,272-90-20,440,10,OPT_FLAT,Word(SliderValue),65535,1); //OK
DrawProgress(20,272-60-20,440,10,OPT_FLAT,Word(SliderValue),65535,0); //OK
if Recording then
SetVGColorRGB(64,64,64);
SetColorRGB(32,32,32);
ClearTag(2);
DrawButton(000,272-60,130,60,25,OPT_FLAT,'Start',0);
else
SetColorRGB(255,255,255);
if MainPressed=2 then
SetVGColorRGB(20,20,255);
else
SetVGColorRGB(20,20,128);
endif;
DrawButton(000,272-60,130,60,25,OPT_FLAT,'Start',2);
endif;
if not Recording then
SetVGColorRGB(64,64,64);
SetColorRGB(32,32,32);
ClearTag(3);
DrawButton(130,272-60,130,60,25,OPT_FLAT,'Stop',0);
else
SetColorRGB(255,255,255);
if MainPressed=3 then
SetVGColorRGB(20,20,255);
else
SetVGColorRGB(20,20,128);
endif;
DrawButton(130,272-60,130,60,25,OPT_FLAT,'Stop',3);
endif;
SetColorRGB(255,255,255);
if MainPressed=4 then
SetVGColorRGB(20,20,255);
else
SetVGColorRGB(20,20,128);
endif;
DrawButton(260,272-60,220,60,25,OPT_FLAT,'Touch',4);
SetVGColorRGB(20,20,255);
if ToggleButton then
DrawToggle(300,60,80,18,OPT_FLAT,0,'On','Off',5);
else
DrawToggle(300,60,80,18,OPT_FLAT,65535,'On','Off',5);
endif;
if Recording then
DrawSpinner(28,10,0,1);
endif;
Ft800WriteCMDEnd;
SwapDisplaylist;
Ft800CMDUpdate;
end;
loop
if TimerOK then
//PropertyScreen;
DrawMainLoop;
TimerOK:=False;
endif;
b:=GetTouchValue(wValue);
if B=1 then
SliderValue:=wValue;
b:=Lo(SliderValue shr 10)+64;
BackLED(b);
DrawMainLoop;
else
if MainPressed<>B then
if (B=0) and (MainPressed<>0) then //Taste wurde losgelassen, also ausführen
if MainPressed=4 then
StopSound;
DrawPropertyScreen;
elsif MainPressed=5 then
ToggleButton:=not ToggleButton;
PlaySound($51,0,127);
elsif MainPressed=2 then
Recording:=True;
DrawMainLoop;
elsif MainPressed=3 then
Recording:=False;
DrawMainLoop;
endif;
elsif (B<>0) and (MainPressed=0) then //neue Taste erkannt
if Touch[B-1].PlaySound then //Ton abspielen
PlaySound(Touch[B-1].Note,Touch[B-1].Effect,Touch[B-1].Volume);
endif;
endif;
MainPressed:=B;
DrawMainLoop;
endif;
endif;
endloop;
Das ist der Source für das Mainfenster im Demovideo. Der Editor übernimmt eigenständig Optimierungen, bei der Farbeinstellung, wenn also alle keine Farbe gewechselt wird werden auch keine Befehle dafür erzeugt. Desweiteren dachte ich mir, das man als Farbe nicht unbedingt das gesamt Spectrum benutzt sondern dies aus eine Palette nimmt, das spart (so denke ich mir) ein bisschen Source, weil man dann ja nur ein Byte und nicht 4 benutzt. Und mal ehrlich, was will man auf so einem Display mit 256k Farben, schon 256 Farben aus 256 K Farben sind gewaltig. Da betrifft nicht Grafiken, die werden im Orginal angezeigt. Aber jeder Button hat nun mal nur eine Farbe für Disable, eine für gedrückt und eine für Normal, und ich denke kaum einer wird 200 Buttons darstellen und jeder soll eine andere Farbe haben. Im Anhang ist noch die MPG-Datei mit der man sich das ganze mal anschaun kann, oder hier der Link für die YouToub-Variante
FT800-Eve-Demo
So das sollte erstmal reichen, ich freue mich auf Anregungen, Wünsche, Kritik etc.
cu rage
P.S: Piceditor neue Version vom 27.05.2019
Piceditor
Attachments
Filename: | Eve-Demo-AvrCo.mpg |
Filesize: | 5.11 MB |
Title: | |
Download counter: | 130 |