Auteur Sujet: Utilisation d'ATTiny  (Lu 145703 fois)

jeanmi67

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Re : Utilisation d'ATTiny
« Réponse #90 le: mai 14, 2017, 01:27:45 am »

Le but de la manip est de téléverser le programme Sweep dans un ATtiny84 et de voir ensuite si celui-ci peut commander un servomoteur (attaché à la bonne sortie) pour obtenir ce mouvement de balayage. Si c'est le cas, cela veut dire que la bibliothèque Servo est utilisable avec l'ATtiny84, ce qui serait une aide précieuse pour utiliser des servos.

Bonjour Christian,

Ben... malheureusement, ça ne marche pas  :-\
Aucun mouvement du servo quand le programme "Sweep" est téléversé dans l'ATtiny84, alors que le mouvement de balayage du servo est bien observé quand ce même programme est téléversé dans l'Arduino Mega.
Bien évidement, j'ai adapté le numéro de la sortie en fonction de la carte utilisée :
Sortie 2 pour le module Mega
Sortie 1 (pin 12) de l'ATtiny84

Pour être certain de mon coup quand à la sortie 1 de l'ATtiny84, j'ai testé celle-ci avec le programme basique "Blink" (avec le rythme modifié pour être bien sûr que c'était le mien) et une LED (externe évidement ;D)

A toute fin utile, je précise que, une fois le programme "Sweep" téléversé dans l'ATtiny84, le fait de connecter une LED sur la sortie prévue pour la commande du servo allume celle-ci de manière fixe (en tout cas, visuellement parlant).

Je profite de ce message pour vous dire que, avant de tester le programme "Sweep" et à titre de mise en bouche puisque je débutais en programmation de µC, j'ai programmé un ATtiny85 en m'inspirant du programme "signal_BAL" paru dans le LR de mai 2017 (programme auquel il manque une ou deux lignes il me semble) en lui rajoutant une durée du "Jaune" paramétrable ainsi que l'allumage / extinction des LEDs de façon progressive. Ca fonctionne très bien  :)


jeaNmi

jeanmi67

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #91 le: mai 14, 2017, 09:53:45 pm »
Bonjour Christian,

Finalement, j'ai trouvé pourquoi cela ne marchait pas : c'est la bibliothèque Servo.h utilisée dans le programme "Sweep" qui n'est pas adaptée.
En effet, cette bibliothèque est basée sur un timer 16-bit alors que les ATtiny utilisent en standard un timer 8-bit (l'ATtiny84 dispose bien d'un timer 16-bit mais son utilisation dans un programme n'est pas simple puisqu'il s'agit plutôt d'un artifice permettant de faire travailler de concert deux timers 8-bit).

Donc, en cherchant un peu, j'ai finit par trouver une bibliothèque basée sur un timer 8-bit et adaptée à l'ATtiny : SoftwareServo.h

En adaptant le programme "Sweep" à cette bibliothèque, ça fonctionne maintenant parfaitement : le servo connecté à l'ATtiny84 effectue bien son mouvement permanent de balayage.

En  adaptant le port de sortie, ça fonctionne aussi bien sans autre adaptation avec un ATtiny85  :)

Cordialement.

Jean-Michel
jeaNmi

DDEFF

  • Hero Member
  • *****
  • Messages: 738
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #92 le: mai 15, 2017, 09:43:30 am »
Bravo jeanmi67 !  ;D

Cela confirme bien que l'ATTiny, sous des airs de matériel pour débutants liés au faible nombre de pattes, recèle des subtilités qui ne sont plus du niveau débutant.

Concernant les servos, cette bibliothèque est-elle affectée du "syndrome de l'essuie-glace" au démarrage ?

Denis
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

CATPLUS

  • Sr. Member
  • ****
  • Messages: 407
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #93 le: mai 15, 2017, 09:52:21 am »
Bonjour Christian

En te lisant, tu t'exprime:

"Je profite de ce message pour vous dire que, avant de tester le programme "Sweep" et à titre de mise en bouche puisque je débutais en programmation de µC, j'ai programmé un ATtiny85 en m'inspirant du programme "signal_BAL" paru dans le LR de mai 2017 (programme auquel il manque une ou deux lignes il me semble) en lui rajoutant une durée du "Jaune" paramétrable ainsi que l'allumage / extinction des LEDs de façon progressive. Ca fonctionne très bien"

Pourrais-tu STP nous faire profiter des modifs que tu as apporté "inclure le programme sur le post de ce  Forum"

Cordialement
Marcel
Best Regards

jeanmi67

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Re : Utilisation d'ATTiny
« Réponse #94 le: mai 15, 2017, 10:15:02 am »

Concernant les servos, cette bibliothèque est-elle affectée du "syndrome de l'essuie-glace" au démarrage ?

Bonjour Denis,

