trasferimento progetto da arduino uno ad arduino pro mini

Salve a tutti, ho provato diverse volte a risolvere il problema per conto mio, ma purtroppo mi trovo veramente a non saper dove battere la testa, spero che voi, miei maestri :) ed eruditi di arduino possiate consigliarmi. Ho creato un progetto nel quale tramite la funzione lillis() , potevo lavorare contemporaneamente con più led facendoli fare cose diverse , lampeggio uno, pulsazione un altro , vari led che si accendono in sequenza , ecc ecc, è stata una bella sfida e anche grazie ai consigli di questo forum sono riuscito a realizzarla . poi visto che volevo spostare il progetto su arduino pro mini ho seguito l'esempio da qui: http://www.giuseppecaccavale.it/arduino/programmare-arduino-pro-mini-con-arduino-uno/ dove mi si spiegava come utilizzare il pro mini tramite arduino uno. Cosi ho fatto, e dopo aver collegato il tutto : Arduino PRO MINI Arduino UNO PIN +5V al PIN +5V PIN GND al PIN GND PIN RESET al PIN RESET PIN TX al PIN TX PIN RX al PIN RX

ho caricato qualche programma di prova facendolo funzionare correttamente.

Ma se carico il progetto descritto sopra ecco che il pro mini si blocca un led rosso vicino al tasto reset incomincia a lampeggiare all'impazzata e la scheda rimane cosi bloccata , non accetta più alcuno sketch . convinto di aver fatto qualche collegamento errato ne ho usata un altra , stesso problema :confused: :confused:

potete aiutarmi ? non credo sia un problema di codice , su arduino uno funziona perfettamente e se serve a qualcuno lo posto volentieri ma perche con qualche sketch mi funziona e con questo arduino pro mini si blocca?

Premetto che sulla piattaforma arduino , su strumenti ho gia impostato correttamente la scheda , il processore e la porta com :(

Hai tolto l'Atmega328 o hai caricato uno sketch vuoto ?

ciao :-) , si si ho tolto da arduino uno l'Atmega 328, ho collegato il tutto e caricato i programmi , i primi due (sketch piccolini da test) hanno funzionato correttamente sul pro mini. Ma lo sketch che mi serve lo ha bloccato come ho descritto sopra . tanto che anche scollegando tutto e ricollegando per ricaricare uno dei due piccoli sketch usati correttamente prima, la pro mini continua a non funzionare , il piccolo led vicino al tasto reset continua a lampeggiare all'impazzata ogni volta che alimento la pro mini :-(.

quando carico un qualsiasi sketch, la barra di caricamento arriva fino in fondo, poi si blocca alla fine per qualche minuto e mi viene fuori la scritta:

avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xaf avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xaf avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xaf avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xaf avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xaf avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xaf avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xaf avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xaf avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xaf avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xaf Problema di caricamento sulla scheda. Guarda http://www.arduino.cc/en/Guide/Troubleshooting#upload per suggerimenti

Non so come muovermi ora :-(

Prova a caricare un programmino di test ma usando manovra d'emergenza, ovvero tieni premuto tasto reset e lo rilasci appena fa upload. Non facile trovare tempo giusto, prova un pò di volte.

Stiamo parlando di una Promini con Atmega328 a 16Mhz e 5V ? o è diversa ?

ahhh non conoscevo la manovra d'emergenza , grazie mille nid69ita, proverò

eh si brunello22 ,si tratta di un pro mini con Atmega 328 , ma cavolo c'è l'ho da un po di tempo e non sono sicuro dei 16Mhz 5v, però ha funzionato bene con gli sketch precedenti impostandolo proprio così. (ora prendo la lente e cerco di capire bene frequenza e voltaggio)

Se riesco a sbloccare entrambe le pro mini bloccate con la "manovra d'emergenza" e poi ricarico lo sketch interessato (funzionante benissimo su arduino uno) rischio che si blocchino nuovamente..... potrebbe essere a causa del codice? oppure mi sto confrontando con un problema puramente hardware?

ancora grazie mille per i vostri consigli :-)

Salve di nuovo a tutti, purtroppo mi sono dovuto assentare da arduino per qualche giorno. Allora intanto vi avviso che la manovra di emergenza ha funzionato, il pro mini si è sbloccato caricando uno sketch qualsiasi ;-) grazie nid69ita.

Ora riprovo a caricare lo sketch interessato sperando non mi blocchi ancora la scheda.

Vi faccio sapere

Grazie ancora a tutti per la cortesia

Per la programmazione potresti comprare uno di questi: https://store.arduino.cc/arduino-usb-2-serial-micro Trovi varie versioni in commercio, l'importante che abbia il connettore standard FTDI con la corretta sequenza dei pin.

Buon di, mi ricollego alla discussione che ho aperto per ricevere aiuto nel trasferimento di uno sketch da Arduino uno ad arduino pro mini via arduino. Riassumendo: ho preparato uno sketch per un progetto di modellismo, questo deve far lavorare più led simultaneamente ma con diverse tempistiche e funzioni , per fare questo ho usato la funzione millis().

