SP-2:.### Z01### [Picaxe] Ecran OLED et sonde de température numérique DS18B20. Forum Cyclurba.fr. Habitat, écologie et énergie

Nouvelle discussionNouveau message Derniers messages Recherche forum
11 messages.   1 2 - [Picaxe] Ecran OLED et sonde de température numérique DS18B20. [18022]
Meuh
20-02-2016 à 15h49
Acceder au profil du membre
Sujet de départ abandonné par manque de temps (et de concentration ainsi que de suivi) : [Picaxe] Fabriquer un thermomètre digital à écran OLED sur port USB et sondes KTY précises.

Au final, je garde l'écran OLED et le picaxe 18M2 livrés dans le "pack" AXE133Y.
Je retouche la programmation pour adapter à ce que m'envoie la sonde de température numérique DS18B20 ... qui me permet, en outre de rêgler 3 problèmes issus du capteur de température analogique qu'est une KTY :

- plus nécessaire d'adapter des formules mathématiques complexes
- plus nécessaire d'inverser les valeurs lors du passage en température négative
- les DS18B20 sont fournies serties et étanches avec câble silicone.

Mon but est toujours le même que dans l'ancien sujet : remplacer mon actuel thermomêtre du Biro Estrima qui n'accepte pas les parasites du step down 48v-12v DC-DC lorsque je mets en route le dégivreur de parebrise.

Bonus :