Comme je le disais plus haut, je n'ai pas d'expérience particulière avec les servos, donc je ne connais pas le "syndrome de l'essuie-glace".
Si celui-ci peut-être représenté par un aller-retour complet du servo à sa mise en route, la réponse est non.
Je viens de faire quelques essais, servo toujours "conduit" par l'ATtiny84, et voici mon constat : quelque soit la position de départ du servo, à la mise en route il y a un premier mouvement très fugitif dans le sens des aiguilles d'une montre suivi immédiatement après par le déroulé normal du balayage commençant dans le sens inverse des aiguilles d'une montre, sens initial de déplacement donné par le programme.
Voila, j'espère avoir répondu à ta question. :)

Jean-Michel
jeaNmi

jeanmi67

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Re : Utilisation d'ATTiny
« Réponse #95 le: mai 15, 2017, 10:20:07 am »

Bonjour Christian
....
Pourrais-tu STP nous faire profiter des modifs que tu as apporté "inclure le programme sur le post de ce  Forum"

Bonjour Marcel,

Je me permets de répondre à la place de Christian  ;D ;D ;D

Je déposerai ici le programme complet dans le courant de la journée  :)

Jean-Michel
jeaNmi

jeanmi67

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #96 le: mai 15, 2017, 12:02:07 pm »
Suite à la demande d'Albert, voici le programme complet et documenté de l'adaptation de celui de Christian paru initialement dans Loco-Revue de mai 2017 (simulation de BAL)

/* Simulation de Bloc Automatique Lumineux
  Base tirée de Loco-Revue n° 837 - Mai 2017 (Christian Bézanger)
    Adaptation *** jmB *** 04/05/2017
    Durée du Jaune paramétrable
    Allumage et extinction des LEDs de façon progressive
    Testé sur ARDUINO MEGA2560 et sur ATtiny85
  Fading repris de l'IDE Arduino : Exemples - 03.Analog - Fading
  http://www.arduino.cc/en/Tutorial/Fading

  Signal à anode commune, allumé par LOW

  ===>>> Version ATtiny85 <<<===
*/

// Déclaration des constantes
//  => Assignation des broches d'entrées et de sorties
//  ===>>> Version ATtiny85 <<<===
const byte ILS_entree = 3; // Pin 2
const byte ILS_sortie = 2; // Pin 7
enum FEU : const byte { VERT = 4, ROUGE = 0, JAUNE = 1 }; // Ordre des LEDs en partant du haut du signal (www.railexpert.fr/images/railexpert/photos-pave-droite/signal.jpg)
//  ===>>> Version ATtiny85 <<<===

//  => Gestion du fading
const byte fadeValue = 10;  // Incrément de fading
const byte fadeDelay = 10;  // Temporisation de fading

// Déclaration et initialisation des variables
unsigned int dureeJaune = 5000; // Durée du jaune : 1000 = 1 seconde
unsigned long debJaune = 0;
unsigned long time0; // Top pour le cyle d'extinction et d'allumage
unsigned long time1; // Top intermediaire
byte FEU = VERT; // Pour mémorisation de l'état du feu : ou VERT, ou ROUGE ou JAUNE

////////////////////////////////////////////////////
// Routine d'allumage et d'extinction progressifs //
////////////////////////////////////////////////////
void signal(const byte quelFeuA, const byte quelFeuE, byte fadingA, byte fadingE) // A=Allumage - E=Extinction
{
  time0 = 0;
  do {
    time1 = millis();
    if (time1 - time0 >= fadeDelay) {
      analogWrite(quelFeuA, fadingA);
      analogWrite(quelFeuE, fadingE);
      time0 = time1;
      fadingA = fadingA - fadeValue;
      fadingE = fadingE + fadeValue;
    }
  } while (fadingE >= fadeValue);
  analogWrite(quelFeuA, 0);   // Fin de boucle : allumage 100%
  analogWrite(quelFeuE, 255); // Fin de boucle : extinction totale
  FEU = quelFeuA;
}

//  Initialisation du module
void setup() {
  // Déclaration des entrées et initialisation (HIGH) => ILS non enclenchés
  pinMode(ILS_entree, INPUT_PULLUP);
  pinMode(ILS_sortie, INPUT_PULLUP);
  // Déclaration des sorties
  pinMode(VERT, OUTPUT);
  pinMode(ROUGE, OUTPUT);
  pinMode(JAUNE, OUTPUT);

  // Initialisation du signal
  digitalWrite(VERT, LOW); // Vert allumé - Pas de fading à la mise sous tension
  digitalWrite(ROUGE, HIGH); // Rouge éteint
  digitalWrite(JAUNE, HIGH); // Jaune éteint
}

