j'arrive à afficher le résultat, mais pas sous forme binaire, malgré BIN .
j'ai du oublier quelque chose mais je ne voit pas quoi ???
c'est pour comprendre comment cela marche , pour envoyer par le port série pour un traitement par processing.
merci de votre lecture.
DDRx, PORTx, PINx ... sont des registres, ou pour être précis des "valeurs pointées" par les adresses de ces registres en RAM.
Ce ne sont en aucun cas des numéros de broche "arduino" !
Pour lire la valeur du registre PINC par exemple il suffit de faire :
merci pour vos aide.
je cherche a envoyer par ex DDRC par le port serie, puis le traiter avec processing sous la forme d'un binaire ( 10101111) pour savoir quel registre est en entrée ou en sortie. Mais est ce possible ou comment faire autrement?
merci de votre lecture.
est il normale que mon affichage binaire soit fluctuant ?
lorsque j'affiche soit DDRC ou DDRB ou DDRD mon chiffre binaire est instable.
ex de 10001010 cela passe à la prochaine lecture à 10011011 et ainsi de suite
mon code doit servir à allumer des voyants sur processing donnant l'état des registres (entrée ou sortie), et la je suis en train de créer une guirlande de noël
merci
Oh là je pense qu'il y a de la confusion dans l'air.
Premièrement la bonne source d'information sur le fonctionnement interne du micro :
le site arduino -> surement pas, juste pour un aperçu à la rigueur.
la datasheet du micro-controleur écrite par le fabricant du micro (Atmel)
Comme un bon dessin vaut mieux qu'un long discours je joins le diagramme qui explique pourquoi tu fais des confusions entre analogRead et digitalRead.
On le trouve page 5 dans la datasheet de l'ATMega328p qui est le micro des cartes UNO.
Dans le digramme on voit clairement que le signal appliqué sur les pins A0 à A5 (carte UNO) peut être dirigé (pin par pin) soit sur le port C qui est digital, les entrées A0 à A5 se comportant alors comme une entrée D0 à D13, soit vers le multiplexeur d'entrée des mesures analogiques.
Dans le cas d'une entrée A0 à A5 comment passe-t-on de l'un à l'autre ?
Nota : les entrée dénommées A0 à A5 par arduino sont en fait les entrées PC0 à PC5 dans la dénomination du constructeur du micro.
Le fait de définir un pinMode() input ou output place l'entrée en mode digital
La fonction digitalRead(), entre autres actions :
dirige le signal vers l'entrée correspondante du port Digital
regarde si l'entrée est à l'état logique bas ou haut.
La fonction analogRead(), entre autres actions :
dirige le signal vers une entrée du multiplexeur
positionne le multiplexeur pour acheminer le signal vers l'entrée du convertisseur analogique/digital
déclenche une conversion analogique/digitale.
Donc les registres DDRx , PORTy et PINz ne s'appliquent qu'aux entrées digitales (D0 à D13) ou pour les entrées A0 à A5 uniquement à celle qui auront été positionnées en digital par un pinMode().
@68tjs: il semble effectivement y avoir une confusion entre digital/analog de la part de lcd1602.
Mais dans tout les cas lire un registre (quel qu'il soit) avec analogRead (ou n'importe quoi d'autre) est déjà une erreur, en plus cela ne devrais pas marcher ...
Avec un peu de chance DDRC/B/D dans le code d'exemple retourne quelque chose compris entre 14 et 20, valeurs correspondant à A0, A1, ... sur une carte UNO ou assimilé, du coup analogRead() marche mais ne fait pas du tout ce qui est voulu.
(je débute , je crois que vous vous en êtes aperçu )
je cherche à construire un tableau de bord pour arduino ( visualiser les entrées et les sorties avec un vu mètre par entrée ou sortie)
la lecture des registre DDR C,D,B me sera transmise par le port serial à processing.
cette lecture sera décodée pour allumer l'indicateur ad hoc .
comme j'ai déjà une com seriel je voudrai m'appuyer dessus pour ne pas tout réécrire.
com seriel:
int val;
void setup() {
// set 2-12 digital pins to read mode
for (int i=2;i<14;i++){
pinMode(i, INPUT);
}
Serial.begin(115200);
}
void loop() {
// read all analog ports, split by " "
for (int i=0;i<6;i++){
Serial.print(analogRead(i));
Serial.print(" ");
}
// read all digital ports, split by " "
for (int i=2;i<14;i++){
Serial.print(digitalRead(i));
Serial.print(" ");
}
// frame is marked by LF
Serial.println();
}
que pensez vous de ma démarche, quelle serait d’après vous la méthodologie à suivre ?
et question subsidiaire : Comment liriez vous les registres DDR ?
merci de votre lecture.
bonne soirée.
lcd1602:
que pensez vous de ma démarche, quelle serait d’après vous la méthodologie à suivre ?
Regarde du côté de "firmata" cela pourrait t'intéresser
Sinon dans le principe cela ressemble énormément à la "console" que jhelbi avait réalisé fut un temps.
Regarde dans la partie "projets finit" du forum ça pourrait te donner des idées.
lcd1602:
et question subsidiaire : Comment liriez vous les registres DDR ?
Ça fait trois fois qu'on te donne la syntaxe pour lire un registre DDRx ...
byte val = DDRC; // met dans "val" la valeur courante du registre DDRC
Ça fait trois fois qu'on te donne la syntaxe pour lire un registre DDRx
Je vais enfoncer le clou !
Les micro controleurs utilisés dans les cartes Arduino sont, comme tu le sais, des micros 8 bits.
On dit qu'un micro est un micro 8 bits parce que ses registres sont de longueur 8 bits, soit un seul octet.
8 bits = 1 octets.
Donc en réfléchissant un peu on se dit que pour placer dans une variable le contenu d'un registre 8bits il faut prendre une variable de type octet, ou byte qui signifie octets en anglais.