[AIDE] Eclairage RGB portail de garage / AtTiny

Bonjour à tous,

Je me bricole un petit éclairage LED pour mon portail, avec un ruban et un AtTiny44.
Sur le principe, rien d'exceptionnel.
-2,5m de ruban RGB au portail
-Une boite électrique avec une carte prototype maison (alime/transistors/ AtTiny 44)
-un boitier déporté avec des potentiomètres

En entrée, j'ai 3 pots, 1 bouton.
En sortie, j'ai 3 rangées de MOS pour piloter le ruban RGB.

J'ai fait des tests avec un UNO, pour piloter ma carte électronique (fils volant branché sur le support de CI à la place de l'AtTiny).
Tout est OK ! Juste le ruban qui tire un peu sur le bleu…

Problème :
Par contre, quand je mets le programme sur l'AtTiny44, plus rien… J'ai une sortie qui "Blink" toute les 5s (rien à voir avec le programme) et quand je touche mes Pots, j'ai une vague impression que l'intensité change…

Dans ma réflexion, j'ai bien pris garde d'utiliser les fonctions basiques, car j'ai lu qu'une grosse partie des commandes "Arduino" n'était pas supporté.

Je ne sais pas trop où chercher maintenant. Peut être le n° d'affectation des pattes ? (de 0 à 10 sur AtTiny44 ?).

Une idée ?

Code :

byte R = 5; //pins des sorties
byte V = 6;
byte B = 7;

byte BTN = 3;  //pin entrée bouton
byte etat_BTN = 0;  //bits état du bouton
byte last_BTN = 0;

byte cycle = 0; //variable de gestion des tempos, des cycles
int tempo = 0;
int chroma = 0;
unsigned long currentMillis = 0;
long previousMillis = 0;

int pot_R = 0;  //pins des entrées ANA
int pot_V = 1;
int pot_B = 2;


int varR, varV, varB; // stockage de la valeur ANA
byte outR, outV, outB;  // stockage de la sortie PWM

// Tableaux de valeurs pour réaliser un cercle chromatique (les tableaux sont remplient normalement, j'ai vidé les valeurs pour alléger la lecture sur le forum)
byte chromaR[] = {};
byte chromaV[] = {};
byte chromaB[] = {};


void setup()
{
  //Serial.begin(9600);
  pinMode(BTN,INPUT);
  
  pinMode(R,OUTPUT);
  pinMode(V,OUTPUT);
  pinMode(B,OUTPUT);  
  delay(1000);
}

void loop()
{
  //Serial.println(cycle);
  varR = analogRead(pot_R);
  varV = analogRead(pot_V);  
  varB = analogRead(pot_B);  

  currentMillis = millis();
  
  /*Serial.print("pot ");  
  Serial.print(varR);
  Serial.print(" "); 
  Serial.print(varV);
  Serial.print(" ");  
  Serial.println(varB);

  Serial.print("millis ");  
  Serial.print(currentMillis);  
  Serial.print(" ");
  Serial.println(previousMillis); 

  Serial.print("Chroma ");
  Serial.println(chroma); */


  //test de l'état du bouton pour changer de "cycle"
  etat_BTN = digitalRead(BTN);
  if(etat_BTN != last_BTN)
  {
    if(etat_BTN > 0)
    {
      delay(300);
      cycle++;
      last_BTN = etat_BTN;
    }
    last_BTN = etat_BTN;
  }
  
  switch (cycle)
  {
    case 1:
    //tricolor, réglage par couleur
    outR = varR/4;
    outV = varV/4;
    outB = varB/4;
    break;
    
    
    case 2:
    //Cercle Chromatique, réglage de la vitesse
    tempo = 10+varR+5*varV+10*varB;
    outR = chromaR[chroma];
    outV = chromaV[chroma];    
    outB = chromaB[chroma];    


    if (currentMillis - previousMillis > tempo)
    {
      previousMillis = currentMillis;
    chroma++;
    if(chroma >359)
      {
      chroma =0;
      }
    }
    

    break;

    /*case 3:
    //Random, ++/-- de chaque couleur en fonction des POTS
    
    break;
    */

    
    default:
    // cycle BLANC avec PWM
    int BLANC;
    BLANC =varV/4;
    outR = BLANC;
    outV = BLANC;
    outB = BLANC;
  }
  
  
  
  
  analogWrite(R, outR);
  analogWrite(V, outV);
  analogWrite(B, outB);  
    
  if(cycle > 2)
  {
    cycle = 0;
  }
  delay(10);
}

Je complète avec le schéma et une photo de la "merveilleuse" intégration :grin:

Petite explication :
-haut gauche, régulateur 5V (alimentation AtTiny) depuis la source 12V
-Haut milieu, support AtTiny + voyant ON/OFF (en option)
-Droite, borniers vers boitier de commande (de haut en bas : + ; ANA R ; ANA V ; ANA B ; Bouton ; - ; PWM R ; PWM V ; PWM B ), le tout dans un câble réseau
-Bas, étage de puissance à MOSFET, 5x2N7000 par couleur

Le tout avec un montage et un assemblage de haute technicité :wink:
Heureusement que je ne montre pas les soudures :stuck_out_tongue:

