• Aucun résultat trouvé

Mesure de la p´eriode d’horloge du bus SPI.

N/A
N/A
Protected

Academic year: 2022

Partager "Mesure de la p´eriode d’horloge du bus SPI."

Copied!
3
0
0

Texte intégral

(1)

Mesure de la p´ eriode d’horloge du bus SPI.

E. Carry, J.-M Friedt, 11 mars 2020´

Connexion internet interdite, t´el´ephones portables interdits, communications interdites, r´eflexion autoris´ee.

Supports de cours `a 172.20.133.70

Nous nous proposons de g´en´erer un signal d’horloge pour cadencer le bus SPI et de v´erifier sa p´eriode par la mesure sur un timer.

Nous proposons trois fonctions .cqui fournissent chacune certaines fonctionnalit´es n´ecessaires `a un programme fonctionnel. En particulier,input capture.cstocke dans une variableresla valeur du compteur lors du d´eclenchement d’un ´ev´enement.

1. Identifier sur le sch´ema de l’Olimexino32U4 les broches sur lesquelles l’horloge SPI et l’entr´ee timer sont connect´ees. Quelles sont-elles ? brancher un cˆable entre ces deux broches. On notera que sur le connecteur UEXT, la broche connect´ee `a une empreinte carr´ee est la broche 1, et la nomenclature suit une ligne longue impaire et une ligne longue paire.

4.7k

100nF

100nF

DVCC

20pF

20pF

4.7k 4.7k

100nF

BH10R ATMEGA32U4-AU

1uF/10V

100nF 100nF AVCC

16.000MHz/SMD5x3.2/12pF

Close Close Close

3.3V_E

IRLML6402

1uF/10V 100k

10k 0R(Board_Mounted)

3.3V_E 3.3V_E 3.3V_E

5V_USB

DVCC

NA NA DVCC DVCC

Close R13

C4 C1

C8

C9

R12 R11

C10

UEXT

1 2

3 4

5 6

7 8

9 10

U1

INT6/AIN0/PE6 1 2 UVCC

3 D- 4 D+

5 UGND 6 UCAP 7 VBUS

PB0/SS/PCINT0 8 PB1/PCINT1/SCLK 9 PB2/PDI/PCINT2/MOSI 10 PB3/PDO/PCINT3/MISO 11

PB7/PCINT7/OC0A/OC1C/#RTS 12

#RESET 13

14 VCC

15 GND

XTAL2 16

XTAL1 17

PD0/OC0B/SCL/INT0 18

PD1/SDA/INT1 19

PD2/RXD1/INT2 20

PD3/TXD1/INT3 21

PD5/XCK1/CTS 22

23 GND 24 AVCC

PD4/ICP1/ADC8 25

PD6/T1/#OC4D/ADC9 26

PD7/T0/OC4D/ADC10 27

PB4/PCINT4/ADC11 28 PB5/PCINT5/OC1A/#OC4B/ADC12 29 PB6/PCINT6/OC1B/OC4B/ADC13 30 PC6/OC3A/#OC4A 31 PC7/ICP3/CLK0/OC4A 32

PE2/#HWB 33 34 VCC

35 GND

PF7/ADC7/TDI 36 PF6/ADC6/TDO 37 PF5/ADC5/TMSPF4/ADC4/TCKPF1/ADC1PF0/ADC0 38394041 AREF 42

43 GND 44 AVCC

C2 C3 C5

GND GND

Q1

21

R11_E 2

1

R12_E 2

1

R13_E FET3

C19 R20

R21 R19

R22 R23

2 1

FET3_E RESET AREF

#HWB

XTAL1 XTAL2 D+D-

D1(TXD) D1(TXD)

D3(SCL) D3(SCL)

D14(MISO)

D14(MISO)

D15(SCK)

D15(SCK)

D16(MOSI)

D16(MOSI)

D2(SDA) D2(SDA)

D0(RXD) D0(RXD)

TXLED

D7(LED1)

D17(RXLED)

D13(UEXT_#CS)

D13(UEXT_#CS) A0A1 A2A3 A4A5

D4

D5

D6

D9(LED2) D10D11 D12

D8(UEXT_PWR_E)

D8(UEXT_PWR_E)

UEXT

GS D

0R

2. Proposer un Makefile qui automatise la compilation et l’´edition de lien des programmes pour fournir un ex´ecutable fonctionnel. On s’interdira ´evidemment de fusionner les trois programmes en un unique code source mais conserverons la structure de compilation s´epar´ee. Flasher le microcontrˆoleur.

3. Observer `a l’oscilloscope la p´eriode du signal d’horloge de SPI : quelle est-elle. Est-elle en accord avec vos attentes `a la lecture des programmes fournis.

4. L’interruption input capture.c m´emorise le compteur au moment d’une transition sur la broche associ´ee.

Modifier input capture.c afin de m´emoriser les transitions cons´ecutives de l’horloge lors de l’´emission d’un octet sur bus SPI. Combien de mot m´emorisons nous ? sur combien de bits est stock´e chaque mot ?

5. Un compteur aura pu servir `a m´emoriser la case m´emoire contenant la derni`ere mesure : exporter cette variable versmain.c(comment faire ?) et tester cette variable pour afficher, dans la boucle infinie demain.c, les mesures obtenues par le timer.

6. D´emontrer l’affichage de ces mesures dans le logiciel ad´equat ex´ecut´e sur le PC. On pourra fournir le r´esultat sous la forme

1A6E 1A5E 1A4E 1A3E 1A2E 1A1E 1A0E 19FE 2963 2973 2983 2993 29A3 29B3 29C3 29D3 ...

7. Analyser la sortie que vous observez : est-elle coh´erente avec vos attentes ? Expliquez/justifiez.

8. La r´esolution de la mesure est m´ediocre. Comment l’am´eliorer ? D´emontrer.

9. Pourquoi cette m´ethode de mesure ne permet pas de d´etecter la d´erive de fr´equence du quartz caden¸cant le microcontrˆoleur ?

10. Comment modifier le montage pour mesurer la d´erive en fr´equence du quartz ?

(2)

1. Timer3 donc ICP3 est connect´e `a D13. SCK de SPI est sur D15 qui n’est accessible qu’au travers de la broche 9 de UEXT.

