Proteus ATMEGA328P

Bonjour,

dans le cadre d'un tp pour mon école je suis sensé faire une simulation sur proteus avec un ATMEGA328P , sur papier c'est simple , on a une une tension qui passe par un diviseur de tension avec une photorésistance, si la tension est supérieure à 2,5V on envoie par une pin de sortie 5V et si elle est inférieure , on "envoie" 0V

int val;

float tension;


void setup() {

}

void loop() {
val=analogRead(8); //Recupere la valeur analogique

tension=(val*5)/1000; // Transformer la valeur en tension

if(tension>2,5) //Si la tension est supérieure à 2,5
{
 digitalWrite(5,1); // On envoie une tension de 5V
}
else //sinon
{
  digitalWrite(5,0); // On met une tension à 0V
}

}

Cependant là ou j'ai un problème c'est sur proteus , je n'ai pas réussi à trouver d'explications claire sur l'utilisation du micro contrôleur , certains branche en AVC d'autres non , pour le code certains prennent l'avant dernier lien d'autre le dernier et même sur les pins ce n'est vraiment pas claire. Bref si quelqu'un pouvait m'aider j'en serais extrêmement reconnaissant , voir ci-dessous le montage proteus.

Bonjour,

En C/C++ une nombre décimal s'écrit 2.5 et non 2,5
Ce que tu fais ici c'est que tu compares à 2 puis tu prends la valeur 5 donc la condition est toujours vraie et le if () est toujours exécuté

Remarques:

  • il n'y a pas de pin analogique 8 (numérotée 8 dans le framework) pour un atmega328
  • le calcul de la tension est fausse. Le convertisseur a 1024 pas et non 1000.

Merci pour les corrections! Même en regardant la datasheet de l'ATMEGA je ne comprend pas à quoi correspond les différentes pins , serait-il possible de m'éclairer la dessus ?

Ça me parait difficile de résumer en quelques lignes plusieurs pages de la datasheet. Si tu as une question plus précise, j'essaierai d'y répondre

Et la broche A8 de l'ATMEGA, j'espère que tu ne vas pas la chercher sur D8 ...
A moins qu'il s'agisse d'une MEGA ...

val étant un int, le calcul (val*5)/1000 est un entier qui sera converti en réel pour l'affecter à tension. Cette dernière ne pourra donc contenir que des valeurs entières

C'est la première fois que je travaille sur un micro contrôleur directement donc j'ai juste essayer de faire ce que je connais de arduino ? Que faudrait-il faire ici ?

tension=(val*5)/1024.0; // Transformer la valeur en tension

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.