Comunicazione seriale (via USB) K.O.

Ciao ragazzi, Ero già tutto felice per essere riuscito a fare uno sketch ben funzionante di controllo PID di una ventola che simula un albero rotante sotto sforzo, e da sta mattina l'Arduino UNO ha smesso di comunicare via USB sia in uscita coi println sia in entrata. Dà sempre errore not in sync e le spie di trasmissione e ricezione non si illuminano. Cosa ho sbagliato? Lo schema del circuito che o ho realizzato con le mie poche esperienze messe insieme è questo:

Per prima cosa prova con la manovra di emergenza cercando di caricare il blink.
Stacca tutto dall’Arduino tranne la USB.
http://forum.arduino.cc/index.php?topic=109568.msg822753#msg822753

Staccare tutto è la prima cosa che ho fatto, l'ho lasciato anche "decantare" non che avesse qualche strana procedura di protezione inserita che non conosco ma niente come non esce comunicazione manco entra... ora leggo il link...

Ok letto tutto e provato anche le “manovre di emergenza” ma niente. L’arduino è come sordo non permette ai dati di entrare ne di uscire dalla usb. Nonostante ciò esegue il suo sketch alla perfezione. Cosa può essere saltato e perchè? non voglio cuocerne un’altro! =( E’ utile anche lo sketch? io lo metto si sa mai:

int reedSW=3; //sensore di giri mediante sensore di reed (provvisorio)

// variabili per calcolo RPM
unsigned long duratagiro;
int rpm;

#include <PID_v1.h>

double Setpoint, Input, Output;
double Kp=0.25, Ki=1, Kd=0;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

void setup()
{
pinMode (reedSW,INPUT);
Serial.begin(9600);

Input = rpm;
Setpoint = (2000); //targhet di 2000 rpm

myPID.SetMode(AUTOMATIC);
}

void loop(){

duratagiro=pulseIn(reedSW,HIGH,500000); //la durata del giro è uguale al tempo trascorso tra HIGH e LOW
rpm=60000000/duratagiro; //giri al minuto è uguale a 60 secondi fratto la durata di un giro

if (duratagiro == 0){ // Pulsein è andato in timeout
rpm = 0;
}
else {
rpm=60000000/duratagiro; //giri al minuto è uguale a 60 secondi fratto la durata di un giro
}
Input = rpm; //dato per il calcolo dell’errore

{
myPID.SetTunings(Kp, Ki, Kd);
}

myPID.Compute();
analogWrite(11,Output);
Serial.println (Output);
Serial.println (rpm);
}

PS. aggiungo un dettaglio! oggi prima di collegarlo al pc ho sostituito l'ATmega328 con uno nuovo con bootloader del'arduino 2009 precaricato, mi sono accorto con quello a bordo che la seriale era "bloccata" ed ho rimesso il suo ATmega col quale è nato.

forse non vedo bene, ma il led è diretto al pin di arduino???

non è che Adruino "parla ttroppo" via usb, cioe manda sempre i dati e non riesce più a comunicare corettamente?

io per evitare ciò, nella funzione loop ho preso l'abitudine di mettere un delay(2000); per esempio, cosi se come mi è successo piu volte arduino comincia a "straparlare" dopo il reset ho 2 secondi mi margine per caricare un programmino innocuo... podpo questa tecnica non ho piu avuto problemi, prova a a valutare se è questo il problema!

Ciao

Vedi bene il led è diretto senza seristenza, è stata quella la causa? l'ho messo diretto per alimentarlo a 5 volt quando il segnale PWM esce al massimo dell'intensità (cioè solo quando la ventola è frenata sotto massimo sforzo e il PID gli da piena potenza quindi solo in casi molto brevi)

Sulla questione dello "straparlare" non mi sono mai posto la questione, ma in tal caso cambiando ATmega con uno nuovo con bootloader precaricato dell'arduino 2009 il difetto doveva cessare cosa che non è successa.
Inoltre mettere un delay in un algoritmo PID nonchè in un calcolo degli rpm basato sul tempo non va a sballare tutto quanto? Non so che fare... Cioè ok ne compro un'altro amen ma poi? non vorrei bruciarne un'altro! :roll_eyes:

Se ha il bootloader della Duemilanove seleziona 2009 tra le schede del menù strumenti.
Se ha quello della UNO seleziona UNO.

Corri subito a mettere una resistenza su quel led! ]:smiley:

il delay nella funzione setup (ho scrtitto setup vero?? oggi ho le travecole) viene eseguito una sola volta all avio.

cambiano il micro senza programmi la cosa NOn dovrebbe ripresentarsi.
anche se pWM io la resistenza sul led la metterei, perche con "cose" impolsive non sai mai sosa succede..anche se per previ attimi magari il led resiste..ma atimi brevissimi (il pin di arduino non so!!).

(hai misurato la tensione di alimentazione su arduino che sia 5V?)
se ce..allora mi sa che la seriale ha dei problemi :~

poi io (ma è un opinione personale) avrei usato un drivemosfet per pilotare il mosfet (per complicare meno la cosa..esistono li uso :slight_smile: )

PaoloP, avevo già selezionato il corretto settaggio della 2009 prima di tentare il caricamento dello sketch ma vedendo che arduino era diventato “sordomuto” ho pensato ad un difetto del microcontrollore quindi ho rimesso il suo originale e ho reimpostatto arduino Uno. Magari avessi fatto quell’errore!

Ok metterò la resistenza solo che perdo la capacità di vedere a occhio il lavoro del PID sulla PWM, peccato.