2. Le Makefile est au minimum de la forme TARGET=main

CPU=atmega32u4

CFLAGS=-mmcu=$(CPU) -Os -Wall -I../../include -I../VirtualSerial/ -I../lufa-LUFA-140928 \ -DF_USB=16000000UL -DF_CPU=16000000UL -Os -std=gnu99

all: $(TARGET).out

$(TARGET).out: $(TARGET).o spi.o input_capture.o

avr-gcc $(CFLAGS) -L../../../../../platforms/Atmega32/VirtualSerial -o $(TARGET).out \

$(TARGET).o spi.o input_capture.o -lVirtualSerial avr-objcopy -O ihex $(TARGET).out $(TARGET).hex

$(TARGET).o: $(TARGET).c

avr-gcc $(CFLAGS) -c $(TARGET).c spi.o: spi.c

avr-gcc $(CFLAGS) -c spi.c input_capture.o: input_capture.c avr-gcc $(CFLAGS) -c input_capture.c 3. Exemple de capture d’´ecran :

La p´eriode est 8 µs en accord avec l’horloge (16 MHz) divis´ee par 128.

4. Un octet transmis sur SPI induit 8 transitions d’horloge sur SPI, donc nous rempla¸consresparres[8]. Nous d´efinissons un indice qui indique quelle case doit ˆetre remplie. La solution est donc

volatile short res[8];

volatile int indice;

ISR(TIMER3_CAPT_vect) {if (indice<8)

{res[indice] = ICR3; indice++;}

}

Chaque mot du timer 3 est stock´e sur 16 bits, en accord avec la taille de l’accumulateur du compteur.

5. Dansmain.c: extern int indice;

extern short res[8];

void transmit_data(uint8_t data) {char buffer[2];

buffer[0]=data;buffer[1]=0;

fputs(buffer, &USBSerialStream);

}

(3)

