Encore un débutant

Forum de support pour les locuteurs de la langue française qui souhaitent écrire dans leur langue maternelle.

Moderator: Benj

Post Reply
User avatar
Fastoch13
Posts: 15
Joined: Sun Jan 29, 2012 11:34 am
Has thanked: 1 time
Contact:

Encore un débutant

Post by Fastoch13 »

Bonjour à vous tous
Tout débutant que je suis j'ai quelques questions, j'espere que vous allez m'aider
1/ Je n'arrive pas à gérer correctement les variables, je veux faire un LEDarray commandé par un SWITCHbank genre le bloc des LEDs connecté sur le port B et le bloc des switch connecté à C genre j'appuie sur le bouton 1 connecté à C1 le bloc des LEDs affiche le 1 (00000001) si j'appuie sur le bouton 4 connecté à C4 le bloc des LEDs affiche (00000100) et ainsi de suite, j'ai éssayé de faire 8 variables (Un, Deux, Trois, ... ) affectant à chaque variable sa valeur numerique (Calculation, variables, functions, Un = 1, Deux = 2 ... ) une initialisation et apres une boucle en utilisant ces variables pour chaque bouton (je vous envoie un fichier d'essai pour que vous puissiez me comprendre) ca donne juste ca ( si j'appuie sur C1 la LED B1 s'allume, si j'appuie sur le bouton Cn j'ai la LED Bn qui s'allume ), j'espere que vous m'avez compris :)

2/ Souvent quand je fais une simulation sur Flowcode et que ça marche je génere le fichier hex et je refais la simulation sur Proteus, mais voilà je ne trouve pas l'afficheur LCD que Flowcode utilise par exemple, y a pas une aide ou par exemple pour nous dire quels composant Flowcode utilise ?

J'aurais d'autres questions prochainement, je ne dois pas enchainer, je vous remercie d'avance
Attachments
Test.fcf
Exemple de LEDs
(8.5 KiB) Downloaded 262 times
Akky

Spanish_dude
Posts: 594
Joined: Thu Sep 17, 2009 7:52 am
Location: Belgium
Has thanked: 63 times
Been thanked: 102 times
Contact:

Re: Encore un débutant

Post by Spanish_dude »

Salut,

1) Tu te compliques un peu la vie avec toutes ces variables.
Chaque PORT du microcontrolleur a son propre registre 8 bit (PORTA, PORTB, ...).
La valeur de se registre correspond a se qui sort/entre.
Par exemple si le bit 0 du PORTC est à 1 (et que tu as configuré le PORTC en sortie) le pin RB0 sera high (ou Vcc). Si c'est 0, alors le le pin sera low (ou GND).
Si tu le configure en entrée c'est pareil. Les bits qui sont à 1 dans le registre indique que tu envois 5V sur ses pins.

Comme tu as 8 switch sur le PORTC et 8 LED sur le PORTB, tu n'as qu'a lire tout le registre PORTC et l'écrire dans PORTB. Comme ça la valeur que tu entres avec PORTC sera en sortie sur PORTB.

Pour faire ça dans flowcode:
- Crée une variable (char) switch
- Crée une variable (char) LED
- Fais une boucle infini (while 1)
Dans la boucle:
- Utilise le bloc 'Input' (entrée) pour lire TOUT le PORTC et tu stockes tout ça dans la variable switch
- Utilise ensuite un bloc 'Output' (sortie) pour écrire tout le PORTB avec la valeur stocké dans switch
Fin de la boucle

Ici l'utilisation des tableaux (arrays) et variables multiples n'est pas nécessaire vu que chaque entrée/sortie ne prends qu'un bit et que tu peux tout faire avec rien que deux variables de type char (8bit).

2) Je pourrais pas t'aider pour ça. Regarde le datasheet du LCD E-block et essaye de trouver quelle controleur il utilise. Une fois que tu sais ça, tu peux choisir un de même type dans proteus je suppose. Du moment que le controleur est le même, les connections devraient être pareil et le fonctionnement aussi.

Nicolas

User avatar
Fastoch13
Posts: 15
Joined: Sun Jan 29, 2012 11:34 am
Has thanked: 1 time
Contact:

Re: Encore un débutant

Post by Fastoch13 »