//  Boucle principale
void loop() {
  // surveillance ILS entrée
  while (digitalRead(ILS_entree) == HIGH)
  {
    // ILS Entrée non enclenché
    if (FEU == JAUNE)
    {
      if ((millis() - debJaune) > dureeJaune)
      {
        signal(VERT, JAUNE, 255, 0); // Ordre : allumage, extinction
      }
    }
  }

  // ILS Entrée déclenché
  switch (FEU) {
    case VERT:
      signal(ROUGE, VERT, 255, 0); break; // Ordre : allumage, extinction
    case JAUNE:
      signal(ROUGE, JAUNE, 255, 0); break; // Ordre : allumage, extinction
  }

  // Surveillance de l'ILS de sortie
  while (digitalRead(ILS_sortie) == HIGH)
  {
    // ILS Sortie non déclenché, ne rien faire
  }
  // ILS Sortie déclenché
  signal(JAUNE, ROUGE, 255, 0); // Ordre : allumage, extinction
  debJaune = millis();
}

Bonne journée à tous.  :)

Jean-Michel
jeaNmi

CATPLUS

  • Sr. Member
  • ****
  • Messages: 407
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #97 le: mai 15, 2017, 04:47:36 pm »
Super la réactivité

Je vais tester dés que possible

Cordialement
Best Regards

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 744
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #98 le: mai 29, 2017, 11:08:27 am »
Je m'immisce dans ce sujet parce que j'ai trouvé par hasard un site décrivant un shield maison pour la programmation des Attiny... Comme l'idée semble aussi intéressante qu'économique, voici le lien

http://www.kaibader.de/attiny-isp-arduino-shield/

malgré l'adresse allemande, le site est en anglais...

PS: Inscrit depuis peu sur Pinterest, c'est grâce à ce réseau que je découvre des choses arduinesques plus ou moins sympas... Il suffit de trier.

CATPLUS

  • Sr. Member
  • ****
  • Messages: 407
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #99 le: mai 29, 2017, 12:33:10 pm »
Bonjour

Bricolage maison, un bout de Véroboard, support pour tous les types, quelques soudures et roule

Cordialement
Marcel
Best Regards

chris_bzg

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 310
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #100 le: mai 29, 2017, 07:48:11 pm »
Bonjour à tous,

