Arduino Pro Mini: A6 ed A7 non mappati correttamente

Salve a tutti, come da titolo, sto avendo problemi con la lettura analogica dai pin A6 ed A7 di un Arduino Pro Mini. In pratica sto leggendo la tensione da due potenziometri tramite il monitor seriale, il problema è che il valore di analogRead(A6) risulta essere quello letto dal pin A7, mentre il valore di analogRead(A7) è costantemente uguale a 0. Ho già testato i potenziometri su altri pin e funzionano correttamente, quindi non dovrebbe essere un problema di codice o di elettronica.

Ho notato che scambiando i valori nelle definizioni di PIN_A6 e PIN_A7 in pins_arduino.h (Arduino/hardware/arduino/avr/variants/standard) da

#define PIN_A6 = (20)
#define PIN_A7 = (21)

a

#define PIN_A6 = (21)
#define PIN_A7 = (20)

il risultato è che il valore di analogRead(A6) è corretto ed il valore di analogRead(A7) è ancora costantemente uguale a 0.

Non so cosa fare e perciò chiedo aiuto a voi prima che faccio qualche danno :smiley:
Credo che sia un problema di mappatura dei pin, non ho trovato molto cercando su Google.

PS: utilizzo l'editor Arduino 1.6.10.

Grazie.

prova a scollegare tutto , controlla le piazzole...e collega un potenziometro alla volta
Sono saldati direttamente o hai una strip ?

EDIT:
quando provi a leggere un ingresso digitale come analogico di solito ti restituisce zero o un numero pari al fondoscala?Controlla la configurazione, oppure posta il codice , qualcuno che conosce mini arduino ci sarà sicuramente qui

Victor795 ho già fatto diversi test con un multimetro e tutto sembra essere collegato correttamente (ho tutto saldato sulle piazzole).

Victor795:
quando provi a leggere un ingresso digitale come analogico di solito ti restituisce zero o un numero pari al fondoscala?

Intendi leggere una tensione di +5v o 0v? In quel caso ogni pin analogico da A0 a A5 mi restituisce 1023 o 0, mentre A6 restituisce sempre 0 ed A7 restituisce 1023 o 0 (ma li attribuisce ad una lettura da A6).

Posto il codice:

#define POT1 A2
#define POT2 A3
#define POT3 A4
#define POT4 A5

#define SLIDER1 A6
#define SLIDER2 A7

int pot1, pot2, pot3, pot4, slider1, slider2;

void setup() {
  Serial.begin(9600);
}

void loop() {
  pot1 = analogRead(POT1);
  pot2 = analogRead(POT2);
  pot3 = analogRead(POT3);
  pot4 = analogRead(POT4);

  slider1 = analogRead(SLIDER1);
  slider1 = analogRead(SLIDER2);

  Serial.print(pot1);
  Serial.print(",");
  Serial.print(pot2);
  Serial.print(",");
  Serial.print(pot3);
  Serial.print(",");
  Serial.print(pot4);
  Serial.print(",");
  Serial.print(slider1);
  Serial.print(",");
  Serial.println(slider2);
  
  delay(100);
  
}

Probabilmente hai rotto il Controller. Hai provato con un altro Arduino PRO mini?

Ciao Uwe

uwefed:
Probabilmente hai rotto il Controller.

Mi è arrivato nuovo due giorni fa e questo è il primo programma che faccio :slightly_frowning_face: non mi sembra neanche di aver fatto connessioni sbagliate.

Domani faccio un test con un altro Arduino Pro Mini.

È originale o un clone?

FedericoC:
Victor795 ho già fatto diversi test con un multimetro e tutto sembra essere collegato correttamente (ho tutto saldato sulle piazzole).

Intendi leggere una tensione di +5v o 0v? In quel caso ogni pin analogico da A0 a A5 mi restituisce 1023 o 0, mentre A6 restituisce sempre 0 ed A7 restituisce 1023 o 0 (ma li attribuisce ad una lettura da A6).

Ho pensato ad un corto verso massa sul pin 20 , ma se hai controllato allora non è quello

SukkoPera:
È originale o un clone?

I cloni in cosa sono differenti ?pcb ?

SukkoPera:
È originale o un clone?

E' un clone.

Victor795:
Ho pensato ad un corto verso massa sul pin 20 , ma se hai controllato allora non è quello

Non è neanche quello :frowning: .

Ho appena provato con un altro Pro Mini (clone anche questo): stessa identica storia: A6 restituisce la lettura su A7 e A7 restituisce sempre 0.