Bonsoir
Merci pour ta réponse Nicolas
Je crois que tu ne m'as pas compris, ce que tu as dit toi je l'ai déja fait ... mais ce que tu décris c'est pour chaque Cn , Bn s'allume, ce que je veux moi c'est un peu autre chose, gonre affecter à chaque Cn une valeur que le port B affiche
j'ai fait une petite illustration pour que ce soit plus claire :) (Schema inclu)
En d'autres mots, C0 <= 1, C1 <= 2, C2 <= 3, C3 <= 4, C4 <= 5, C5 <= 6, C6 <= 7, C7 <= 8
Si j'appuie sur le switch connecté sur C0 j'aurais le port B 00000001
C1 <=> 00000010
C2 <=> 00000011 pas 00000100
C3 <=> 00000100 pas 00001000
C4 <=> 00000101 pas 00010000
C5 <=> 00000110 pas 00100000
C6 <=> 00000111 pas 01000000
C7 <=> 00001000 pas 10000000
J'espere que c'est assez claire
Merci
Attachments
path4000.png
(49.91 KiB) Downloaded 3541 times
Akky

Spanish_dude
Posts: 594
Joined: Thu Sep 17, 2009 7:52 am
Location: Belgium
Has thanked: 63 times
Been thanked: 102 times
Contact:

Re: Encore un débutant

Post by Spanish_dude »

Ah, oui effectivement, j'avais mal compris.

Dans se cas si tu as 8 valeurs différentes à appliquer sur ton PORTB (LED).
Il y a plusieurs façon de faire. J'en vois deux, m'ais j'en expliquerais qu'un car le deuxième sera peut-être un peu trop compliqué (et le post très très long).

La première méthode :
Tu fais un tableau LED avec 8 éléments dedans. Tu le remplis avec les valeurs nécessaires, a savoir, "1, 2, 3, 4, 5, 6, 7, 8". (Ce qui équivaut a 0001, 0010, 0011, 0100, ...)
Tu fais une variable SW que tu utiliseras pour vérifier la valeur du PORTC.
Ensuite dans ta boucle principale tu lis le PORTC et tu le stockes dans SW.
Puis tu as deux options, soit tu utilises plusieurs 'if... else if ...", soit tu peux utiliser un "switch(...) case ...".
Moi je te conseille d'utiliser un switch() parce que sinon tu vas te retrouver avec plein de 'if ... else if'

Pour utiliser le switch c'est très simple.
Tu prends le bloc switch et tu le places après la lecture du PORTC. Puis dans les propriété, tu actives 8 'cases' ou tu y mettras les valeurs suivantes: "1, 2, 4, 8, 16, 32, 64, 128".
Comme tu le remarqueras surement, chaque valeur est une puissance de 2. Si tu convertis ces valeurs en bits, tu verras qu'elles correspondent aux différentes possibilité que ton PORTC lira.
Il ne peut y avoir qu'une seule branche actif à la fois. La branche activé sera celle dont la valeur équivaut à la valeur de ta variable SW.
Exemple: Si le 3eme switch est activé, tu liras une valeur de 00001000b ou 8 en décimal. Cela activera la branche 8 de ton case et exécutera le code qu'il y a dans cette branche.

Tout se qu'il te reste a faire maintenant c'est d'écrire le PORTB.
On commence par la branche 1. Le code de la branche 1 n'est exécuté que si le premier switch est activé.
La valeur à afficher sur les LED est la première que tu as écrite dans ton tableau LED.
Donc dans la branche 1 tu mets un bloc 'output' (sorti), tu y choisis le PORTB et comme variable tu écris LED[0].
Note: Je ne sais pas si tu sais, mais un tableau commence toujours par l'index 0. Donc l'index le plus haut d'un tableau à 8 éléments est 7.

Tu fais pareil pour les autres branches.
Voilà à quoi ça devrait ressembler: http://img818.imageshack.us/img818/6213 ... e1main.jpg
En y repensant, tu n'as pas besoin du tableau LED. Tu peux très bien écrire la valeur à afficher directement dans chaque bloc 'output'.

La deuxième méthode dont je parlais était de détecter quel bit est activé et d'alors envoyer la valeur au PORTC en fonction du bit actif.

J'espère que cette fois si j'ai bien expliqué se qu'il fallait :mrgreen: .

Nicolas

User avatar
Fastoch13
Posts: 15
Joined: Sun Jan 29, 2012 11:34 am
Has thanked: 1 time
Contact:

Re: Encore un débutant

Post by Fastoch13 »

Bonjour;
Oui Nicolas, tu m'as parfaitement bien compris :) je viens de réaliser le schéma sur Flowcode et ça marche, je passe à la simulation sur Proteus
Merci pour ton aide
Akky

Spanish_dude
Posts: 594
Joined: Thu Sep 17, 2009 7:52 am
Location: Belgium
Has thanked: 63 times
Been thanked: 102 times
Contact:

Re: Encore un débutant

Post by Spanish_dude »

De rien, si jamais tu as d'autres questions on est là pour t'aider.

Post Reply