Go Down

Topic: utilizzare pin 13 (Read 1 time) previous topic - next topic

liso

buongiorno,
ho la necessita di utilizzare il pin13 per comandare un contattore....solamente che appena collego l'arduino alla 12V
l'uscita lampeggia e questo mi fa attrarre il conttatore 4-5 volte. come posso evitarlo?

tuxduino

Hai caricato il tuo programma sull'Arduino ?

leo72

Sul pin 13 è presente anche il led "L", che viene usato durante il reset per segnalazioni da parte del bootloader.
Collegando l'alimentazione la prima volta, il led "L" però non lampeggia. Lampeggia se successivamente viene resettato l'Atmega328, il reset avviene anche per l'apertura della porta seriale.
Personalmente ho provato anche a collegare 12V al jack di Arduino e, come supponevo, la prima volta il led non lampeggia.

Che versione dell'Arduino usi? UNO R1, UNO R2, MEGA ecc..?

liso

ho l'uno...se stacco l'alimentazione e la riattacco, prima di partire il programma corretto, lampeggia il LED e quindi di conseguenza anche il mio contattore

leo72


ho l'uno...

Che versione? R1, R2, R3?
Io ho la R1 ma con il bootloader della R3 e se attacco l'alimentazione il led non lampeggia. Lampeggia solo se successivamente premo il tasto di reset.

liso


Michele Menniti

Ovvio che il,primo consiglio è quello di spostarti al pin 12 :D ma resterebbe il mistero, non puoi postare il tuo codice?
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

liso

sisi è che ho finito i pin...cmq lo posto!

Code: [Select]
include <LiquidCrystal.h>


#define ON 1
#define OFF 0

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


const int enel = 6;
const int gruppo = 7;
const int rele1 = 8;
const int rele2 = 9;
const int contattore = 10;
const int spia = 13;



boolean stato_enel;
boolean stato_gruppo;
boolean flag =0;
boolean error =false;
int cicli =0;



void setup(){
  Serial.begin(9600);
  lcd.begin(16, 4);
 
  lcd.clear();


  pinMode(enel, INPUT_PULLUP);
  pinMode(gruppo, INPUT_PULLUP);
 
  pinMode(rele1, OUTPUT);
  pinMode(rele2, OUTPUT);
  pinMode(contattore, OUTPUT);
  pinMode(spia, OUTPUT);
}


void ritardo(int i){
  Serial.print("Sto aspettando ");
  Serial.print(i);
  Serial.println(" secondi");
  for (int k=0; k<i; k++){
  lcd.setCursor(0,3);
  lcd.print("Wait ");
  lcd.print(i-k);
  lcd.write(" secondi      ");
    delay(1000);
  }
}

void accensione_gruppo() {
  Serial.println("Accensione gruppo elettrogeno in corso...");
  lcd.setCursor(0,2);
  lcd.print("Accensione...   ");
  lcd.setCursor(0,3);
  Serial.print("Tentativo n: ");
  lcd.print("Tentativo : ");
  Serial.println(cicli+1);
  lcd.print(cicli+1);
  lcd.print("  ");
  delay(2000);
  digitalWrite(rele1, HIGH);
  delay(2000);
  digitalWrite(rele2, HIGH);
  delay(1500);
  digitalWrite(rele2,LOW);
  cicli++;
}

void spengimento_gruppo(){
  Serial.println("Spengimento gruppo elettrogeno in corso...");
  lcd.setCursor(0,2);
  lcd.print("Spengimento...  ");
  ritardo(18);
  digitalWrite(contattore, LOW);
  ritardo(6);
  digitalWrite(rele1, LOW);
}

void errore() {
  digitalWrite(spia, HIGH);
  digitalWrite(rele1, LOW);
  digitalWrite(rele2, LOW);
  error = true;
  Serial.println("ERRORE IL GRUPPO NON SI E' ACCESO");
  lcd.setCursor(0,2);
  lcd.print("     ERRORE     ");
  lcd.setCursor(0,3);
  lcd.print("NON SI E' ACCESO");
}





