'**************************************************************** '* Name : RK-A26-DEMO * '* Author : Joel Murphy * '* Notice : Creative Commons Attribution-Share Alike * '* Date : 01/2010 * '* Version : 1.0 * '* Notes : PIC16F88 INTRC 8MHz * '* : * '**************************************************************** ' Development of working code for interfacing the RK-A26 ' include "modedefs.bas" OSCCON = %01110110 'set the internal oscillator to 8MHz ANSEL = %00000000 'set PortA digital TRISB = %00000000 'set In/Out TRISA = %00000000 DEFINE OSC 8 ' >>>>>>>>> VARIABLES <<<<<<<<<<<< ADDR var byte CMND var byte DTA var byte Loop var byte Time var byte DX var byte DY var byte SQ var byte PM var byte CONF CON 0 STAT CON 1 DELTA_Y CON 2 DELTA_X CON 3 SQUAL CON 4 P_MAX CON 5 P_MIN CON 6 P_SUM CON 7 P_DATA CON 8 SHUT_H CON 9 SHUT_L CON 10 INVPID CON 17 ' >>>>>>>>> PINS <<<<<<<<<<< 'var PortA.0 'var PortA.1 'var PortA.2 'var PortA.3 'var PortA.4 'var PortA.5 'var PortA.6 'var PortA.7 SCK var PortB.0 SDIO var PortB.1 'var PortB.2 LED var PortB.3 Serial var PortB.4 'var PortB.5 'var PortB.6 'var PortB.7 ' >>>> INITIALIZE VARIABLES <<<< high serial 'using Parallx Serial LCD 27977 high sck 'clock idles high output sdio pause 90 'WAIT FOR SPTT Setup: pause 100 serout2 serial,84,[12] 'clear LCD screen pause 10 serout2 serial,84,[17] 'turn on the LCD backlight pause 1 GOSUB GET_STAT pause 1000 serout2 serial,84,[12] pause 10 serout2 serial,84,[128,"DeltaX: "] 'save time by printing only once serout2 serial,84,[148,"DeltaY: "] 'X pos = 136, Y pos = 156 serout2 serial,84,[168,"Squal: "] serout2 serial,84,[188,"P Max: "] Goto main Main: addr = delta_y gosub dns_read dy = dta addr = delta_x gosub dns_read dx = dta addr = squal gosub dns_read sq = dta addr = p_max gosub dns_read pm = dta gosub print_d pause 30 'this pause can be adjusted goto main PRINT_D: 'in PBP, the prefix 'S' reads the byte packet in 2's compliment serout2 serial,84,[136,sdec dx," ",156,sdec dy," ",176,dec sq," ",196,dec pm," "] ' return GET_STAT: addr = conf gosub dns_read serout2 serial,84,[128,"CONFIG: ",BIN8 DTA] ADDR = stat gosub dns_read serout2 serial,84,[148,"STATUS: ",BIN8 DTA] RETURN DNS_Write: 'SCK IDLES HIGH, DATA READ AFTER RISING EDGE, MSB FIRST 'TRANSMISSION INITIATED BY FALLING EDGE OF SCK DTA = addr + $80'%10000000 'LOAD ADDRESS BYTE AND SET MSB TO WRITE FOR Loop = 0 to 1 for time = 0 to 7 low sck sdio = DTA.7 'SEND DATA TO ADNS-2610 high sck DTA = DTA << 1 next time DTA = CMND 'LOAD THE COMMAND BYTE NEXT Loop return DNS_Read: 'SCK IDLES HIGH, DATA READ AFTER RISING EDGE, MSB FIRST 'TRANSMISSION INITIATED BY FALLING EDGE OF SCK for time = 0 to 7 low sck sdio = ADDR.7 'SEND ADDRESS TO ADNS-2610 high sck ADDR = ADDR << 1 next time pauseus 20 TRISB.1 = 1 'MAKE SDIO INPUT (HIGH Z) PAUSEUS 100 'MANDATORY > 100uS PAUSE FOR Time = 0 to 7 low sck DTA = DTA << 1 'SHIFT DATA BYTE HIGH SCK DTA.0 = SDIO 'READ SDIO LINE NEXT TIME TRISB.1 = 0 'MAKE SDIO OUTPUT return