-
Notifications
You must be signed in to change notification settings - Fork 14
/
main.go
68 lines (61 loc) · 1.34 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// Pin connection between FT232R and LCD (HD44780 compatible):
// TxD (DBUS0) <--> D4
// RxD (DBUS1) <--> D5
// RTS# (DBUS2) <--> D6
// CTS# (DBUS3) <--> D7
// DTR# (DBUS4) <--> E
// DSR# (DBUS5) <--> R/W#
// DCD# (DBUS6) <--> RS
package main
import (
"fmt"
"github.com/ziutek/ftdi"
"github.com/ziutek/lcd/hdc"
"os"
"time"
)
func checkErr(err error) {
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
func main() {
// Good values for JHD204A (136 FPS on 4x20 display)
baudrate := 1 << 17
waitTicks := 6
d, err := ftdi.OpenFirst(0x0403, 0x6001, ftdi.ChannelAny)
checkErr(err)
defer d.Close()
checkErr(d.SetBitmode(0xff, ftdi.ModeBitbang))
checkErr(d.SetBaudrate(baudrate / 16))
w := hdc.NewBitbang(d, waitTicks)
// In conservative mode baudrate can be 1 << 23 on JHD204A
//w.FastMode(false)
lcd := hdc.NewDevice(w, 20, 4)
checkErr(lcd.Init())
checkErr(lcd.SetDisplay(hdc.DisplayOn | hdc.CursorOn))
buf1 := make([]byte, 80)
for i := 0; i < 20; i++ {
buf1[i] = '0'
buf1[i+20] = '2'
buf1[i+40] = '1'
buf1[i+60] = '3'
}
buf2 := make([]byte, 80)
for i := 0; i < 80; i++ {
buf2[i] = ' '
}
n := 20
t := time.Now()
for i := 0; i < n; i++ {
_, err = lcd.Write(buf2)
checkErr(err)
_, err = lcd.Write(buf1)
checkErr(err)
}
fmt.Printf(
"%.2f FPS\n",
float64(2*n)*float64(time.Second)/float64(time.Now().Sub(t)),
)
}