Cela fait longtemps que je ne suis pas venu sur cette page ; je suis confus...  :-[
Je vais donc essayer de répondre à tous;

jeanmi67 : merci pour tes expérimentations. Donc il existe une bibliothèque pour les ATtiny. Peux-tu nous dire où la télécharger ?

DDEFF : effectivement, l'ATtiny demande déjà de bien maitriser différentes notions comme les registres, le type de mémoire, etc. C'est la raison pour laquelle j'ai supprimé ces petites bêtes de la colonne débutant du site LOCODUINO. Je pensais qu'un débutant arriverait à programmer ces puces en suivant mes procédures, mais dès qu'il y a le moindre problème, le pauvre se retrouve confronté à lui-même et s'il ne maitrise pas bien les bases, cela peut vite le faire patauger.

CATPLUS : effectivement, il manque une ou deux lignes dans le programme de la fiche pratique du LR mai 2017. J'en suis désolé et c'est de ma faute ; au départ, elles y étaient mais on m'a demandé de refaire la figure en haute définition et cela a fait sauté deux lignes de programme sans que je m'en aperçoive. J'ai immédiatement publié un correctif sur le site de Loco-Revue, sur le fil concernant ce numéro de mai 2017. D'ailleurs, lorsque je publie dans Loco-Revue, je complète éventuellement sur le forum de Loco-Revue, ne serait-ce que pour mettre un programme téléchargeable. Pensez a y faire un tour au cas où...

On peut paramétrer la durée du feu orange, mais pour ma part, je préfère mesurer la durée du feu rouge et l'affecter à la durée du feu orange. Ainsi, si on admet que les cantons ont la même longueur et que le train garde sa vitesse, chaque canton est parcouru dans le même temps ce qui donne des durées identiques pour rouge et orange.

La programmation d'ATtiny peut se faire grâce à de nombreux petits montages du commerce qu'on insère directement dans la sortie USB de l'ordinateur ou bien en bricolant soi-même un tel montage. Pour ma part, j'utilise une breadboard et six câbles pour raccorder à l'UNO. Mais c'est moins pratique.

Bon voici le programme de la fiche pratique de LR 838 de mai 2017 (Celui-ci est valide pour un ATtiny45/85 et fonctionne aussi pour un UNO avec des sorties différentes de celles employées dans la fiche pratique) :

/**********************************
 * Signal_BAL_ATtiny - 30/11/2016 *
 * ********************************
 * Ce programme simule le fonctionnement d un signal lumineux a trois
 * feux d un B.A.L Block Automatique Lumineux. Il n assure pas
 * l espacement des trains. Lorsque la loco declenche le premier ILS,
 * le signal se met au rouge. Lorsque la loco declenche le deuxieme
 * ILS, le signal se met a l orange pour une duree egale a celle du
 * rouge, puis repasse au vert.
 */

 /*  VARIABLES
  *  --------------------------------------------------------------
  *  debRouge : temps de debut du feu rouge
  *  finRouge : temps de fin du feu rouge
  *  dureeRouge ; duree du feu rouge
  *  debOrange : temps de debut du feu orange
  *  flagOrange : booleen 0 si feu orange eteint, 1 si allume
  */

  /* BRANCHEMENTS
   * --------------------------------------------------------------
   * ILS E (entree) sur 3
   * ILS S (sortie) sur 4
   * feu vert sur 0
   * feu rouge sur 1
   * feu orange sur 2
   */

const byte ILS_entree = 3;
const byte ILS_sortie = 4;
const byte feu_vert = 0;
const byte feu_rouge = 1;
const byte feu_orange = 2;
unsigned long debRouge = 0;
unsigned long finRouge = 0;
unsigned long debOrange = 0;
unsigned long dureeRouge;
boolean flagOrange = 0;

void setup() {
  pinMode(ILS_entree, INPUT_PULLUP);
  pinMode(ILS_sortie, INPUT_PULLUP);
  pinMode(feu_vert, OUTPUT);
  pinMode(feu_rouge, OUTPUT);
  pinMode(feu_orange, OUTPUT);
  // Initialisation du signal a anode commune, allume par LOW
  digitalWrite(feu_vert, LOW);
  digitalWrite(feu_rouge, HIGH);
  digitalWrite(feu_orange, HIGH);
  }

void loop() {
  // Surveillance de l ILS d entree
  while (digitalRead(ILS_entree) == HIGH)
  {
    // ILS E non declenche
    if (flagOrange)
    {
      if ((millis() - debOrange) > dureeRouge)
      {
        digitalWrite(feu_orange, HIGH);
        flagOrange = 0;
        digitalWrite(feu_vert, LOW);
      }
    }
   }
  // ILS E declenche
  digitalWrite(feu_vert, HIGH);
  digitalWrite(feu_orange, HIGH);
  flagOrange = 0;
  digitalWrite(feu_rouge, LOW);
  debRouge = millis();
  // Surveillance de l ILS de sortie
  while (digitalRead(ILS_sortie) == HIGH)
  {
    // ILS S non declenche, ne rien faire
  }
  // ILS S declenche
  finRouge = millis();
  dureeRouge = finRouge - debRouge;
  digitalWrite(feu_rouge, HIGH);
  digitalWrite(feu_orange, LOW);
  flagOrange = 1;
  debOrange = millis();

}

jeanmi67

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Re : Utilisation d'ATTiny
« Réponse #101 le: mai 29, 2017, 11:48:39 pm »
Bonjour,

jeanmi67 : merci pour tes expérimentations. Donc il existe une bibliothèque pour les ATtiny. Peux-tu nous dire où la télécharger ?

J'ai trouvé cette bibliotèque sur le site de l'Arduino, et plus précisément ici : https://playground.arduino.cc/ComponentLib/Servo


CATPLUS : effectivement, il manque une ou deux lignes dans le programme de la fiche pratique du LR mai 2017.

Je pense que c'est plutôt moi qui avait émis cette hypothèse (message du 14-05-2017, 01:27:45), mais je ne suis pas jaloux ;D, l'important, me semble-t-il, est que chaque pierre apportée par chacun contribue à faire avancer la communauté  :)

Bien cordialement.

Jean-Michel
jeaNmi

chris_bzg

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 310
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #102 le: juin 01, 2017, 11:32:46 pm »
Oui, désolé, tu as parfaitement raison !
La phrase de toi, a été reprise d'un post de CATPLUS mais je ne me suis pas rendu compte qu'il te citait.

Donc, rendons à César ce qui est à César... ;)

Maintenant, tout le monde a le programme dans sa totalité. Ouf !

chris_bzg

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 310
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #103 le: juin 02, 2017, 03:53:46 pm »
Voici une petite vidéo qui vous montrera l'effet obtenu avec le montage décrit dans la fiche pratique III.42 du N°838 de Loco-Revue (mai 2017) :


Cette fois, le montage a été réalisé avec un ATtiny45 pour économiser un module UNO, mais il fonctionne de la même manière.
Quant-au programme, il a été publié un peu plus haut dans ce fil.

jeanmi67

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : Utilisation d'ATTiny
« Réponse #104 le: juin 02, 2017, 05:13:16 pm »
Bonjour,

Merci pour cette vidéo  :)

Pour ceux que cela intéresse, la version modifiée de ce programme intégrant l'extinction et l'allumage progressifs des LEDs a également été publiée un peu plus haut dans ce fil (version testé sur un montage réalisé avec un ATtiny85).

Jean-Michel
jeaNmi