- suivi de l'évolution de la température durant la conduite (permettant de voir que la route va geler par exemple).
- écran OLED (plus besoin de résistance de diminution de l'éclairage la nuit (comme sur les écran bleus rétro-éclairés par une LED blanche)

Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [434197]

Message modifié le 2016-02-20 17:38:08 par Meuh.
Meuh
20-02-2016 à 15h52
Acceder au profil du membre
La notice picaxe associé pour utiliser la sonde numérique.

Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [434199]
publicité
20-02-2016 à 15h52
Lien commercial -276-


Meuh
20-02-2016 à 17h06
Acceder au profil du membre
Erreur du vendeur de la DS18B20 :

Vendeur :
bleu = DATA
jaune = 0v


Réalité :
bleu = 0v
jaune = DATA



Autre précision, la sonde a besoin de la résistance indiquée sur la fiche picaxe (4,7k).
En revanche, et après test avec un potentiomêtre ... et sur mes 5 mêtres de la sonde, une résistance de 65 Ohm est déjà suffisante (sur un picaxe 18M2) pour faire démarrer le dialogue.

J'ai donc réutilisé mes résistances de 2K de mon ancien sujet.

Si vous ne mettez pas de résistance, les données ne sont pas reçues.

Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [434210]

Message modifié le 2016-02-20 17:21:54 par Meuh.
Meuh
20-02-2016 à 17h28
Acceder au profil du membre
Vitesse d'une mesure : 13 mesures sur 1 voie en 10 secondes.


mesuretension:



readtemp12 c.1,w13              ; lecture DS18B20
inc b24
debug


goto mesuretension





Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [434215]
Meuh
20-02-2016 à 17h33
Acceder au profil du membre
Relation de la lecture 12bits dans le mot w1 d'après la feuille technique de la DS18B20.

Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [434217]
Meuh
20-02-2016 à 18h11
Acceder au profil du membre
Programme exemple d'une précision à 2 chiffres après la virgule et un picaxe : www.phanderson.com


Article a écrit :
This program interfaces with three DS18B20 sensors on separate twisted pair runs. It performs measurements on each of the three sensors and sends the result in the of the device number (1, 2, 3) and the temperature with two digits after the decimal point. For example;

1 23.76
2 16.97
3 -10.78

This data is sent to the PC using the SerTxD command, which is 4800 baud for the PICAXE-08M. Clearly, you could modify this for 2400 using the SerOut command.

In this implementation, the ReadTemp12 command is used to read the temperature into word variable TReading. If the most significant bit is a one, the reading is negative and the twos compliment of the reading is performed. This is then multiplied by 100 times 0.0625. The whole and fractional parts are separated and each is output to the terminal separated by a decimal point.



Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [434222]
Meuh
20-02-2016 à 18h38
Acceder au profil du membre
Adaptation du sujet cité en anglais pour mon compte : affichage de 236 = 23,6°C avec marqueur de + ou de - suivant la température négative.


mesuretension:



readtemp12 c.1,w13; lecture DS18B20 Sonde 1
readtemp c.1,b24; lecture simplifiée pour contrôle
let b25=w13/256/128; 0 = signe + / 1 = signe -
if b25=1 then : w13 = w13 ^ $ffff + 1 : endif; retournement pour lecture négative

w11=w13*6
w13=w13*25/100
w11=w11+w13/10

debug


goto mesuretension



Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [434225]
Meuh
20-02-2016 à 19h09
Acceder au profil du membre
Branchement et vérification pour 2 sondes (... c'est lent, la lecture ! ).

Mais bon, comme y'a un effet magnétique de la mesure, les décimales ne bougent plus intempestivement ...

Il est à noter que l'instruction READTEMP créée une interruption dans le cycle du picaxe ... la variable "TIME" ne peut donc plus être utilisée car elle n'évolue plus de manière stable et fiable.

Mais comme j'aime pas les instructions PAUSE ... c'est pas un problème.

Le programme en question utilise les mots w13-w12-w11.
Les mesures des 2 sondes sont stockées dans w13 et w11.
Le signe + ou - (température négative) est stockée dans b25 pour w13 et b24 pour w11.

Aucun décalage de température n'est remarqué sur les 2 sondes séparées soumises à la même atmosphère (cool, c'est du calibré !).


mesuretemperature:



readtemp12 c.1,w13; lecture DS18B20 Sonde 1

let b25=w13/256/128; 0 = signe + / 1 = signe -
if b25=1 then : w13 = w13 ^ $ffff + 1 : endif; retournement pour lecture négative

let w11=w13*6
let w13=w13*25/100
let w11=w11+w13/10
let w13=w11; w13 = 000 = 00.0°C et b25 = signe +/-
let w11=0; nettoyage






readtemp12 c.2,w11; lecture DS18B20 Sonde 2

let b24=w11/256/128; 0 = signe + / 1 = signe -
if b24=1 then : w11 = w11 ^ $ffff + 1 : endif; retournement pour lecture négative

let w10=w11*6
let w11=w11*25/100
let w10=w10+w11/10
let w11=w10; w11 = 000 = 00.0°C et b24 = signe +/-
let w10=0; nettoyage




debug


goto mesuretemperature



Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [434234]

Message modifié le 2016-02-20 19:15:55 par Meuh.
Meuh
20-02-2016 à 19h41
Acceder au profil du membre
Reconstruction de l'affichage OLED (à la place du DEBUG sur le PC).
Dommage, la vitesse n'évolue pas ...


#picaxe 18M2

symbol line_length = 16; change to 20 for displays with 20 character lines

symbol enable = C.6; LCD enable
symbol rs = C.7; LCD RS

let b1=0                ; LCD
let b2=0                ; LCD
let b3=0                ; LCD
let b4=0                ; LCD




; LCD data pins are on B.0 to B.7

; Store the 16 character user defined messages in EEPROM data memory
; First two messages are optionally used as welcome message


EEPROM $00, ("  Estrima Biro  ") ; store msg in the EEPROM memory
EEPROM $10, ("   20-02-2016   ") ; store msg 1 in the EEPROM memory

EEPROM $20, ("Ext    ,  C     ") ; store msg 2 in the EEPROM memory
EEPROM $30, ("Int    ,  C     ") ; store msg 3 in the EEPROM memory
EEPROM $40, ("This is msg 4   ") ; store msg in the EEPROM memory
EEPROM $50, ("This is msg 5   ") ; store msg in the EEPROM memory
EEPROM $60, ("This is msg 6   ") ; store msg in the EEPROM memory
EEPROM $70, ("This is msg 7   ") ; store msg in the EEPROM memory
EEPROM $80, ("This is msg 8   ") ; store msg in the EEPROM memory
EEPROM $90, ("This is msg 9   ") ; store msg in the EEPROM memory
EEPROM $A0, ("This is msg 10  ") ; store msg in the EEPROM memory
EEPROM $B0, ("This is msg 11  ") ; store msg in the EEPROM memory
EEPROM $C0, ("This is msg 12  ") ; store msg in the EEPROM memory
EEPROM $D0, ("This is msg 13  ") ; store msg in the EEPROM memory
EEPROM $E0, ("This is msg 14  ") ; store msg in the EEPROM memory
EEPROM $F0, ("This is msg 15  ") ; store msg in the EEPROM memory



init:


let dirsB = %11111111; PortB all outputs

pause 500 ; Power stabilistation = 500ms

let pinsB = %00111001 ; 8 bit, 2 line, 5x8 , Western_European table1

pulsout enable,1  ; 

let pinsB = %00001100; Display on, no cursor, no blink
pulsout enable,1 

let pinsB = %00000001 ; Display Clear
pulsout enable,1
pause 7; Allow 6.2ms to clear display

let pinsB = %00000010 ; Return Home
pulsout enable,1

let pinsB = %00000110 ; Entry Mode, ID=1, SH=0
pulsout enable, 1

high rs; Leave in character mode


welcome:


let b1 = 0; EEPROM 00 on top
gosub msg; do it

low rs; command mode
let pinsB = 192; move to line 2, instruction 192
pulsout enable,1  ; pulse the enable pin to send data.
high rs; character mode again

let b1 = 1; EEPROM 10 on bottom
gosub msg; do it

pause 1000



testOLED:

low rs; command mode
let pinsB = 1; clear all display, instruction 1
pulsout enable,1  ; pulse the enable pin to send data.
high rs
pause 30

      pause 1000

low rs; command mode
let pinsB = 128; move to line 1, instruction 128
pulsout enable,1  ; pulse the enable pin to send data.
high rs; character mode again


let b5=16
do
let pinsB = %11111111
pulsout enable, 1
pause 10
dec b5
loop until b5=0

low rs; command mode
let pinsB = 192; move to line 2, instruction 192
pulsout enable,1  ; pulse the enable pin to send data.
high rs; character mode again

let b5=16
do
let pinsB = %11111111
pulsout enable, 1
pause 10
dec b5
loop until b5=0

let pinsB = %00000001 ; Display Clear
pulsout enable,1
pause 7; Allow 6.2ms to clear display

pause 1000

goto calque



; display message from EEPROM sub routine
; message number 0-15 must be in b1 when called
; uses (alters) b1, b2, b3, b4
msg:
let b2 = b1 & %00001111 * line_length
; EEPROM start address is 0 to 15 multiplied by 16
let b3 = b2 + line_length - 1; end address is start address + (line_length - 1)
for b4 = b2 to b3; for 16 times
read b4,b1; read next character from EEPROM data memory into b1
let pinsB = b1 ; output the data
pulsout enable,1  ; pulse the enable pin to send data.
next b4; next loop
return





calque:

low rs; command mode
let pinsB = 1; clear all display, instruction 1
pulsout enable,1  ; pulse the enable pin to send data.
high rs
pause 30

pause 1000

low rs; command mode
let pinsB = 128; move to line 1, instruction 128
pulsout enable,1  ; pulse the enable pin to send data.
high rs; character mode again

let b1 = 2; EEPROM 20 on top
gosub msg; do it

low rs; command mode
let pinsB = 137; move to line 1, go to +10 
pulsout enable,1  ; pulse the enable pin to send data.
high rs
let pinsB = %11010010   ; sigle "degrès"
pulsout enable,1

low rs; command mode
let pinsB = 192; move to line 2, instruction 192
pulsout enable,1  ; pulse the enable pin to send data.
high rs; character mode again

let b1 = 3; EEPROM 30 on bottom
gosub msg; do it

low rs; command mode
let pinsB = 201; move to line 2, go to +10
pulsout enable,1  ; pulse the enable pin to send data.
high rs
let pinsB = %11010010   ; sigle "degrès"
pulsout enable,1






mesuretemperature:



readtemp12 c.1,w13; lecture DS18B20 Sonde 1

let b25=w13/256/128; 0 = signe + / 1 = signe -
if b25=1 then : w13 = w13 ^ $ffff + 1 : endif; retournement pour lecture négative

let w11=w13*6
let w13=w13*25/100
let w11=w11+w13/10
let w13=w11; w13 = 000 = 00.0°C et b25 = signe +/-
let w11=0; nettoyage






readtemp12 c.2,w11; lecture DS18B20 Sonde 2

let b24=w11/256/128; 0 = signe + / 1 = signe -
if b24=1 then : w11 = w11 ^ $ffff + 1 : endif; retournement pour lecture négative

let w10=w11*6
let w11=w11*25/100
let w10=w10+w11/10
let w11=w10; w11 = 000 = 00.0°C et b24 = signe +/-
let w10=0; nettoyage




affichetempligne1:


low rs; command mode
let pinsB = 132; move to line 1, go to +5 
pulsout enable,1  ; pulse the enable pin to send data.
high rs

if b25=0 then : let pinsB = %00101011 : endif  ; sigle +
if b25=1 then : let pinsB = %00101101 : endif   ; sigle -
pulsout enable,1



let b7 = w13/100

low rs; command mode
let pinsB = 133; move to line 1, go to +6 
pulsout enable,1  ; pulse the enable pin to send data.
high rs

if b7=0 then : let pinsB = %00100000 : endif   ; sigle RIEN
if b7=1 then : let pinsB = %00110001 : endif   ; sigle 1
if b7=2 then : let pinsB = %00110010 : endif   ; sigle 2
if b7=3 then : let pinsB = %00110011 : endif   ; sigle 3
if b7=4 then : let pinsB = %00110100 : endif   ; sigle 4
if b7=5 then : let pinsB = %00110101 : endif   ; sigle 5
if b7=6 then : let pinsB = %00110110 : endif   ; sigle 6
if b7=7 then : let pinsB = %00110111 : endif   ; sigle 7
if b7=8 then : let pinsB = %00111000 : endif   ; sigle 8
if b7=9 then : let pinsB = %00111001 : endif   ; sigle 9
pulsout enable,1



let b7 = b7*10
let b8 = w13/10-b7

low rs; command mode
let pinsB = 134; move to line 1, go to +7 
pulsout enable,1  ; pulse the enable pin to send data.
high rs

if b8=0 then : let pinsB = %00110000 : endif   ; sigle 0
if b8=1 then : let pinsB = %00110001 : endif   ; sigle 1
if b8=2 then : let pinsB = %00110010 : endif   ; sigle 2
if b8=3 then : let pinsB = %00110011 : endif   ; sigle 3
if b8=4 then : let pinsB = %00110100 : endif   ; sigle 4
if b8=5 then : let pinsB = %00110101 : endif   ; sigle 5
if b8=6 then : let pinsB = %00110110 : endif   ; sigle 6
if b8=7 then : let pinsB = %00110111 : endif   ; sigle 7
if b8=8 then : let pinsB = %00111000 : endif   ; sigle 8
if b8=9 then : let pinsB = %00111001 : endif   ; sigle 9
if b8=10 then : let pinsB = %11010000 : endif   ; sigle DEFAUT
pulsout enable,1



let b7 = b7*10
let b8 = b8*10
let b9 = w13-b7-b8

low rs; command mode
let pinsB = 136; move to line 1, go to +9 
pulsout enable,1  ; pulse the enable pin to send data.
high rs

if b9=0 then : let pinsB = %00110000 : endif   ; sigle 0
if b9=1 then : let pinsB = %00110001 : endif   ; sigle 1
if b9=2 then : let pinsB = %00110010 : endif   ; sigle 2
if b9=3 then : let pinsB = %00110011 : endif   ; sigle 3
if b9=4 then : let pinsB = %00110100 : endif   ; sigle 4
if b9=5 then : let pinsB = %00110101 : endif   ; sigle 5
if b9=6 then : let pinsB = %00110110 : endif   ; sigle 6
if b9=7 then : let pinsB = %00110111 : endif   ; sigle 7
if b9=8 then : let pinsB = %00111000 : endif   ; sigle 8
if b9=9 then : let pinsB = %00111001 : endif   ; sigle 9
if b9=10 then : let pinsB = %11010000 : endif   ; sigle DEFAUT
pulsout enable,1





affichetempligne2:

low rs; command mode
let pinsB = 196; move to line 2, go to +5 
pulsout enable,1  ; pulse the enable pin to send data.
high rs

if b24=0 then : let pinsB = %00101011 : endif  ; sigle +
if b24=1 then : let pinsB = %00101101 : endif   ; sigle -
pulsout enable,1



let b7 = w11/100

low rs; command mode
let pinsB = 197; move to line 2, go to +6 
pulsout enable,1  ; pulse the enable pin to send data.
high rs

if b7=0 then : let pinsB = %00100000 : endif   ; sigle RIEN
if b7=1 then : let pinsB = %00110001 : endif   ; sigle 1
if b7=2 then : let pinsB = %00110010 : endif   ; sigle 2
if b7=3 then : let pinsB = %00110011 : endif   ; sigle 3
if b7=4 then : let pinsB = %00110100 : endif   ; sigle 4
if b7=5 then : let pinsB = %00110101 : endif   ; sigle 5
if b7=6 then : let pinsB = %00110110 : endif   ; sigle 6
if b7=7 then : let pinsB = %00110111 : endif   ; sigle 7
if b7=8 then : let pinsB = %00111000 : endif   ; sigle 8
if b7=9 then : let pinsB = %00111001 : endif   ; sigle 9
pulsout enable,1


let b7 = b7*10
let b8 = w11/10-b7

low rs; command mode
let pinsB = 198; move to line 2, go to +7 
pulsout enable,1  ; pulse the enable pin to send data.
high rs

if b8=0 then : let pinsB = %00110000 : endif   ; sigle 0
if b8=1 then : let pinsB = %00110001 : endif   ; sigle 1
if b8=2 then : let pinsB = %00110010 : endif   ; sigle 2
if b8=3 then : let pinsB = %00110011 : endif   ; sigle 3
if b8=4 then : let pinsB = %00110100 : endif   ; sigle 4
if b8=5 then : let pinsB = %00110101 : endif   ; sigle 5
if b8=6 then : let pinsB = %00110110 : endif   ; sigle 6
if b8=7 then : let pinsB = %00110111 : endif   ; sigle 7
if b8=8 then : let pinsB = %00111000 : endif   ; sigle 8
if b8=9 then : let pinsB = %00111001 : endif   ; sigle 9
pulsout enable,1


let b7 = b7*10
let b8 = b8*10
let b9 = w11-b7-b8

low rs; command mode
let pinsB = 200; move to line 2, go to +9 
pulsout enable,1  ; pulse the enable pin to send data.
high rs

if b9=0 then : let pinsB = %00110000 : endif   ; sigle 0
if b9=1 then : let pinsB = %00110001 : endif   ; sigle 1
if b9=2 then : let pinsB = %00110010 : endif   ; sigle 2
if b9=3 then : let pinsB = %00110011 : endif   ; sigle 3
if b9=4 then : let pinsB = %00110100 : endif   ; sigle 4
if b9=5 then : let pinsB = %00110101 : endif   ; sigle 5
if b9=6 then : let pinsB = %00110110 : endif   ; sigle 6
if b9=7 then : let pinsB = %00110111 : endif   ; sigle 7
if b9=8 then : let pinsB = %00111000 : endif   ; sigle 8
if b9=9 then : let pinsB = %00111001 : endif   ; sigle 9
pulsout enable,1




goto mesuretemperature




Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [434238]
publicité
20-02-2016 à 19h41
Buzibi, le spécialiste du  vélo électrique
Lien commercial -60-

Meuh
20-02-2016 à 20h08
Acceder au profil du membre
Rajout du morceau pour la tendance, les 4 sigles couvrent 1 minute de tendance.




























tendance:

let w7=w7+w13; stockage Sonde 1
let w6=w6+w11; stockage Sonde 2
inc b11
if b11< 15 then : goto mesuretemperature : endif

let w7=w7/15
let w6=w6/15

let b11=w13-w7; moyenne Sonde 1
let b10=w11-w6; moyenne Sonde 2




low rs; command mode
let pinsB = 140+b0      ; move to line 1, go to +13 et ajouter le décalage de moyenne b0
pulsout enable,1  ; pulse the enable pin to send data.
high rs

if b11< 128 and b11>2 then : let pinsB = %10110011 : endif         ; sigle UP
if b11=< 2 or b11=>253 then : let pinsB = %00111101 : endif        ; sigle EQUAL
if b11>128 and b11< 253 then : let pinsB = %10110100 : endif       ; sigle DOWN

if pinsB = %10110011 and b25=1 then 
let pinsB = %10110100 : goto line1 : endif                        ; inv. temp. négat.
if pinsB = %10110100 and b25=1 then 
let pinsB = %10110011 : endif


line1:
pulsout enable,1



low rs; command mode
let pinsB = 204+b0; move to line 2, go to +13 et ajouter le décalage de moyenne b0
pulsout enable,1  ; pulse the enable pin to send data.
high rs

if b10< 128 and b10>2 then : let pinsB = %10110011 : endif          ; sigle UP
if b10=< 2 or b10=>253 then : let pinsB = %00111101 : endif         ; sigle EQUAL
if b10>128 and b10< 253 then : let pinsB = %10110100 : endif        ; sigle DOWN

if pinsB = %10110011 and b24=1 then 
let pinsB = %10110100 : goto line2 : endif                         ; inv. temp. négat.
if pinsB = %10110100 and b24=1 then 
let pinsB = %10110011 : endif

line2:
pulsout enable,1






inc b0
if b0=4 then : let b0=0 : endif

let b11=0
let b10=0
let w7=0
let w6=0




goto mesuretemperature



Nikola (tesla), 37563 msg, 69 ans. Zurich (CH-01). [mon blog] ... mon trike KMX, c'est ma porsche de retraité ... :-D
 Citer Alerter [434242]

Message modifié le 2016-02-20 20:09:24 par Meuh.
11 messages.   1 2 - [Picaxe] Ecran OLED et sonde de température numérique DS18B20. - Lu 1806 fois. [18022]
retour en haut de page Messages récents
répondre dans cette discussion
En ce moment sur le tchat
Le 12 à 21h21 Havoc Ventes scooters motos électriques 1er semestre UE: +75%
Le 16 à 18h38 Noe07 Bonjour, j'ai un vélo KALKHOFF Andeavour 5B ADVANCE tout neuf, problème ... quand je mets l'assistance en montée, l'assistance se coupe...
Le 16 à 21h23 Havoc Il va falloir songer à un changement de contrôleur... si c'est possible !
Le 17 à 09h17 Gregory1978 bonjour J'ai fait une mini jeep pour mes enfants .. le moteur fonctionne parfaitement: dynamo de voiture 48v 70w : 1500w dc ...
Le 17 à 20h37 Havoc Choc frontal à Malaucène: le cycliste de 55 ans évacué par hélicoptère sur Marseille.


Découvrez tous nos display compatible Bafang



Accédez à notre site www.power-e-bike.fr

Découvrez tous nos display compatible Bafang

Accédez à notre site www.power-e-bike.fr