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
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?
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
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.
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?
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.
Per la programmazione potresti comprare uno di questi: Accessories — Arduino Official Store
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....
#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???
>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).
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.
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 :
... la buona notizia è che ... se vai su GitHub, trovi tutti i files aggiornati di Optiboot ed i bootloader pronti da caricare ... QUI.
Naturalmente, non basta caricare il nuovo bootloader, ma occorre modificare il file boards.txt per fare in modo che siano riconosciuti i parametri necessari e si riesca a caricare i programmi.
Non è cosa difficilissima, ma nenanche per iniziandi ... :
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"
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"
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.