BUZlamouche:
Problème :
Par contre, quand je mets le programme sur l'AtTiny44, plus rien… J'ai une sortie qui "Blink" toute les 5s (rien à voir avec le programme) et quand je touche mes Pots, j'ai une vague impression que l'intensité change…

Bonsoir
tu utilise quoi pour "programmer" et charger l'Attiny ?

J'utilise l'IDE Arduino 1.6.4

j'ai installé les ressources AtTiny depuis :
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

puis je charge avec un arduino Uno as ISP

BUZlamouche:
J'utilise l'IDE Arduino 1.6.4

j'ai installé les ressources AtTiny depuis :
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

puis je charge avec un arduino Uno as ISP

ok
à tu fais un simple test de tes sorties attiny "en mode plein feux" ?
je n'arrive pas à comprendre/deduire la conception de tes etages de puissances
Il y a des "transistors" mis en // par couleur ? Q1 ---> Qx
tu a un vrai schema lisible ?

Quand je charge le programme "Blink" des exemples, cela fonctionne.
J'ai testé 2-3 sorties au hasard, aucun problème sur l'aspect chargement/liaison avec l'attiny.

Je n'ai pas spécialement de schéma élec "propre" sous la main, j'ai réalisé un "plan de montage" pour me guider dans mes soudures.

Mais l'idée est d'avoir des MOS en // pour augmenter la puissance.
Cela fonctionne très bien jusqu'a présent :wink:

On en revient au problème, quand je charge mon programme (qui marche au top sur mon UNO), l'AtTiny44 devient amorphe.

BUZlamouche:
On en revient au problème, quand je charge mon programme (qui marche au top sur mon UNO), l'AtTiny44 devient amorphe.

Ne devient amorphe eventuellement ce qui ne l'etait pas avant! 8)
Dans la mesure où ton attiny n 'a jamais fonctionné selon tes souhaits tu ne peux rien deduire.

avant d'injecter vers la puissance (c'est quoi tes transistors mis en // ? )
A tu déjà simplement testé les sorties de ton AT44 avec un simple "voltmetre" ?

Les MOS c'est du 2N7000

Tu m'as mis le doute, j'ai fait des petits tests.
L'AT est capable de faire bouger des LEDs sur plusieurs broches.
J'ai même testé de lire une ANA pour faire un PWM. C'est OK.

L'AT il est Vivant ! Mais quand y'a mon programme, il fait du "vide" là ou un UNO fait son travail.

BUZlamouche:
Les MOS c'est du 2N7000

Tu m'as mis le doute, j'ai fait des petits tests.
L'AT est capable de faire bouger des LEDs sur plusieurs broches.
J'ai même testé de lire une ANA pour faire un PWM. C'est OK.

L'AT il est Vivant ! Mais quand y'a mon programme, il fait du "vide" là ou un UNO fait son travail.

bonjour
quelle horloge pour l'attiny ?

Salut,

Le problème est semble-t-il assez simple en fait : ATTINY84 Arduino PWM Pins not working - Microcontrollers - Arduino Forum

Pas de PWM sur tous les pins ... Une solution à tester : Google Code Archive - Long-term storage for Google Code Project Hosting.

J'ai trouvé !!!

Je ne connais pas le pourquoi, mais cela fonctionne.

En optimisant le code j'ai remplacé mes variables tableaux, qui servaient à réaliser un cercle chromatique, par des formules.

Du coup, quand je retire mes variables tableaux, tout est OK.
Je les remets, Plus rien...

Pourtant, aucune erreur de compilation.

Déclaration de la variable:
byte chromaR{} ={ici, 360 valeurs comprises entre 0 et 255};

En cherchant dans les références Arduino, je n'ai pas vu de limitation de taille des tableaux.
C'était trop demandé à mon AtTiny de support 3 tableaux de 360 cases ?

B@tto:
Le problème est semble-t-il assez simple en fait : ATTINY84 Arduino PWM Pins not working - Microcontrollers - Arduino Forum
Pas de PWM sur tous les pins ... Une solution à tester : Google Code Archive - Long-term storage for Google Code Project Hosting.

Pourquoi me parles tu de cela ? Mes PWM fonctionnent.
Où alors j'ai pas compris un truc dans ta remarque.

BUZlamouche:
Pourquoi me parles tu de cela ? Mes PWM fonctionnent.
Où alors j'ai pas compris un truc dans ta remarque.

Tu disais que ça ne marchait pas, si tu avais fait des investigations autre il fallait peut-être les mentionner ?

En cherchant dans les références Arduino, je n'ai pas vu de limitation de taille des tableaux.
C'était trop demandé à mon AtTiny de support 3 tableaux de 360 cases ?

3*360 byte = 1080 bytes
RAM Attiny84 = 512 bytes

=> donc oui c'est (beaucoup) trop demandé

B@tto:
Tu disais que ça ne marchait pas, si tu avais fait des investigations autre il fallait peut-être les mentionner ?

BUZlamouche:
Tu m'as mis le doute, j'ai fait des petits tests.
L'AT est capable de faire bouger des LEDs sur plusieurs broches.
J'ai même testé de lire une ANA pour faire un PWM. C'est OK.

Ça ne marche pas le programme :slight_smile:

Je reste sceptique pour la RAM, je n'ai pas d'erreur de compilation.
C'est possible que l'IDE ne prenne pas en compte ceci ?
Mais cela peux effectivement planter complément l'AT...