View previous topic :: View next topic |
Author |
Message |
albertsm
Joined: 09 Apr 2004 Posts: 5921 Location: Holland
|
Posted: Sat Oct 11, 2014 12:25 am Post subject: FT800 |
|
|
As you might know, PeterM made it his mission to write support for the FTDI FT800 graphic chip.
Peter wrote a bascom library in the form of include files and created reusable functions and procedures. I think he spend a small fortune talking to FTDI support to clear up issues.
He also converted a lot of arduino samples into bascom.
When everything worked i converted the code into a special FT800 library and some compiler statements/functions were added, and in the process some nice features were added to the compiler as well.
At this stage Peter is writing the help which is a lot of work since there are really a lot and i mean a lot! of subs/functions.
Since some of you want to experiment with FT800 i created a beta version. You can get this by writing to support. You must have a registered bascom version in order to get the beta.
You really should start to read the ftdi pdf files/documentation. While i did work hard on this project the last weeks, i am not an expert. In fact, i still need to study everything myself!
That might sound odd but when you see the demo code below you might understand it.
Peter might have time to answer questions. But otherwise you need to wait till the official release which should be available this month too.
Code: | ' Demo Set 0
' FT800 platform.
' Original code http://www.ftdichip.com/Support/SoftwareExamples/EVE/FT800_SampleApp_1.0.zip
' Requires Bascom 2.0.7.7 beta or greater
$Regfile = "M328pdef.dat"
$Crystal = 8000000
$Baud = 19200
$HwStack = 80
$SwStack = 80
$FrameSize = 350
$NOTYPECHECK
Config ft800 =spi , ftsave =0, ftdebug =0
Config Base = 0
Config Submode = New
Config Spi = Hard, Interrupt = Off, Data_Order = Msb, Master = Yes, Polarity = Low, Phase = 0, Clockrate = 4, Noss = 1
SPSR = 1 ' Makes SPI run at double speed
ft800_CS Alias Portb.2
Config ft800_CS = Output
ft800_CS = 1
ft800_Pd Alias PortB.0
Config ft800_Pd = Output
ft800_Pd = 1
Declare Sub Screen (ByVal Characters As String)
Declare Sub Points
Declare Sub Line_s
Declare Sub Rectangles
Declare Sub Bitmap
Declare Sub BitmapPalette
Declare Sub Fonts
Declare Sub Text_8x8
Declare Sub Text_VGA
Declare Sub Bar_Graph
Declare Sub LineStrips
Declare Sub EdgeStrips
Declare Sub Scissor
Declare Sub Polygon
Declare Sub Cube
Declare Sub Ball_Stencil
Declare Sub FtdiString
Declare Sub StreetMap
Declare Sub AdditiveBlendText
Declare Sub MacroUsage
Declare Sub AdditiveBlendPoints
Declare Function Lerp (ByVal t As Single, ByVal a As Single, ByVal b As Single) As Long
Declare Function smoothlerp (ByVal t As Single, ByVal a As Single, ByVal b As Single) As Single
$Include "XXFT800.inc"
$Include "XXFT800_Functions.inc"
Spiinit
Dim Header_Format (3) As Byte
Dim Header_Width (3) As Integer
Dim Header_Height (3) As Integer
Dim Header_Stride (3) As Integer
Dim Header_Arrayoffset (3) As Long
Header_Format (0 + _base ) = RGB565
Header_Width (0+_base ) = 40
Header_Height (0+_base ) = 40
Header_Stride (0+_base ) = 80
Header_Arrayoffset (0+_base ) = 0
Header_Format (1+_base ) = PALETTED
Header_Width (1+_base ) = 40
Header_Height (1+_base ) = 40
Header_Stride (1+_base ) = 40
Header_Arrayoffset (1+_base ) = 0
Header_Format (2+_base ) = PALETTED
Header_Width (2+_base ) = 480
Header_Height (2+_base ) = 272
Header_Stride (2+_base ) = 480
Header_Arrayoffset (2+_base ) = 0
' Type FT_Gpu_Fonts_t
' FT800 font table structure
' Font table address in ROM can be found by reading the address from 0xFFFFC location.
' 16 font tables are present at the address read from location 0xFFFFC
' Width of each character font from 0 to 127
Dim FontWidth (Ft_Numchar_Per_Font ) As Byte
' Bitmap format of font wrt bitmap formats supported by FT800 - L1, L4, L8
Dim FontBitmapFormat As Dword
' Font line stride in FT800 ROM
Dim FontLineStride As Dword
' Font width in pixels
Dim FontWidthInPixels As Dword
' Font height in pixels
Dim FontHeightInPixels As Dword
' Pointer to font graphics raw data
Dim PointerToFontGraphicsData As Dword
Dim Display_fontstruct As Byte At FontWidth (_base ) Overlay
if FT800_Init ()=1 Then END ' Initialise the FT800
'<< Un-Rem any of the demo's, compile and run ! >>
'------------------------------
' Set 0 Demo's
' Unremark one or more demos and compile
'------------------------------
Screen "Set0 START"
' Points
' Line_s
' Rectangles
' Bitmap
' BitmapPalette
' Fonts
' Text_8x8
' Text_VGA
' Bar_graph
' LineStrips
' EdgeStrips
' Scissor
' Polygon
' Cube
' Ball_Stencil
' FtdiString
' StreetMap
' AdditiveBlendText
' MacroUsage
' AdditiveBlendPoints ' requires Const Qsincos = 1 in FT800.inc
Screen "Set0 END!"
End
'------------------------------------------------------------------------------------------------------------
Sub Screen (ByVal Characters As String)
'------------------------------------------------------------------------------------------------------------
ClearColorRGB &HFF, &HFF, &HFF ' background colour
Clear_B 1, 1, 1
ColorRGB &H80, &H80, &H00
CmdText FT_DispWidth /2, FT_DispHeight /2, 31, OPT_CENTER, Characters
UpdateScreen
Wait 1
End Sub ' Screen
'------------------------------------------------------------------------------------------------------------
Sub Points
'------------------------------------------------------------------------------------------------------------
' Example code to display few points at various offsets with various colors
' Construct Display List of points
Wr32 RAM_DL + 0 , _ClearColorRGB (128, 128, 128)
Wr32 RAM_DL + 4 , _Clear_B (1, 1, 1)
Wr32 RAM_DL + 8 , _ColorRGB (128, 0, 0)
Wr32 RAM_DL + 12, _PointSize (5 * 16)
Wr32 RAM_DL + 16, _Begin_G (FTPOINTS )
Wr32 RAM_DL + 20, _VERTEX2F ( FT_DispWidth / 5 * 16, FT_DispHeight / 2 * 16)
Wr32 RAM_DL + 24, _ColorRGB (0, 128, 0)
Wr32 RAM_DL + 28, _PointSize (15 * 16)
Wr32 RAM_DL + 32, _VERTEX2F (FT_DispWidth * 2 / 5 * 16, FT_DispHeight / 2 * 16)
Wr32 RAM_DL + 36, _ColorRGB (0, 0, 128)
Wr32 RAM_DL + 40, _PointSize (25 * 16)
Wr32 RAM_DL + 44, _VERTEX2F (FT_DispWidth * 3 / 5 * 16, FT_DispHeight / 2 * 16)
Wr32 RAM_DL + 48, _ColorRGB (128, 128, 0)
Wr32 RAM_DL + 52, _PointSize (35 * 16)
Wr32 RAM_DL + 56, _VERTEX2F (FT_DispWidth * 4 / 5 * 16, FT_DispHeight / 2 * 16)
Wr32 RAM_DL + 60, _Display_E () ' display the image
' Do a swap
DLSwap
Wait 1
End Sub ' Points
'------------------------------------------------------------------------------------------------------------
Sub Line_s
'------------------------------------------------------------------------------------------------------------
ClearScreen ' Always use this on your Second line
ColorRGB 128, 0, 0
LineWidth 5 * 16
Begin_G LINES
Vertex2F (FT_DispWidth / 4) * 16, (FT_DispHeight - 25) / 2 * 16
Vertex2F (FT_DispWidth / 4) * 16, (FT_DispHeight + 25) / 2 * 16
ColorRGB 0, 128, 0
LineWidth 10 * 16
Vertex2F (FT_DispWidth * 2) / 4 * 16, (FT_DispHeight - 40) / 2 * 16
Vertex2F (FT_DispWidth * 2) / 4 * 16, (FT_DispHeight + 40) / 2 * 16
ColorRGB 128, 128, 0
LineWidth 20 * 16
Vertex2F (FT_DispWidth * 3) / 4 * 16, (FT_DispHeight - 55) / 2 * 16
Vertex2F (FT_DispWidth * 3) / 4 * 16, (FT_DispHeight + 55) / 2 * 16
UpdateScreen
Wait 1
End Sub ' Lines
'------------------------------------------------------------------------------------------------------------
Sub Rectangles
'------------------------------------------------------------------------------------------------------------
ClearScreen ' Always use this on your Second line
ColorRGB 0, 0, 128
LineWidth 1 * 16 ' LINE_WIDTH is used for corner curvature
Begin_G RECTS
Vertex2F ((FT_DispWidth /4) - 2) * 16, ((FT_DispHeight - 25)/2) * 16
Vertex2F ((FT_DispWidth /4) + 2) * 16, ((FT_DispHeight + 25)/2) * 16
ColorRGB 0, 128, 0
LineWidth 5 * 16
Vertex2F ((FT_DispWidth * 2) / 4 - 5) * 16, (FT_DispHeight - 40) / 2 * 16
Vertex2F ((FT_DispWidth * 2) / 4 + 5) * 16, (FT_DispHeight + 40) / 2 * 16
ColorRGB 128, 128, 0
LineWidth 10 * 16
Vertex2F ((FT_DispWidth * 3) / 4 - 10) * 16, (FT_DispHeight - 55) / 2 * 16
Vertex2F ((FT_DispWidth * 3) / 4 + 10) * 16, (FT_DispHeight + 55) / 2 * 16
UpdateScreen
Wait 1
End Sub ' Rectangles
'------------------------------------------------------------------------------------------------------------
Sub Bitmap
'------------------------------------------------------------------------------------------------------------
Local BMoffsetx As Integer
Local BMoffsety As Integer
Local Ln1 As Dword
Local Ln2 As Dword
' Copy raw data into address 0 followed by generation of bitmap
TempDW = Loadlabel(Bitmap_RawData )
RdFlash_WrFT800 RAM_G, TempDW , Header_Stride (0+_base ) * Header_Height (0+_base )
ClearScreen
ColorRGB 255, 255, 255
BitmapSource RAM_G
BitmapLayout Header_Format (0+_base ), Header_Stride (0+_base ), Header_Height (0+_base )
BitmapSize NEAREST, Border, Border, Header_Width (0+_base ), Header_Height (0+_base )
Begin_G BITMAPS ' start drawing bitmaps
Const AW = (FT_DispWidth / 4)
Ln1 = Header_Width (0+_base ) / 2
Const AX = FT_DispHeight / 2
Ln2 = Header_Height (0+_base ) / 2
BMoffsetx = AW - Ln1
BMoffsety = AX - Ln2
Vertex2II BMoffsetx, BMoffsety, 0, 0
ColorRGB 255, 64, 64 ' red At (200, 120)
Const AY = FT_DispWidth * 2 / 4
Const AZ = FT_DispHeight / 2
BMoffsetx = AY - Ln1
BMoffsety = AZ - Ln2
Vertex2II BMoffsetx, BMoffsety, 0, 0
ColorRGB 64, 180, 64 ' green At (216, 136)
BMoffsetx = BMoffsetx + Ln1
BMoffsety = BMoffsety + Ln2
Vertex2II BMoffsetx, BMoffsety, 0, 0
ColorRGB 255, 255, 64 ' transparent yellow At (232, 152)
Color_A 150
BMoffsetx = BMoffsetx + Ln1
BMoffsety = BMoffsety + Ln2
Vertex2II BMoffsetx, BMoffsety, 0, 0
Color_A 255
ColorRGB 255, 255, 255
Vertex2F -10 * 16, -10 * 16 'For -ve coordinates use vertex2f instruction
UpdateScreen
Wait 1
End Sub ' Bitmap
'------------------------------------------------------------------------------------------------------------
Sub BitmapPalette
'------------------------------------------------------------------------------------------------------------
Local BMoffsetx As Integer
Local BMoffsety As Integer
Local Ln1 As Dword
Local Ln2 As Dword
TempDW = Loadlabel(paletteraw )
RdFlash_WrFT800 RAM_G, TempDW , Header_Stride (1+_base ) * Header_Height (1+_base )
TempDW = Loadlabel(paletteLUT )
RdFlash_WrFT800 RAM_PAL, TempDW , 1022
ClearScreen
ColorRGB 255, 255, 255
BitmapSource RAM_G
BitmapLayout Header_Format (1+_base ), Header_Stride (1+_base ), Header_Height (1+_base )
BitmapSize NEAREST, Border, Border, Header_Width (1+_base ), Header_Height (1+_base )
Begin_G BITMAPS ' start drawing bitmaps
Const DA = FT_DispWidth / 4
Ln1 = Header_Width (1+_base ) / 2
Const DB = FT_DispHeight / 2
Ln2 = Header_Height (1+_base ) / 2
BMoffsetx = DA - Ln1
BMoffsety = DB - Ln2
Vertex2II BMoffsetx, BMoffsety, 0, 0
UpdateScreen
Wait 1
End Sub ' BitmapPalette
'------------------------------------------------------------------------------------------------------------
Sub Fonts
'------------------------------------------------------------------------------------------------------------
' Inbuilt Font example For proportionate And non proportionate Text - hello world
Local B As Byte
Local i As byte
Local j As byte
Local hoffset As word
Local voffset As word
Local stringlen As byte
Local FontTableAddress As Dword
Local Display_string As String * 20
Display_string = "Hello World"
hoffset = FT_DispWidth - 100
hoffset = hoffset / 2
voffset = FT_DispHeight / 2
' Read the Font address From &HFFFFC location
FontTableAddress = Rd32 (&HFFFFC )
stringlen = Len(Display_string )
For i = 0 To 15
' Read the Font table From hardware
TempDW = i * FT_FONT_TABLE_SIZE
TempDW = TempDW + FontTableAddress
RdFT800_WrMem TempDW, Display_fontstruct, FT_FONT_TABLE_SIZE
Clear_B 1, 1, 1 ' Clear Screen
ColorRGB 255, 255, 255 ' Clear Screen
' Display String At the center Of Display
Begin_G BITMAPS
hoffset = FT_DispWidth - 120
hoffset = hoffset / 2
voffset = FT_DispHeight - FontHeightInPixels
voffset = voffset / 2
' Display hello world by offsetting wrt char Size
For j = 1 To stringlen
B = Asc(Display_string, j )
Vertex2II hoffset, voffset, i + 16, B
hoffset = hoffset + FontWidth (B +_base )
Next j
UpdateScreen
Wait 1
Next i
End Sub ' Fonts
'------------------------------------------------------------------------------------------------------------
Sub Text_8x8
'------------------------------------------------------------------------------------------------------------
' Display text8x8 Of abcdefgh
Local Text_Array As String * 10
Local String_size As Long
' Write the Data into RAM_G
Text_Array = "abcdefgh"
String_size = Len(Text_Array )
RdMem_WrFT800 RAM_G, Text_Array, String_size
ClearScreen
BitmapSource RAM_G
BitmapLayout TEXT8X8, 8 , 1 ' L1 format, Each Input Data element is in 1 byte size
BitmapSize NEAREST, Border, REPEAT, 8 * 8, 8 * 2 ' Output Is 8x8 format - draw 8 characters In horizontal repeated In 2 Line
Begin_G BITMAPS
' Display Text 8x8 At hoffset, voffset location
VerteX2F 16 * 16, 16 * 16
BitmapLayout TEXT8X8, 4, 2 ' L1 format And Each datatype Is 1 Byte Size
BitMapSize NEAREST, REPEAT, Border, 8 * 16, 8 * 2 ' Each character Is 8x8 In Size - so draw 32 characters In horizontal And 32 characters In vertical
VerteX2F (FT_DispWidth / 2) * 16, (FT_DispHeight / 2) * 16
UpdateScreen
Wait 1
End Sub ' Text_8x8
'------------------------------------------------------------------------------------------------------------
Sub Text_VGA
'------------------------------------------------------------------------------------------------------------
' Display textVGA Of Random values
' Write the Data into RAM_G
Local String_size As Long
Local i As Long
Local Char As Dword
Dim Text_Array (320) As Byte
For i = 0 To 319
Text_Array (i +_base ) = Rnd(255)
Next i
'Char = VarPtr(Text_Array(0+_base))
String_size = 320
RdMem_WrFT800 RAM_G, Text_Array (_base ), String_size
ClearScreen
BitmapSource RAM_G
' mandatory For textvga As background Color Is also one Of the parameter In textvga format
BlendFunc ONE, ZERO
'draw 8x8
BitmapLayout TEXTVGA, 2 * 4, 8 'L1 format, but Each Input Data element is of 2 bytes in size
BitmapSize NEAREST, Border, Border, 8 * 8, 8 * 8 'Output Is 8x8 format - draw 8 characters In horizontal And 8 vertical
Begin_G BITMAPS
VerteX2F 32 * 16, 32 * 16
End_G
'draw textvga
BitMapLayout TEXTVGA, 2 * 16, 8 'L1 format but Each datatype Is 16Bit Size
BitmapSize NEAREST, Border, REPEAT, 8 * 32, 8 * 32 '8 Pixels per character And 32 rows/colomns
Begin_G BITMAPS
' Display textvga At hoffset, voffset location
Vertex2F (FT_DispWidth / 2) * 16, (FT_DispHeight / 2) * 16
End_G
UpdateScreen
Wait 1
End Sub ' Text_VGA
'------------------------------------------------------------------------------------------------------------
Sub Bar_Graph
'------------------------------------------------------------------------------------------------------------
' Write the Data into RAM_G
Local String_size As Long
Local i As Long
Local tmpval As Long
Local tmpidx As Long
Local tmpL1 As Long
Local tmpL2 As Long
Dim Y_Array (512) As Byte
For i = 0 To 511
Y_Array (i +_base ) = Rnd(128) + 64 'within range
Next i
String_size = 512
RdMem_WrFT800 RAM_G, Y_Array (_base ), String_size
ClearColorRGB 255, 255, 255
Clear_B 1, 1, 1
BitmapSource RAM_G
BitmapLayout BARGRAPH, 256, 1
ColorRGB 128, 0, 0
BitmapSize NEAREST, Border, Border, 256, 256
Begin_G BITMAPS
' Display Text 8x8 At hoffset, voffset location
Vertex2II 0, 0, 0, 0
Vertex2II 256, 0, 0, 1
UpdateScreen
' Download the DL into DL RAM
Wait 1
For i = 0 To 512
' tmpval = 128 + (i/3 * qsin(-65536 * i / 48 )) / 65536
tmpidx = i
tmpL1 = -65536 * i
tmpL1 = tmpL1 /48
tmpL2 = qsin (tmpL1 )
tmpL1 = i /3
tmpL1 = tmpL1 * tmpL2
tmpL1 = tmpL1 / 65536
tmpval = tmpL1 + 128
Y_Array (i +_base ) = tmpval And &Hff
Next i
String_size = 512
RdMem_WrFT800 RAM_G, Y_Array (_base ), String_size
Wait 1
Clear_B 1, 1, 1 ' Clear Screen
BitmapSource RAM_G
BitmapLayout BARGRAPH, 256, 1
BitmapSize NEAREST, Border, Border, 256, 256
Begin_G BITMAPS
ColorRGB 255, 0, 0
' Display bargraph At hoffset, voffset location
Vertex2II 0, 0, 0, 0
Vertex2II 256, 0, 0, 1
ColorRGB 0, 0, 0
Vertex2II 0, 4, 0, 0
Vertex2II 256, 4, 0, 1
UpdateScreen
Wait 1
End Sub ' Bar_Graph
'------------------------------------------------------------------------------------------------------------
Sub LineStrips
'------------------------------------------------------------------------------------------------------------
ClearColorRGB 5, 45, 10
ColorRGB 255, 168, 64
Clear_B 1 , 1 , 1
Begin_G LINE_STRIP
Vertex2F 16 * 16, 16 * 16
Vertex2F (FT_DispWidth * 2 /3) * 16, (FT_DispHeight * 2 / 3) * 16
Vertex2F (FT_DispWidth - 80) * 16, (FT_DispHeight - 20) * 16
UpdateScreen
Wait 1
End Sub ' LineStrips
'------------------------------------------------------------------------------------------------------------
Sub EdgeStrips
'------------------------------------------------------------------------------------------------------------
ClearColorRGB 5, 45, 10
ColorRGB 255, 168, 64
Clear_B 1 , 1 , 1
Begin_G EDGE_STRIP_R
Vertex2F 16 * 16, 16 * 16
Vertex2F (FT_DispWidth * 2 / 3) * 16, (FT_DispHeight * 2 / 3) * 16
Vertex2F (FT_DispWidth - 80) * 16, (FT_DispHeight - 20) * 16
UpdateScreen
Wait 1
End Sub ' EdgeStrips
'------------------------------------------------------------------------------------------------------------
Sub Scissor
'------------------------------------------------------------------------------------------------------------
Clear_B 1, 1, 1
ScissorXY 40, 20 ' Scissor rectangle top Left At (40, 20)
ScissorSize 40, 40 ' Scissor rectangle Is 40 x 40 Pixels
ClearColorRGB 255, 255, 0 ' CLEER To yellow
Clear_B 1, 1, 1
UpdateScreen
Wait 1
End Sub ' Scissor
'------------------------------------------------------------------------------------------------------------
Sub Polygon
'------------------------------------------------------------------------------------------------------------
Clear_B 1, 1, 1 ' CLear Screen
ColorRGB 255, 0, 0
StencilOP Incrx, Incrx
ColorMask 0, 0, 0, 0 'mask All the colors
Begin_G EDGE_STRIP_L
Vertex2II FT_DispWidth / 2, FT_DispHeight / 4 , 0, 0
Vertex2II FT_DispWidth * 4 / 5, FT_DispHeight * 4 / 5, 0, 0
Vertex2II FT_DispWidth / 4, FT_DispHeight / 2 , 0, 0
Vertex2II FT_DispWidth / 2, FT_DispHeight / 4, 0, 0
End_G
ColorMask 1, 1, 1, 1 'Enable All the colors
StencilFunc EQUAL, 1, 255
Begin_G EDGE_STRIP_L
Vertex2II FT_DispWidth, 0, 0, 0
Vertex2II FT_DispWidth, FT_DispHeight, 0, 0
End_G
' Draw Lines At the BORDERs To make sure anti aliazing Is also done
StencilFunc ALWAYS, 0, 255
LineWidth 1 * 16
ColorRGB 0, 0, 0
Begin_G Lines
Vertex2II FT_DispWidth / 2, FT_DispHeight / 4, 0, 0
Vertex2II (FT_DispWidth * 4) / 5, (FT_DispHeight * 4) /5, 0, 0
Vertex2II (FT_DispWidth * 4) / 5, (FT_DispHeight * 4) /5, 0, 0
Vertex2II FT_DispWidth / 4, FT_DispHeight / 2, 0, 0
Vertex2II FT_DispWidth / 4, FT_DispHeight / 2, 0, 0
Vertex2II FT_DispWidth / 2, FT_DispHeight / 4, 0, 0
End_G
UpdateScreen
Wait 1
End Sub ' Polygon
'------------------------------------------------------------------------------------------------------------
Sub Cube
'------------------------------------------------------------------------------------------------------------
Local cnt As Byte
Local F0 As Integer, F1 As Integer, F2 As Integer, F3 As Integer, F4 As Integer, F5 As Integer, F6 As Integer
Local x As Long, y As Long, i As Long, z As Long, f As Long, g As Long
Local xoffset As Integer, yoffset As Integer, CubeEdgeSz As Integer
Dim point (30) As Long
Dim colorsA (3) As Word
Dim colorsB (3) As Word
Dim colorsC (3) As Word
Dim colorsD (3) As Word
Dim colorsE (3) As Word
Dim colorsF (3) As Word
' Color vertices
colorsA (0+_base ) = 255
colorsA (1+_base ) = 0
colorsA (2+_base ) = 0
colorsB (0+_base ) = 255
colorsB (1+_base ) = 0
colorsB (2+_base ) = 150
colorsC (0+_base ) = 0
colorsC (1+_base ) = 255
colorsC (2+_base ) = 0
colorsD (0+_base ) = 110
colorsD (1+_base ) = 120
colorsD (2+_base ) = 110
colorsE (0+_base ) = 0
colorsE (1+_base ) = 0
colorsE (2+_base ) = 255
colorsF (0+_base ) = 128
colorsF (1+_base ) = 128
colorsF (2+_base ) = 0
' Cube dimention Is Of 100 * 100 * 100
CubeEdgeSz = 100
xoffset = FT_DispWidth / 2
xoffset = xoffset - CubeEdgeSz
yoffset = FT_DispHeight - CubeEdgeSz
yoffset = yoffset / 2
' xy plane(front)
point (0+_base ) = _Vertex2F (xoffset * 16, yoffset * 16)
F0 = xoffset + CubeEdgeSz
F1 = yoffset + CubeEdgeSz
point (1+_base ) = _Vertex2F (F0 * 16, yoffset * 16)
point (2+_base ) = _Vertex2F (F0 * 16, F1 * 16)
point (3+_base ) = _Vertex2F (xoffset * 16, F1 * 16)
point (4+_base ) = point (0+_base )
'yz plane (Left)
F2 = CubeEdgeSz / 2
x = xoffset + F2 ' xoff+w/2
y = yoffset - F2 ' yoff-h/2
F3 = y + CubeEdgeSz
point (5+_base ) = point (0+_base )
point (6+_base ) = _Vertex2F (x * 16, y * 16)
point (7+_base ) = _Vertex2F (x * 16, F3 * 16)
point (8+_base ) = point (3+_base )
point (9+_base ) = point (5+_base )
'xz plane(top)
F4 = x + CubeEdgeSz
point (10+_base ) = point (0+_base )
point (11+_base ) = point (1+_base )
point (12+_base ) = _Vertex2F ( F4 * 16, y * 16)
point (13+_base ) = point (6+_base )
point (14+_base ) = point (10+_base )
'xz plane(bottom)
point (15+_base ) = point (3+_base )
point (16+_base ) = point (2+_base )
point (17+_base ) = _Vertex2F (F4 * 16, F3 * 16)
point (18+_base ) = point (7+_base )
point (19+_base ) = point (15+_base )
'yz plane (Right)
point (20+_base ) = point (2+_base )
point (21+_base ) = point (17+_base )
point (22+_base ) = point (12+_base )
point (23+_base ) = point (1+_base )
point (24+_base ) = point (20+_base )
'yz plane (back)
point (25+_base ) = point (6+_base )
point (26+_base ) = point (7+_base )
point (27+_base ) = point (17+_base )
point (28+_base ) = point (12+_base )
point (29+_base ) = point (25+_base )
Clear_B 1, 1, 1
LineWidth 16
ClearColorRGB 255, 255, 255
Clear_B 1, 1, 1
ColorRGB 255, 255, 255
' Draw a cube
StencilOP Incrx, Incrx
Color_A 192
For z = 0 To 5
Clear_B 0, 1, 1 ' Clear Stencil buffer
ColorMask 0, 0, 0, 0 ' Mask All the colors And draw one surface
StencilFunc ALWAYS, 0, 255 ' Stencil Function To increment All the values
Begin_G EDGE_STRIP_L
For i = 0 To 4
cnt = z * 5
cnt = cnt + i
Cmd32 point (cnt +_base )
Next
End_G
' Set the Color And draw a strip
ColorMask 1, 1, 1, 1
StencilFunc EQUAL, 1 , 255
Select Case z
Case 0
ColorRGB colorsA (0+_base ), colorsA (1+_base ), colorsA (2+_base )
Case 1
ColorRGB colorsB (0+_base ), colorsB (1+_base ), colorsB (2+_base )
Case 2
ColorRGB colorsC (0+_base ), colorsC (1+_base ), colorsC (2+_base )
Case 3
ColorRGB colorsD (0+_base ), colorsD (1+_base ), colorsD (2+_base )
Case 4
ColorRGB colorsE (0+_base ), colorsE (1+_base ), colorsE (2+_base )
Case 5
ColorRGB colorsF (0+_base ), colorsF (1+_base ), colorsF (2+_base )
End Select
F5 = CubeEdgeSz * 2
F6 = CubeEdgeSz * 2
Begin_G RECTS
Vertex2II xoffset, 0, 0, 0
Vertex2II xoffset + F5, yoffset + F6, 0, 0
End_G
Next
UpdateScreen
Wait 1
End Sub ' Cube
'------------------------------------------------------------------------------------------------------------
Sub Ball_Stencil
'------------------------------------------------------------------------------------------------------------
' First draw points followed by Lines To Create 3d ball kind Of effect
Local xball As Integer, yball As Integer, rball As Integer, numpoints As Integer, numlines As Integer
Local i As Integer, asize As Integer, aradius As Integer, gridsize As Integer
Local asmooth As Long, loopflag As Long, dispa As Long, dispr As Long, displ As Long, Temp1 As Long, Temp2 As Long
Local dispb As Long, xflag As Long, yflag As Long, tempsmooth As Long
Local TempDB As Single
xball = FT_DispWidth /2
yball = 120
rball = FT_DispWidth /8
numpoints = 6
numlines = 8
gridsize = 20
dispr = FT_DispWidth - 10
displ = 10
dispa = 10
dispb = FT_DispHeight - 10
xflag = 1
yflag = 1
Temp1 = dispr - displ
Temp2 = Temp1 Mod gridsize
dispr = dispr - Temp2
Temp1 = dispb - dispa
Temp2 = Temp1 Mod gridsize
dispb = dispb - Temp2
' Write the Play sound
Wr16 Reg_Sound, &H50
loopflag = 100
While loopflag > 0
Temp1 = xball + rball
Temp1 = Temp1 + 2
Temp2 = xball - rball
Temp2 = Temp2 - 2
If Temp1 >= dispr Or Temp2 <= displ Then
xflag = xflag Xor 1
Wr8 Reg_Play, 1
End If
Temp1 = yball + rball
Temp1 = Temp1 + 8
Temp2 = yball - rball
Temp2 = Temp2 - 8
If Temp1 >= dispb Or Temp2 <= dispa Then
yflag = yflag Xor 1
Wr8 Reg_Play, 1
End If
If xflag > 0 Then
xball = xball + 2
Else
xball = xball - 2
End If
If yflag > 0 Then
yball = yball + 8
Else
yball = yball - 8
End If
ClearColorRGB 128, 128, 0
Clear_B 1, 1, 1 ' Clear Screen
StencilOP IncrX, IncrX
ColorRGB 0, 0, 0
' draw grid
LineWidth 16
Begin_G LINES
Temp1 = dispr - displ
Temp1 = Temp1 / gridsize
For i = 0 To Temp1
Temp2 = gridsize * i
Temp2 = Temp2 + displ
Vertex2F Temp2 * 16, dispa * 16
Vertex2F Temp2 * 16, dispb * 16
Next i
Temp1 = dispb - dispa
Temp1 = Temp1 / gridsize
For i = 0 To Temp1
Temp2 = gridsize * i
Temp2 = Temp2 + dispa
Vertex2F displ * 16, Temp2 * 16
Vertex2F dispr * 16, Temp2 * 16
Next i
End_G
ColorMask 0, 0, 0, 0 'mask All the colors
PointSize rball * 16
Begin_G FTPOINTS
Vertex2F xball * 16, yball * 16
StencilOP Incrx, Zero
StencilFunc GEQUAL, 1, 255
' one side points
For i = 1 To numpoints
asize = i * rball
asize = asize * 2
Temp1 = numpoints + 1
asize = asize / Temp1
TempDB = 2 * rball
Temp2 = TempDB
TempDB = asize / TempDB
asmooth = smoothlerp (TempDB, 0, Temp2 )
If asmooth > rball Then
'change the offset To -ve
tempsmooth = asmooth - rball
Temp1 = rball * rball
Temp2 = tempsmooth * tempsmooth
Temp1 = Temp1 + Temp2
Temp2 = 2 * tempsmooth
aradius = Temp1 / Temp2
PointSize aradius * 16
Temp1 = xball - aradius
Temp1 = Temp1 + tempsmooth
Vertex2F Temp1 * 16, yball * 16
Else
tempsmooth = rball - asmooth
Temp1 = rball * rball
Temp2 = tempsmooth * tempsmooth
Temp1 = Temp1 + Temp2
Temp2 = 2 * tempsmooth
aradius = Temp1 / Temp2
PointSize aradius * 16
Temp1 = xball + aradius
Temp1 = Temp1 - tempsmooth
Vertex2F Temp1 * 16, yball * 16
End If
Next i
End_G
Begin_G LINES
' draw Lines - Line should be At least radius diameter
For i = 1 To numlines
Temp1 = i * rball
Temp1 = Temp1 * 2
Temp1 = Temp1 / numlines
asize = Temp1
TempDB = 2 * rball
Temp2 = TempDB
TempDB = asize / TempDB
asmooth = smoothlerp (TempDB, 0 , Temp2 )
LineWidth asmooth * 16
Temp1 = xball - rball
Temp2 = yball - rball
Vertex2F Temp1 * 16, Temp2 * 16
Temp1 = xball + rball
Temp2 = yball - rball
Vertex2F Temp1 * 16, Temp2 * 16
Next i
End_G
ColorMask 1, 1, 1, 1 ' Enable All the colors
StencilFunc ALWAYS, 1, 255
StencilOP KEEP, KEEP
ColorRGB 255, 255, 255
PointSize rball * 16
Begin_G FTPOINTS
Temp1 = xball - 1
Temp2 = yball - 1
Vertex2F Temp1 * 16, Temp2 * 16
ColorRGB 0, 0, 0 ' shadow
Color_A 160
Temp1 = xball + 16
Temp2 = yball + 8
Vertex2F Temp1 * 16, Temp2 * 16
Color_A 255
ColorRGB 255, 255, 255
Vertex2F xball * 16, yball * 16
ColorRGB 255, 0, 0
StencilFunc GEQUAL, 1, 1
StencilOP KEEP, KEEP
Vertex2F xball * 16, yball * 16
End_G
UpdateScreen
Waitms 30
Decr loopflag
Wend
End Sub ' Ball_Stencil
'------------------------------------------------------------------------------------------------------------
Function Lerp (ByVal t As Single, ByVal a As Single, ByVal b As Single) As Long
'------------------------------------------------------------------------------------------------------------
Local TempS As Single
TempS = 1 - t
TempS = TempS * a
TempS = TempS + t
TempS = TempS * b
Lerp = TempS
End Function ' Lerp
'------------------------------------------------------------------------------------------------------------
Function smoothlerp (ByVal t As Single, ByVal a As Single, ByVal b As Single) As Single
'------------------------------------------------------------------------------------------------------------
Local TempS As Single
Local TempT As Single
TempS = 3 * t
TempS = TempS * t
TempT = 2 * t
TempT = TempT * t
TempT = TempT * t
smoothlerp = lerp (TempS -TempT, a, b )
End Function ' smoothlerp
'------------------------------------------------------------------------------------------------------------
Sub FtdiString
'------------------------------------------------------------------------------------------------------------
Local hoffset As Integer, voffset As Integer, PointSz As Integer
voffset = FT_DispHeight - 49 '49 Is the Max height of inbuilt Font Handle 31
voffset = voffset / 2
hoffset = FT_DispWidth - 144
hoffset = hoffset / 2
PointSz = 20
hoffset = hoffset + PointSz
Wr32 RAM_DL + 0, _Clear_B (1, 1, 1) ' Clear Screen
Wr32 RAM_DL + 4, _Begin_G (BITMAPS ) ' start drawing bitmaps
Wr32 RAM_DL + 8, _Vertex2II (hoffset, voffset, 31, 70) ' ascii F in font 31
hoffset = hoffset + 24
Wr32 RAM_DL + 12, _Vertex2II (hoffset, voffset, 31, 84) ' ascii T
hoffset = hoffset + 26
Wr32 RAM_DL + 16, _Vertex2II (hoffset, voffset, 31, 68) ' ascii D
hoffset = hoffset + 29
Wr32 RAM_DL + 20, _Vertex2II (hoffset, voffset, 31, 73) ' ascii I
Wr32 RAM_DL + 24, _End_G ()
Wr32 RAM_DL + 28, _ColorRGB (160, 22, 22) ' change Color To red
Wr32 RAM_DL + 32, _PointSize (PointSz * 16) ' Set Point Size
hoffset = FT_DispWidth - 144
hoffset = hoffset / 2
Wr32 RAM_DL + 36, _Begin_G (FTPOINTS ) ' start drawing points
Wr32 RAM_DL + 40, _Vertex2II (hoffset, FT_DispHeight / 2, 0, 0) ' red Point
Wr32 RAM_DL + 44, _End_G ()
Wr32 RAM_DL + 48, _Display_E () ' Display the image
DLSwap
Wait 2
End Sub ' FtdiString
'------------------------------------------------------------------------------------------------------------
Sub StreetMap
'------------------------------------------------------------------------------------------------------------
' Call And Function Example - simple graph
ClearColorRGB 236, 232, 224 'light gray
Clear_B 1, 1, 1
ColorRGB 170, 157, 136 'medium gray
LineWidth 63
Call_C 19 ' draw the streets
ColorRGB 250, 250, 250 'white
LineWidth 48
Call_C 19 'draw the streets
ColorRGB 0, 0, 0
Begin_G BITMAPS
Vertex2II 240, 91, 27, 77 'draw 'Main st.' At (240,91)
Vertex2II 252, 91, 27, 97
Vertex2II 260, 91, 27, 105
Vertex2II 263, 91, 27, 110
Vertex2II 275, 91, 27, 115
Vertex2II 282, 91, 27, 116
Vertex2II 286, 91, 27, 46
End_G
Display_E
Begin_G Lines
Vertex2F -160, -20
Vertex2F 320, 4160
Vertex2F 800, -20
Vertex2F 1280, 4160
Vertex2F 1920, -20
Vertex2F 2400, 4160
Vertex2F 2560, -20
Vertex2F 3040, 4160
Vertex2F 3200, -20
Vertex2F 3680, 4160
Vertex2F 2880, -20
Vertex2F 3360, 4160
Vertex2F -20, 0
Vertex2F 5440, -480
Vertex2F -20, 960
Vertex2F 5440, 480
Vertex2F -20, 1920
Vertex2F 5440, 1440
Vertex2F -20, 2880
Vertex2F 5440, 2400
End_G
Return_C
UpdateScreen
Wait 2
End Sub ' StreetMap
'------------------------------------------------------------------------------------------------------------
Sub AdditiveBlendText
'------------------------------------------------------------------------------------------------------------
' Usage of Additive Blending - Draw 3 'G's
Clear_B 1, 1, 1 ' Clear Screen
Begin_G BITMAPS
Vertex2II 50, 30, 31, &H47
Color_A 128
Vertex2II 58, 38, 31, &H47
Color_A 64
Vertex2II 66, 46, 31, &H47
End_G
UpdateScreen
Wait 1
End Sub ' AdditiveBlendText
'------------------------------------------------------------------------------------------------------------
Sub MacroUsage
'------------------------------------------------------------------------------------------------------------
' Usage Of Macro
Local xoffset As Long, yoffset As Long, xflag As Long, yflag As Long, flagloop As Long
Local Temp1 As Integer
' Local p_bmhdr As SAMAPP_Bitmap_header_t
xflag = 1
yflag = 1
flagloop = 1
xoffset = FT_DispWidth / 3
yoffset = FT_DispHeight / 2
' First Write a valid Macro instruction into macro0
Wr32 REG_MACRO_0, _Vertex2F (xoffset * 16, yoffset * 16)
TempDW = Loadlabel(Bitmap_RawData )
RdFlash_WrFT800 RAM_G, TempDW, Header_Stride (0+_base ) * Header_Height (0+_base )
Clear_B 1, 1, 1 ' Clear Screen
BitmapSource RAM_G
BitmapLayout Header_Format (0+_base ), Header_Stride (0+_base ), Header_Height (0+_base )
BitmapSize NEAREST, Border, Border, Header_Width (0+_base ), Header_Height (0+_base )
Begin_G BITMAPS ' start drawing %BITMAPS
Macro_R 0 ' draw the image At (100,120)
End_G
UpdateScreen
flagloop = 300
While flagloop > 0
Temp1 = xoffset + Header_Width (0+_base )
If Temp1 >= FT_DispWidth Or xoffset <= 0 Then
xflag = xflag Xor 1
End If
Temp1 = yoffset + Header_Height (0+_base )
If Temp1 >= FT_DispHeight Or yoffset <= 0 Then
yflag = yflag Xor 1
End If
If xflag > 0 Then
Incr xoffset
Else
Decr xoffset
End If
If yflag > 0 Then
Incr yoffset
Else
Decr yoffset
End If
' update just the Macro
Wr32 REG_MACRO_0, _Vertex2F (xoffset * 16, yoffset * 16)
Waitms 10
Decr flagloop
Wend
End Sub ' MacroUsage
'------------------------------------------------------------------------------------------------------------
Sub AdditiveBlendPoints
'------------------------------------------------------------------------------------------------------------
' Additive blending Of points - 1000 points
Local i As Long, hoffset As Long, voffset As Long, flagloop As Long ,j As Long
Local hdiff As Long, vdiff As Long, PointSz As Long, t As Long
Local Temp1 As Long, Temp2 As Long, Temp3 As Integer, Temp4 As Integer
PointSz = 4
flagloop = 20
While flagloop > 0
Clear_B 1, 1, 1 ' Clear Screen
ColorRGB 20, 91, 20 ' green Color For additive blending
BlendFunc SRC_ALPHA, ONE 'Input Is Source alpha And destination Is whole Color
PointSize PointSz * 16
Begin_G FTPOINTS
' First 100 Random values
For i = 0 To 99
hoffset = Rnd(FT_DispWidth )
voffset = Rnd(FT_DispHeight )
Vertex2F hoffset * 16, voffset * 16
Next i
' Next 480 are sine values Of two cycles
For i = 0 To 159
' i is x offset, y is sinwave
hoffset = i * 3
Temp1 = FT_DispWidth / 6
Temp2 = -65536 * i
Temp2 = Temp2 / Temp1
Temp1 = qsin (Temp2 )
Temp2 = FT_DispHeight / 2
Temp2 = Temp2 * Temp1
Temp2 = Temp2 / 65536
Temp1 = FT_DispHeight / 2
Temp2 = Temp2 + Temp1
voffset = Temp2
Vertex2F hoffset * 16, voffset * 16
For j = 0 To 3
Temp3 = Rnd(24)
hdiff = Temp3 - 12
Temp4 = Rnd(24)
vdiff = Temp4 - 12
Temp1 = hoffset + hdiff
Temp2 = voffset + vdiff
Vertex2F Temp1 * 16, Temp2 * 16
Next
Next
End_G
UpdateScreen
Waitms 10
Decr flagloop
Wend
End Sub ' AdditiveBlendPoints
'------------------------------------------------------------------------------------------------------------
$inc Bitmap_RawData, nosize, "Bitmap_RawData.raw" ' used in SUB Bitmap and SUB MacroUsage
$inc paletteraw, nosize, "lenaface40_palette.raw" ' used in SUB BitmapPalette
$inc paletteLUT, nosize, "lenaface40_palette_LUT.raw" ' used in SUB BitmapPalette |
(BASCOM-AVR version : 2.0.7.7 ) _________________ Mark |
|
Back to top |
|
|
Duval JP
Joined: 22 Jun 2004 Posts: 1161 Location: France
|
Posted: Wed Oct 15, 2014 1:55 pm Post subject: |
|
|
FT800 seems to be a very good product, typicaly English ! clever as Vinculum.
Is your lib works also with audio file ?
I saw also : $NOTYPECHECK and nothing in the help file about, But may be my view is not so accurate ?
Again bravo !
JP |
|
Back to top |
|
|
PeterM
Joined: 09 Jun 2008 Posts: 118
|
Posted: Wed Oct 15, 2014 9:05 pm Post subject: |
|
|
JP
Audio files need to be converted to a Raw type of file before played (FTDI has utilities for this).
$NOTYPECHECK will stop the compiler complaining when assigning values to different variables types.
things like word to byte etc.. (Mark will explain more). _________________ Peter |
|
Back to top |
|
|
jhulsbergen
Joined: 08 Nov 2006 Posts: 3
|
Posted: Thu Nov 13, 2014 3:44 pm Post subject: |
|
|
Hello Is the new bascom version, with the FT800 library allready done? |
|
Back to top |
|
|
albertsm
Joined: 09 Apr 2004 Posts: 5921 Location: Holland
|
Posted: Thu Nov 13, 2014 3:59 pm Post subject: |
|
|
it is done but when you mean available, you either need SLA access or wait for the 2078 release. the homepage will have a newsitem when there is a new release. and when you have auto update notification on, you will notice at startup of bascom too. _________________ Mark |
|
Back to top |
|
|
Per Svensson
Joined: 03 Oct 2004 Posts: 235 Location: Gothenburg, Sweden
|
Posted: Tue Nov 18, 2014 5:51 pm Post subject: FT800 |
|
|
Although Mark already emphasized the great job that PeterM has done I would like to say it again.
I know he has performed an ENORMOUS task in this porting to Bascom, because i have seen his struggle
while helping out with a little testing and other small jobs. Remember that when you smoothly navigate
through the powerful functions. Peter did the hard work for you for free !!! (And Mark too of course)
My benefit from following the process has been to realize the enormous graphic power that lurks inside this tiny FT800 chip.
It can do things that an AVR would have no chance of coming even close to. It is a true graphics engine and once you take the
trouble of learning its command syntax (which can be daunting) you will never want any other Display.
The only drawback is that it comes with LCD's that are rather weak on luminance. In bright daylight it can be hard to see.
I imagine that the resistive touch film has something to do with it too. Slightly obscuring the display, Once the capacitive touch is available, it will probably be better.
I have used the FT800 display for an interactive Autopilot frontend with keyboard, Clock, Sliders, Rotating objects and other widgets.
It works very well, but was sometimes be hard to debug because the result on screen can go totally nuts when you write something wrong.
I remember I intended to display a rotating boat-hull (seen from above) and built it up as two mirrored copies of a half hull to save ROM image space in the AVR.
I almost got gray hair before I understood how to transfer the half-image. Then creating an FT800 ram copy. Then cloning a mirrored image. Then rotating them synchronously around a certain point along the joint...
But I learnt a lot, and the best is that it automatically get a very professional look.
Take your time to learn its features and you will just love it.
Then send flowers to Australia !
/Per |
|
Back to top |
|
|
olhexy
Joined: 03 Apr 2011 Posts: 192 Location: Tilburg, Netherlands
|
Posted: Fri Jan 16, 2015 10:12 pm Post subject: |
|
|
I landed here to discover more about qsin and qcos. It is not a question about the FTDI FT800 graphic chip.
Help says: http://avrhelp.mcselec.com/index.html
var = QSIN( source )
Var
A numeric integer variable that is assigned with sinus of variable source.
source
The integer variable to get the sinus of.
What is meant with source? Radians? Degrees? Or an other subdivision of a circle? Or is it a hyperbolicly super inverse squared thing?
As far as I understand these "var" integers are 0, 1, 2, 3, 4... and so on. But usually every sine is a fp between -1 and +1
I would like to be informed about the magic that creates the integers from the fp's from -1 to +1!
Please give a more accurate definition of this official new "qsin" and "qcos" words in Bascom! |
|
Back to top |
|
|
PeterM
Joined: 09 Jun 2008 Posts: 118
|
Posted: Sat Jan 17, 2015 10:46 am Post subject: |
|
|
Olhexy
The qsin/qcos have a precision is 16 bit, but if you look at the
FT800 Gauges.bas demo, with your Maths knowledge it should
give you some answers.
(Otherwise give me a couple of days and I will sort it out for you). _________________ Peter |
|
Back to top |
|
|
olhexy
Joined: 03 Apr 2011 Posts: 192 Location: Tilburg, Netherlands
|
Posted: Sat Jan 17, 2015 1:26 pm Post subject: |
|
|
Hi Peter,
Please sort it out for us. Give the facts.
I will give my thoughts.
bascom integer
Value: -32768 bis +32767
To discribe all possible angles with this integer I (but I am not Bascom) would define +/- 180° = +/-32768 = "source"
(Or should the mutiplier be 32767?)
79° gives 79°/180° x32768 for "source". So "source" =14381,51111.
It is up to the programmer to round to 14382 or chop at 14381.
In the same way I would define "var" = {sine represented as fp} * 32768
If this value should be rounded or chopped is not defined. Probably the definition should be: "var"/32768 = sine represented as fp.
This is my interpretation of what Bascom could try to achieve.
It is only a bloody guess.
BTW: we also have a 2 byte Word (value 0 to 65535) that could perfectly be used to represent an angle for 0° up to 360°.
I think it is Bascom and not me who should give the definitions.
EDIT: It could be an implementation of http://www.mikrocontroller.net/articles/AVR_Arithmetik/Sinus_und_Cosinus_%28Lineare_Interpolation%29 that gives a fast (max 60...74 cycles) 16bit result. |
|
Back to top |
|
|
Per Svensson
Joined: 03 Oct 2004 Posts: 235 Location: Gothenburg, Sweden
|
Posted: Mon Feb 09, 2015 5:07 pm Post subject: |
|
|
Olhexy,
Run this small test and you will see that the argument range is -32768 to +32767
and the output range is also -32768 to +32767
So:
-32768 correspond to -180 deg (or -Pi)
-32768 correspond to -180 deg (or -Pi)
+32767 correspond to +180 deg (or +Pi)
-32768 correspond to SIN(-180deg) or SIN(-Pi)
+32767 correspond to SIN(+180deg) or SIN(+Pi)
End of guesswork?
/Per
Dim I As Integer
Dim Trig As Integer
Print "SINTABLE"
For I = -32768 To 32767 Step 4096
Trig = Qsin(i)
Print I ; " " ; Trig
Next I
Print
Print "COSTABLE"
For QSINE
this becomes:
SINTABLE
-32768 0
-28672 -12539
-24576 -23169
-20480 -30272
-16384 -32767
-12288 -30272
-8192 -23169
-4096 -12539
0 0
4096 12539
8192 23169
12288 30272
16384 32767
20480 30272
24576 23169
28672 12539
32767 0 |
|
Back to top |
|
|
Robert_d1968
Joined: 18 Dec 2012 Posts: 67 Location: America
|
Posted: Sat Feb 28, 2015 12:50 pm Post subject: |
|
|
Thank you guys,
I have been working with the FT800 and the STM32F407 series of MCU's.
I was wondering if Bascom would put this together, Now that you have I would like to get the beta release for this ft800 controller.
I will be sending an email to support ASAP!
Thanks again,
Robert |
|
Back to top |
|
|
albertsm
Joined: 09 Apr 2004 Posts: 5921 Location: Holland
|
Posted: Sat Feb 28, 2015 12:58 pm Post subject: |
|
|
Beta is closed and in current release 2078. So no need to mail support. Just look at the samples and help. _________________ Mark |
|
Back to top |
|
|
mototest2
Joined: 24 Dec 2006 Posts: 53
|
Posted: Sat Feb 28, 2015 6:59 pm Post subject: |
|
|
Hi Guys
I need help, how detect pressed key created by CmdButton ?
and I have one question , in demo files in some demos is lline "'RdMem_WrFT800.." it always generate errors when I use Xmega, how I can resolve it ?
I have display 4.3" 480x272
Thanks
Bob |
|
Back to top |
|
|
PeterM
Joined: 09 Jun 2008 Posts: 118
|
Posted: Sun Mar 01, 2015 2:41 am Post subject: |
|
|
Bob
Before you create a Button (CmdButton) you need to assign it with a TAG number (or a label) so
it can be identified (this applies for any Object/Graphic you want to create to you can identify it).
Then you need to poll and read the value from Rd8(Reg_Touch_Tag) so it can tell you which Object you
clicked on (similar to Inkey,Waitkey, Input).
If you look at Widget_Keys_Interactive.bas and FT800 Keyboard.bas
it will give you a better understanding.
As for the Xmega error, may have to wait for Mark to check. _________________ Peter |
|
Back to top |
|
|
albertsm
Joined: 09 Apr 2004 Posts: 5921 Location: Holland
|
Posted: Mon Mar 02, 2015 12:08 am Post subject: |
|
|
bob,
use this code :
Code: | For Ti = 1 To Count
R24 = Inp(varadr)
!call _ft_spi
'#if _xmega
' Print #10, Varadr
'#Else
' Spiout Tb , 1
'#EndIf
Incr Varadr
Next |
the problem is that the SPI is not opened with #10. so you could also open the SPI channel in the main code.
But a better solution is to call the lib directly as the code above does. _________________ Mark |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You cannot download files in this forum
|
|