void loop(){
  stato_enel = digitalRead(enel); //controllo se c'è rete
  stato_gruppo = digitalRead(gruppo);
  Serial.print("Stato Enel: ");
  Serial.println(stato_enel);
  Serial.print("Stato Gruppo: ");
  Serial.println(stato_gruppo);
  lcd.setCursor(0,0);
  lcd.print("ENEL   : ");
  if(stato_enel==ON)
    lcd.print("OK     ");
  else lcd.print("ASSENTE");
  lcd.setCursor(0,1);
  lcd.print("GRUPPO : ");
  if(stato_gruppo==ON)
    lcd.print("ON ");
  else lcd.print("OFF");
 
 
  //Senza enel
  if (stato_enel== OFF){ //senza ENEL

    if (stato_gruppo == OFF) {  //Gruppo Spento

      if(cicli == 0) {
        lcd.setCursor(0,2);
        lcd.print(" Sto aspettando ");
        ritardo(12);
      }
      if (digitalRead(enel) == 0) {
        if(cicli<3) accensione_gruppo();
        else errore();
      }
     
    }
    if (stato_gruppo == ON){ //Gruppo Acceso e non attaccato
      if (flag == 0){
        Serial.println("Gruppo acceso");
        lcd.setCursor(0,2);
        lcd.print("Gruppo Acceso   ");
        ritardo(15); //15 secondi
        digitalWrite(contattore, HIGH);
        flag = 1;
        cicli = 0;
      }
      if (flag == 1) {
        Serial.println("Gruppo acceso e collegato");
          lcd.setCursor(0,3);
          lcd.print("Gruppo collegato");
      }
    }
  }

  //c'è Enel
  if (stato_enel == ON ) {
    if (stato_gruppo == ON) {
      spengimento_gruppo();
      flag = 0;
      cicli=0;
    }
    if (stato_gruppo == OFF) {
      Serial.println(" Tutto OK");
      lcd.setCursor(0,2);
      if (error == true ) lcd.print("     ERRORE     ");
      else lcd.print("                ");
      lcd.setCursor(0,3);
      lcd.print("    Tutto OK    ");
  }
}

}

leo72

Non hai finito i pin, mi pare che tu non usi quelli analogici.
Sappi che questi pin possono essere utilizzati come normali pin digitali semplicemente indirizzandoli con i valori da 14 a 19 rispettivamente per A0...A5.

Comunque a me con la R1 il led non lampeggia quando collego la scheda. Ci vorrebbe la testimonianza di qualcun altro che ha la R3, forse il firmware dell'Atmega16U2 gestisce in modo diverso l'avvio.

Michele Menniti

Nello sketch parli di "spia", cosa è attaccato esattamente al pin 13?
Come ti ha detto Leo puoi usare i pin analogici come digitali, ma un'altra prova potrebbe essere quella di scambiare 12 e 13 tra loro e vedere cosa succede a livello di LCD.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

astrobeed


Io ho la R1 ma con il bootloader della R3 e se attacco l'alimentazione il led non lampeggia. Lampeggia solo se successivamente premo il tasto di reset.


Sulla mia UNO R1 con optiboot aggiornato all'ultima versione il led non lampeggia mai quando si connette l'alimentazione indipendentemente se è da USB o esterna, lo fa solo resettandola.
In tutti i casi i lampeggi dipendono dal bootloader e non dalla parte USB, però gli Arduino dotati di FTDI resettano sempre e comunque, anche con l'ultimo optiboot, perché all'avvio l'FTDI commuta varie volte lo stato del DTR e questo causa il reset della scheda.
Probabilmente, tocca verificare nel sorgente del optiboot, il bootloader fa distinzione tra la condizione di power on e quella di reset, se è la prima non si avvia, quindi niente lampeggi del led, e cede subito il controllo al programma utente.

cece99



Io ho la R1 ma con il bootloader della R3 e se attacco l'alimentazione il led non lampeggia. Lampeggia solo se successivamente premo il tasto di reset.


Sulla mia UNO R1 con optiboot aggiornato all'ultima versione il led non lampeggia mai quando si connette l'alimentazione indipendentemente se è da USB o esterna, lo fa solo resettandola.
In tutti i casi i lampeggi dipendono dal bootloader e non dalla parte USB, però gli Arduino dotati di FTDI resettano sempre e comunque, anche con l'ultimo optiboot, perché all'avvio l'FTDI commuta varie volte lo stato del DTR e questo causa il reset della scheda.
Probabilmente, tocca verificare nel sorgente del optiboot, il bootloader fa distinzione tra la condizione di power on e quella di reset, se è la prima non si avvia, quindi niente lampeggi del led, e cede subito il controllo al programma utente.

Nella mia UNO R3 quando viene connessa l'alimentazione, lampeggia il led L per farti vedere che il bootloader è partito
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

astrobeed


Nella mia UNO R3 quando viene connessa l'alimentazione, lampeggia il led L per farti vedere che il bootloader è partito


Probabilmente sulla tua c'è ancora la vecchia versione dell'optiboot, quella nuova la trovi allegata all'IDE 1.0.1


cece99



Nella mia UNO R3 quando viene connessa l'alimentazione, lampeggia il led L per farti vedere che il bootloader è partito


Probabilmente sulla tua c'è ancora la vecchia versione dell'optiboot, quella nuova la trovi allegata all'IDE 1.0.1



Ah, mi tocca pure aggiornare il bootloader?!?!? Ahahaha che pollo, sta sera faccio l'update!
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

leo72


sta sera faccio l'update!

Lo puoi fare anche do mani, se è per questo. ;)

Go Up