void write_char(unsigned char c)

{if ((c>>4)>9) transmit_data((c>>4)-10+’A’); else transmit_data((c>>4)+’0’);

if ((c&0x0f)>9) transmit_data((c&0x0f)-10+’A’); else transmit_data((c&0x0f)+’0’);

}

void write_short(unsigned short s) {write_char(s>>8);

write_char(s&0xff);

}

int main(void) { int k;

indice=0;

[...]

USBCON=0;

while(1)

{ _delay_ms(1000);

sd_raw_send_byte(0x00); // emettre une trame SPI if (indice==8)

{for (k=0;k<8;k++)

{write_short(res[k]); transmit_data(0x20); } transmit_data(0x0A); transmit_data(0x0D);

indice=0;

}

CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface);

CDC_Device_USBTask(&VirtualSerial_CDC_Interface);

USB_USBTask();

} }

Nous avons donc export´eindiceen pr´efixant sa d´eclaration deextern.

6. Le r´esultat est, sousminicom:

1A6E 1A5E 1A4E 1A3E 1A2E 1A1E 1A0E 19FE 2963 2973 2983 2993 29A3 29B3 29C3 29D3 6D3A 6D4A 6D5A 6D6A 6D7A 6D8A 6D9A 6DAA 48B5 48A5 4895 4885 4875 4865 4855 4845 04E1 04D1 04C1 04B1 04A1 0491 0481 0471 3EF6 3F06 3F16 3F26 3F36 3F46 3F56 3F66 772C 771C 770C 76FC 76EC 76DC 76CC 76BC

7. Les valeurs s’incr´ementent le long de chaque ligne de 0x10, soit 16. Il s’agit bien du ratio entre le pre-scale caden¸cant SPI (/128) et le pre-scaler caden¸cant le timer (/8).

8. Am´elioration de la r´esolution en r´eduisant le pre-scaler de 8 `a 1 sur le timer. Dans ce cas 55BE 553E 54BE 543E 53BE 533E 52BE 523E

2AC6 2A46 29C6 2946 28C6 2846 27C6 2746 000C 0074 00F4 0174 01F4 0274 02F4 0374 2AAC 2B2C 2BAC 2C2C 2CAC 2D2C 2DAC 2E2C

et cette fois le timer s’incr´emente de 128 entre deux mesures, soit 0x80. En effet (premi`ere ligne) 0x30+0x80=0xB0 (puisque 3+8=11=0xb) qui est bien la valeur observ´ee.

9. Le mˆeme quartz cadence les deux p´eriph´eriques dont la contribution de sa d´erive est ´elimin´ee dans cette mesure relative.

10. D´eclencherinput capturepar une source externe stables de temps, e.g. 1-PPS de GPS.

Références

Documents relatifs

Elles structurent les relations sociales depuis plusieurs siècles et continuent à peser dans le marché du travail, dans la santé où les femmes noires sont encore trop

Pour la pre- mière , il suffira d'obtenir les intersections successives des droites normales aux génératrices primitives, chacune de ces normales passant par le point d'intersection

Dans certains pays, l’économie souterraine inclut une économie informelle qui désigne l’ensemble des unités de production de petite taille mobilisant peu de capital et une

On obtient T = 2.21 ± 0.02 s (Pour les incertitudes, on ne garde habituellement qu’un seul chiffre significatif en arrondissant vers le haut... 3 – P´ eriode d’une oscillation

Dans cette mamip, le pendule compos´ e est constitu´ e d’une barre uniforme.. Afin de r´ eduire les incertitudes sur la p´ eriode, nous mesurons ` a nouveau

La taille de l ’ intervalle entre les limites de concordance est importante, mais la proportion de mesures supérieures (ou inférieures) à une limite cliniquement pertinente l ’

Soit H un espace vectoriel de fonctions r´ eelles born´ ees sur E, contenant les constantes et tel que, si (f n ) est une suite croissante d’´ el´ ements de H dont la limite f

Une variable est associé à symbole (un nom qui sert d'identificateur) qui renvoie à une position de la mémoire (une adresse) dont le contenu peut prendre successivement