Se sono cloni identici potrebbero essere proprio fatti male a livello hardware. Dovresti identificare i pin del microcontrollore che portano quei segnali e vedere se sono connessi ai rispettivi pin.

Dovresti avere la certezza come dice SukkoPera che il pin dell'atmel328 sia collegato alla piazzola che tu utilizzi per il potenziometro.
Ho visto che all'interno di wiring_analog.c fa una sorta di conversione sui canali dell'adc

provare a mettere 7 invece che A7 ?

Arduino:
static const uint8_t A0 = 14;
static const uint8_t A1 = 15;
static const uint8_t A2 = 16;
static const uint8_t A3 = 17;
static const uint8_t A4 = 18;
static const uint8_t A5 = 19;
static const uint8_t A6 = 20;
static const uint8_t A7 = 21;

For comparaison here is the analog pin definition code for the Arduino Mega:

static const uint8_t A0 = 54;
static const uint8_t A1 = 55;
static const uint8_t A2 = 56;
[...]
static const uint8_t A13 = 67;
static const uint8_t A14 = 68;
static const uint8_t A15 = 69;

se per ogni scheda cambia costante non sarà anche diverso per il mini pro ?tu ti stavi riferendo all'header file standard. Prova a mettere direttamente 7 che dovrebbe essere il canale 7 e non A7

SukkoPera:
Dovresti identificare i pin del microcontrollore che portano quei segnali e vedere se sono connessi ai rispettivi pin.

Sono collegati entrambi ai loro rispettivi pin, ho testato con un multimetro.

Victor795:
Ho visto che all'interno di wiring_analog.c fa una sorta di conversione sui canali dell'adc

provare a mettere 7 invece che A7 ?

se per ogni scheda cambia costante non sarà anche diverso per il mini pro ?tu ti stavi riferendo all'header file standard. Prova a mettere direttamente 7 che dovrebbe essere il canale 7 e non A7

In boards.txt, sotto la voce "Arduino Pro or Arduino Pro Mini" compare la stringa

pro.build.variant=eightanaloginputs

che richiama il file "pins_arduino.h" nella cartella "eightanaloginputs" che a sua volta include il file "pins_arduino.h" standard modificandone solo il numero di pin analogici da 6 a 8:

#include "../standard/pins_arduino.h"
#undef NUM_ANALOG_INPUTS
#define NUM_ANALOG_INPUTS           8

Ho già provato a mettere 7 al posto di A7 ma niente. Sarò mica l'unico fortunato ad avere due Pro Mini difettosi :D? Qualcuno di voi ha fatto una prova?

In realtà se non sono originali è possibilissimo.

Comunque se sei sicuro che il pin A6 vada alla piazzola giusta è un po' strano. Dopo le vacanze provo i miei :D.

oppure piu' semplicemente corregere lo sketch

da

slider1 = analogRead(SLIDER1);
slider1 = analogRead(SLIDER2);

a

slider1 = analogRead(SLIDER1);
slider2 = analogRead(SLIDER2);

Ovvero, rileggere attentamente gli sketch prima di urlare "al lupo" :smiley:

Brunello:
oppure piu' semplicemente corregere lo sketch

da

slider1 = analogRead(SLIDER1);

slider1 = analogRead(SLIDER2);





a



slider1 = analogRead(SLIDER1);
slider2 = analogRead(SLIDER2);

Forse è arrivato il momento di mettere gli occhiali hahahaha :fearful:

astrobeed:
Ovvero, rileggere attentamente gli sketch prima di urlare "al lupo" :smiley:

Giuro di aver riletto decine e decine di volte lo sketch ma quell'1 mi è sempre sfuggito tanto che sono arrivato a pensare a cose assurde :slightly_frowning_face:

Va beh, scusate il "falso allarme" e grazie di tutto! :slight_smile:

:-[

E' una cosa piu comune di quanto si pensa ... inconsciamente non si nota l'errore, perche' si e' sicuri di non averlo fatto (questo e' uno dei motivi principali per cui qualcosa non andrebbe mai corretto dalla persona che l'ha scritto, ma da qualcun'altro ... oppure riletto dopo una pausa di riposo o il giorno dopo ... :wink: ... ed e' anche il motivo dell'esistenza dei "correttori di bozze", che non sono mai le stesse persone che scrivono le bozze :D)

:slight_smile: :slight_smile: :slight_smile:

anche io e Sukko siamo orbi , ma tu paghi una birra :smiley: