dje...là,c'est de la provocation.vous avez pus remarquez que je détestai ça !!!
J'ai commandé sur eBay un afficheur 128 x 64, avec le même contrôleur.
J'espère que lorsque je le recevrai, tous les problèmes seront réglés...
MM
.
MM
dje...là,c'est de la provocation.vous avez pus remarquez que je détestai ça !!!
Le programme indiqué en #29 permet de charger une police existante, de choisir la taille de chaque cellule, d'ajuster si besoin et d'enregistrer le tout sous forme de commandes hexadécimales.En prenant comme modèle une police 7 segments (ou 16) ou une police LCD la réduction doit être encore plus forte.
Avec un Picaxe rapide ça marche bien. Si vous souhaitez plusieurs tailles de police, et/ou faire des cadres et/ou des histogrammes, le code peut devenir assez gros. Comme indiqué par PieM l'option "slots" est à prendre en compte, mais ça implique une réflexion sur la structure du programme.J'ai commandé sur eBay un afficheur 128 x 64, avec le même contrôleur.
J'espère que lorsque je le recevrai, tous les problèmes seront réglés...
@Michel :Un lien sur cet encodeur SVP
Mauvaise facture un Bourns ?? n'achète pas de chinois alors ...Voici le lien de l'encodeur que je trouve de mauvaise facture . Car il n'est pas normal , que sans sauté de cran , les valeurs changent ? juste en forcant un tout petit peu un butée ca change aléatoirement .
Désolé, je ne connais pas cette marqueMauvaise facture un Bourns ??
Ben , c'est celui du lien ? c'est exactement ce code commande que j'ai acheté . Référence fabricant PEC12R-4217F-S0024Donne la référence complète.
D'accord, merci bien pour ces précisions . Du coup le sans crans me parait plus adéquatil n'est pas anormal que les valeurs changent. le crantage est mécanique et avant de l'avoir quitté, tu peux changer d'info sur une piste !
Pas compris pourquoi ! si tu as 24 crantages, tu vas compter 24 par tour. C'est au contraire beaucoup plus sûr.Du coup le sans crans me parait plus adéquat
Lol ca c'est pas impossible , je te l'accorde .Ou alors c'est ton programme qui est chinois...
Car quand tu écris ça :Pas compris pourquoi ! si tu as 24 crantages, tu vas compter 24 par tour
Pour moi ce fonctionnement est anormal. tant que le cran n'as pas été dépassé, je ne veux pas que les valeurs changent . Car on forcant trés peux sans sauté le cran, les valerus changent, question pratique c'est pas top ! même si je ne le conçois je chipote un peu .il n'est pas anormal que les valeurs changent
Ben ça sera pire sans crantage alors! si tu t'amuses à rester en équilibre sur un front de piste...Car quand tu écris ça :
Pour moi ce fonctionnement est anormal. tant que le cran n'as pas été dépassé, je ne veux pas que les valeurs changent . Car on forcant trés peux sans sauté le cran, les valerus changent, question pratique c'est pas top ! même si je ne le conçois je chipote un peu .
Non non , c'est pas comme ca ! .si tu t'amuses à rester en équilibre sur un front de piste...
Je pense que tu n'as pas compris comment fonctionnait un codeur!Non non , c'est pas comme ca ! .
je tourne mon encodeur , je le lache normalement . tout va bien . maintenant , je prends l'axe et force tout doucement d'un coté ou de l'autre et la valeur change, sans même avoir fais un cran . Quand je force , je devrait dire j'effleure plutot . Sans crantage o nse rend pas compte de ce probléme qui n'en ai pas vraiment un . Car comme y'a pas de cran on ne sait pas quand la valeur doit changer ; Avec les crans on s'attend a ce que la valeur change apres avoir sauté un cran et non avant ! .
C'est pour ca que je disais qu'il a du prendre un choc ou de mauvaise facture ! car le changement de valeur devrait se faire apres le cran . Désolé si je m'exprime mal .
Ok donc l'encodeur n'est pas de mauvaise de facture et n'as pas de choc. c'estdoncnormal a moi de traiter ca par programmeAlors il est tout a fait possible que tu en aies un alors que tu n'as pas sauté le cran qui est mécanique .
#PICAXE 20X2
'######################## Configuration I/O ########################
symbol Aact = bit0 'Valeur de A actuelle
symbol Aprec = bit2 'Valeur de A pecédente
Symbol Mem_time = b3
Symbol minute = b4
Symbol seconde = b5
symbol sec = b10
symbol Dizsec = b11
symbol minu = b12
symbol Dizminu = b13
symbol Compteur = w13 'compteur
symbol InputA = pinB.1 ' Broche de l'encodeur
symbol InputB = pinB.0
Symbol RST = B.3
'######################## Initialisation ########################
setfreq M64
hi2csetup i2cmaster,%01111000,i2cfast_32,i2cbyte ' Configuration du mode I2C
pullup %00011001 'pullup sur C.0, B.0 et B.1
low RST ' On reset l'ecran pour etre certain qu'on parte sur de bonne base
pause 100
high RST ' On désactive le reset
sec = 0
Dizsec = 0
minu = 0
Dizminu = 0
'######################## Initialisation de l'écran ########################
hi2cout 0x80,(0xAE,0x00,0x00,0x00,0x20,0x01,0x21,0,127,0x2 2,0,3,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1, 0xDB,0x20,0xA4,0xA6,0xAF)
#rem
hi2cout 0x80,(0xAE) ;turn off display(RESET=OFF) eteins l'écran
hi2cout 0x80,(0x00,0x00) ;low column nibble(RESET=0),high column nibble(RESET=0)
hi2cout 0x80,(0x00) ;start page address(RESET=0)
hi2cout 0x80,(0x20,0x01) ;memory address mode(RESET=02 [page]) choix du mode de fonctionnement, pour moi vertical=01
hi2cout 0x80,(0x21,0,127) ;Setup column start and end address definie la colonne du début et de fin pour l'init. 0 à 127 tout l'écran
hi2cout 0x80,(0x22,0,3) ;Setup page start and end address definie les pages de début et de fin 4 pages sur cet ecran de 0~3
hi2cout 0x80,(0xD5,0x80) ;oscillator frequency and divider(RESET=80)
hi2cout 0x80,(0xA8,0x1F) ;mux ratio(RESET=3F [64 lines])
hi2cout 0x80,(0xD3,0x00) ;display offset,COM vertical shift(RESET=0)
hi2cout 0x80,(0x8D,0x14) ;enable charge pump(RESET=10 [OFF])
hi2cout 0x80,(0xA1,0x00) ;segment remap(RESET=SEG0, COL0) 00 mirror image
hi2cout 0x80,(0xC8) ;COM output scan(RESET=C0, C8 flips display) C8=Le premier pixel commence en haut a gauche / C0= la premier pixel commence a bas a gauche
hi2cout 0x80,(0xDA,0x02) ;COM pins hardware config(RESET=12[alternate])
hi2cout 0x80,(0x81,0x7F) ;contrast CF(RESET=7F)
hi2cout 0x80,(0xD9,0xF1) ;pre-charge period F1(RESET=22)
hi2cout 0x80,(0xDB,0x20) ;Vcom deselect(RESET=20)
hi2cout 0x80,(0xA4) ;turn all on ignore RAM A5/RAM A4(RESET=A4)
hi2cout 0x80,(0xA6) ;normal display A6/inverted A7(RESET=A6)
hi2cout 0x80,(0xAF) ;turn on display
#endrem
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,60,67,0x22,0,3) 'création des deux points du milieu
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x0F, 0xF0, 0x00,_
0x00, 0x0F, 0xF0, 0x00,_
0x00, 0x0F, 0xF0, 0x00,_
0x00, 0x0F, 0xF0, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,98,127,0x22,0,3) ' affichage de 4 zeros au depart
gosub chiffre0
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,67,97,0x22,0,3)
gosub chiffre0
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,30,60,0x22,0,3)
gosub chiffre0
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,0,29,0x22,0,3)
gosub chiffre0
'######################## Programme principale ########################
do
do
bit0 = InputA 'sauvegarde inputA dans bit0
bit1 = InputB 'sauvegarde inputB dans bit1
loop while Aact=Aprec 'Attente d'un changement
compteur= bit0 xor bit1 *2 + compteur-1 'formule magique de PieM
Aprec=Aact
If compteur >=200 then : compteur=59 : end if
If compteur>=60 then : compteur =0 : endif
bintoascii compteur,b4, Dizsec, seconde
Dizsec= Dizsec -48
seconde = seconde -48
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,97,127,0x22,0,3) ' Mise a jour des secondes
on seconde gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5,chiffre6,chiffre7,chiffre8,chiffre9 ' On selectionne le chiffre à afficher
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,67,97,0x22,0,3) ' Affichage des dizaines de secondes
on dizsec gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5 ' Selection du chiffre à afficher
loop
'######################## Programme secondaire ########################
'#### MAJsec ####
MAJ_sec:
inc sec ' Augmente de 1 seconde
if sec=10 then ' Si seconde = 10 alors Mise à zéro de la valeur seconde et incrementation
sec =0 ' Mise à zéro de la valeur seconde
gosub MAJ_dizsec ' Go Mise à jour de la valeur dizaine de seconde
endif
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,97,127,0x22,0,3) ' Mise a jour des secondes
on sec gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5,chiffre6,chiffre7,chiffre8,chiffre9 ' On selectionne le chiffre à afficher
return
'#### MAJ dizaine de seconde ####
MAJ_dizsec:
inc dizsec ' Augmente les dizaines de secondes
If dizsec>=6 then ' Si apres incrementation>=6
dizsec = 0 ' On met les dizaines de secondes a zero pour l'affichage
gosub MAJ_minu ' On va mettre à jour les minutes
end if
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,67,97,0x22,0,3) ' Affichage des dizaines de secondes
on dizsec gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5 ' Selection du chiffre à afficher
return
'#### MAJ minute ####
MAJ_minu:
inc minu ' Augmente les minutes
If minu>=10 then ' Si apres incrementation>=10
minu = 0 ' On met les minutes a zero pour l'affichage
gosub MAJ_dizminu ' On va mettre à jour les dizaines de minutes
end if
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,30,60,0x22,0,3) ' Affichage des minutes
on minu gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5,chiffre6,chiffre7,chiffre8,chiffre9 ' Selection du chiffre à afficher
return
'#### MAJ dizaine de minute ####
MAJ_dizminu:
inc Dizminu ' Augmente les dizaines de minutes
If Dizminu>=6 then ' Si apres incrementation>=6
Dizminu = 0 ' On met les minutes a zero pour l'affichage
end if
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,0,29,0x22,0,3) ' Affichage des dizaines de minutes
on Dizminu gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5 ' Selection du chiffre à afficher
return
'######################################################
'############## chiffre N° 0 ##########################
'######################################################
chiffre0:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0xFC, 0x3F, 0x00,_
0x80, 0xFF, 0xFF, 0x01,_
0xE0, 0xFF, 0xFF, 0x07,_
_
0xF0, 0xFF, 0xFF, 0x0F,_
0xF8, 0xFF, 0xFF, 0x1F,_
0xFC, 0xFF, 0xFF, 0x3F,_
0xFE, 0x00, 0x00, 0x7F,_
0xFE, 0x00, 0x00, 0x7F,_
_
0x7E, 0x00, 0x00, 0x7E,_
0x3E, 0x00, 0x00, 0x7C,_
0x1E, 0x00, 0x00, 0x78,_
0x1E, 0x00, 0x00, 0x78,_
0x1E, 0x00, 0x00, 0x78,_
_
0x1E, 0x00, 0x00, 0x78,_
0x1E, 0x00, 0x00, 0x78,_
0x3E, 0x00, 0x00, 0x7C,_
0x7E, 0x00, 0x00, 0x7E,_
0xFE, 0x00, 0x00, 0x7F,_
_
0xFE, 0x00, 0x00, 0x7F,_
0xFC, 0xFF, 0xFF, 0x3F,_
0xF8, 0xFF, 0xFF, 0x1F,_
0xF0, 0xFF, 0xFF, 0x0F,_
0xE0, 0xFF, 0xFF, 0x07,_
_
0x80, 0xFF, 0xFF, 0x01,_
0x00, 0xFC, 0x3F, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)
return
'######################################################
'############## chiffre N° 1 ##########################
'######################################################
chiffre1:
for b2 =0 to 4
hi2cout 0x40,( 0x00, 0x00, 0x00, 0x00)
next
for b2 = 0 to 4
hi2cout 0x40,(0xE0, 0x01, 0x00, 0x78)
next
hi2cout 0x40,(_
0xF0, 0x01, 0x00, 0x78,_
0xF0, 0x01, 0x00, 0x78,_
0xF8, 0xFF, 0xFF, 0x7F)
for b2 = 0 to 5
hi2cout 0x40,(0xFE, 0xFF, 0xFF, 0x7F)
next
for b2 = 0 to 6
hi2cout 0x40,(0x00, 0x00, 0x00, 0x78)
next
for b2 = 0 to 3
hi2cout 0x40,(0x00, 0x00, 0x00, 0x00)
next
return
'######################################################
'############## chiffre N° 2 ##########################
'######################################################
chiffre2:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x7C, _
0xF8, 0x00, 0x00, 0x7E, _
0xFC, 0x00, 0x00, 0x7F, _
0xFC, 0x00, 0x00, 0x7F, _
0x7C, 0x00, 0x80, 0x7F, _
0x7C, 0x00, 0xC0, 0x7F, _
0x3E, 0x00, 0xE0, 0x7F, _
0x3E, 0x00, 0xE0, 0x7F, _
0x3E, 0x00, 0xF0, 0x7F, _
0x1E, 0x00, 0xF8, 0x7B, _
0x1E, 0x00, 0xFC, 0x79, _
0x1E, 0x00, 0xFE, 0x78, _
0x1E, 0x00, 0xFF, 0x78, _
0x1E, 0x00, 0x7F, 0x78, _
0x3E, 0x80, 0x3F, 0x78, _
0x3E, 0xE0, 0x1F, 0x78, _
0xFE, 0xF8, 0x0F, 0x78, _
0xFC, 0xFF, 0x07, 0x78, _
0xFC, 0xFF, 0x07, 0x78, _
0xF8, 0xFF, 0x03, 0x78, _
0xF8, 0xFF, 0x00, 0x78, _
0xF0, 0x7F, 0x00, 0x78, _
0xC0, 0x1F, 0x00, 0x78)
for b2 = 0 to 4
hi2cout 0x40,(0x00, 0x00, 0x00, 0x00)
next
return
'######################################################
'############## chiffre N° 3 ##########################
'######################################################
chiffre3:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x1F,_
0xf8, 0x00, 0x00, 0x3F,_
0xFC, 0x00, 0x00, 0x3F,_
_
0xFC, 0x00, 0x00, 0x3E,_
0x7C, 0x00, 0x00, 0x3E,_
0x7C, 0x00, 0x00, 0x7C,_
0x3E, 0x00, 0x00, 0x7C,_
0x3E, 0x00, 0x00, 0x7C,_
_
0x3E, 0xE0, 0x01, 0x78,_
0x1E, 0xE0, 0x01, 0x78,_
0x1E, 0xE0, 0x01, 0x78,_
0x1E, 0xE0, 0x01, 0x78,_
0x1E, 0xE0, 0x01, 0x78,_
_
0x1E, 0xF0, 0x01, 0x78,_
0x3E, 0xF0, 0x01, 0x7C,_
0x3E, 0xF8, 0x03, 0x7C,_
0x7E, 0xFC, 0x03, 0x3E,_
0xFC, 0xFF, 0x0f, 0x3F,_
_
0xFC, 0xFF, 0xFF, 0x3F,_
0xFC, 0xBF, 0xFF, 0x1F,_
0xF8, 0x1F, 0xFF, 0x1F,_
0xF0, 0x1F, 0xFF, 0x0F,_
0xE0, 0x07, 0xFE, 0x07,_
_
0x00, 0x00, 0xF8, 0x01,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)
return
'######################################################
'############## chiffre N° 4 ##########################
'######################################################
chiffre4:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x7C, 0x00,_
0x00, 0x00, 0x7E, 0x00,_
0x00, 0x00, 0x7F, 0x00,_
0x00, 0x80, 0x7F, 0x00,_
_
0x00, 0xC0, 0x7F, 0x00,_
0x00, 0xE0, 0x7F, 0x00,_
0x00, 0xF0, 0x7F, 0x00,_
0x00, 0xF8, 0x7F, 0x00,_
0x00, 0xFC, 0x7B, 0x00,_
_
0x00, 0xFE, 0x79, 0x00,_
0x00, 0xFF, 0x78, 0x00,_
0x80, 0x7F, 0x78, 0x00,_
0xC0, 0x3F, 0x78, 0x00,_
0xE0, 0x1F, 0x78, 0x00,_
_
0xF0, 0x0F, 0x78, 0x00,_
0xF8, 0x07, 0x78, 0x00,_
0xFC, 0x03, 0x78, 0x00,_
0xFE, 0xFF, 0xFF, 0x7F,_
0xFE, 0xFF, 0xFF, 0x7F,_
_
0xFE, 0xFF, 0xFF, 0x7F,_
0xFE, 0xFF, 0xFF, 0x7F,_
0xFE, 0xFF, 0xFF, 0x7F,_
0xFE, 0xFF, 0xFF, 0x7F,_
0x00, 0x00, 0x78, 0x00,_
_
0x00, 0x00, 0x78, 0x00,_
0x00, 0x00, 0x78, 0x00,_
0x00, 0x00, 0x78, 0x00,_
0x00, 0x00, 0x78, 0x00,_
0x00, 0x00, 0x00, 0x00)
return
'######################################################
'############## chiffre N° 5 ##########################
'######################################################
chiffre5:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x1F,_
0x00, 0x00, 0x00, 0x3F,_
_
0xFE, 0xFF, 0x00, 0x3F,_
0xFE, 0xFF, 0x00, 0x3E,_
0xFE, 0xFF, 0x00, 0x7E,_
0xFE, 0xFF, 0x00, 0x7C,_
0xFE, 0xFF, 0x00, 0x7C,_
_
0x1E, 0xF0, 0x00, 0x7C,_
0x1E, 0xF0, 0x00, 0x78,_
0x1E, 0xF0, 0x00, 0x78,_
0x1E, 0xF0, 0x00, 0x78,_
0x1E, 0xF0, 0x00, 0x78,_
_
0x1E, 0xF0, 0x00, 0x78,_
0x1E, 0xF0, 0x01, 0x78,_
0x1E, 0xF0, 0x01, 0x7c,_
0x1E, 0xF0, 0x01, 0x7C,_
0x1E, 0xF0, 0x03, 0x3E,_
_
0x1E, 0xE0, 0x87, 0x3F,_
0x1E, 0xE0, 0xFF, 0x3F,_
0x1E, 0xE0, 0xFF, 0x1F,_
0x1E, 0xC0, 0xFF, 0x0F,_
0x1E, 0x80, 0xFF, 0x0F,_
_
0x1E, 0x00, 0xFF, 0x03,_
0x1E, 0x00, 0xFC, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)
return
'######################################################
'############## chiffre N° 6 ##########################
'######################################################
chiffre6:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0X00, 0xF0, 0x7F, 0x00,_
0x00, 0xFE, 0xFF, 0x01,_
0x80, 0xFF, 0xFF, 0x07,_
_
0xC0, 0xFF, 0xFF, 0x0F,_
0xE0, 0xFF, 0xFF, 0x1F,_
0xF0, 0xFF, 0xFF, 0x3F,_
0xF8, 0xFF, 0xC1, 0x3F,_
0xF8, 0xE3, 0x01, 0x3F,_
_
0xFC, 0xF1, 0x01, 0x7E,_
0xFC, 0xF0, 0x00, 0x7C,_
0xFC, 0xF0, 0x00, 0x7C,_
0x3E, 0xF0, 0x00, 0x78,_
0x3E, 0xF0, 0x00, 0x78,_
_
0x1E, 0xF0, 0x00, 0x78,_
0x1E, 0xF0, 0x00, 0x78,_
0x1E, 0xF0, 0x01, 0x7C,_
0x1E, 0xF0, 0x01, 0x7C,_
0x1E, 0xF0, 0x03, 0x7E,_
_
0x1E, 0xF0, 0x87, 0x3F,_
0x3E, 0xE0, 0xFF, 0x3F,_
0x3E, 0xE0, 0xFF, 0x1F,_
0x3E, 0xC0, 0xFF, 0x1F,_
0x00, 0x80, 0xFF, 0x0F,_
_
0x00, 0x00, 0xFF, 0x07,_
0x00, 0x00, 0xFE, 0x01,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)
return
'######################################################
'############## chiffre N° 7 ##########################
'######################################################
chiffre7:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x3C, 0x00, 0x00, 0x00,_
0x3C, 0x00, 0x00, 0x00,_
0x3C, 0x00, 0x00, 0x00,_
_
0x3C, 0x00, 0x00, 0x60,_
0x3C, 0x00, 0x00, 0x70,_
0x3C, 0x00, 0x00, 0x7C,_
0x3C, 0x00, 0x00, 0x7E,_
0x3C, 0x00, 0x80, 0x7F,_
_
0x3C, 0x00, 0xC0, 0x7F,_
0x3C, 0x00, 0xF0, 0x7F,_
0x3C, 0x00, 0xFC, 0x3F,_
0x3C, 0x00, 0xFE, 0x0F,_
0x3C, 0x80, 0xFF, 0x07,_
_
0x3C, 0xC0, 0xFF, 0x01,_
0x3C, 0xF0, 0xFF, 0x00,_
0x3C, 0xF8, 0x3F, 0x00,_
0x3C, 0xFE, 0x0F, 0x00,_
0x3C, 0xFF, 0x07, 0x00,_
_
0xFC, 0xFF, 0x01, 0x00,_
0xFC, 0xFF, 0x00, 0x00,_
0xFC, 0x3F, 0x00, 0x00,_
0xFC, 0x1F, 0x00, 0x00,_
0xFC, 0x07, 0x00, 0x00,_
_
0xFC, 0x01, 0x00, 0x00,_
0xFC, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)
return
'######################################################
'############## chiffre N° 8 ##########################
'######################################################
chiffre8:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0xF8, 0x01,_
0xC0, 0x0F, 0xFC, 0x07,_
0xF0, 0x1F, 0xFE, 0x0F,_
_
0xF8, 0x3F, 0xFF, 0x1F,_
0xF8, 0xFF, 0xFF, 0x3F,_
0xFC, 0xFF, 0xFF, 0x3F,_
0xFC, 0xFF, 0x8F, 0x3F,_
0x7E, 0xFC, 0x07, 0x7E,_
_
0x3E, 0xF8, 0x03, 0x7C,_
0x3E, 0xF8, 0x01, 0x7C,_
0x1E, 0xF0, 0x01, 0x78,_
0x1E, 0xF0, 0x01, 0x78,_
0x1E, 0xE0, 0x01, 0x78,_
_
0x1E, 0xE0, 0x03, 0x78,_
0x1E, 0xE0, 0x03, 0x78,_
0x3E, 0xE0, 0x07, 0x7C,_
0x3E, 0xF0, 0x07, 0x7C,_
0x7E, 0xF8, 0x0F, 0x7E,_
_
0xFC, 0xFF, 0x1F, 0x3F,_
0xFC, 0xFF, 0xFF, 0x3F,_
0xF8, 0xFF, 0xFF, 0x1F,_
0xF8, 0x3F, 0xFF, 0x1F,_
0xF0, 0x1F, 0xFE, 0x0F,_
_
0xC0, 0x07, 0xFC, 0x07,_
0x00, 0x00, 0xF8, 0x01,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)
return
'######################################################
'############## chiffre N° 9 ##########################
'######################################################
chiffre9:
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x80, 0x3F, 0x00, 0x00,_
0xE0, 0xFF, 0x00, 0x00,_
0xF0, 0xFF, 0x01, 0x00,_
_
0xF8, 0xFF, 0x03, 0x7C,_
0xF8, 0xFF, 0x07, 0x7C,_
0xFC, 0xFF, 0x07, 0x7C,_
0xFC, 0xE1, 0x07, 0x78,_
0x7E, 0xC0, 0x0F, 0x78,_
_
0x3E, 0x80, 0x0F, 0x78,_
0x3E, 0x80, 0x0F, 0x78,_
0x1E, 0x00, 0x0F, 0x78,_
0x1E, 0x00, 0x0F, 0x78,_
0x1E, 0x00, 0x0F, 0x7C,_
_
0x1E, 0x00, 0x0F, 0x7C,_
0x3E, 0x00, 0x0F, 0x3E,_
0x3E, 0x00, 0x0F, 0x3F,_
0x7E, 0x80, 0x8F, 0x3F,_
0xFC, 0x80, 0xC7, 0x1F,_
_
0xFC, 0x83, 0xFF, 0x1F,_
0xFC, 0xFF, 0xFF, 0x0F,_
0xF8, 0xFF, 0xFF, 0x07,_
0xF0, 0xFF, 0xFF, 0x03,_
0xE0, 0xFF, 0xFF, 0x01,_
_
0xC0, 0xFF, 0x7F, 0x00,_
0x00, 0xFE, 0x0F, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)
return
Effectivement c'est bien plus simple. Merci Michel pour ce coup de poucePour découper un nombre de deux chiffres, pas besoin de passer par bintoascii, surtout si on a pas besoin de l'ascii.
dizsec= compteur/10
seconde=compteur//10
Voir settimer et la variable timer.Comment compter le temps d'appui d'un BP sur 20X2. La fonction "time" n'est pas disponible , utilisation de la fonction "timer" ? Le but lancé le compte à rebours quand on appui sur le BP pendant 2 ou 3 secondes ( à déterminé avec des tests) .
#PICAXE 20X2
'######################## Configuration I/O ########################
symbol Aact = bit0 ' Valeur de A actuelle
symbol Aprec = bit2 ' Valeur de A pecédente
Symbol position = bit8 ' Position du réglage ( les secondes ou les minutes) La variable b0 est utilisé par la foormule de Piem, don't touch !
symbol seconde = b10
symbol Dizsec = b11
symbol minute = b12
symbol Dizminu = b13
Symbol Compt_min = w12 ' compteur des minutes
symbol Compt_sec = w13 ' compteur des secondes
symbol InputA = pinB.1 ' Broche de l'encodeur
symbol InputB = pinB.0
Symbol Chgt = PinC.0 ' Broche du BP
Symbol RST = B.3 ' Broche du RESET ecran
'######################## Initialisation ########################
setfreq M64
hi2csetup i2cmaster,%01111000,i2cfast_32,i2cbyte ' Configuration du mode I2C
pullup %00011001 'pullup sur C.0, B.0 et B.1
settimer 15536 'A 64Mhz une impulsion primaire dur 4µs.une impulsion secondaire toute les 50000 impulsions primaires donc toutes les 200000µs
' Il faut donc 5 impulsions secondaires pour faire une seconde
low RST ' On reset l'ecran pour etre certain qu'on parte sur de bonne base
pause 100
high RST ' On désactive le reset
seconde = 0
Dizsec = 0
minute = 0
Dizminu = 0
position = 0
'######################## Initialisation de l'écran ########################
hi2cout 0x80,(0xAE,0x00,0x00,0x00,0x20,0x01,0x21,0,127,0x2 2,0,3,0xD5,0x80,0xA8,0x1F,0xD3,0x00,0x8D, _
0x14,0xA1,0x00,0xC8,0xDA,0x02,0x81,0x7F,0xD9,0xF1, 0xDB,0x20,0xA4,0xA6,0xAF)
#rem
hi2cout 0x80,(0xAE) ;turn off display(RESET=OFF) eteins l'écran
hi2cout 0x80,(0x00,0x00) ;low column nibble(RESET=0),high column nibble(RESET=0)
hi2cout 0x80,(0x00) ;start page address(RESET=0)
hi2cout 0x80,(0x20,0x01) ;memory address mode(RESET=02 [page]) choix du mode de fonctionnement, pour moi vertical=01
hi2cout 0x80,(0x21,0,127) ;Setup column start and end address definie la colonne du début et de fin pour l'init. 0 à 127 tout l'écran
hi2cout 0x80,(0x22,0,3) ;Setup page start and end address definie les pages de début et de fin 4 pages sur cet ecran de 0~3
hi2cout 0x80,(0xD5,0x80) ;oscillator frequency and divider(RESET=80)
hi2cout 0x80,(0xA8,0x1F) ;mux ratio(RESET=3F [64 lines])
hi2cout 0x80,(0xD3,0x00) ;display offset,COM vertical shift(RESET=0)
hi2cout 0x80,(0x8D,0x14) ;enable charge pump(RESET=10 [OFF])
hi2cout 0x80,(0xA1,0x00) ;segment remap(RESET=SEG0, COL0) 00 mirror image
hi2cout 0x80,(0xC8) ;COM output scan(RESET=C0, C8 flips display) C8=Le premier pixel commence en haut a gauche / C0= la premier pixel commence a bas a gauche
hi2cout 0x80,(0xDA,0x02) ;COM pins hardware config(RESET=12[alternate])
hi2cout 0x80,(0x81,0x7F) ;contrast CF(RESET=7F)
hi2cout 0x80,(0xD9,0xF1) ;pre-charge period F1(RESET=22)
hi2cout 0x80,(0xDB,0x20) ;Vcom deselect(RESET=20)
hi2cout 0x80,(0xA4) ;turn all on ignore RAM A5/RAM A4(RESET=A4)
hi2cout 0x80,(0xA6) ;normal display A6/inverted A7(RESET=A6)
hi2cout 0x80,(0xAF) ;turn on display
#endrem
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,60,67,0x22,0,3) 'création des deux points du milieu
hi2cout 0x40,(_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x0F, 0xF0, 0x00,_
0x00, 0x0F, 0xF0, 0x00,_
0x00, 0x0F, 0xF0, 0x00,_
0x00, 0x0F, 0xF0, 0x00,_
0x00, 0x00, 0x00, 0x00,_
0x00, 0x00, 0x00, 0x00)
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,98,127,0x22,0,3) ' affichage de 4 zeros au depart
gosub chiffre0
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,67,97,0x22,0,3)
gosub chiffre0
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,30,60,0x22,0,3)
gosub chiffre0
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,0,29,0x22,0,3)
gosub chiffre0
'######################## Programme principal ########################
main:
do
do
bit0 = InputA 'sauvegarde inputA dans bit0
bit1 = InputB 'sauvegarde inputB dans bit1
If Chgt=0 then ' Appui sur le BP
timer =0
do loop while Chgt=0 ' anti-rebond
inc position ' change la position 0 ou 1
if timer >= 10 then ' voir calcul a l'initialsation au début 10 = 2 secondes
gosub Lancement ' lance le compte à rebours
end if
end if
loop while Aact=Aprec 'Attente d'un changement
if position = 1 then
compt_sec= bit0 xor bit1 *2 + compt_sec-1 'formule magique de PieM
Aprec=Aact ' Actualisation de A
If compt_sec >=200 then : compt_sec=59 : end if ' si compteur = 255 (quand on decremente 0) on le met a 59 .
If compt_sec >=60 then : compt_sec =0 : endif ' si le compteur est = 60 ( quand on incremente 59) on le met à 0
dizsec= compt_sec/10 ' On divise par 10 pour recuperer les dizaines
seconde=compt_sec//10 ' on fait modulo 10 , le reste de la division par 10 pour recuperer les unités
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,97,127,0x22,0,3) ' Mise a jour des secondes
on seconde gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5,chiffre6,chiffre7,chiffre8,chiffre9
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,67,97,0x22,0,3) ' Affichage des dizaines de secondes
on dizsec gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5
else
compt_min= bit0 xor bit1 *2 + compt_min-1 'formule magique de PieM
Aprec=Aact ' Actualisation de A
If compt_min >=200 then : compt_min=59 : end if ' si compteur = 255 (quand on decremente 0) on le met a 59 .
If compt_min >=60 then : compt_min =0 : endif ' si le compteur est = 60 ( quand on incremente 59) on le met à 0
dizminu= compt_min/10 ' On divise par 10 pour recuperer les dizaines
minute=compt_min//10 ' on fait modulo 10 , le reste de la division par 10 pour recuperer les unités
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,30,60,0x22,0,3) ' Affichage des minutes
on minute gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5,chiffre6,chiffre7,chiffre8,chiffre9
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,0,29,0x22,0,3) ' Affichage des dizaines de minutes
on Dizminu gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5
end if
loop
'######################## Programme secondaire ########################
Lancement:
timer = 0 ' RAZ du compteur
do ' Il faut donc 5 impulsions secondaires pour faire une seconde
if timer>=5 then : gosub MAJ_sec : end if ' timer = 5 = 1seconde
loop
'#### MAJsec ####
MAJ_sec:
dec seconde ' diminue de 1 seconde
if seconde=255 then ' Si seconde = 255 alors Mise à 9 de la valeur seconde et decrementation des dizaines de seconde
if dizsec > 0 or minute<>0 or dizminu<>0 then
seconde =9 ' Mise à zéro de la valeur seconde
gosub MAJ_dizsec ' Go Mise à jour de la valeur dizaine de seconde
else
pause 8000 ' fin cu compte a rebours
reset ' on recommence
endif
endif
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,97,127,0x22,0,3) ' Mise a jour des secondes
on seconde gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5,chiffre6,chiffre7,chiffre8,chiffre9 ' On selectionne le chiffre à afficher
timer = 0
return
'#### MAJ dizaine de seconde ####
MAJ_dizsec:
dec dizsec ' Augmente les dizaines de secondes
If dizsec=255 then ' Si apres decrementation = 255
if minute > 0 or dizminu<>0 then
dizsec = 5 ' On met les dizaines de secondes a 9 pour l'affichage
gosub MAJ_minu ' On va mettre à jour les minutes
end if
end if
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,67,97,0x22,0,3) ' Affichage des dizaines de secondes
on dizsec gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5 ' Selection du chiffre à afficher
timer = 0
return
'#### MAJ minute ####
MAJ_minu:
dec minute ' decremente les minutes
If minute=255 then ' Si apres decrementation=255
if dizminu >0 then ' si les dizaines de minutes sont a zero pas besoin de mettre a jour
minute = 9 ' On met les minutes a zero pour l'affichage
gosub MAJ_dizminu ' On va mettre à jour les dizaines de minutes
end if
end if
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,30,60,0x22,0,3) ' Affichage des minutes
on minute gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5,chiffre6,chiffre7,chiffre8,chiffre9 ' Selection du chiffre à afficher
timer = 0
return
'#### MAJ dizaine de minute ####
MAJ_dizminu:
dec Dizminu ' Augmente les dizaines de minutes
If Dizminu=255 then ' Si apres incrementation>=6
Dizminu = 5 ' On met les minutes a zero pour l'affichage
end if
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,0,29,0x22,0,3) ' Affichage des dizaines de minutes
on Dizminu gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5 ' Selection du chiffre à afficher
timer = 0
return
nb_secondes = timer /5
dminut= nb_secondes/600
minut = nb_secondes/60//10
dsecond = nb_secondes//60/10
second = nb_secondes//10
#MACRO affiche(N)
on N gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5,chiffre6,chiffre7,chiffre8,chiffre9
#ENDMACRO
affiche(dminut)
affiche(minut)
affiche(dsecond)
affiche(second)
#MACRO affiche(N,A,B)
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,A,B,0x22,0,3)
on N gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiff re5,chiffre6,chiffre7,chiffre8,chiffre9
#ENDMACRO
Benn moi non plus ! . Maintenant que tu le dis, ca parait tellement évident. J'avais certainement le nez trop dans le guidon !Je ne comprends pas pourquoi tu n'utilises pas la variable timer . Si tu dois compter jusqu'à 60min, c'est 3600 secondes donc un timer à 18000 vu tes 64 MHz.
Je n'ai pas encore installé PE6... .ensuite, il serait plus judicieux d'utiliser une fonctionnalité intéressante de PE6, à savoir les macros avec passage de paramètres.
Ah oui effectivement pour compacter , ca compacteon peut même faire plus compact en définissant une macro indiquant non seulement le nombre , mais la position dans l'affichage:
La réactivité n'est la QUE pour l'encodeur incrémental, quand on le tourne .Et pourquoi cette poursuite à tout prix de la réactivité pour un truc qui se met à jour qu'une fois par seconde !!
tu passes ton temps à cavaler dans tes programmes pour finalement attendre ...
Merci . Besqueut ma bien maché le travail quand même .En tout cas, bravo à toi et Besqueut pour ce décorticage de l'afficheur !
Ben si justement. C'est une autre raison pour laquelle il ne faut pas remettre à zéro la variable Time :Comment compter le temps d'appui d'un BP sur 20X2. La fonction "time" n'est pas disponible , utilisation de la fonction "timer" ? Le but lancé le compte à rebours quand on appui sur le BP pendant 2 ou 3 secondes ( à déterminé avec des tests) .
Je n'ai pas testé ces macros, mais (vu le nom) il s'agit de macro-compilation, donc de génération de code supplémentaire...on peut même faire plus compact en définissant une macro indiquant non seulement le nombre , mais la position dans l'affichage:!
Vous pourriez aussi les dessiner en noir sur fond blanc : il y a un réglage de l'afficheur pour faire ça il me semble.PS : pas d'idée pour faire clignoter mes chiffres qui sont sélectionnés pour le réglages ? sans idée je pense que je vais réduire leurs tailles et les entourer par exemple ou les soulignés un truc du genre .
Le doute sera vite levé dès que vous toucherez le bouton...C'est une bonne idée , mais j'ai peur qu'on ne sache plus , si c'est le noir sur blanc ou le blanc sur noir qui change !!
Lol ; Non car cela s'inversera aussi; Tant qu'il n'y as que deux critères a mon avis , ce sera pas très clair pour l'utilisateur ( des enfants au demeurant) .Le doute sera vite levé dès que vous toucherez le bouton...
A essayer effectivement mais je doute , car la réactivité est tout simplement géniale, Quasi immédiate . Franchement je m'attendais pas a ça. J'étais resté sur l'impression du LCD de mon projet projet ( le chenillard paint-ball) rien a voir .Sinon, le simple fait de rafraîchir continuellement les deux chiffres en cours de mise à jour est sans doute suffisant pour obtenir un effet de clignotement,
Ce n'est pas dans le but de réduire le code. Ces macros sont traitées par le pré-processeur de PE6 et engendre le même volume de code.Je n'ai pas testé ces macros, mais (vu le nom) il s'agit de macro-compilation, donc de génération de code supplémentaire...
Ca reste à confirmer, mais à priori, si ce code est plus compact à l'édition, il devrait être au moins aussi volumineux sinon pire en encombrement mémoire.
Pour moi, ce genre de technique est utile pour rendre le code plus lisible, mais ne permet pas de réduire la taille du code. Ce n'est pas un véritable appel de sous-programme avec passage de paramètres...
symbol A = ....
symbol B = ....
symbol C = ....
A= 98 :B= 127:C= second
gosub affichage
A=67 : B= 97: C= dsecond
gosub affichage
etc ....
Affichage:
hi2cout 0x80,(0x00,0x00,0x20,0x01,0x21,A,B,0x22,0,3)
on C gosub chiffre0,chiffre1,chiffre2,chiffre3,chiffre4,chiffre5,chiffre6,chiffre7,chiffre8,chiffre9
return
Ben oui! surtout que la 5.5.5 n'est plus d'actualité!dje said:Je n'ai pas encore installé PE6... .
Les améliorations en valent telle le coup ! car je commençais a bien m'habituer avec mon PE5.5.5
Si vraiment le clignotement n'est pas visible, vous pouvez intercaler un effaçage des 2 chiffres en cours de réglage.A essayer effectivement mais je doute , car la réactivité est tout simplement géniale, Quasi immédiate . .
A ben là tempo est perdu...tempo = timer ' On enregistre le timer en cours methode du lapin blanc
...
tempo = timer - tempo ' On calcule le temps passé entre les deux evenements
if tempo >= 10 then ' Si le temps est superieur a 10 on lance le chrono ( 10 correspond à 2 secondes)
gosub Lancement ' lance le compte à rebours
end if
end if
Lol exact . Mias j'ai marqué " désolé j'ai finis par trouvé" dans les causes de la suppression . je pensais que cela allait être visible .??? L'animal aurai-t-il trouvé le problème et retiré son post ??? Je ne l'ai pas rêvé quand même ???
Même avis : voir post #70C'est quand même plus simple d'utiliser timer3 pour ces fonctions annexes, puisque c'est un 20X2 !
Pas certain que le lapin simplifie le code ....Même avis : voir post #70
3 techniques possibles
C'est néanmoins intéressant d'expérimenter chacune pour voir les avantages et les inconvénients.
C'est un timer interne indépendant@ PieM : je viens de relire la fonction tmr3 . apparemment c'est une très bonne façon, mais a la limite plus pour faire mon clignotement . Le timer 3 ne gène absolument en rien dans la vitesse de lecture des incrementation de l'encodeur si j'ai bien compris , car en tache de fond .
je vais d'abord essayé avec le timer 3, car votre solution m'oblige a tout revoir
Oui, c'est ce que j'ai écrit en #70 :Pas certain que le lapin simplifie le code ....
Et pas de multitâche avec les X2.
La mise a l'heure toutes les secondes n'est pas à gérer avec le reste, car seulement quand le CàR est en route .A mon sens, il y a 4 séries d’événements à gérer simultanément :
- la mise à jour de l'heure toutes les secondes,
- l'appui sur un bouton pendant plus de 3s,
- le clignotement de 2 chiffres si on est en mode de mise à jour (période environ 1s, avec un duty cycle genre 80/20 ou 90/10)
- la prise en compte de l'encodeur (à priori aussi souvent que possible)