;**********************
;***** GPS NEO6M *****
; Afficheur I2C 1602
; jrtec 28/04/17
;**********************
#Picaxe 20M2
dirsC =%0000000010
dirsB =%0000000111
symbol baud_in = T4800_8 'com GPS
symbol baud_aff = N2400_8 'com afficheur
symbol UART_in = C.1 'liaison lecture GPS
symbol UART_out = B.4 'liaison ecriture GPS via 5V > 3V
symbol rsbit=bit0
symbol cpt=b1
symbol car=b2
symbol dat=b3
setfreq m8
setint %0000000000,%0000000010 'interruption sur C.1
'===================================================================
'serout UART_out, baud_out, ("$PUBX,41,1,0007,0003,4800,0*13",CR,LF)
'serout UART_out, baud_out, ("$PUBX,41,1,0007,0003,9600,0*10",CR,LF)
; SCL sur B.7
; SDA sur B.5
pullup %0110 ;activation des R pullup sur C.1 et C.2 pour I2C
; Initialisation I2C 4 bits , etc ********
hi2csetup i2cmaster,%01001110, i2cslow_32, i2cbyte
; Initialisation LCD *********
for cpt=0 to 5
lookup cpt,($33,$32,$28,$c,$6,$01),car
gosub EnvoiByteCommInit
next
pause 100 ;temps init du LCD
main:
do
if bit0 = 1 then gosub traitement ' si trame recue en interruption
loop
'---------------------------------------------------------------------
traitement:
gosub debug_aff 'option
bptr= 17
if @bptr = "A" then 'si signal correct
bptr= 44 'debut de trame vitesse
if @bptr <> "," then
'bptr= 44
w0 = @bptrinc - 48 * 100
w0 = @bptrinc - 48 * 10 + w0
w0 = @bptrinc - 48 + w0 * 1852 'calcul des noeuds en m/h
peek 48, w1
w1= w1 - 48 * 185 'calcul des 1/10 noeuds en m/h
w0= w1+w0
sertxd(" Vitesse en m/h: ",#w0 , cr, lf)
else
sertxd(" Vitesse nulle" , cr, lf)
endif
else
sertxd(" pas de signal correct!" ,cr,lf)
endif
setint 0000000000,%0000000010 'rearmement interruption
return
'----------------------------------------------------------------------
debug_aff:
bptr= 10 ' debut de trame RMC
sertxd(@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,cr,lf )
return
interrupt:
bptr= 10
serin UART_in, baud_in, ( "RMC," ),@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc
bit0 = 1
return
; Affichage texte ***********************
car= 132 'curseur début ligne1
gosub EnvoiByteComm
for cpt=0 to 6
lookup cpt,("Bonjour"),car
GOSUB EnvoiByteData
next
car= 192 'curseur ligne2
gosub EnvoiByteComm
for cpt=0 to 7
lookup cpt,("V m/h"),car
GOSUB EnvoiByteData
next
; Affichage variable actualisée **********
do
car= 194 'curseur ligne 2
gosub EnvoiByteComm
bintoascii w0,b6,b6,b6,b5,b4 ;on a besoin que de 3 chiffres
for cpt=0 to 3
lookup cpt,(b6,",",b5,b4),car
GOSUB EnvoiByteData
next
loop
; Sub envoi vers LCD via I2C *************
EnvoiByteCommInit:
pause 15
EnvoiByteComm:
rsbit=0
EnvoiByteData:
;1ére moitié
dat=car & $F0 | %1000 | rsbit ;%1000 pour l'éclairage
hi2cout (dat)
pause 1
dat=dat | %1100
hi2cout (dat) ;pulse sur E cad P2
pause 1
dat=dat | %1000 & %1011 ;fin pulse
hi2cout (dat)
pause 1
;2éme moitié
dat=car & $0F * 16 | %1000 | rsbit
hi2cout (dat)
pause 1
dat=dat | %1100
hi2cout (dat)
pause 1
dat=dat | %1000 & %1011
hi2cout (dat)
rsbit=1
return