SAMD21 velocità pin

Buongiorno.

Per eliminare i disturbi del modulo GSM, sul bus SPI, devo aggiungere dei 22pF
Però, se il MISO rimane squadrado, MOSI e SCK si arrotondano esageratamene.
Mi fa strano che il SAMD21 non riesca a pilotare 22pF a 12Mhz.

Nel dubbio che per un bug della libreria, stesse usando il pullup al posto di definire output i pin, ho provato a forzare i pin output ma la libreria SPI si disabilita.

Consigli ?

12MHz corrispondono a un periodo di 80ns; accettando un tempo di arrotondamento del 10% sono 8ns. Poiché, in prima approssimazione, VC=IT (supponendo una corrente costante, che in realtà non è):
I=VC/T=5*22p/8n=5*22/8000[A]=5*22000/8000[mA]=5*22/8 circa uguale a 5*2,7=13,5mA (22 è circa uguale a 24-10%).
In realtà la corrente diminuisce durante la carica, perciò occorre una corrente iniziale circa 4 volte superiore.
Secondo il datasheet:

a pag. 876 con 3,3V di alimentazione la corrente massima in uscita a livello basso va da 2,5 a 10mA (secondo lo stato di PORT.PINCFG.DRVSTR, che non ho indagato che cosa sia) e a livello alto da 2 a 7mA, perciò mi sembra proprio che non ce la possa fare.

Però a me adesso sta prendendo il 100%, non il 10%
Ho una sinusoide.
C'è anche la capacità dell'oscilloscopio, sarà 10 ? 20pf ?

Si, ma dai tuoi conti direi che è giusto,
Mi tocca scendere tipo a 1Mhz

Infatti servirebbero 13,5x4=54mA, mentre il D21 può dare 2...10mA, mediamente 10 volte di meno. :slight_smile:
La sonda x10 probabilmente aggiunge 10...15pF. Non hai usato una sonda x1, vero?...

Però il paragrafo 37.8.1 dice che con quel bit a uno lo pilota 20pf
Devo solo studiare se è un solo bit per tutte le porte e com'è adesso
Dice che non è leggibile per cui bo, come lo mette l'IDE ?

soda 10:1

Occhio che NON sei su MCU AVR, sei su ARM SAMD21, MCU ben più complessa ... le PIO sono una cosa e la SERCOM è un'altra ... :roll_eyes:

Guglielmo

22pf, 12Mhz
Ora provo a settare quel bit.

Dice che ci mette 15ns (dal 10% al 90%, suppongo), comunque il doppio degli 8ns che avevo accettato io, quindi 20%, che mi sembra proprio ciò che si vede sull'oscilloscopio. Forse per brevi impulsi riesce a fornire una corrente doppia rispetto a quella massima dichiarata. Considera anche che hai la capacità della sonda in parallelo, che non so se è 10x o 1x...

Si, te l'ho scritto, sonda 10:1 (Mai usata 1:1)
L'oscillo dice rise time 18nS

Come settare il bit ci sto litigando:
PORT->PINCFG.DRVSTR = 0x01;
'struct Port' has no member named 'PINCFG'

Ah, sì, scusa: sotto alla tabella. Non l'avevo notato.

Aiutoooo
Come lo scrivo quel bit ?

PORT.PINCFG->DRVSTR=0
request for member 'PINCFG' in '(Port*)1090536448', which is of pointer type 'Port*' (maybe you meant to use '->' ?)

PORT.PINCFG.DRVSTR=0
request for member 'PINCFG' in '(Port*)1090536448', which is of pointer type 'Port*' (maybe you meant to use '->' ?)

PORT->PINCFG.DRVSTR=0
'struct Port' has no member named 'PINCFG'

Trovato:
PORT->Group[PORTB].PINCFG[11].bit.DRVSTR = 1;

Che spettacolo, 4.7nS

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.