Electromag1 Circuits électroniques et Picaxes

Petit site pour ceux qui bricolent en électronique en général et sur les PICAXES en particulier.
Les PICAXES sont des microprocesseurs (PIC de Microship) programmables en BASIC. Pleins de qualités, pas chers, ultra faciles à programmer.
Tout (ou presque) est sur le site du distributeur Gotronic (voir les liens).
Les pages  seront ajoutées ou modifiées petit à petit.
Dans le but d'améliorer ce blog, communiquez moi vos remarques et les erreurs que vous pouvez constater.
Pour me contacter: Envoyez un mail à l'adresse : mag1mic@free.fr .  Tout message reçoit une réponse
Pour retourner au menu, Cliquer sur "LISTE DES PAGES", ici ou en haut de la colonne de gauche
Pour laisser un message, allez dans le "LIVRE D'OR"
Bonne visite
 
 

Minuterie compteuse - décompteuse
Picaxe 14M2 et LCD1602


Suite à l'essai concluant de l'afficheur LCD économique DEM 16209 FGH-PW.

Je l'ai adapté à la minuterie à afficheur LED décrite dans ce blog.

En fait, tous les afficheurs LCD de type HD 44780 (1602) conviennent.

Avantages:

  • Affichage plus riche,
  • Typon simplifié

Inconvénients:

  • Je n'en vois pas, même pas le prix!

Le schéma: (cliquez dessus pour agrandir).


Minuterie LCD 1602 Picaxe14M2

Quelques photos de la maquette:

On affiche par 2 potentiomètres le temps voulu, de 0 à 59mn 59 s, une valeur à changer dans le logiciel pour modifier ce temps max, jusqu'à 99mn 59 s.

Ce temps s'affiche sur la première ligne.


Minuterie alpha Picaxe 14M2 001

On appuie sur ON/OFF.
Le temps décompté apparait sur la seconde ligne.
La diode rouge s'allume
.
Lorsque le décompte passe à 0, la diode s'éteint, un beep, et retour à la photo ci dessus.

En affichant 00:00, nous avons un compteur. ON/OFF pour démarrer, la lumière s'allume, le temps s'affiche. ON/OFF, la lumière s'éteint.

Minuterie alpha Picaxe 14M2 002

 

Le code:

Le fichier .bas original en téléchargement ICI est beaucoup plus lisible et mieux commenté. A ouvrir dans le "Picaxe programming editor", c'est mieux, en couleurs!

' MINUTERIE LCD ALPHANUMERIQUE ET PICAXE 14M2

#picaxe14M2 'directive 14M2

setfreq m16 '4 ou 16 MHz pour la variable time.
'le LCD fonctionne sur les 2 fréquences !!

dirsB=%111111 'défini les ports B en sorties
dirsC=%000110 'idem I/O ports C

SYMBOL RS = B.0 ; 0 = Command 1 = Data
SYMBOL E = B.1 ; 0 = Idle 1 = Active
SYMBOL DB4 = B.2 ; LCD Data Line 4
SYMBOL DB5 = B.3 ; LCD Data Line 5
SYMBOL DB6 = B.4 ; LCD Data Line 6
SYMBOL DB7 = B.5 ; LCD Data Line 7
SYMBOL RSCMDmask = %00000000 ; Select Command register
SYMBOL RSDATmask = %00000001 ; Select Data register
SYMBOL cpt = b1
SYMBOL car = b2
SYMBOL rsbit = b3
'Nibble commands - To initialise 4-bit mode
DATA 0,( $33 ) ; %0011---- %0011---- 8-bit / 8-bit
DATA 1,( $32 ) ; %0011---- %0010---- 8-bit / 4-bit

'Byte commands - To configure the LCD

DATA 2,( %00101000 ) ; %001LNF00 Display Format
DATA 3,( %00001100 ) ; %00001DCB Display On
DATA 4,( %00000110 ) ; %000001IS Cursor Move
‘ ; L : 0 = 4-bit Mode 1 = 8-bit Mode
‘ ; N : 0 = 1 Line 1 = 2 Lines
‘ ; F : 0 = 5x7 Pixels 1 = N/A
‘ ; D : 0 = Display Off 1 = Display On
‘ ; C : 0 = Cursor Off 1 = Cursor On
‘ ; B : 0 = Cursor Steady 1 = Cursor Flash
‘ ; I : 0 = Dec Cursor 1 = Inc Cursor
‘ ; S : 0 = Cursor Move 1 = Display Shift
DATA 5,( $01 ) ; Clear Screen
PowerOnReset:
FOR cpt = 0 TO 5

READ cpt,car
GOSUB SendInitCmdByte
NEXT
'*********************** DEBUT PROGRAMME PERSO ************

DATA 6,("TOTAL: ") 'Texte sur l'afficheur
DATA 13,("RESTE: ")

symbol nmn = b4
symbol nsec = b5
symbol dsec = b6
symbol usec = b7
symbol ndmn = b8

symbol memOnOff = b9
symbol temps = w10
symbol tsec = w11
symbol pousOnOff = pinC.3
symbol lum = C.1 'lum =1 :allumage fluos


debut:
low lum 'sortie lum=0
readadc C.0,nmn 'lecture position minutes
nmn=59*nmn/255 'calcul nbre minutes: 59=minutes max affichables
readadc C.4,nsec 'lectuere position secondes
nsec=59*nsec/255 'calcul secondes
tsec=60*nmn+nsec 'temps total en secondes
temps=tsec

gosub conver
gosub ligne1
gosub ecrit
pause 10

'Les lignes en rouges sont maladroites et peuvent être remplacées par celles en vert dans le programme téléchargé.
if pousOnOff=1 and tsec <>0 then 'temps <>0 ->départ décompte
pause 10
stb: if pousOnOff =0 then decompt 'attente relachement bouton
goto stb
end if

if pousOnOff=1 and tsec =0 then 'temps =0 ->départ comptage
pause 10
stb2: if pousOnOff=0 then compt 'attente relachement bouton
goto stb2
end if

#rem
If poussOnOff=1 then 'Ah!, on a appuyer sur le poussoir
Do: Loop while pousOnOff=1 'Attente relachement poussoir
pause 10 'antirebond
If tsec=0 then goto compt 'temps=0, on compte
else goto decompt 'temps<>0, on décompte
endif

#endrem


decompt:
high lum 'allumage lumière
time=0

do while temps<>0

temps=tsec-time
gosub ligne2
gosub conver
gosub ecrit

loop 'boucle tant que temps <>0

low lum 'extinction lumière
sound C.2,(119,80) 'beep (119 à 16Mz, 125 à 4Mz) suivant buzzer
gosub efface

goto debut 'retour

compt:
high lum 'allumage lumière
tsec=3600
time=0

do while tsec>time 'arret au bout de 1 heure ou RAZ

temps=time
gosub ligne1
gosub conver
gosub ecrit
loop 'fin boucle
low lum 'extinction lumière
sound C.2 ,(119,80) 'beep (119 à 16Mz, 125 à 4Mz) suivant buzzer

goto debut

conver: 'Ici, on décompose en diz de mn,mn,diz de sec et sec

'puis +48 pour le code ascii

gosub raz 'Pour arrêter
nmn=temps/60 'Min décomposition du temps total en Minutes
ndmn=nmn/10+48 'diz de minutes
nmn=nmn//10+48 'minutes

nsec=temps//60 'secondes restantes
dsec=nsec/10+48 'DSec Dizaines de secondes
usec=nsec//10+48 'USec Unités de secondes

return

ligne1: 'position du curceur ligne 1 et ecriture du label

car= $80 | $00 'curseur début ligne1
gosub SendCmdByte

FOR cpt = 6 TO 12 'lecture texte ligne1 "TOTAL"
READ cpt,car
GOSUB SendDataByte
NEXT
return
ligne2: 'idem ligne 1

car= $80 | $40 'curseur début ligne2
gosub SendCmdByte

FOR cpt =13 TO 19 'lecture texte ligne2 "RESTE"
READ cpt,car
GOSUB SendDataByte
NEXT
return
ecrit: 'on écrit de gauche à droite

car=ndmn 'affichage diz de minutes
GOSUB SendDataByte

car=nmn 'affichage minutes
GOSUB SendDataByte

car=":" 'position separateur
GOSUB SendDataByte

car=dsec 'affichage diz de secondes
GOSUB SendDataByte

car=usec 'affichage secondes
GOSUB SendDataByte
return

Raz: 'Ne fonctionne qu'au relachement du poussoir
if pousOnOff=1 then
memOnOff=1 'memo appui
return
endif

if pousOnOff=0 and memOnOff=1 then 'RAZ seulement si appui
memOnOff=0
gosub efface
goto debut
end if
return

efface:
READ 5,car 'effacement écran
GOSUB SendInitCmdByte
return
'******************************* FIN PROGRAMME PERSO **************
SendInitCmdByte:
PAUSE 15 ; Delay 15mS
SendCmdByte:
rsbit = RSCMDmask ; Send to Command register
SendDataByte:
pinsB = car & $F0 / 4 | rsbit ; Put MSB out first
PULSOUT E,1 ; Give a 10uS pulse on E
pinsB = car & $0F * 4 | rsbit ; Put LSB out second
PULSOUT E,1 ; Give a 10uS pulse on E
rsbit = RSDATmask ; Send to Data register next
RETURN





Créer un site
Créer un site