Pages: [1] 2   Go Down
Author Topic: leonardo: conflitto di porte? scrivo su A1 mi spegne D10  (Read 1894 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

buonasera... ho questo problema con leonardo, non ho potuto testarlo su altri arduino, mi si presenta una specie di conflitto di porte che non riesco a spiegarmi:
Questo è il codice "minimo".
Code:
void setup() {
  // put your setup code here, to run once:
pinMode(A1,OUTPUT);
pinMode(10,OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
analogWrite(10,128);
//*************digitalWrite(10,HIGH);
delay(2000);
digitalWrite(A1,0);

delay(1000);

 
}


in pratica scrivo un valore analogico sul pin 10 che infatti sale a 2,5 volt (mezzo dutycycle del pin pwm numero 10) ma dopo che scrivo su A1 un valore digitale il pin 10 mi va a zero volt.
Ho provato, stupidamente, a scrivere sul pin 19 (che su leonardo mi pare di capire che sia un alias di A1) sperando che ci fosse una specie di errore nei #declare di leonardo.... ma il risultato è lo stesso.
Ho invece notato che sostituendo l'analogWrite con il digitalWrite il programma sembra avere il comportamento sperato alzando il piedino a 5volt ed ivi rimanendovi.
Ho in un altro programma fatto il pwm scrivendo direttamente sui registri e forzando il valore di dutycycle scrivendo direttamente sul registro OCR1B ed ho visto che questo registro non viene toccato dalla scrittura digitale su A1... sparo una cazzata ma sembra come se il digitalwrite su A1 mi stacchi l'interrupt che gestisce il pwm sul piedino 10... scambiando A1 con A3 mi pare che vada...Io mi sono un po' letto qua e la le mappature delle porte di leonardo ma sinceramente non mi pare di sbagliare... (si... be... le ultime parole famose di ogni programmatore  smiley-mr-green)

Dove mi sto perdendo?
Succede uguale sull'arduino Uno?
come viene tradotto in assembler il digitalWrite su A10?
Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sicuramente stai sbagliando tu   a dichiarare  i pin  analogici 
un sistema corretto per usare A1  come autput è


pinMode(14, OUTPUT);

digitalWrite(14, HIGH);

digitalWrite(14,  LOW);
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Tuscany
Offline Offline
Edison Member
*
Karma: 75
Posts: 2078
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ti posso confermare che sulla Uno questo non accade, mentre invece avevo notato qualcosa di strano su una leonardo compatibile ( Olimexino 32U4) quando mesi fa' la testavo con uno sketch che usavo per un controllo di Led RGB.
Pero' avevo impuntato il tutto a errori derivanti da diverse numerazioni di pin .

Visto che mi hai fatto venire il dubbio, ho controllato anche io ed  e' come dici tu.... scrivere sull' A1 ( o 19 ) e' come scrivere sull' A10 ( o 28 ) che corrisponde al D10.

e' notte, indaghiamo prossimanente

Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9419
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sicuramente stai sbagliando tu   a dichiarare  i pin  analogici  

Sicuramente non hai letto che sta utilizzando una Leonardo dove la mappatura dei pin è diversa rispetto alla UNO.
« Last Edit: November 20, 2012, 12:51:33 am by astrobeed » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 328
Posts: 22733
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sicuramente stai sbagliando tu   a dichiarare  i pin  analogici  

Sicuramente non hai letto che sta utilizzando una Leonardo dove la mappatura dei pin è diversa rispetto alla UNO.

Quoto. I pin A6..A11 sono mappati sui pin D4, D6, D8, D9, D10 e D12.
http://arduino.cc/en/Main/ArduinoBoardLeonardo

Quindi A10 corrisponde proprio a D10.
Basta girare la schedina per vedere sul retro la mappatura delle funzioni addizionali di alcuni pin
Logged


Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ri-ciao a tutti.
Anzitutto grazie per l'intervento veramente tempestivo.

Mi sono dimenticato di scrivere l'ambiente di sviluppo: è 1.0.1 ma ieri sera mi sono accorto che c'è anche la versione .2: l'ho installata e picche uguale.

volevo stamattina provare a scrivere anzichè col digitalWrite direttamente sulla porta... però, dato che è un'analogica sono caduto in uno stato lievemente di imbarazzo: non so su che registro scrivere smiley-red

... per l'applicazione mi sono spostato di pin: ho un po' il timore che lo stesso problema possa ripresentarsi "quasi random" su altre porte ma ho notato che deve essere un qualcosa che centra con l'uso in pwm+ l'uso dell'analogica come "digitale"

una cosa giusto per capirsi: A10 è "normale" che muova D10 sul leonardo: questo è stato puntualizzato un po' da tutti... il problema è che io sto usando A1 che non dovrebbe impattare su nessuno.


Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 328
Posts: 22733
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho riguardato ora la mappatura dei pin nel file pins_arduino.h per la Leonardo, pare tutto a posto.
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 328
Posts: 22733
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora, ho ripreso il tuo codice:
Code:
void setup() {
  // put your setup code here, to run once:
pinMode(A1,OUTPUT);
pinMode(10,OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
analogWrite(10,128);
//*************digitalWrite(10,HIGH);
delay(2000);
digitalWrite(A1,0);

delay(1000);

 
}
Ho collegato 1 LED su D10.
Il pin su D10 resta acceso a metà intensità e non si spenge mai.
Non so perché a te non funzioni.

Che SO usi? Io ho Linux e non uso la toolchain distribuita con l'IDE ma l'ultima di Atmel.
Logged


Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Ho collegato 1 LED su D10.
Il pin su D10 resta acceso a metà intensità e non si spenge mai.
Non so perché a te non funzioni.

Che SO usi? Io ho Linux e non uso la toolchain distribuita con l'IDE ma l'ultima di Atmel.

io vado di oscilloscopio o tester... parte a fare il pwm e poi quando fa la scrittura crolla basso... hai provato su leonardo o su uno?
come so uso win ... ide 1.0.1 sicuro me lo fa e me lo fa su 1.0.2 installato ieri notte (...però il sonno era tanto...)
... addirittura posso dire che me lo fa in entrambe i leonardo che ho acquistato contemporaneamente.

mi puoiispiegare cosa intendi per la "toolchain" di Atmel? ( sono newbe....)

Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7098
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La toolchian (http://it.wikipedia.org/wiki/Toolchain) è un insieme di strumenti utilizzati sequenzialmente per trasformare in codice macchina il codice scritto nel linguaggio di Arduino (C/C++).
Essa è formata dal compilatore e dal linker ed è integrata nell'IDE di Arduino. Per i sistemi Linux è possibile usare la toolchain presente nel sistema invece di quella distribuita insieme all'IDE e inoltre sia per Linux che per Windows è possibile aggiornarla all'ultima versione distribuita da ATmel (produttore del Chip montato su Arduino).
Nella sezione Megatopic trovi le istruzioni per l'aggiornamento per linux --> http://arduino.cc/forum/index.php/topic,97237.0.html
o per windows --> http://arduino.cc/forum/index.php/topic,96976.0.html
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Nella sezione Megatopic trovi le istruzioni per l'aggiornamento per linux --> http://arduino.cc/forum/index.php/topic,97237.0.html
o per windows --> http://arduino.cc/forum/index.php/topic,96976.0.html

Grazie per la dritta: ho provveduto a fare un ambiente 1.0.2 e scassarlo con il toolchain aggiornato della Atmel come da istruzioni che mi hai linkato.
Il problema si è risolto come per magia.
Non so se posso azzardare ma questo implica che l'1.0.2. originale di arduino.cc con leonardo ha qualche problema... c'è qualcosa che sfugge...

Per ostinazione mi sono messo a leggere il codice "assembler" generato dall'ide.... questa è la sola parte generata per la procedura setup():
Code:
   0: 83 e1        ldi r24, 0x13 ; 19
   2: 61 e0        ldi r22, 0x01 ; 1
   4: 0e 94 00 00 call 0 ; 0x0 <setup>
   8: 8a e0        ldi r24, 0x0A ; 10
   a: 61 e0        ldi r22, 0x01 ; 1
   c: 0e 94 00 00 call 0 ; 0x0 <setup>
  10: 08 95        ret

Si vede che A1 il precompilatore  lo traduce come 19 ed il digitale 10 come 10... e mi pare giusto... è dopo il digitalWrite sul 19 che fa casino su D10 e non so il perchè.

Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 328
Posts: 22733
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

mi puoiispiegare cosa intendi per la "toolchain" di Atmel? ( sono newbe....)

Per ostinazione mi sono messo a leggere il codice "assembler" generato dall'ide....
E meno male che eri un niubbo  smiley-yell smiley-yell

Tornando a noi, la versione dell'IDE non dovrebbe influenzare la cosa dato che da quel che so l'IDE di Arduino usa la stessa toolchain da un sacco di tempo.

PS:
io proverei a segnalare la cosa nella sezione internazionale per vedere se qualcun altro ha avuto il tuo stesso problema.
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9419
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il problema si è risolto come per magia.

Non è magia, è che nella distro Arduino c'è una vecchia release del compilatore avr-gcc che oltre ad avere vari limiti ha diversi bug, la toolchain Atmel è nettamente migliore e non ha gli stessi limiti, sopratutto per quanto riguarda l'ATmega2560.
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


E meno male che eri un niubbo  smiley-yell smiley-yell

Tornando a noi, la versione dell'IDE non dovrebbe influenzare la cosa dato che da quel che so l'IDE di Arduino usa la stessa toolchain da un sacco di tempo.

PS:
io proverei a segnalare la cosa nella sezione internazionale per vedere se qualcun altro ha avuto il tuo stesso problema.

smiley-red ... e va be ma basta leggere qua e la: non è esattamente farina del mio sacco... la documentazione alla fine non manca... casomai il problema è come trovarla in mezzo al fienile...

Quanto alla pubblicazione sul forum internazionale stavo pensando che se è un problema della 1.0.2 (a qualsiasi livello)  in qualche modo andrebbe segnalato per metterlo a posto nella prossima versione però io ragazzi non ho alba di come pormi in questo contesto... sono un newbe con 7 messaggi di cui il primo scritto mezza giornata fa e gesticolo un inglese maccheronico, sono timido, sono imbranato e non so se ci sono sezioni apposite per queste segnalazioni... quindi magari se qualcuno di voi volesse farsi avanti o quantomeno dirmi dove è il caso di riportare il problema mi farebbe un piacere grande.   


Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 328
Posts: 22733
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Potresti provare su "Installation & troubleshooting":
http://arduino.cc/forum/index.php/board,2.0.html

Sarebbe meglio che tu lo facessi tu perché se poi chiedono qualcosa, un altro che gli risponde?  smiley-wink
Logged


Pages: [1] 2   Go Up
Jump to: