Panneau de modération ]

[Théorie] Programmer un Picaxe de A à Z

Questions sur l'utilisation des composants, la théorie du signal, l'interprétation des schémas, l'usage des outils et des logiciels...

Re: [Théorie] Programmer un Picaxe de A à Z

Messagepar clajucla le 02 Aoû 2009 11:59

Merci, c'est bon de se sentir soutenu dans un monde où même ton chien pisse sur tes pompes.. :D

Ben oui, on peut fastoche piloter des Leds, mais aussi facilement tout ce qu'on veut...tout de suite, le schéma avec des relais en sortie ou des transistors.
Mettre un transo type BCX38B en sortie::
transo.jpg
transo.jpg (12.49 Kio) Vu 990 fois
le BCX38B peut switcher les courants jusqu'à 800mA. La diode est une 1N4001

voire même un "ULN2003 Darlington driver" qui n'est ni plus ni moins que 7 transos type BCX38B avec leurs diodes dans un boitier...Dans ce cas, on prend 7 sorties d'un picaxe que l'on connecte aux entrées 1 à 7 d'un ULN2003:
uln2003.jpg
uln2003.jpg (56.19 Kio) Vu 991 fois


ET ENCORE PLUS FORT :shock: avec un ULN2803 Darlington driver qui est une puce voisine mais avec 8 entrées... 8)

Mettre un Mosfet en sortie: Il est conseillé de mettre une résistance de 100K sur la Gate du Mosfet
Mosfet.jpg
Mosfet.jpg (8.88 Kio) Vu 993 fois


Mettre un Relais en sortie:
relais.jpg
relais.jpg (13.1 Kio) Vu 992 fois


Voila , c'était juste pour montrer la facilité de faire un looper 8 voies avec en prime un écran avec le nom des patchs sans problèmes :D...on verra ca dans les prochains jours :wink:
Je suis Russe, il faut que tu me cèdes!
Avatar de l’utilisateur
clajucla
MODERATEUR PANDA
 
Messages: 1459
Enregistré le: 07 Avr 2007 14:29
Localisation: Lorraine

Messagepar T-minik le 02 Aoû 2009 12:19

avec un ULN2803 on peut même se faire 8 sorties sur 500mA (ce qui est suffisant pour pas mal de relais 5V il me semble) :wink:
Avatar de l’utilisateur
T-minik
"Prix du Sérial Posteur 2009"
 
Messages: 3200
Enregistré le: 10 Fév 2005 08:43
Localisation: Le Triadou - 34

Messagepar clajucla le 02 Aoû 2009 18:00

La commande "readadc": lit la valeur suivant la position d'un potentiomètre, d'une photorésistance, etc...
Commande très intéressante pour un capteur mis sur une entrée analogique du Picaxe (les broches ADC). Permet de faire faire ce qu'on veut au Picaxe suivant la position de l'entrée. Dans l'exemple qui suivant, je simule un potard qui suivant sa position va m'allumer ou m'éteindre telle ou telle LED, juste en tournant le potard :D .

Ex:
'on allume une led en sortie 1, 2 ou 4
'suivant la position du potentiomètre

main:
readadc 1,b1 ' lit la valeur du pin1 et la met dans la
' variable b1
if b1 >= 20 and b1 <= 45 then allume2 ' va à allume2 si la valeur lue est comprise entre 20 et 45
if b1 >= 50 and b1 <= 75 then allume3 ' va à allume3 si la valeur lue est comprise entre 50 et 75
if b1 > 75 then allume4 'va à allume4 si la valeur est supérieure à 75
goto main ' retour à main


allume2:
high 1 ' allume output 1
pause 1000 ' attends 1 seconde
low 1 ' éteint output 1
goto main ' retourne à main


allume3:
high 2 ' allume output 2
pause 1000 ' attends 1 seconde
low 2 ' eteint output 2
goto main ' retourne à main

allume4:
high 4 ' allume output 4
pause 1000 ' attends 1 seconde
low 4 ' éteint output 4
goto main ' retourne à start

copiez ce programme et pour simuler le potard, vous augmentez les valeurs de A1 et vous verrez changer les leds aux valeurs programmées :wink:
readadc.jpg


J'ai ajouté à la commande "if" ceci: if b1 >= 20 and b1 <= 45 then allume2...on peut donc se servir aussi de "AND" et "OR" avec If... then. Par exemple la led s'allume quand j'appuie sur le bouton X ET( OU) le bouton Y
Je suis Russe, il faut que tu me cèdes!
Avatar de l’utilisateur
clajucla
MODERATEUR PANDA
 