Ho tolto l'Atmega 328 da arduino uno e collegato il pro mini via seriale , tutto funzionante . Per testare il pro mini ho fatto partire alcuni sketch di test per quello incriminato, questi erano gli sketch che testavano il singolo lavoro e funzionamento di un led del progetto principale, ognuno ha funzionato perfettamente sul pro mini. Ma una volta caricato lo sketch principale , questo manda in blocco il pro mini e solo con la manovra d'emergenza riesco a sbloccarlo. Deduco quindi che ci sia qualcosa nel mio codice che manda in blocco il pro mini e che questo non siano le singole funzioni che fanno funzionare i led perche testate come ho descritto sopra funzionano....

posso chiedere ancora una volta il vostro aiuto ?

vi posto sotto il codice dello sketch

#include <avr/io.h>
#include <avr/wdt.h>
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {} 

const unsigned int BAUD_RATE = 9600;
unsigned long stepAccensioneLuci;
int LED_PIN;

//GLOBALI PER PULSANTE
const unsigned int pulsante = 8;
int val = 0;
int vecchio_val = 0;
int stato = 0;

//GLOBALI PER FUNZIONE LUCI POSIZIONE
unsigned long tempoRealeLuciPosizione;
unsigned long lucePosizioneMillis;
byte ledState =0;

//GLOBALI PER FUNZIONE CURVATURA
unsigned long tempoRealeCurvatura;
unsigned long luceCurvaturaMillis;
int contatore_curvatura =0;
int LUMINOSITA;
int lucentezza = 0;
int lucentezza_pulsazione = 65;
int incremento_accensione = 3;
int incremento_pulsazione = 5;

//GLOBALI PER FUNZIONE ROTORI 
int LEDpins[] = {7,6,5,4,3,2}; //Viene dichiarato un vettore, che contiene i Pin dei vari LED
int i; // Questo variabile viene utilizzato come un contatore all'interno dei cicli for
int ritardoLED = 300; //Questo valore rappresenta la durata di accessione di ciascun LED
int attualeLED = 0;
unsigned long tempo=0;
unsigned long tempoAttuale;

void setup() {  
Serial.begin(BAUD_RATE);
tempo = millis();
luceCurvaturaMillis = millis();
pinMode(pulsante, INPUT);
// Vengono inzializzate le tensioni corrette per far accedere i LED_rotori
for(i =0; i<6; i++) { // da energia ai pin per i led
     pinMode(LEDpins[i], OUTPUT);
} 
}//FINE SETUP()

void loop() {

 val = digitalRead(pulsante);
 if ((val == HIGH) && (vecchio_val == LOW)) {  
     stato = 1 - stato;  
 }  
 vecchio_val = val;
 if (stato ==1) {                                        
     tempoRealeLuciPosizione = millis();
     tempoRealeCurvatura = millis();
     stepAccensioneLuci = millis();                       
    
     if(stepAccensioneLuci>1000) {
        luciAstronave(10);    
        stepAccensioneLuci = millis();
     } 
     if(stepAccensioneLuci>2000) {        
        luciAstronave(11);                   
        stepAccensioneLuci = millis();
     }
     if(stepAccensioneLuci>4000) {            
        luciPosizione(12);                   
        stepAccensioneLuci = millis();        
     }
     if(stepAccensioneLuci>10000) {                 
        rotori_led(); 
        stepAccensioneLuci = millis();                
     }
     if(stepAccensioneLuci>22000) {
        luciCurvatura(9);          
        stepAccensioneLuci = millis();   
     }                  
 }// fine stato 1 pulsante
  
 if (stato ==0) { // stato 2 pulsante
    Reset_AVR();
 }  

}//FINE LOOP

int luciAstronave(int LED_PIN) {
 digitalWrite(LED_PIN,HIGH);
 pinMode(LED_PIN, OUTPUT);   
}

void luciPosizione(int LED_PIN){   
  if(tempoRealeLuciPosizione > lucePosizioneMillis + 1000){
      lucePosizioneMillis = tempoRealeLuciPosizione;
      ledState ^= 1;
      pinMode(LED_PIN, OUTPUT); // SE NON METTO QUESTO IL LED SI ACCENDE A MALAPENA
      digitalWrite(LED_PIN, ledState);
   }
}

void luciCurvatura(int LED_PIN){
// Serial.println(" luci curvatura accesa");
  
 if(tempoRealeLuciPosizione > luceCurvaturaMillis + 30 && contatore_curvatura==0 ){    
       pinMode(LED_PIN, OUTPUT);
       analogWrite(LED_PIN, lucentezza);
       lucentezza = lucentezza + incremento_accensione; //cambia la luminosità nel loop
       contatore_curvatura=1;
       luceCurvaturaMillis = millis(); 
 }
 else if (tempoRealeLuciPosizione > luceCurvaturaMillis + 30 && contatore_curvatura ==1) {
       pinMode(LED_PIN, OUTPUT);
       analogWrite(LED_PIN, lucentezza_pulsazione);
       lucentezza_pulsazione = lucentezza_pulsazione + incremento_pulsazione; 
  
       //crea effetto pulsazione
       if(lucentezza_pulsazione == 65 || lucentezza_pulsazione == 255){
       incremento_pulsazione = -incremento_pulsazione; 
 } 
 luceCurvaturaMillis = millis();
 }  
} //FINE CURVATURA 