Martinix, hai ragione! anche se mettendolo nel setup non so che giovamento abbia il delay all’avvio.
Il voltaggio è perfetto, con la ventola al minimo 5,03 V e con la ventola al massimo sforzo 5,06 V il consumo del circuito è di curca 68 mAh con la ventola stabilizzata e circa 130 mAh con la ventola in massimo sforzo (quindi con il PWM in massima correzione)

Non ha senso quindi questo comportamento? :astonished:

Se non lo metti rischi di bruciare il pin di Arduino.
Se il Led è Rosso da 1.8V 20mA usa una R da 220ohm.
Il PWM di Arduino non altera la tensione ma il tempo di permanenza della stessa.
Solo la DUE ha un vero DAC.

dovresti vederlo lo stesso, ora sei in modalita faro, con uan resistenza in modalità normale :slight_smile:

se le tensioni son giuste, e non si accendono i led di comunicazione, la vedo nera per l'integrato di comunicazione usb!!!

se hai un oscilloscopio, pui controllare se e dove si interrompe il segnale
oppure se hai uno di qui modulini usb "indipendenti" puoi provare ad usare quello e vedere che nasce.

PaoloP, non so sinceramente per che voltaggio sia progettato il led, ne ho una vagonata recuperati da pc smantellati, se ne trovano a bidoni nelle aree ecologiche, è il led dell'attività HDD di un pc fisso. Comunque onde evitare sovraccarichi hai ragione metterò la resistenza, 300 Ohm, penso basti (a spanne visto che non conosco il voltaggio nominale di lavoro). Inoltre senza led ho notato che il consumo del circuito sia con PWM al minimo, quindi con duty cicle basso che al massimo con ventola in massimo sforzo, quindi con il duty cicle al massimo 255 (dato dal PID o meglio dal PI) non cambia resta sempre fisso a circa 68 mAh. Ecco la spiegazione pratica di quello che mi dite della resistenza ante-led! Me è proprio un asinaccio! :cold_sweat:

Oscilloscopio.... solo al nome mi scende la bava dalla bocca! lo desidero da anni!!! magari averne uno! d'altronde non avrei le conoscenze di base per seguire il circuito e capire da dove nasce il problema sul convertitore TTL-Seriale-USB della board Arduino. So solo che è completamente fuori uso, il resto della board lavora alla perfezione addirittura se metto l'ATMega328P che ho comprato già "bootloaderizzata" parte un evidente surrogato dello sketch Blink di Arduino UNO visto che il led smd sulla board lampeggia all'infinito. Dannazione!

Secondo voi esperti comunque non vi sono errori nel circuito qui sopra ne nello sketch che possono aver causato il danno al convertitore USB quindi? vado sul sicuro? Se è così allora sarà colpa delle due o 3 cazzate che ho fatto nei giorni scorsi quando ho fumato un potenziometro mandando a massa tutto e robine del genere... tutta esperienza che entra (e soldi che escono insieme ai santi).

Ho una gran confusione ora su cosa acquistare, un'altra board UNO, un convertitore, un programmatore AVR.... apro un altro topic? Grazie mille dell'impegno che mi avete regalato!

@Goretto:
ma collegando la scheda al computer, te la riconosce correttamente oppure no?

credo di si... il suono della periferica collegata lo fa, in gestione periferiche compare. Sul fisso è su com3, sul portatile è su com5 come al solito. Viene riconosciuto anche dall'ide. Ma la comunicazione si interrompe credo dopo all'atmega16U2 che converte la seriale-usb in TTL

Se sei sicuro di non aver fatto danni fisici alla scheda (il led senza resistenza al max ti brucia il pin del micro), allora la colpa potrebbe essere davvero imputabile alla seriale occupata dallo sketch che inizia a trasmettere non appena il programma si avvia.

Riprova con la manovra di emergenza, tenendo premuto il pulsante di reset finché l'IDE non scrive in basso la dimensione dello sketch: da quel punto inizia la fase di caricamento, e lì devi trovare il momento giusto per lasciare il pulsante di reset.

Danni fisici sono possibili ma non immediati.... ho fatto un paio di corti accidentali 2 gioni fa e ho fumato un potenziometro ma ha funzionato fino ad oggi può aver ceduto in ritardo? Se ci fosse la seriale occupata a causa dello sketch, inserendo l'altro atmega328 che ho con il bootloader della 2009 non dovrebbe impegnarmela però giusto? Ora l'ho rischiata, ho preparato lo standalone dell'atmega328 originale del mio arduino e sta girando in bread board senza problemi ne disturbi, posso fare qualche prova ulteriore?

I corti fanno male, ma che siano a scoppio ritardato mi suona strano :cold_sweat:

Il chip col bootloader 2009 puoi mettercelo, fai come ti ha detto Paolo. Però se non riesci a scriverci sopra, c'è da pensare che la scheda abbia dei problemi

Ti sei perso qualche pezzo di topic.... Ho già provato a mettere l'atmega dell'arduino 2009 e anche senza nessun microcontrollore, il risultato non cambia, la board viene riconosciuta dal pc ma dall'atmega16U2 (convertitore) non esce ne entra nulla.... muto e sordo... guarda se hai la capacità di verificare cos'ha di guasto te lo spedisco volentieri almeno mi togli sto dubbio che mi consuma, poi puoi tenerlo, se riesci a sistemarlo lo usi. :frowning:

C'era una prova per capire se il convertitore funzionva.
Dovresti staccare l'Atmega328, poi ponticellare i pin 0 e 1. Poi collegare la scheda al computer.
A questo punto dovresti aprire un emulatore di terminale, va bene anche quello dell'IDE.

Adesso, inviando qualcosa sul terminale, dovrebbe tornarti indietro. Se così non fa, il chip convertitore ha dei problemi.