Messages: 1459
Enregistré le: 07 Avr 2007 14:29
Localisation: Lorraine

Messagepar muad'dib le 02 Aoû 2009 18:05

La valeur lue est en ohm, ou c'est un pourcentage de la course du potard ? D'ailleurs, comment branche-t-on le potard/photorésistance/etc sur le picaxe pour ce genre d'utilisation ?
Ohm, Sweet Ohm
Avatar de l’utilisateur
muad'dib
GRAND SORCIER DIY
 
Messages: 2310
Enregistré le: 27 Oct 2006 22:30
Localisation: Metz

Messagepar T-minik le 02 Aoû 2009 18:10

il doit falloir monter le pot en diviseur de tension sur et l'entrée ADC compare la tension du curseur (en pourcentage ?) avec la tension d'alim non ?
Avatar de l’utilisateur
T-minik
"Prix du Sérial Posteur 2009"
 
Messages: 3200
Enregistré le: 10 Fév 2005 08:43
Localisation: Le Triadou - 34

Messagepar clajucla le 02 Aoû 2009 18:23

La valeur est une plage de 0 à 255 (0 à 5v) pour les Picaxe avec entrées analogiques 8/10 bits. Pour le modèle de base (le 08), on est en analogique basse résolution et on agit que sur les 2/3 de la plage (env 0 à 3,3v).
Ce qui donne le schéma suivant pour le programme ci dessus:
readadc1.jpg
readadc1.jpg (15.23 Kio) Vu 958 fois


et le branchement d'une LDR:
readadc2.jpg
readadc2.jpg (16.37 Kio) Vu 958 fois


NB: Pour les Picaxe 10 bits, on utilise la commande "readadc10"
Je suis Russe, il faut que tu me cèdes!
Avatar de l’utilisateur
clajucla
MODERATEUR PANDA
 
Messages: 1459
Enregistré le: 07 Avr 2007 14:29
Localisation: Lorraine

Messagepar clajucla le 03 Aoû 2009 19:25

La commande "let dirs = %00000000": LE % veut dire binaire et chaque chiffre représente un pin et se lit de droite à gauche en commençant du pin0. Avec cette commande, on configure les pins en entrées ou sorties.
Ex:
let dirs = %00000011 ' configure les pins 0 et 1 en sorties
let dirs = %00000101 ' configure les pins 0 et 2 en sorties
pour les PICAXE 08: les pins 0 et 3 sont préconfigurés. LE pin0 est toujours une sortie et le pin3 toujours une entrée.
pour les autres PICAXE on écrit let dirsA ( B,C ou D suivant le modèle)
Ex:
let dirsB = %00010101 ‘ configure les pins B0, B2 et B4 comme sorties

La commande "let pins = %00000000": même démarche que dessus mais on configure l'état des pins (ON ou OFF).
pour les PICAXE 08:
Ex:
let pins = %00001011 ‘ mets les sorties 3,0,1sur ON
pause 1000 ‘ attend 1 seconde
let pins = %00000000 ‘ mets toutes les sorties sur OFF

pour les autres PICAXE on écrit let pinsA ( B,C ou D suivant le modèle)
Ex:
let dirsB = %10000011 ‘configure les pins 7,0,1 comme sorties
let pinsB = %10000011 ‘ configure les pins 7,0,1 sur ON
pause 1000 ‘ attend 1 seconde
let pinsB = %00000000 ‘ Mets tous les pins sur OFF
Je suis Russe, il faut que tu me cèdes!
Avatar de l’utilisateur
clajucla
MODERATEUR PANDA
 
Messages: 1459
Enregistré le: 07 Avr 2007 14:29
Localisation: Lorraine

Messagepar clajucla le 07 Aoû 2009 14:06

la commande "gosub (label)...return":. ceci est une sous procédure, on va au label indiqué apres gosub, on execute ce qu'il y a dans le label jusqu'à Return et ensuite le programme continue à la ligne en dessous du Gosub. En gros, on va à un endroit, on fait ce qu'il y a à faire et on continue le programme là où on l'avait arrêté.

Ex:
main:
let b2 = 3 ' donne le nombre de 3 à la variable b2
gosub flsh ' appelle la sous-procédure flsh
let b2 = 2 ' donne le nombre de 2 à la variable b2
gosub flsh ' appelle la sous-procédure flsh
end ' fin du programme


flsh:
for b0 = 1 to b2 ' commencer à boucler b2
high 1 ' switch on output 1
pause 500 ' attend 0.5 seconds
low 1 ' switch off output 1
pause 500 ' attend 0.5 seconds
next b0
return ' retourne à la sous procédure et continue le programme

Dans cet exemple, je donne la valeur 3 à ma variable b2, j'arrive au Gosub qui m'envoie au label flsh..j'exécute 3 fois ce qui se trouve dans le label (la sortie du pin 1 qui s'allume/attends 0,5 seconde/s'éteint/attends 0,5 seconde). J'arrive au Return qui me fait remonter à la ligne où j'étais au début du Gosub, donc j'arrive à "let b2 = 2 " qui cette fois ci me donne la valeur 2 à ma variable, et rebelote, le gosub m'emmène à flsh comme ci dessus mais cette fois ci que 2 fois (puisque b2=2). Le return me ramène à la ligne en dessous de Gosub pour continuer et trouve "End" qui me finit le programme... :D

C'est hyper simple et très pratique pour programmer...regardez ce qui se passe avec le pas à pas de la fenêtre "simulation" (le bouton en haut à droite), vous verrez que c'est très parlant. 8)
pasapas.jpg
pasapas.jpg (40.55 Kio) Vu 882 fois
Je suis Russe, il faut que tu me cèdes!
Avatar de l’utilisateur
clajucla
MODERATEUR PANDA
 
Messages: 1459
Enregistré le: 07 Avr 2007 14:29
Localisation: Lorraine

Messagepar clajucla le 07 Aoû 2009 17:29

Les conditions possibles quand vous programmez un Picaxe sont:
= : est égal à ou is : est égal à
<> : n'est pas égal à ou != : n'est pas égal à
> : plus grand que
< : plus petit que
Je suis Russe, il faut que tu me cèdes!
Avatar de l’utilisateur
clajucla
MODERATEUR PANDA
 
Messages: 1459
Enregistré le: 07 Avr 2007 14:29
Localisation: Lorraine

Messagepar clajucla le 08 Aoû 2009 23:05

" - Dis moi Clajucla, ca fait des sons ton zinzin ? :( "

Mouais, disons que c'est pas le but, ca fait plutôt des beep ou des sons type sonnerie de téléphone...en gros c'est bien pour avoir un son, genre t'appuies sur un bouton, t'entends un beep et t'es content, t'es sur que t'as bien appuyé...
Pour faire ca, t'as 3 commandes possibles:
la commande sound pin,(note,durée,note,durée...):. c'est fait pour faire un beep, pin est un chiffre de 0 à 7 suivant la sortie ou tu mettras ton piezzo...note est un chiffre de 0 à 255 (du grave à l'aigu) et la durée est aussi un chiffre de 0 à 255 (approximativement des multiples de 10 ms).
Ex :
sound 1,(100,50) ‘ produit un son sur la sortie 1 de fréquence 100 et d'une durée de 500 milli secondes

La commande TUNE LED, speed, (note, note, note...) (seulement pour PICAXE-08M )
TUNE pin, speed, (note, note, note...) (pour les autres PICAXE )
: cette commande sert à faire toi même ta mélodie si tu ne te satisfais pas d'un simple beep. Pin est la sortie de 0 à 7 sauf pour le 08M où c'est obligatoirement fixé en output2.
Led (seulement pour PICAXE-08M ) est un chiffre de 0 à 3 pour désigner une sortie au cas où tu veuilles faire clignoter une led en même temps que ta musique (d'un intérêt moyen pour nous mais j'explique... )
0 - pas de sortie
1 - Output 0 flashes on et off
2 - Output 4 flashes on et off
3 - Output 0 et4 flash alternativement
Speed est un chiffre de 1 à 15 qui nous donne un tempo suivant le tableau ci dessous:
speed.jpg
speed.jpg (28.3 Kio) Vu 842 fois

et note et ben c'est ta mélodie que tu vas créer avec l'outil "ring tone tunes" dans ton logiciel ( PICAXE/WIZZARDS/Ring Tone tunes). Tu mets tes notes à la queuleuleu, tu fais "jouer" pour écouter et "Edition/Copier Basic" pour coller le code dans le programmateur.
doremi.jpg
doremi.jpg (154.51 Kio) Vu 841 fois

