7 inch display board
Contents |
Description
Hardware
- WIZFI210 Wireless network
- GPS ITRAX300 GPS
- BTM220 Class 1 bluetooth
- Bluegiga WT41 1 kilometer bluetooth
- SCP1000 barometer
- DS1337 clock with battery backup
- RS232
- Alvidi AVRB Atxmega128A1 module
- 7 inch display
- FT232RL USB
Pictures
|
Source code
Include a PDF-file for the 7 inch display and some pictures for the Alvidi on-board SD-card : Download Ssd1963_7inch.zip
Example of main program:
'******************************************************************************* ' ' Copyright Michael Koecher aka six1 8/2010 ' -> http://www.six1.net/ michael@koecher-web.de ' ' http://creativecommons.org/licenses/by-sa/3.0/de/ ' Original nur von http://bascomforum.de ' Sie dürfen: ' ' * das Werk bzw. den Inhalt vervielfältigen, verbreiten und öffentlich zugänglich machen ' ' * Abwandlungen und Bearbeitungen des Werkes bzw. Inhaltes anfertigen ' ' Zu Den Folgenden Bedingungen: ' ' * Namensnennung. ' Sie müssen den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen. ' ' * Keine kommerzielle Nutzung. ' Dieses Werk darf nicht für kommerzielle Zwecke verwendet werden. ' ' * Weitergabe unter gleichen Bedingungen. ' Wenn Sie das lizenzierte Werk bzw. den lizenzierten Inhalt bearbeiten ' oder in anderer Weise erkennbar als Grundlage für eigenes Schaffen verwenden, ' dürfen Sie die daraufhin neu entstandenen Werke bzw. Inhalte nur ' unter Verwendung von Lizenzbedingungen weitergeben, die mit denen ' dieses Lizenzvertrages identisch oder vergleichbar sind. ' ' Wobei gilt: ' ' * Verzichtserklärung ' Jede der vorgenannten Bedingungen kann aufgehoben werden, sofern Sie ' die ausdrückliche Einwilligung des Rechteinhabers dazu erhalten. ' ' * Sonstige Rechte ' Die Lizenz hat keinerlei Einfluss auf die folgenden Rechte: ' - Die gesetzlichen Schranken des Urheberrechts und sonstigen ' Befugnisse zur privaten Nutzung ' - Das Urheberpersönlichkeitsrecht des Rechteinhabers ' - Rechte anderer Personen, entweder am Lizenzgegenstand selber oder ' bezüglich seiner Verwendung, zum Beispiel Persönlichkeitsrechte abgebildeter Personen. ' ' Hinweis ' ' Im Falle einer Verbreitung müssen Sie anderen alle Lizenzbedingungen ' mitteilen, die für dieses Werk gelten. Am einfachsten ist es, ' einen Link auf http://creativecommons.org/licenses/by-sa/3.0/de/ einzubinden. ' ' '******************************************************************************* 'auf Treiber IC SSD1963 geändert 26.11.2011 '10.09.2012 angepast für Display Typ AT070TN90 'Hkipnik@aol.com '******************************************************************************* $regfile = "xm128a1def.dat" $hwstack = 200 $swstack = 200 $framesize = 500 $crystal = 32000000 Config Osc = Enabled , 32mhzosc = Enabled Config Sysclock = 32mhz '--> 32MHz '******************************************************************************* Config Osc = Disabled , 32mhzosc = Enabled Osc_pllctrl = &B10_0_00100 Do Loop Until Osc_status.1 = 1 'Check if RC2MRDY is ready ' 'enable PLL Set Osc_ctrl.4 'PLL enable 'configure the systemclock Config Sysclock = Pll , Prescalea = 1 , Prescalebc = 1_1 'use PLL Stop Watchdog '******************************************************************************* '******************************************************************************* 'Touch Interrupt '******************************************************************************* Const Use_touch = 1 'use Touch = 1 #if Use_touch = 1 Config Pinf.0 = Input 'Set PINF.4 as Input 'Because of the activated Pullup the PIN Level is high and there is a falling edge when switch is pressed Config Xpin = Portf.0 , Outpull = Pullup , Sense = Falling 'enable Pull up and reaction on falling edge Portf_int0mask = &B0000_0001 'include PIN0 in INT0 Mask Portf_intctrl = &B0000_00_01 '^ 'Low Level INT0 Interrupt Dim Touch_flag As Bit Touch_flag = 0 On Portf_int0 Touch_int Enable Portf_int0 , Lo #endif '******************************************************************************* Config Priority = Static , Vector = Application , Lo = Enabled , Med = Enabled Config Com5 = 57600 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8 Open "COM5:" For Binary As #1 Print #1 , "Graphic 800x480" '******************************************************************************* $include "SSD1963_declarations.inc" $include "SSD1963__sd-card_declarations.inc" '******************************************************************************* Call Sdcard_initialize() '******************************************************************************* 'use for Demo Dim Farbe As Word , Countx As Word , Xx1 As Word , Xx2 As Word , Yy1 As Word , Yy2 As Word , Penwidth As Byte , Box_fill As Byte , Show_border As Byte , Radius As Word Dim Help_str As String * 10 '******************************************************************************* 'Start SSD1963 '******************************************************************************* Call Ssd1963_init() '******************************************************************************* Enable Interrupts '*** MAIN ********************************************************************** Do Call Lcd_clear(blue) Call Lcd_text( "Clear area" , 230 , 20 , 1 , Yellow , Blue) Call Lcd_clear_area(100 , 100 , 200 , 200 , White) Wait 2 Call Lcd_clear_area(1 , 1 , 200 , 200 , White) Wait 2 Call Lcd_clear(red) Call Lcd_text( "BMP 800x480 hallo world" , 100 , 224 , 1 , Gold , Black) Call Lcd_text( "BMP 800x480 hallo world" , 20 , 20 , 2 , Yellow , Red) Wait 1 Call Lcd_clear(black) Call Lcd_draw_bmp( "frau5.bmp" , 200 , 0) '24Bit Wait 1 Call Lcd_clear(red) Call Lcd_draw_bmp( "tieger5.bmp" , 1 , 0) '24Bit Call Lcd_text_trans( "24Bit Bmp" , 310 , 100 , 1 , Red , Transparent) Wait 1 Call Lcd_clear(red) Call Lcd_draw_bmp( "tieg8bit.bmp" , 0 , 0) '8Bit Call Lcd_text_trans( "8Bit Bmp" , 310 , 100 , 1 , Red , Transparent) Wait 1 Call Lcd_draw_bmp( "frau5.bmp" , 200 , 0) '24Bit Wait 1 Call Lcd_draw_bmp( "pic18bit.bmp" , 0 , 0) '8Bit Call Lcd_text_trans( "8Bit Bmp" , 310 , 100 , 1 , Red , Transparent) Wait 1 Call Lcd_clear(red) Call Lcd_draw_bmp( "pic28bit.bmp" , 0 , 0) '8Bit Call Lcd_text_trans( "8Bit Bmp" , 310 , 100 , 1 , Red , Transparent) Wait 3 Call Lcd_negate(0) Call Lcd_text_trans( "negate" , 310 , 200 , 1 , Red , Transparent) Wait 3 Call Lcd_negate(1) Wait 3 Call Lcd_clear(red) Call Lcd_draw_bmp( "test8bit.bmp" , 0 , 0) '8Bit Wait 1 Call Lcd_clear(blue) #if Use_touch = 1 Call Lcd_box(700 , 420 , 790 , 470 , Red , White , 1 , 1) Call Lcd_box(100 , 100 , 105 , 105 , Red , White , 1 , 1) Call Lcd_text( "Touch me" , 390 , 10 , 2 , Yellow , Black) Call Lcd_text( "next" , 720 , 435 , 2 , Yellow , Red) Do If Touch_flag = 1 Then Touchx = 0 Touchy = 0 Call Lcd_read_touch() Select Case Touchx Case 570 To 630 : If Touchy > 5 And Touchy < 65 Then Ende = 1 End If End Select If Ende = 1 Then Ende = 0 Exit Do End If Touch_flag = 0 End If Loop #endif Call Lcd_clear(black) Call Lcd_text( "LINE" , 390 , 10 , 2 , Yellow , Black) For Countx = 1 To 100 Farbe = Rnd(10) Xx1 = Rnd(740) Xx2 = Rnd(740) Yy1 = 90 + Rnd(300) Yy2 = 90 + Rnd(300) Penwidth = Rnd(4) Penwidth = Rnd(4) Call Lcd_line(xx1 , Yy1 , Xx2 , Yy2 , Penwidth , Color_array(farbe)) Next Wait 2 Call Lcd_clear(black) Call Lcd_text( "BOX FILL" , 390 , 10 , 2 , Yellow , Black) For Countx = 1 To 100 Xx1 = Rnd(740) Xx2 = Rnd(740) Yy1 = 90 + Rnd(300) Yy2 = 90 + Rnd(300) Farbe = Rnd(10) Box_fill = Rnd(100) If Box_fill < 50 Then Box_fill = 0 Show_border = Rnd(100) If Show_border < 70 Then Show_border = 0 Call Lcd_box(xx1 , Yy1 , Xx2 , Yy2 , Color_array(farbe) , White , Box_fill , 1) Next Wait 2 Call Lcd_clear(black) Call Lcd_text( "BOX" , 390 , 10 , 2 , Yellow , Black) For Countx = 1 To 100 Xx1 = Rnd(740) Xx2 = Rnd(740) Yy1 = 90 + Rnd(300) Yy2 = 90 + Rnd(300) Farbe = Rnd(10) Call Lcd_box(xx1 , Yy1 , Xx2 , Yy2 , White , Color_array(farbe) , 0 , 1) Next Wait 2 Call Lcd_clear(black) Call Lcd_text( "Circle" , 370 , 10 , 2 , Yellow , Black) For Countx = 1 To 100 Xx1 = 40 + Rnd(640) Yy1 = 20 + Rnd(400) Radius = Rnd(50) Farbe = Rnd(10) Call Lcd_drawcircle(xx1 , Yy1 , Radius , 100 , 2 , Color_array(farbe)) Next Wait 2 Call Lcd_clear(black) Call Lcd_text( "Circle Fill" , 370 , 10 , 2 , Yellow , Black) For Countx = 1 To 100 Xx1 = 50 + Rnd(540) Yy1 = 80 + Rnd(300) Radius = Rnd(50) Farbe = Rnd(10) Call Lcd_fill_circle(xx1 , Yy1 , Radius , Color_array(farbe)) Next Wait 2 Call Lcd_clear(black) Call Lcd_text( "BMP 320x240" , 330 , 10 , 2 , Yellow , Black) Call Lcd_draw_bmp( "sylt1.bmp" , 240 , 100) Wait 1 Call Lcd_draw_bmp( "tieger5.bmp" , 0 , 0) Call Lcd_setscrollarea(0 , 480 , 0) For Countx = 0 To 479 Call Lcd_scroll(countx) Waitms 2 Next For Countx = 479 To 0 Step -1 Call Lcd_scroll(countx) Waitms 2 Next Wait 2 Call Lcd_clear(black) Loop End #if Use_touch = 1 Touch_int: Touch_flag = 1 ' Print #1 , "Touch" Return #endif '******************************************************************************* $include "SSD1963__sd-card_routines.inc" $include "SSD1963_functions.inc" $include "Font12x16.font" $include "font25x32.font"
DS1338-33 clock
Put a DS1338-33 clock IC on the board. It is the 3,3 volts 1307.
Got some help to get soft I2c running, the command $forcesofti2c did the trick. And if you study the history.txt files of the Bascom-AVR updates, you will find this command.
$regfile = "xm128a1def.dat" $hwstack = 200 $swstack = 200 $framesize = 500 $crystal = 32000000 Config Osc = Enabled , 32mhzosc = Enabled Config Sysclock = 32mhz Config Osc = Disabled , 32mhzosc = Enabled Osc_pllctrl = &B10_0_00100 Do Loop Until Osc_status.1 = 1 'Check if RC2MRDY is ready ' 'enable PLL Set Osc_ctrl.4 'PLL enable 'configure the systemclock Config Sysclock = Pll , Prescalea = 1 , Prescalebc = 1_1 'use PLL Config Priority = Static , Vector = Application , Lo = Enabled , Med = Enabled Config Com5 = 57600 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8 Open "COM5:" For Binary As #1 Print #1 , "Start clock" $forcesofti2c ' with this the software I2C/TWI commands are used when including i2c.lbx $lib "i2c.lbx" ' override the normal xmega i2c lib Dim B As Byte Dim Weekday As Byte Dim Text As String * 30 Declare Sub Setdate Declare Sub Settime Declare Sub Getdatetime 'We use here Virtual port 0 Config Vport0 = B ' 'map portB to virtual port0 Config Scl = Port0 .3 ' Pin to use as SCL (The hardware pin is Pinb.1) Config Sda = Port0 .4 ' Pin to use as SDA (The hardware pin is Pinb.0) I2cinit ' Bring the Pin's in the proper state Print #1 , "Scan start" For B = 0 To 254 Step 2 'for all odd addresses I2cstart 'send start I2cwbyte B 'send address If Err = 0 Then 'we got an ack Print #1 , "Slave at : " ; B ; " hex : " ; Hex(b) ; " bin : " ; Bin(b) End If I2cstop 'free bus Next Print #1 , "End Scan" Wait 5 ' Bring the Pin's in the proper state 'DS1338 Const Ds1338w = &HD0 ' Adres van de Ds1338 clock Const Ds1338r = &HD1 'Clock Config Clock = User Config Date = Dmy , Separator = . $lib "ds1307clock.lib" 'Time$ = "00:07:00" 'Date$ = "24.02.13" Do Call Getdatetime Print #1 , _hour Print #1 , _min Wait 5 Loop End 'called from ds1307clock.lib '------------------------------------------------------------------------------- ' DS1338 Get date-time routine '------------------------------------------------------------------------------- Getdatetime: I2cstart ' Generate start code I2cwbyte Ds1338w ' send address I2cwbyte 0 ' start address in 1338 I2cstart ' Generate start code I2cwbyte Ds1338r ' send address I2crbyte _sec , Ack I2crbyte _min , Ack ' MINUTES I2crbyte _hour , Ack ' Hours I2crbyte Weekday , Ack ' Day of Week I2crbyte _day , Ack ' Day of Month I2crbyte _month , Ack ' Month of Year I2crbyte _year , Nack ' Year I2cstop _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year) Return '------------------------------------------------------------------------------- ' DS1338 set date routine '------------------------------------------------------------------------------- Setdate: _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year) I2cstart ' Generate start code I2cwbyte Ds1338w ' send address I2cwbyte 4 ' starting address in 1338 I2cwbyte _day ' Send Data to SECONDS I2cwbyte _month ' MINUTES I2cwbyte _year ' Hours I2cstop Return '------------------------------------------------------------------------------- ' DS1338 set time routine '------------------------------------------------------------------------------- Settime: _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour) I2cstart ' Generate start code I2cwbyte Ds1338w ' send address I2cwbyte 0 ' starting address in 1338 I2cwbyte _sec ' Send Data to SECONDS I2cwbyte _min ' MINUTES I2cwbyte _hour ' Hours I2cstop Return End
WizFi210
HW part
HKipnik made an example how to make an UDP connection between the 7 inch display board and a Android SmartPhone.
Here some pictures of the WizFi210 with a DIY-antenna.
|
Config part
To configure the WIZFI210 with WPA or WEP key, with DHCP or fixed IP and to have it auto-connect a level converter RS232 from PC straight to the WIZFI210
Download the WIZSmartScript from the Wiznet site
|
With a not programmed Atxmega128A1. Remove all four jumpers of the Alvidi module (RS232). The MAX3232 on the module will be isolated. Connect the TXD1 and RXD1 from the WIZFI210 to the second RS232 of the Alvidi module. Connect a terminal program, 115200 baud and power the board. If all is connected right you will get the information from the WIZFI210. Start the WizSmartScript and there you go.
SW part
For the next part, Bascom, Android and Wireless, all credit goes to HKipnik alias HKBascom alias Heiko.
First some pictures:
|
In this example the WIZFI210 has got IP-address 192.168.0.250
And my Samsung Galaxy Note II has IP-address 192.168.0.237
Port 5000 is used to send UDP-traffic from the 7 inch display board to the Android SmartPhone.
Port 8000 is used to send UDP-traffic from SmartPhone to 7 inch display.
All wireless.
Here the software for the 7 inch display board and for the Android Smartphone.
The first in Bascom-AVR and the second in Basic4Android.
In the subdirectory bilder, the images
In the subdirectory wizfi210 a small testprogram and some more info we got from Heiko.
What we did change was the touchscreen routine. We left the old one from Heiko remarked, and put in our own routine.
Seems there are different displays with different touchscreens.
File 1: Download 7inch_wizfi210.zip
File 2: Download Test_udp_wizfi210.zip
DHT11 sensor
DHT11 sensor on location JP1 and from www.AVRprojects.ru we have download software to read the DHT11.
Now we got the time and date from the DS1338-33 and temperature and humidity from a DHT11.
Time to make a WordClock. Fontsize 25x32. So on a 800 x 480 pixel display we can make 13 lines of 31 characters.
It is a running clock, the text is refreshed three times a minute so it is very dynamic.
In real the blue is less intensive.
iTrax300 GPS
The next step is the iTrax300 GPS module. It is the WIZFI210 or the Itrax300 GPS module, they are on the same serial lines.
|
Same trick to connect a PC direct to the iTrax300 module
Here the output of the module
Using a switch mode regulator
There is a switched mode regulator available which is pin compatible with the 7805 regulator and a similar size. The 7805 regulator is supposed to be roughly 55% efficient where as the switch mode regulator TSR 1-2450 is supposed to be roughly 95% efficient.
Due to the backlight of the display, the 7805 got warm/hot, with the TSR 1-2450 no problem.
Easter World Clock
File 1: Download EasterWordClock.zip
Video