void rotori_led(){
 tempoAttuale = millis();
 if(tempoAttuale - tempo > ritardoLED){
     if(ritardoLED>40){
          digitalWrite(LEDpins[attualeLED], LOW);
          attualeLED = (attualeLED + 1)%6;
          digitalWrite(LEDpins[attualeLED], HIGH);
          tempo = tempoAttuale;
          ritardoLED = ritardoLED-4;
      }
      else{
          digitalWrite(LEDpins[attualeLED], LOW);
          attualeLED = (attualeLED + 1)%6;
          digitalWrite(LEDpins[attualeLED], HIGH);
          tempo = tempoAttuale;
        }
  }
}

Chiedo ancora scusa al moderatore …

tanto per spiegare lo sketch:
la funzione:
“luci astronave” non fa altro che accendere un led
"luci posizione " accende e spegne un led con funzione millis()
“luci curvatura” accende un led , poi lo fa pulsare variandone l’intensita sempre con millis()

“rotori led” fa accendere una serie di led in sequenza aumentandone la velocità di accensione e spegnimento

tutte le funzioni partono anche sul pro mini se metto in commento le altre con /* …*/
ma insieme lo mandano in blocco PERCHEEEEEEE???

scusatemi ogni suggerimento è ben accetto

>jabawak: … sarà il caso che rileggi con più attenzione il REGOLAMENTO !

In conformità al suddetto regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag:

[code] _il _tuo_ codice_ [/code]

così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o alla formattazione del font (con eliminazione di parti di codice).

Guglielmo

ho corretto il messaggio nel post sopra , spero veda bene

grazie per il consiglio sull'hardware paoloP , avevo usato le pro mini perche ne avevo gia 2 a casa e le dimensioni facevano al caso mio, ma terro' senza dubbio in mente questa per il prox progetto .

E' una vecchia ProMini? ... Se SI ... ha un vecchio Bootloader che NON gestisce correttamente il WatchDog e blocca la scheda.

Se hai l'ultima versione dell'IDE vedrai che ci sono due versioni diverse di ProMini ... ... se la tua ha il vecchio bootloader, seleziona la nuova e carica sulla tua, con l'apposita funzione, il bootloader (verrà così caricato quella della nuova che è aggiornato e funziona con il WD).

Naturalmente devi avere un programmatore ISP per poter fare la cosa, dato che, il bootloader, si può ricaricare solo via ISP.

Guglielmo

Mmmmhh dunque la pro mini l'ho acquistata 3 anni fa e da allora ho pure l'IDE di arduino, forse sono entrambi un po' vecchiotti .

mentre per caricare gli sketch sulla pro mini ho seguito queste istruzioni pper usare la stessa arduino uno.... http://www.giuseppecaccavale.it/arduino/programmare-arduino-pro-mini-con-arduino-uno/

ora intanto provero' ad installare una nuova versione dell'IDE

grazie mille :)

Perdona ... ho idea di aver fatto un po' di confusione io ...

Il problema è che il bootloader della ProMini NON è compatibile con il WatchDog ... la cattiva notizia è che ... ... per la Nano vedo "old bootloader" e quindi danno la possibilità di averla con il vecchio o con il nuovo (OptiBoot), ma per la ProMini ... NON vedo questa cosa e quindi, mi sa che NON lo hanno rilasciato ::)

Guglielmo

... la buona notizia è che ... se vai su GitHub, trovi tutti i files aggiornati di Optiboot ed i bootloader pronti da caricare ... QUI.

Naturalmente, [u]non basta caricare il nuovo bootloader[/u], ma occorre [u]modificare il file boards.txt[/u] per fare in modo che siano riconosciuti i parametri necessari e si riesca a caricare i programmi.

Non è cosa difficilissima, ma nenanche per iniziandi ... ::)

Guglielmo

Ok ... sembra si possa fare così ...

  1. vai nelle preferenze dell'IDE 1.8.5

  2. In "Additional Boards Manager URLs" aggiungi la seguente riga:

https://github.com/Optiboot/optiboot/releases/download/v6.2/package_optiboot_optiboot-additional_index.json
  1. Dai i necessari OK, vai poi nel "Board Manager" di Arduno IDE e troverai una serie di boards, in fondo troverai "Optiboot 6.2 by westfw" ... seleziona e fai "install"

  2. A questo punto tra le board che puoi selezionare, appariranno una serie di board chaimate "Optiboot" ... ... dato che la ProMini monta un ATmega328P a 32pin, selezionerai "Optiboot in a 32-pin cpus"

  3. Una volta selezionata, seleziona, sempre dal menu strumenti (Tools), il tipo di MCU ATmega328, la velocità a 16MHz ed il programmatore ISP che hai ... potrai usare la funzione di scrittura bootloader del IDE.

Guglielmo