Chaque note est encodée en 8 bits, 2 bits pour la durée, 2 bits pour l'octave et 4 bits pour la note:
notes.jpg
notes.jpg (70.89 Kio) Vu 842 fois

et voici la représentation piano des fréquences de notes:
piano.jpg


voila 3 sites pour des sonneries et musiques toutes faites:
http://www.ringtonerfest.com/
http://www.free-ringtones.eu.com/
http://www.tones4free.com/

et la 3ème et dernière commande vite fait car anecdotique:
La commande play: joue une musique déjà en mémoire dans les puces.
PLAY tune,LED (PICAXE-08M seulement)
PLAY pin, tune (les autres Picaxe).
pin et led: même fonction que la commande vue plus haut.
tune de 0 à 3 sont les titres en mémoire:
0 - Happy Birthday (tous les Picaxe)
1 - Jingle Bells (tous les Picaxe M et X2 )
2 - Silent Night (08M seulement)
3 - Rudolph the Red Nosed Reindeer (08M seulement).
Ex: avec un PICAXE-08M
play 3,1 ‘ joue rudolf red nosed reindeer avec led sur output 0
Ex: avec un autre Picaxe
play 2,1 ‘ joue jingle bells sur la sortie pin 2

Ben voila :D reste plus qu'à montrer comment on branche un piezzo ou un petit HP:
piezohp.jpg
à gauche un piezzo, à droite un HP
piezohp.jpg (11.23 Kio) Vu 842 fois


et le branchement d'un buzzer qui lui ne fonctionne pas avec les 3 commandes vues ci-dessus car il ne produit qu'un son quand il a du jus au cul:
Ex:
high 1 'le buzzer fait tûûût sur la sortie 1
low 1 " le buzzer la ferme (sur la sortie 1)
buzzer.jpg
buzzer.jpg (21.84 Kio) Vu 843 fois
Je suis Russe, il faut que tu me cèdes!
Avatar de l’utilisateur
clajucla
MODERATEUR PANDA
 
Messages: 1459
Enregistré le: 07 Avr 2007 14:29
Localisation: Lorraine

Messagepar clajucla le 09 Aoû 2009 10:30

On rencontre parfois dans la programmation des petits symboles à la con ...$,0x,% :shock:
Ce sont des constantes...rien de grave... :D Les constantes sont des nombres qui peuvent être déclarés de 4 facons différentes:
1 - en décimal
Ex: 100
là on a un nombre tout bête sans préfixe
2 - en héxadécimal (hex)
Ex: $28
là on a un nombre précédé du signe dollar ou 0x (0x28)
3 - en binaire
Ex: %01100100
avec le nombre précédé du symbole pourcentage
4 - en ASCII
Ex: “A”
le texte est mis entre parenthèses et a son équivalent en nombre, ici : “A” ascii = 65 suivant le tableau ASCII que voila:
code_ascii.gif
code_ascii.gif (11.94 Kio) Vu 821 fois


A savoir en ASCII que "salut" est en fait traduit par "s", "a", "l" ,"u", "t".
la prochaine fois et on arrive à la fin de cette bonne base de programmation des Picaxe, on verra les afficheurs... 8)
Je suis Russe, il faut que tu me cèdes!
Avatar de l’utilisateur
clajucla
MODERATEUR PANDA
 
Messages: 1459
Enregistré le: 07 Avr 2007 14:29
Localisation: Lorraine

Messagepar clajucla le 12 Aoû 2009 21:40

Aujourd'hui, les afficheurs 7 segments :D
7seg.jpg
7seg.jpg (10.1 Kio) Vu 780 fois

Petite piqure de rappel, un afficheur 7 segments se compose de 7 petites Led qui peuvent clignoter indépendamment pour afficher des chiffres de 0 à 9. Il en existe de 2 types, à anodes ou cathodes communes. Ce qui est con ,c'est qu'en théorie chaque led doit être raccordée à une sortie du PICAXE :? ce qui nous bouffe vite 7 sorties...Heureusement, on peut utiliser un driver comme le 4511B qui coûte rien du tout et on n'utilise plus que 4 sorties :P
Dans l'exemple ci dessous ce sera à cathodes communes.
4511b.jpg
4511b.jpg (34.68 Kio) Vu 780 fois

Ex:
'Je vais afficher les nombres de 0 à 9
main:
for b1 = 0 to 9 ‘ configure une boucle de 0 à 9 utilisant la variable b1
let pins=b1 ‘ envoie b1 sur les 4 lignes de sortie (pin1, pin2, pin3, pin0 )
pause 1000 ‘ Pause 1 seconde
next b1 ‘ reviens à for
end

Mais il est aussi possible de n'utiliser que 2 sorties avec le 4026B :shock: :
4626B.jpg
4626B.jpg (31.7 Kio) Vu 780 fois

C'est pas génial ca ??? :lol: Il faut dire qu'avec cette puce, on se fout un peu de la gueule de l'œil humain..En effet dans l'exemple suivant, je vais afficher le nombre 4 qui va clignoter toutes les secondes. En réalité, le Picaxe va afficher 0-1-2-3-4, mais tellement vite que l'œil ne verra que 4... 8) : ah ca c'est sur, c'est plus facile de mater les nichons à Secret Story... :mrgreen:
Ex:
'affiche le chiffre 4 toutes les secondes

main: let b1 = 4 ' donne à la variable b1 la valeur 4
gosub clock 'va à la sous-procedure clock
pause 1000 ' attends 1 seconde
goto main ' recommence le programme

clock:
pulsout 1,10 ' reset l'afficheur à 0
if b1 = 0 then endclk ' si b1 = 0 alors va à endclk
for b3 = 1 to b1 ' commence la boucle
pulsout 0,10 ' envoie un pulse sur le pin0 (clock )
next b3 ' next boucle

endclk: return ' retourne à la suite de la sous-procédure.

La commande PULSOUT pin,time: cette commande envoie une pulsation sur la sortie choisie (pin) d'un certain temps (time). Si la sortie était 0 (ou Off), elle devient 1(ou On) et vice versa...Cette commande configure automatiquement le Pin choisi en sortie (sauf sur la série 08 ou vous devez regarder que le Pin est une sortie avant d'utiliser cette commande...Restriction aussi pour la série 14M où la commande Pulsout n'est supportée que sur les sorties 0,1 et 2...

Et en cadeau bonus, le schéma pour afficher de 0 à 99 :P bande de petites chanceuses en plus vous ne touchez rien au code, vous attribuez juste un nombre de 0 à 99 à votre variable b1 et le merdier dispatche automatique sur les 2 afficheurs quand la procédure clock est appelée.
4626Bbi.jpg
4626Bbi.jpg (43.1 Kio) Vu 780 fois
Je suis Russe, il faut que tu me cèdes!
Avatar de l’utilisateur
clajucla
MODERATEUR PANDA
 
Messages: 1459
Enregistré le: 07 Avr 2007 14:29
Localisation: Lorraine

Messagepar ptitniluge le 13 Aoû 2009 19:28

Eh clajucla, déjà, merci pour cette super présentation :winner: Mais, pour être parfait, tu voudrais pas nous faire un petit topo pour faire communiquer le picaxe avec un élément externe (genre... en MIDI???? :wink: :lol: ). Je plaisante mais c'est vrai qu'on trouve plein de langage de programmation pour PIC mais je n'ai rien trouvé de très didactique pour l'utilisation de l'UART et le protocole MIDI.

Allez, encore bravo pour ton topic 8)
ptitniluge
ELECTRON LIBRE
 
Messages: 257
Enregistré le: 23 Oct 2004 12:47

Messagepar DERAM le 13 Aoû 2009 20:25

ce serait intéressant si c'est possible de faire un midi to cv
commander un synthé analogique par un clavier maitre
Avatar de l’utilisateur
DERAM
ELECTRON LIBRE
 
Messages: 389
Enregistré le: 11 Jan 2009 13:03
Localisation: Bruxelles

Messagepar muad'dib le 14 Aoû 2009 10:18

Oui c'est vrai que ça serait intéressant quelques infos par rapport au MIDI...

(Deram, tu peux aller voir sur le site de Munchen du forum Yusynth, il a fait un MIDI to CV simple à construire : www.acoupel.com )
Ohm, Sweet Ohm
Avatar de l’utilisateur
muad'dib
GRAND SORCIER DIY
 
Messages: 2310
Enregistré le: 27 Oct 2006 22:30
Localisation: Metz

PrécédenteSuivante

Retourner vers THEORIE, TECHNOLOGIE ET OUTILLAGE

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités