IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

Montage de sa propre clé USB


Sujet :

Embarqué

  1. #81
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Citation Envoyé par danieldou Voir le message
    ça correspond donc au schéma que je t'avais envoyé, ça fonctionnera avec un quartz de 20MHz, je vais donc en commander un.
    Pas si sur ! Tu te souviens lorsque je t'ai dit que tout les systèmes de registres de l'oscillateur, c'est à toi de le régler ? Hé bien ces paramètres là se règlent dans MPLAB.
    Dans le MPLAB que j'ai connu tu avais 2 manières de le faire :
    - Soit tu configurais les options de MPLAB pour qu'il fasse tout dans ton dos.
    - Soit tu mettais de directves #pragma dans le code pour dire comment tu voulais régler l'horloge.

    Sauf que j'ai l'impression que le gars a donné son code mais a oublié de donner le réglage de MPLAB !!!! C'est plutôt con !
    Je ne suis pas capable de te dire quelle fréquence de quartz est utilisée là dedans ? A moins que schéma du montage que tu as donné plus haut correspond aux sources de sourceforge ?
    En fait si je pourrai mas il faudrait que je mette mon nez dans le .hex et fouiller dedans (mais ça serait beaucoup de boulot)


    (ps : les registres d'horloges sont dans une zone bien spéciale du micro et pour y accéder c'est différent des autres registres genre PORTA ou TRISA etc...)
    Nom : Capture du 2015-09-26 22:23:12.png
Affichages : 1071
Taille : 82,8 Ko
    Pour t'expliquer rapidement, Microchip, pour des raisons de sécurité et pour éviter le reverse engineering a décidé de placer quelques registres dans un endroit particulier de la mémoire du micro.
    En rouge j'ai entouré les registres qui se configurent non pas par soft (même si il y a une technique assez complexe pour le faire quand même) mais aussi les bits de protections anti-lectures car nous en avons parlé lors de nos tous premiers messages. Si les bits CP sont activés alors personne ne pourra extraire ton programme du micro. Au pire il pourra être effacé ou écrasé par un autre mais c'est tout !


    Citation Envoyé par danieldou Voir le message
    Je vais essayer d'avancer avec ce que tu m'a donné, je vais surement bientôt passer au montage électronique (comme ça je pourrais directement tester le code que j'ai trouvé sur SourceForge en live ^^) et vu que c'est assez long et complexe, je vais d'abord me concentrer sur les connaissances requises pour mener a bien ce projet, puis j'en ferais d'autres pour apprendre le reste

    Je te tiens au courant si j'ai besoin d'aide (même si j'en ai pas besoin d'ailleurs, en tant qu'aide essentielle a mon projet, je suis sûr que tu sera intéresse de savoir comment j'aurais réussi )
    Ça marche,
    A bientôt.

    ps : pour adapter le code de sourceforge à ta démoboard il te faudra ajouter des choses de ce genre :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
    ...
    /* Oscillateur interne, Pas de division pour le CPU, PLL x3 (car je choisie plus bas 16MHz en interne et 16 x 3 = 48Mhz pour être USB full speed), PLL activé */ 
    #pragma config FOSC=INTOSCIO, CPUDIV=NOCLKDIV, PLLSEL=PLL3X, CFGPLLEN=ON
     
    void main(void){
    	OSCCON = 0x70; //HFINTOSC = 16MHz (ici je configure le registre pour prendre 16MHz) 
     
    	while((OSCCON2 & 0x02) == 0)
    	;	//attendre la stabilisation de la PLL
    ...
    ...
    Ça devrait même ressembler très fortement à ça !
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  2. #82
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 273
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Sauf que j'ai l'impression que le gars a donné son code mais a oublié de donner le réglage de MPLAB !!!! C'est plutôt con !
    Je ne suis pas capable de te dire quelle fréquence de quartz est utilisée là dedans ? A moins que schéma du montage que tu as donné plus haut correspond aux sources de sourceforge ?
    Et bien le schéma de montage ne provient pas de la même source donc à priori non.
    Mais je me suis posé une question toute bête : même s'il n'a pas donné les configurations de l'oscillateur, on peut pas le faire nous même avec #pragma ? ou est le problème ?
    (son code est uniquement utilisable avec une configuration de l'oscillateur précise ou toute la programmation de MSD peut tourner sur n'importe quelle configuration du moment qu'elle est correcte ?)

    Citation Envoyé par Vincent PETIT Voir le message
    En fait si je pourrai mas il faudrait que je mette mon nez dans le .hex et fouiller dedans (mais ça serait beaucoup de boulot)
    Par simple curiosité : en quoi ça consisterais ?

    Citation Envoyé par Vincent PETIT Voir le message
    ps : pour adapter le code de sourceforge à ta démoboard il te faudra ajouter des choses de ce genre
    Ça devrait même ressembler très fortement à ça !
    Merci pour l'info

    Vu qu'avec la source de SourceForge c'est pas non plus tout simple, tu me conseille quoi ? continuer à examiner le code de Microchip pour l'alleger : des fonctions HID et CDC inutiles; des configuration prévues pour d'autres matériels etc...
    Ou partir sur celui de SourceForge ?
    (qu'est ce que tu pense de ça ? http://users.wfu.edu/rollins/pic.html dans les liens contenant 18F)

    Merci

  3. #83
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 187
    Points : 11 568
    Points
    11 568
    Par défaut
    C'est carrément dommage que le gars ait oublié de le principal ! C'est comme ci j'invitais tout ce qui veule, à manger un barbecue chez moi et quand tout le monde est là ! Hé bien pas de charbon de bois

    Oui, avec les directives pragma tu peux refaire la bonne configuration de l'oscillateur. C'est ce que j'ai fait dans mon exemple en partant du principe ou tu n'as pas de quartz.

    Par contre porter du code d'un micro sur un autre et faisable mais il faut s'assurer que les registres sont compatibles. Si ton micro à besoin d'un registre que le 18F4550 n'a pas, évidemment ça ne marchera pas.

    En tout cas c'est faisable en comparant les datasheet et en analysant le code pour s'assurer de la compatibilité.

    Pour le .hex, il contient tout le programme + la configuration. Il est organisait de cette manière [adresse][valeur hexa] donc à l'adresse des registre de configuration on devrait retrouver ce que le gars a réglé.

    Par où démarrer ?
    Si tu parts du programme de sourceforge alors il faut bien le décortiquer et regarder tous les registres utilisés puis regarder si ces registres existent dans ton micro et aussi voir si ils ont la même fonction.
    Si tu parts des sources de Microchip, déjà tu sais qu'ils fonctionnent donc pas de travail de comparaison de datasheet qui peut être long. L'inconvénient c'est que ce code est prévu pour d'autre micro et il faut commencer par virer tout ce qui concerne les micro dont tu n'as que faire. Pour moi c'est plus simple comme ça.

    Pour info: tu ne m'as jamais donné le fichier main.c de l'exemple. Si tu remontes dans tes messages à chaque fois il me semble que tu postais usb_descriptor. A mon avis c'est que tu ne l'as simplement pas trouvé et que tu as posté les .c et .h des bibliothèques (celles que je vois dans ta copie d'écran de ton navigateur)

    Tu n'as pas trouver les sources de l'exemple qui marche bien dans le répertoire de Microchip ? Je ne parle pas des bibliothèques mais du vrai main.c qui appel les bibliothèques.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  4. #84
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 273
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    C'est carrément dommage que le gars ait oublié de le principal ! C'est comme ci j'invitais tout ce qui veule, à manger un barbecue chez moi et quand tout le monde est là ! Hé bien pas de charbon de bois
    Oui, avec les directives pragma tu peux refaire la bonne configuration de l'oscillateur. C'est ce que j'ai fait dans mon exemple en partant du principe ou tu n'as pas de quartz.
    Et bien alors à priori le fait qu'il n'ait pas donné la configuration n'est pas si problématique que ça puisque de toutes façons on peut refaire notre propre config avec #pragma ^^

    Citation Envoyé par Vincent PETIT Voir le message
    Par contre porter du code d'un micro sur un autre et faisable mais il faut s'assurer que les registres sont compatibles. Si ton micro à besoin d'un registre que le 18F4550 n'a pas, évidemment ça ne marchera pas.
    De toutes façons j'ai acheté un PIC18F4550 et un PIC18F45K50 donc je n'aurais même pas à m'occuper de ce genre de compatibilité, si j'arrive à faire fonctionner le code de SourceForge j'utiliserais le PIC18F4550 et si c'est celui de Microchip que j'arrive à faire fonctionner j'utiliserais le PIC18F45K50.

    Citation Envoyé par Vincent PETIT Voir le message
    Par où démarrer ?
    Si tu parts du programme de sourceforge alors il faut bien le décortiquer et regarder tous les registres utilisés puis regarder si ces registres existent dans ton micro et aussi voir si ils ont la même fonction.
    Si tu parts des sources de Microchip, déjà tu sais qu'ils fonctionnent donc pas de travail de comparaison de datasheet qui peut être long. L'inconvénient c'est que ce code est prévu pour d'autre micro et il faut commencer par virer tout ce qui concerne les micro dont tu n'as que faire. Pour moi c'est plus simple comme ça.
    Mais si j'utilise le même PIC que celui du code de SourceForge j'ai donc pas besoin d'analyser les registres afin de savoir s'il existent dans mon micro (évident vu que j'utilise le même). Donc en sachant ça, tu pense tout de même que partir du code de Microchip est plus simple ?

    Citation Envoyé par Vincent PETIT Voir le message
    Pour info: tu ne m'as jamais donné le fichier main.c de l'exemple. Si tu remontes dans tes messages à chaque fois il me semble que tu postais usb_descriptor. A mon avis c'est que tu ne l'as simplement pas trouvé et que tu as posté les .c et .h des bibliothèques (celles que je vois dans ta copie d'écran de ton navigateur)
    Tu n'as pas trouver les sources de l'exemple qui marche bien dans le répertoire de Microchip ? Je ne parle pas des bibliothèques mais du vrai main.c qui appel les bibliothèques.
    Bizarre je pensais te l'avoir bien envoyé la deuxième fois...
    J'ai pourtant un dossier avec tout les fichiers du Firmare.

    C'est bien le main.c ça non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
    689
    690
    691
    692
    693
    694
    695
    696
    697
    698
    699
    700
    701
    702
    703
    704
    705
    706
    707
    708
    709
    710
    711
    712
    713
    714
    715
    716
    717
    718
    719
    720
    721
    722
    723
    724
    725
    726
    727
    728
    729
    730
    731
    732
    733
    734
    735
    736
    737
    738
    739
    740
    741
    742
    743
    744
    745
    746
    747
    748
    749
    750
    751
    752
    753
    754
    755
    756
    757
    758
    759
    760
    761
    762
    763
    764
    765
    766
    767
    768
    769
    770
    771
    772
    773
    774
    775
    776
    777
    778
    779
    780
    781
    782
    783
    784
    785
    786
    787
    788
    789
    790
    791
    792
    793
    794
    795
    796
    797
    798
    799
    800
    801
    802
    803
    804
    805
    806
    807
    808
    809
    810
    811
    812
    813
    814
    815
    816
    817
    818
    819
    820
    821
    822
    823
    824
    825
    826
    827
    828
    829
    830
    831
    832
    833
    834
    835
    836
    837
    838
    839
    840
    841
    842
    843
    844
    845
    846
    847
    848
    849
    850
    851
    852
    853
    854
    855
    856
    857
    858
    859
    860
    861
    862
    863
    864
    865
    866
    867
    868
    869
    870
    871
    872
    873
    874
    875
    876
    877
    878
    879
    880
    881
    882
    883
    884
    885
    886
    887
    888
    889
    890
    891
    892
    893
    894
    895
    896
    897
    898
    899
    900
    901
    902
    903
    904
    905
    906
    907
    908
    909
    910
    911
    912
    913
    914
    915
    916
    917
    918
    919
    920
    921
    922
    923
    924
    925
    926
    927
    928
    929
    930
    931
    932
    933
    934
    935
    936
    937
    938
    939
    940
    941
    942
    943
    944
    945
    946
    947
    948
    949
    950
    951
    /********************************************************************
     FileName:		main.c
     Dependencies:	See INCLUDES section
     Processor:		PIC18 or PIC24 USB Microcontrollers
     Hardware:		The code is natively intended to be used on the following
     				hardware platforms: PICDEM™ FS USB Demo Board, 
     				PIC18F87J50 FS USB Plug-In Module, or
     				Explorer 16 + PIC24 USB PIM.  The firmware may be
     				modified for use on other USB platforms by editing the
     				HardwareProfile.h file.
     Complier:  	Microchip C18 (for PIC18) or C30 (for PIC24)
     Company:		Microchip Technology, Inc.
    
     Software License Agreement:
    
     The software supplied herewith by Microchip Technology Incorporated
     (the “Company”) for its PIC® Microcontroller is intended and
     supplied to you, the Company’s customer, for use solely and
     exclusively on Microchip PIC Microcontroller products. The
     software is owned by the Company and/or its supplier, and is
     protected under applicable copyright laws. All rights are reserved.
     Any use in violation of the foregoing restrictions may subject the
     user to criminal sanctions under applicable laws, as well as to
     civil liability for the breach of the terms and conditions of this
     license.
    
     THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES,
     WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
     TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
     PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
     IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
     CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
    
    ********************************************************************
     File Description:
    
     Change History:
      Rev   Date         Description
      1.0   11/19/2004   Initial release
      2.1   02/26/2007   Updated for simplicity and to use common
                         coding style
    ********************************************************************/
    
    /** INCLUDES *******************************************************/
    
    #include "Compiler.h"
    #include "GenericTypeDefs.h"                        // Required
    #include "usb_config.h"
    #include "USB/usb_device.h"                         // Required
    #include "USB/USB.h"
    #include "HardwareProfile.h"
    #include "MDD File System\SD-SPI.h"
    
    #include "./USB/usb_function_msd.h"
    #include "./USB/usb_function_hid.h"
    
    /** CONFIGURATION **************************************************/
    #if defined(PICDEM_FS_USB)      // Configuration bits for PICDEM FS USB Demo Board (based on PIC18F4550)
            #pragma config PLLDIV   = 5         // (20 MHz crystal on PICDEM FS USB board)
            #pragma config CPUDIV   = OSC1_PLL2   
            #pragma config USBDIV   = 2         // Clock source from 96MHz PLL/2
            #pragma config FOSC     = HSPLL_HS
            #pragma config FCMEN    = OFF
            #pragma config IESO     = OFF
            #pragma config PWRT     = OFF
            #pragma config BOR      = ON
            #pragma config BORV     = 3
            #pragma config VREGEN   = ON      //USB Voltage Regulator
            #pragma config WDT      = OFF
            #pragma config WDTPS    = 32768
            #pragma config MCLRE    = ON
            #pragma config LPT1OSC  = OFF
            #pragma config PBADEN   = OFF
    //      #pragma config CCP2MX   = ON
            #pragma config STVREN   = ON
            #pragma config LVP      = OFF
    //      #pragma config ICPRT    = OFF       // Dedicated In-Circuit Debug/Programming
            #pragma config XINST    = OFF       // Extended Instruction Set
            #pragma config CP0      = OFF
            #pragma config CP1      = OFF
    //      #pragma config CP2      = OFF
    //      #pragma config CP3      = OFF
            #pragma config CPB      = OFF
    //      #pragma config CPD      = OFF
            #pragma config WRT0     = OFF
            #pragma config WRT1     = OFF
    //      #pragma config WRT2     = OFF
    //      #pragma config WRT3     = OFF
            #pragma config WRTB     = OFF       // Boot Block Write Protection
            #pragma config WRTC     = OFF
    //      #pragma config WRTD     = OFF
            #pragma config EBTR0    = OFF
            #pragma config EBTR1    = OFF
    //      #pragma config EBTR2    = OFF
    //      #pragma config EBTR3    = OFF
            #pragma config EBTRB    = OFF
    
    
    #elif defined(PIC18F87J50_PIM)				// Configuration bits for PIC18F87J50 FS USB Plug-In Module board
            #pragma config XINST    = OFF   	// Extended instruction set
            #pragma config STVREN   = ON      	// Stack overflow reset
            #pragma config PLLDIV   = 3         // (12 MHz crystal used on this board)
            #pragma config WDTEN    = OFF      	// Watch Dog Timer (WDT)
            #pragma config CP0      = OFF      	// Code protect
            #pragma config CPUDIV   = OSC1      // OSC1 = divide by 1 mode
            #pragma config IESO     = OFF      	// Internal External (clock) Switchover
            #pragma config FCMEN    = OFF      	// Fail Safe Clock Monitor
            #pragma config FOSC     = HSPLL     // Firmware must also set OSCTUNE<PLLEN> to start PLL!
            #pragma config WDTPS    = 32768
    //      #pragma config WAIT     = OFF      	// Commented choices are
    //      #pragma config BW       = 16      	// only available on the
    //      #pragma config MODE     = MM      	// 80 pin devices in the 
    //      #pragma config EASHFT   = OFF      	// family.
            #pragma config MSSPMSK  = MSK5
    //      #pragma config PMPMX    = DEFAULT
    //      #pragma config ECCPMX   = DEFAULT
            #pragma config CCP2MX   = DEFAULT    
        
        
    
    #elif defined(EXPLORER_16)
        #ifdef __PIC24FJ256GB110__ //Defined by MPLAB when using 24FJ256GB110 device
            #define PLL_96MHZ_OFF   0xFFFF
            #define PLL_96MHZ_ON    0xF7FF
            _CONFIG2(FNOSC_PRIPLL & POSCMOD_HS & PLL_96MHZ_ON & PLLDIV_DIV2) // Primary HS OSC with PLL, USBPLL /2
            _CONFIG1(JTAGEN_OFF & FWDTEN_OFF & ICS_PGx2)   // JTAG off, watchdog timer off
        #else
            #error No hardware board defined, see "HardwareProfile.h" and __FILE__
        #endif
    #else
        #error No hardware board defined, see "HardwareProfile.h" and __FILE__
    #endif
    
    
    
    /** VARIABLES ******************************************************/
    #pragma udata
    
    #pragma udata USB_VARS
    unsigned char ReceivedDataBuffer[64];
    unsigned char ToSendDataBuffer[64];
    #pragma udata
    
    USB_HANDLE USBOutHandle = 0;
    USB_HANDLE USBInHandle = 0;
    BOOL blinkStatusValid = TRUE;
    BYTE old_sw2,old_sw3;
    
    //The LUN variable definition is critical to the MSD function driver.  This
    //  array is a structure of function pointers that are the functions that 
    //  will take care of each of the physical media.  For each additional LUN
    //  that is added to the system, an entry into this array needs to be added
    //  so that the stack can know where to find the physical layer functions.
    //  In this example the media initialization function is named 
    //  "MediaInitialize", the read capacity function is named "ReadCapacity",
    //  etc.  
    LUN_FUNCTIONS LUN[MAX_LUN + 1] = 
    {
        {
            &MDD_SDSPI_MediaInitialize,
            &MDD_SDSPI_ReadCapacity,
            &MDD_SDSPI_ReadSectorSize,
            &MDD_SDSPI_MediaDetect,
            &MDD_SDSPI_SectorRead,
            &MDD_SDSPI_WriteProtectState,
            &MDD_SDSPI_SectorWrite
        }
    };
    
    /* Standard Response to INQUIRY command stored in ROM 	*/
    const ROM InquiryResponse inq_resp = {
    	0x00,		// peripheral device is connected, direct access block device
    	0x80,           // removable
    	0x04,	 	// version = 00=> does not conform to any standard, 4=> SPC-2
    	0x02,		// response is in format specified by SPC-2
    	0x20,		// n-4 = 36-4=32= 0x20
    	0x00,		// sccs etc.
    	0x00,		// bque=1 and cmdque=0,indicates simple queueing 00 is obsolete,
    			// but as in case of other device, we are just using 00
    	0x00,		// 00 obsolete, 0x80 for basic task queueing
    	{'M','i','c','r','o','c','h','p'
        },
    	// this is the T10 assigned Vendor ID
    	{'M','a','s','s',' ','S','t','o','r','a','g','e',' ',' ',' ',' '
        },
    	{'0','0','0','1'
        }
    };
    
    /** PRIVATE PROTOTYPES *********************************************/
    static void InitializeSystem(void);
    void USBDeviceTasks(void);
    void ProcessIO(void);
    void YourHighPriorityISRCode(void);
    void YourLowPriorityISRCode(void);
    void UserInit(void);
    
    /** VECTOR REMAPPING ***********************************************/
    #if defined(__18CXX)
    	//On PIC18 devices, addresses 0x00, 0x08, and 0x18 are used for
    	//the reset, high priority interrupt, and low priority interrupt
    	//vectors.  However, the current Microchip USB bootloader 
    	//examples are intended to occupy addresses 0x00-0x7FF or
    	//0x00-0xFFF depending on which bootloader is used.  Therefore,
    	//the bootloader code remaps these vectors to new locations
    	//as indicated below.  This remapping is only necessary if you
    	//wish to program the hex file generated from this project with
    	//the USB bootloader.  If no bootloader is used, edit the
    	//usb_config.h file and comment out the following defines:
    	//#define PROGRAMMABLE_WITH_USB_HID_BOOTLOADER
    	//#define PROGRAMMABLE_WITH_USB_LEGACY_CUSTOM_CLASS_BOOTLOADER
    	
    	#if defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)
    		#define REMAPPED_RESET_VECTOR_ADDRESS			0x1000
    		#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS	0x1008
    		#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS	0x1018
    	#elif defined(PROGRAMMABLE_WITH_USB_MCHPUSB_BOOTLOADER)	
    		#define REMAPPED_RESET_VECTOR_ADDRESS			0x800
    		#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS	0x808
    		#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS	0x818
    	#else	
    		#define REMAPPED_RESET_VECTOR_ADDRESS			0x00
    		#define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS	0x08
    		#define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS	0x18
    	#endif
    	
    	#if defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)||defined(PROGRAMMABLE_WITH_USB_MCHPUSB_BOOTLOADER)
    	extern void _startup (void);        // See c018i.c in your C18 compiler dir
    	#pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS
    	void _reset (void)
    	{
    	    _asm goto _startup _endasm
    	}
    	#endif
    	#pragma code REMAPPED_HIGH_INTERRUPT_VECTOR = REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS
    	void Remapped_High_ISR (void)
    	{
    	     _asm goto YourHighPriorityISRCode _endasm
    	}
    	#pragma code REMAPPED_LOW_INTERRUPT_VECTOR = REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS
    	void Remapped_Low_ISR (void)
    	{
    	     _asm goto YourLowPriorityISRCode _endasm
    	}
    	
    	#if defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)||defined(PROGRAMMABLE_WITH_USB_MCHPUSB_BOOTLOADER)
    	//Note: If this project is built while one of the bootloaders has
    	//been defined, but then the output hex file is not programmed with
    	//the bootloader, addresses 0x08 and 0x18 would end up programmed with 0xFFFF.
    	//As a result, if an actual interrupt was enabled and occured, the PC would jump
    	//to 0x08 (or 0x18) and would begin executing "0xFFFF" (unprogrammed space).  This
    	//executes as nop instructions, but the PC would eventually reach the REMAPPED_RESET_VECTOR_ADDRESS
    	//(0x1000 or 0x800, depending upon bootloader), and would execute the "goto _startup".  This
    	//would effective reset the application.
    	
    	//To fix this situation, we should always deliberately place a 
    	//"goto REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS" at address 0x08, and a
    	//"goto REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS" at address 0x18.  When the output
    	//hex file of this project is programmed with the bootloader, these sections do not
    	//get bootloaded (as they overlap the bootloader space).  If the output hex file is not
    	//programmed using the bootloader, then the below goto instructions do get programmed,
    	//and the hex file still works like normal.  The below section is only required to fix this
    	//scenario.
    	#pragma code HIGH_INTERRUPT_VECTOR = 0x08
    	void High_ISR (void)
    	{
    	     _asm goto REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS _endasm
    	}
    	#pragma code LOW_INTERRUPT_VECTOR = 0x18
    	void Low_ISR (void)
    	{
    	     _asm goto REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS _endasm
    	}
    	#endif	//end of "#if defined(PROGRAMMABLE_WITH_USB_HID_BOOTLOADER)||defined(PROGRAMMABLE_WITH_USB_LEGACY_CUSTOM_CLASS_BOOTLOADER)"
    
    	#pragma code
    	
    	
    	//These are your actual interrupt handling routines.
    	#pragma interrupt YourHighPriorityISRCode
    	void YourHighPriorityISRCode()
    	{
    		//Check which interrupt flag caused the interrupt.
    		//Service the interrupt
    		//Clear the interrupt flag
    		//Etc.
    	
    	}	//This return will be a "retfie fast", since this is in a #pragma interrupt section 
    	#pragma interruptlow YourLowPriorityISRCode
    	void YourLowPriorityISRCode()
    	{
    		//Check which interrupt flag caused the interrupt.
    		//Service the interrupt
    		//Clear the interrupt flag
    		//Etc.
    	
    	}	//This return will be a "retfie", since this is in a #pragma interruptlow section 
    
    #endif //of "#if defined(__18CXX)"
    
    
    
    
    /** DECLARATIONS ***************************************************/
    #pragma code
    
    /********************************************************************
     * Function:        void main(void)
     *
     * PreCondition:    None
     *
     * Input:           None
     *
     * Output:          None
     *
     * Side Effects:    None
     *
     * Overview:        Main program entry point.
     *
     * Note:            None
     *******************************************************************/
    #if defined(__18CXX)
    void main(void)
    #else
    int main(void)
    #endif
    {   
        InitializeSystem();
        UserInit();
    
        while(1)
        {
    		// Check bus status and service USB interrupts.
            USBDeviceTasks(); // Interrupt or polling method.  If using polling, must call
            				  // this function periodically.  This function will take care
            				  // of processing and responding to SETUP transactions 
            				  // (such as during the enumeration process when you first
            				  // plug in).  USB hosts require that USB devices should accept
            				  // and process SETUP packets in a timely fashion.  Therefore,
            				  // when using polling, this function should be called 
            				  // frequently (such as once about every 100 microseconds) at any
            				  // time that a SETUP packet might reasonably be expected to
            				  // be sent by the host to your device.  In most cases, the
            				  // USBDeviceTasks() function does not take very long to
            				  // execute (~50 instruction cycles) before it returns.
        				  
    
    		// Application-specific tasks.
    		// Application related code may be added here, or in the ProcessIO() function.
            ProcessIO();        
        }//end while
    }//end main
    
    
    /********************************************************************
     * Function:        static void InitializeSystem(void)
     *
     * PreCondition:    None
     *
     * Input:           None
     *
     * Output:          None
     *
     * Side Effects:    None
     *
     * Overview:        InitializeSystem is a centralize initialization
     *                  routine. All required USB initialization routines
     *                  are called from here.
     *
     *                  User application initialization routine should
     *                  also be called from here.                  
     *
     * Note:            None
     *******************************************************************/
    static void InitializeSystem(void)
    {
        #if (defined(__18CXX) & !defined(PIC18F87J50_PIM))
            ADCON1 |= 0x0F;                 // Default all pins to digital
        #elif defined(__C30__)
            AD1PCFGL = 0xFFFF;
        #endif
    
        #if defined(PIC18F87J50_PIM)
    	//On the PIC18F87J50 Family of USB microcontrollers, the PLL will not power up and be enabled
    	//by default, even if a PLL enabled oscillator configuration is selected (such as HS+PLL).
    	//This allows the device to power up at a lower initial operating frequency, which can be
    	//advantageous when powered from a source which is not gauranteed to be adequate for 48MHz
    	//operation.  On these devices, user firmware needs to manually set the OSCTUNE<PLLEN> bit to
    	//power up the PLL.
        {
            unsigned int pll_startup_counter = 600;
            OSCTUNEbits.PLLEN = 1;  //Enable the PLL and wait 2+ms until the PLL locks before enabling USB module
            while(pll_startup_counter--);
        }
        //Device switches over automatically to PLL output after PLL is locked and ready.
    
    	//Configure all I/O pins to use digital input buffers.  The PIC18F87J50 Family devices
    	//use the ANCONx registers to control this, which is different from other devices which
    	//use the ADCON1 register for this purpose.
        WDTCONbits.ADSHR = 1;			// Select alternate SFR location to access ANCONx registers
        ANCON0 = 0xFF;                  // Default all pins to digital
        ANCON1 = 0xFF;                  // Default all pins to digital
        WDTCONbits.ADSHR = 0;			// Select normal SFR locations
    
        #endif
        
    //	The USB specifications require that USB peripheral devices must never source
    //	current onto the Vbus pin.  Additionally, USB peripherals should not source
    //	current on D+ or D- when the host/hub is not actively powering the Vbus line.
    //	When designing a self powered (as opposed to bus powered) USB peripheral
    //	device, the firmware should make sure not to turn on the USB module and D+
    //	or D- pull up resistor unless Vbus is actively powered.  Therefore, the
    //	firmware needs some means to detect when Vbus is being powered by the host.
    //	A 5V tolerant I/O pin can be connected to Vbus (through a resistor), and
    // 	can be used to detect when Vbus is high (host actively powering), or low
    //	(host is shut down or otherwise not supplying power).  The USB firmware
    // 	can then periodically poll this I/O pin to know when it is okay to turn on
    //	the USB module/D+/D- pull up resistor.  When designing a purely bus powered
    //	peripheral device, it is not possible to source current on D+ or D- when the
    //	host is not actively providing power on Vbus. Therefore, implementing this
    //	bus sense feature is optional.  This firmware can be made to use this bus
    //	sense feature by making sure "USE_USB_BUS_SENSE_IO" has been defined in the
    //	HardwareProfile.h file.    
        #if defined(USE_USB_BUS_SENSE_IO)
        tris_usb_bus_sense = INPUT_PIN; // See HardwareProfile.h
        #endif
        
    //	If the host PC sends a GetStatus (device) request, the firmware must respond
    //	and let the host know if the USB peripheral device is currently bus powered
    //	or self powered.  See chapter 9 in the official USB specifications for details
    //	regarding this request.  If the peripheral device is capable of being both
    //	self and bus powered, it should not return a hard coded value for this request.
    //	Instead, firmware should check if it is currently self or bus powered, and
    //	respond accordingly.  If the hardware has been configured like demonstrated
    //	on the PICDEM FS USB Demo Board, an I/O pin can be polled to determine the
    //	currently selected power source.  On the PICDEM FS USB Demo Board, "RA2" 
    //	is used for	this purpose.  If using this feature, make sure "USE_SELF_POWER_SENSE_IO"
    //	has been defined in HardwareProfile.h, and that an appropriate I/O pin has been mapped
    //	to it in HardwareProfile.h.
        #if defined(USE_SELF_POWER_SENSE_IO)
        tris_self_power = INPUT_PIN;	// See HardwareProfile.h
        #endif
        
        USBDeviceInit();	//usb_device.c.  Initializes USB module SFRs and firmware
        					//variables to known states.
    
        #if defined(PIC24FJ256GB110_PIM)
        //Initialize the SPI
        RPINR20bits.SDI1R = 23;
        RPOR7bits.RP15R = 7;
        RPOR0bits.RP0R = 8;    
    
        //enable a pull-up for the card detect, just in case the SD-Card isn't attached
        //  then lets have a pull-up to make sure we don't think it is there.
        CNPU5bits.CN68PUE = 1; 
    
        #endif
    
        MDD_SDSPI_InitIO();
    
    
    }//end InitializeSystem
    
    /******************************************************************************
     * Function:        void UserInit(void)
     *
     * PreCondition:    None
     *
     * Input:           None
     *
     * Output:          None
     *
     * Side Effects:    None
     *
     * Overview:        This routine should take care of all of the demo code
     *                  initialization that is required.
     *
     * Note:            
     *
     *****************************************************************************/
    void UserInit(void)
    {
        //Initialize all of the LED pins
        mInitAllLEDs();
        
        //Initialize all of the push buttons
        mInitAllSwitches();
        old_sw2 = sw2;
        old_sw3 = sw3;
        
        //initialize the variable holding the handle for the last
        // transmission
        USBOutHandle = 0;
        USBInHandle = 0;
    
        blinkStatusValid = TRUE;
    }//end UserInit
    
    /********************************************************************
     * Function:        void ProcessIO(void)
     *
     * PreCondition:    None
     *
     * Input:           None
     *
     * Output:          None
     *
     * Side Effects:    None
     *
     * Overview:        This function is a place holder for other user
     *                  routines. It is a mixture of both USB and
     *                  non-USB tasks.
     *
     * Note:            None
     *******************************************************************/
    void ProcessIO(void)
    {   
        // User Application USB tasks
        if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return;
    
        if(!HIDRxHandleBusy(USBOutHandle))
        {   
            blinkStatusValid = FALSE;
            switch(ReceivedDataBuffer[0])
            {
                case 0x80:  //Toggle LEDs
                    if(mLED_1 == mLED_2)
                    {
                        mLED_1_Toggle();
                        mLED_2_Toggle();
                    }
                    else
                    {
                        mLED_1 = mLED_2;
                    }
                    break;
                case 0x81:  //Get push button state
                    ToSendDataBuffer[0] = 0x81;				//Echo back to the host PC the command we are fulfilling in the first byte.  In this case, the Get Pushbutton State command.
    				if(sw2 == 1)							//pushbutton not pressed, pull up resistor on circuit board is pulling the PORT pin high
    				{
    					ToSendDataBuffer[1] = 0x01;			
    				}
    				else									//sw2 must be == 0, pushbutton is pressed and overpowering the pull up resistor
    				{
    					ToSendDataBuffer[1] = 0x00;
    				}
                    if(!HIDTxHandleBusy(USBInHandle))
                    {
                        USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer,64);
                    }
                    break;
            }
            //Re-arm the OUT endpoint for the next packet
            USBOutHandle = HIDRxPacket(HID_EP,(BYTE*)&ReceivedDataBuffer,64);
        }
    
        MSDTasks(); 
    
       
    }//end ProcessIO
    
    
    
    
    // ******************************************************************************************************
    // ************** USB Callback Functions ****************************************************************
    // ******************************************************************************************************
    // The USB firmware stack will call the callback functions USBCBxxx() in response to certain USB related
    // events.  For example, if the host PC is powering down, it will stop sending out Start of Frame (SOF)
    // packets to your device.  In response to this, all USB devices are supposed to decrease their power
    // consumption from the USB Vbus to <2.5mA each.  The USB module detects this condition (which according
    // to the USB specifications is 3+ms of no bus activity/SOF packets) and then calls the USBCBSuspend()
    // function.  You should modify these callback functions to take appropriate actions for each of these
    // conditions.  For example, in the USBCBSuspend(), you may wish to add code that will decrease power
    // consumption from Vbus to <2.5mA (such as by clock switching, turning off LEDs, putting the
    // microcontroller to sleep, etc.).  Then, in the USBCBWakeFromSuspend() function, you may then wish to
    // add code that undoes the power saving things done in the USBCBSuspend() function.
    
    // The USBCBSendResume() function is special, in that the USB stack will not automatically call this
    // function.  This function is meant to be called from the application firmware instead.  See the
    // additional comments near the function.
    
    /******************************************************************************
     * Function:        void USBCBSuspend(void)
     *
     * PreCondition:    None
     *
     * Input:           None
     *
     * Output:          None
     *
     * Side Effects:    None
     *
     * Overview:        Call back that is invoked when a USB suspend is detected
     *
     * Note:            None
     *****************************************************************************/
    void USBCBSuspend(void)
    {
    	//Example power saving code.  Insert appropriate code here for the desired
    	//application behavior.  If the microcontroller will be put to sleep, a
    	//process similar to that shown below may be used:
    	
    	//ConfigureIOPinsForLowPower();
    	//SaveStateOfAllInterruptEnableBits();
    	//DisableAllInterruptEnableBits();
    	//EnableOnlyTheInterruptsWhichWillBeUsedToWakeTheMicro();	//should enable at least USBActivityIF as a wake source
    	//Sleep();
    	//RestoreStateOfAllPreviouslySavedInterruptEnableBits();	//Preferrably, this should be done in the USBCBWakeFromSuspend() function instead.
    	//RestoreIOPinsToNormal();									//Preferrably, this should be done in the USBCBWakeFromSuspend() function instead.
    
    	//IMPORTANT NOTE: Do not clear the USBActivityIF (ACTVIF) bit here.  This bit is 
    	//cleared inside the usb_device.c file.  Clearing USBActivityIF here will cause 
    	//things to not work as intended.	
    	
    
        #if defined(__C30__)
        #if 0
            U1EIR = 0xFFFF;
            U1IR = 0xFFFF;
            U1OTGIR = 0xFFFF;
            IFS5bits.USB1IF = 0;
            IEC5bits.USB1IE = 1;
            U1OTGIEbits.ACTVIE = 1;
            U1OTGIRbits.ACTVIF = 1;
            TRISA &= 0xFF3F;
            LATAbits.LATA6 = 1;
            Sleep();
            LATAbits.LATA6 = 0;
        #endif
        #endif
    }
    
    
    /******************************************************************************
     * Function:        void _USB1Interrupt(void)
     *
     * PreCondition:    None
     *
     * Input:           None
     *
     * Output:          None
     *
     * Side Effects:    None
     *
     * Overview:        This function is called when the USB interrupt bit is set
     *					In this example the interrupt is only used when the device
     *					goes to sleep when it receives a USB suspend command
     *
     * Note:            None
     *****************************************************************************/
    #if 0
    void __attribute__ ((interrupt)) _USB1Interrupt(void)
    {
        #if !defined(self_powered)
            if(U1OTGIRbits.ACTVIF)
            {
                LATAbits.LATA7 = 1;
            
                IEC5bits.USB1IE = 0;
                U1OTGIEbits.ACTVIE = 0;
                IFS5bits.USB1IF = 0;
            
                //USBClearInterruptFlag(USBActivityIFReg,USBActivityIFBitNum);
                USBClearInterruptFlag(USBIdleIFReg,USBIdleIFBitNum);
                //USBSuspendControl = 0;
                LATAbits.LATA7 = 0;
            }
        #endif
    }
    #endif
    
    /******************************************************************************
     * Function:        void USBCBWakeFromSuspend(void)
     *
     * PreCondition:    None
     *
     * Input:           None
     *
     * Output:          None
     *
     * Side Effects:    None
     *
     * Overview:        The host may put USB peripheral devices in low power
     *					suspend mode (by "sending" 3+ms of idle).  Once in suspend
     *					mode, the host may wake the device back up by sending non-
     *					idle state signalling.
     *					
     *					This call back is invoked when a wakeup from USB suspend 
     *					is detected.
     *
     * Note:            None
     *****************************************************************************/
    void USBCBWakeFromSuspend(void)
    {
    	// If clock switching or other power savings measures were taken when
    	// executing the USBCBSuspend() function, now would be a good time to
    	// switch back to normal full power run mode conditions.  The host allows
    	// a few milliseconds of wakeup time, after which the device must be 
    	// fully back to normal, and capable of receiving and processing USB
    	// packets.  In order to do this, the USB module must receive proper
    	// clocking (IE: 48MHz clock must be available to SIE for full speed USB
    	// operation).
    }
    
    /********************************************************************
     * Function:        void USBCB_SOF_Handler(void)
     *
     * PreCondition:    None
     *
     * Input:           None
     *
     * Output:          None
     *
     * Side Effects:    None
     *
     * Overview:        The USB host sends out a SOF packet to full-speed
     *                  devices every 1 ms. This interrupt may be useful
     *                  for isochronous pipes. End designers should
     *                  implement callback routine as necessary.
     *
     * Note:            None
     *******************************************************************/
    void USBCB_SOF_Handler(void)
    {
        // No need to clear UIRbits.SOFIF to 0 here.
        // Callback caller is already doing that.
    }
    
    /*******************************************************************
     * Function:        void USBCBErrorHandler(void)
     *
     * PreCondition:    None
     *
     * Input:           None
     *
     * Output:          None
     *
     * Side Effects:    None
     *
     * Overview:        The purpose of this callback is mainly for
     *                  debugging during development. Check UEIR to see
     *                  which error causes the interrupt.
     *
     * Note:            None
     *******************************************************************/
    void USBCBErrorHandler(void)
    {
        // No need to clear UEIR to 0 here.
        // Callback caller is already doing that.
    
    	// Typically, user firmware does not need to do anything special
    	// if a USB error occurs.  For example, if the host sends an OUT
    	// packet to your device, but the packet gets corrupted (ex:
    	// because of a bad connection, or the user unplugs the
    	// USB cable during the transmission) this will typically set
    	// one or more USB error interrupt flags.  Nothing specific
    	// needs to be done however, since the SIE will automatically
    	// send a "NAK" packet to the host.  In response to this, the
    	// host will normally retry to send the packet again, and no
    	// data loss occurs.  The system will typically recover
    	// automatically, without the need for application firmware
    	// intervention.
    	
    	// Nevertheless, this callback function is provided, such as
    	// for debugging purposes.
    }
    
    
    /*******************************************************************
     * Function:        void USBCBCheckOtherReq(void)
     *
     * PreCondition:    None
     *
     * Input:           None
     *
     * Output:          None
     *
     * Side Effects:    None
     *
     * Overview:        When SETUP packets arrive from the host, some
     * 					firmware must process the request and respond
     *					appropriately to fulfill the request.  Some of
     *					the SETUP packets will be for standard
     *					USB "chapter 9" (as in, fulfilling chapter 9 of
     *					the official USB specifications) requests, while
     *					others may be specific to the USB device class
     *					that is being implemented.  For example, a HID
     *					class device needs to be able to respond to
     *					"GET REPORT" type of requests.  This
     *					is not a standard USB chapter 9 request, and 
     *					therefore not handled by usb_device.c.  Instead
     *					this request should be handled by class specific 
     *					firmware, such as that contained in usb_function_hid.c.
     *
     * Note:            None
     *******************************************************************/
    void USBCBCheckOtherReq(void)
    {
        USBCheckHIDRequest();
        USBCheckMSDRequest();
    }//end
    
    
    /*******************************************************************
     * Function:        void USBCBStdSetDscHandler(void)
     *
     * PreCondition:    None
     *
     * Input:           None
     *
     * Output:          None
     *
     * Side Effects:    None
     *
     * Overview:        The USBCBStdSetDscHandler() callback function is
     *					called when a SETUP, bRequest: SET_DESCRIPTOR request
     *					arrives.  Typically SET_DESCRIPTOR requests are
     *					not used in most applications, and it is
     *					optional to support this type of request.
     *
     * Note:            None
     *******************************************************************/
    void USBCBStdSetDscHandler(void)
    {
        // Must claim session ownership if supporting this request
    }//end
    
    
    /*******************************************************************
     * Function:        void USBCBInitEP(void)
     *
     * PreCondition:    None
     *
     * Input:           None
     *
     * Output:          None
     *
     * Side Effects:    None
     *
     * Overview:        This function is called when the device becomes
     *                  initialized, which occurs after the host sends a
     * 					SET_CONFIGURATION (wValue not = 0) request.  This 
     *					callback function should initialize the endpoints 
     *					for the device's usage according to the current 
     *					configuration.
     *
     * Note:            None
     *******************************************************************/
    void USBCBInitEP(void)
    {
        #if (MSD_DATA_IN_EP == MSD_DATA_OUT_EP)
            USBEnableEndpoint(MSD_DATA_IN_EP,USB_IN_ENABLED|USB_OUT_ENABLED|USB_HANDSHAKE_ENABLED|USB_DISALLOW_SETUP);
        #else
            USBEnableEndpoint(MSD_DATA_IN_EP,USB_IN_ENABLED|USB_HANDSHAKE_ENABLED|USB_DISALLOW_SETUP);
            USBEnableEndpoint(MSD_DATA_OUT_EP,USB_OUT_ENABLED|USB_HANDSHAKE_ENABLED|USB_DISALLOW_SETUP);
        #endif
    
        //enable the HID endpoint
        USBEnableEndpoint(HID_EP,USB_IN_ENABLED|USB_OUT_ENABLED|USB_HANDSHAKE_ENABLED|USB_DISALLOW_SETUP);
        //Re-arm the OUT endpoint for the next packet
        USBOutHandle = HIDRxPacket(HID_EP,(BYTE*)&ReceivedDataBuffer,64);
    
        USBMSDInit();
    }
    
    /********************************************************************
     * Function:        void USBCBSendResume(void)
     *
     * PreCondition:    None
     *
     * Input:           None
     *
     * Output:          None
     *
     * Side Effects:    None
     *
     * Overview:        The USB specifications allow some types of USB
     * 					peripheral devices to wake up a host PC (such
     *					as if it is in a low power suspend to RAM state).
     *					This can be a very useful feature in some
     *					USB applications, such as an Infrared remote
     *					control	receiver.  If a user presses the "power"
     *					button on a remote control, it is nice that the
     *					IR receiver can detect this signalling, and then
     *					send a USB "command" to the PC to wake up.
     *					
     *					The USBCBSendResume() "callback" function is used
     *					to send this special USB signalling which wakes 
     *					up the PC.  This function may be called by
     *					application firmware to wake up the PC.  This
     *					function should only be called when:
     *					
     *					1.  The USB driver used on the host PC supports
     *						the remote wakeup capability.
     *					2.  The USB configuration descriptor indicates
     *						the device is remote wakeup capable in the
     *						bmAttributes field.
     *					3.  The USB host PC is currently sleeping,
     *						and has previously sent your device a SET 
     *						FEATURE setup packet which "armed" the
     *						remote wakeup capability.   
     *
     *					This callback should send a RESUME signal that
     *                  has the period of 1-15ms.
     *
     * Note:            Interrupt vs. Polling
     *                  -Primary clock
     *                  -Secondary clock ***** MAKE NOTES ABOUT THIS *******
     *                   > Can switch to primary first by calling USBCBWakeFromSuspend()
     
     *                  The modifiable section in this routine should be changed
     *                  to meet the application needs. Current implementation
     *                  temporary blocks other functions from executing for a
     *                  period of 1-13 ms depending on the core frequency.
     *
     *                  According to USB 2.0 specification section 7.1.7.7,
     *                  "The remote wakeup device must hold the resume signaling
     *                  for at lest 1 ms but for no more than 15 ms."
     *                  The idea here is to use a delay counter loop, using a
     *                  common value that would work over a wide range of core
     *                  frequencies.
     *                  That value selected is 1800. See table below:
     *                  ==========================================================
     *                  Core Freq(MHz)      MIP         RESUME Signal Period (ms)
     *                  ==========================================================
     *                      48              12          1.05
     *                       4              1           12.6
     *                  ==========================================================
     *                  * These timing could be incorrect when using code
     *                    optimization or extended instruction mode,
     *                    or when having other interrupts enabled.
     *                    Make sure to verify using the MPLAB SIM's Stopwatch
     *                    and verify the actual signal on an oscilloscope.
     *******************************************************************/
    void USBCBSendResume(void)
    {
        static WORD delay_count;
        
        USBResumeControl = 1;                // Start RESUME signaling
        
        delay_count = 1800U;                // Set RESUME line for 1-13 ms
        do
        {
            delay_count--;
        }while(delay_count);
        USBResumeControl = 0;
    }
    
               
    /** EOF main.c ***************************************************************/
    J'ai trouvé cet Ebook http://read.pudn.com/downloads122/eb...ed%20Hosts.pdf il a l'air pas mal complet sur le sujet (en plus il parle du PIC18F4550) t'en pense quoi ?

    Merci

  5. #85
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Citation Envoyé par danieldou Voir le message
    Mais si j'utilise le même PIC que celui du code de SourceForge j'ai donc pas besoin d'analyser les registres afin de savoir s'il existent dans mon micro (évident vu que j'utilise le même). Donc en sachant ça, tu pense tout de même que partir du code de Microchip est plus simple ?
    Plus simple peut être pas mais avec Microchip tu as l'assurance que ça fonctionne tandis qu'avec un code qui vient de quelque part d'internet ?

    Je ne mets pas en doute les capacités du gars mais :
    - Avoir oublié tous les #pragma et ne pas donner en compensation la config MPLAB.
    - Écrire les implémentations de ces fonctions dans des fichiers .h
    - Aucune doc ni explication mise à part un simple "désolé" dans le fichier README
    - Pas du schéma du hard qui va avec le soft

    Moi ça ne m'inspire pas vraiment confiance... Après peut être que ça fonctionne, je ne dis pas le contraire.

    Citation Envoyé par danieldou Voir le message
    J'ai trouvé cet Ebook http://read.pudn.com/downloads122/eb...ed%20Hosts.pdf il a l'air pas mal complet sur le sujet (en plus il parle du PIC18F4550) t'en pense quoi ?
    J'ai lu en diagonal et ça me paraît être une bonne source d'inspiration.

    Là c'est le main.c que tu as poster tu peux vérifier, les 2 fois que tu as voulu le poster tu as mis "usb_descriptor".

    Et il ne compile pas ce fichier main.c avec les dépendances ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  6. #86
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 273
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Plus simple peut être pas mais avec Microchip tu as l'assurance que ça fonctionne tandis qu'avec un code qui vient de quelque part d'internet ?

    Je ne mets pas en doute les capacités du gars mais :
    - Avoir oublié tous les #pragma et ne pas donner en compensation la config MPLAB.
    - Écrire les implémentations de ces fonctions dans des fichiers .h
    - Aucune doc ni explication mise à part un simple "désolé" dans le fichier README
    - Pas du schéma du hard qui va avec le soft

    Moi ça ne m'inspire pas vraiment confiance... Après peut être que ça fonctionne, je ne dis pas le contraire.
    Oui c'est vrai que c'est pas non plus super clean ^^
    Mais pour le code de Microchip j'ai pas non plus de schéma qui va avec le programme, du coup pour cette partie le problème se pose toujours (a moins que je puisse utiliser le schéma que je t'avais envoyé ?)

    Citation Envoyé par Vincent PETIT Voir le message
    J'ai lu en diagonal et ça me paraît être une bonne source d'inspiration.
    Ha bah c'est déjà un bon début alors

    Citation Envoyé par Vincent PETIT Voir le message
    Et il ne compile pas ce fichier main.c avec les dépendances ?
    Euh... j'ai pas compris la question ^^

    Merci

  7. #87
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Bon... si tu es ok, je voudrai que tu fasses des tests mais avant j'ai deux questions :

    Est ce que la fichier main.c que tu postais quelques messages plus haut est bien l'original de Microchip ou est ce le tien lorsque tu as fait tes essais de modification des #include ?
    Peux tu me donner le chemin exacte, dans ton PC, des fichiers .c que tu m'as posté ? (pas les .h puisque je sais maintenant où ils sont grâce à ta copie d'écran C:\Microchip Solutions\Microchip\Include)

    ps : dans le main.c je vois que
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "Compiler.h" // Compiler.h doit être dans le même répertoire que main.c
    #include "GenericTypeDefs.h" // GenericTypeDefs.h doit être dans le même répertoire que main.c                       
    #include "usb_config.h"  // usb_config.h doit être dans le même répertoire que main.c
    #include "USB/usb_device.h"  // usb_device.h doit être dans un sous répertoire qui s'appelle USB là où il y a le main.c
    #include "USB/USB.h"  // USB.h doit être dans un sous répertoire qui s'appelle USB là où il y a le main.c
    #include "HardwareProfile.h" // HardwareProfile.h doit être dans le même répertoire que main.c
    #include "MDD File System\SD-SPI.h"  // SD-SPI.h doit être dans un sous répertoire qui s'appelle MDD File System là où il y a le main.c
     
    #include "./USB/usb_function_msd.h" // usb_function_msd.h doit être dans un sous répertoire qui s'appelle USB là où il y a le main.c
    #include "./USB/usb_function_hid.h" // usb_function_hid.h doit être dans un sous répertoire qui s'appelle USB là où il y a le main.c

    Tu peux créer un projet sous MPLAB dont le fichier main est le main.c que tu m'as posté un peu plus haut puis faire ce que j'ai écrit dans les commentaires juste au dessus et me donner le résultat de la compilation.

    ps : je m'attends à des erreurs notamment des .c non trouvé mais les .h eux devraient être bien inclus au projet.

    A+
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  8. #88
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 273
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Est ce que la fichier main.c que tu postais quelques messages plus haut est bien l'original de Microchip ou est ce le tien lorsque tu as fait tes essais de modification des #include ?
    C'est bien l'original.

    Citation Envoyé par Vincent PETIT Voir le message
    Peux tu me donner le chemin exacte, dans ton PC, des fichiers .c que tu m'as posté ? (pas les .h puisque je sais maintenant où ils sont grâce à ta copie d'écran C:\Microchip Solutions\Microchip\Include)
    C:\Microchip Solutions\USB Device - Composite - HID + MSD\Firmware
    Le main.c est tiré de cette source mais quand je créé le projet MPLAB, je créé manuellement chaque fichier et je colle le code se trouvant dans les originaux de Microchip

    Citation Envoyé par Vincent PETIT Voir le message
    ps : dans le main.c je vois que
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "Compiler.h" // Compiler.h doit être dans le même répertoire que main.c
    #include "GenericTypeDefs.h" // GenericTypeDefs.h doit être dans le même répertoire que main.c                       
    #include "usb_config.h"  // usb_config.h doit être dans le même répertoire que main.c
    #include "USB/usb_device.h"  // usb_device.h doit être dans un sous répertoire qui s'appelle USB là où il y a le main.c
    #include "USB/USB.h"  // USB.h doit être dans un sous répertoire qui s'appelle USB là où il y a le main.c
    #include "HardwareProfile.h" // HardwareProfile.h doit être dans le même répertoire que main.c
    #include "MDD File System\SD-SPI.h"  // SD-SPI.h doit être dans un sous répertoire qui s'appelle MDD File System là où il y a le main.c
     
    #include "./USB/usb_function_msd.h" // usb_function_msd.h doit être dans un sous répertoire qui s'appelle USB là où il y a le main.c
    #include "./USB/usb_function_hid.h" // usb_function_hid.h doit être dans un sous répertoire qui s'appelle USB là où il y a le main.c

    Tu peux créer un projet sous MPLAB dont le fichier main est le main.c que tu m'as posté un peu plus haut puis faire ce que j'ai écrit dans les commentaires juste au dessus et me donner le résultat de la compilation.

    ps : je m'attends à des erreurs notamment des .c non trouvé mais les .h eux devraient être bien inclus au projet.

    A+
    Apparemment j'ai bien suivi tes instructions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
    make[1]: Entering directory 'C:/Users/daniel/MPLABXProjects/test.X'
    make  -f nbproject/Makefile-default.mk dist/default/production/test.X.production.hex
    make[2]: Entering directory 'C:/Users/daniel/MPLABXProjects/test.X'
    "C:\Program Files (x86)\Microchip\xc8\v1.35\bin\xc8.exe" --pass1  --chip=18F45K50 -Q -G  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 -I"../../../../Microchip Solutions/Microchip/Include" -I"../../../../Microchip Solutions/Microchip/Include/Usb" --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,-plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"    -obuild/default/production/_ext/1744840122/main.p1  C:/Users/daniel/MPLABXProjects/test.X/main.c 
    "C:\Program Files (x86)\Microchip\xc8\v1.35\bin\xc8.exe" --pass1  --chip=18F45K50 -Q -G  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 -I"../../../../Microchip Solutions/Microchip/Include" -I"../../../../Microchip Solutions/Microchip/Include/Usb" --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,-plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"    -obuild/default/production/_ext/1744840122/usb_descriptors.p1  C:/Users/daniel/MPLABXProjects/test.X/usb_descriptors.c 
    ../../../../Microchip Solutions/Microchip/Include\Compiler.h:135: warning: (111) redefining preprocessor macro "Nop" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 45)
    ../../../../Microchip Solutions/Microchip/Include\Compiler.h:136: warning: (111) redefining preprocessor macro "ClrWdt" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 40)
    ../../../../Microchip Solutions/Microchip/Include\Compiler.h:137: warning: (111) redefining preprocessor macro "Reset" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 46)
    ../../../../Microchip Solutions/Microchip/Include\./USB/usb_device.h:63: error: (141) can't open include file "usb_config.h": No such file or directory
    make[2]: *** [build/default/production/_ext/1744840122/usb_descriptors.p1] Error 1
    make[2]: *** Waiting for unfinished jobs....
    ../../../../Microchip Solutions/Microchip/Include\Compiler.h:135: warning: (111) redefining preprocessor macro "Nop" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 45)
    ../../../../Microchip Solutions/Microchip/Include\Compiler.h:136: warning: (111) redefining preprocessor macro "ClrWdt" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 40)
    ../../../../Microchip Solutions/Microchip/Include\Compiler.h:137: warning: (111) redefining preprocessor macro "Reset" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 46)
    (908) exit status = 1
    nbproject/Makefile-default.mk:110: recipe for target 'build/default/production/_ext/1744840122/usb_descriptors.p1' failed
    ../../../../Microchip Solutions/Microchip/Include\USB/usb_device.h:63: error: (141) can't open include file "usb_config.h": No such file or directory
    make[2]: *** [build/default/production/_ext/1744840122/main.p1] Error 1
    make[1]: *** [.build-conf] Error 2
    make: *** [.build-impl] Error 2
    (908) exit status = 1
    nbproject/Makefile-default.mk:102: recipe for target 'build/default/production/_ext/1744840122/main.p1' failed
    make[2]: Leaving directory 'C:/Users/daniel/MPLABXProjects/test.X'
    nbproject/Makefile-default.mk:78: recipe for target '.build-conf' failed
    make[1]: Leaving directory 'C:/Users/daniel/MPLABXProjects/test.X'
    nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
    
    BUILD FAILED (exit value 2, total time: 409ms)
    Nom : 1.jpg
Affichages : 967
Taille : 378,9 Ko

    Voila ce qui sort comme erreur de compilation ^^

    Merci

  9. #89
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Il n'y a pas beaucoup d'erreurs là. C'est très bon signe !

    1) usb_config.h => n'a pas été trouvé par le compilateur : regarde si il existe dans le répertoire où il y a le fichier main.c, regarde aussi si il n'y a pas eu de faute d'orthographe dans son nom "usb_config" et est ce bien un fichier .h ? Si le compilateur ne le trouve pas ça peut être aussi un problème d'arborescence. Moi quand je lis ça je me dis que c'est normal qu'il y ait une erreur
    /USB/usb_device.h:63: error: (141) can't open include file "usb_config.h": No such file or directory
    En français le compilo dit : "je me suis baladé dans le répertoire USB puis j'ai ouvert usb_device.h et à la ligne 63 du fichier j'ai trouvé (j'en suis quasi sur) "usb_config.h" ! Et comme les " " veulent dire.. je suis dans le répertoire courant hé bien ça ne peut que déconner.
    Si je me trompe pas, il te suffira de faire un Copier de usb_config.h qui au même endroit que le fichier main.c et de Coller usb_config.h dans le répertoire USB. Autrement dit usb_config.h doit être à la fois à la racine du projet et dans le répertoire USB.


    2) usb_descriptors.c => n'a pas été trouvé par le compilateur. Tu m'avais posté le code (page 3 ou 4 du fil de discussion) mais par contre dans quel répertoire était il ? A tout hasard n'était il pas au même endroit que le main.c que tu as été chercher à l'origine ? C:\Microchip Solutions\USB Device - Composite - HID + MSD\Firmware ? Si c'est le cas alors tu dois Copier usb_descriptors.c de son endroit initial (par rapport au main.c initial) et le Coller sous la même arborescence, là où tu as créé ton nouveau projet. (la... vache..., je viens de relire cette dernière phrase, et on voit qu'il est minuit passé ... bon moi je vais dormir )


    3) Les Warning
    c'est un petit conflit entre Compiler.h et pic18.h (pas bien grave pour le moment mais faudra regarder quand même mais après car ça ne gêne pas la compilation)

    Refait un essai et tiens moi au courant demain ! Ce problème m’énerve, je veux le résoudre !
    VENI, VIDI, VICI
    Courage...
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  10. #90
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 273
    Points : 150
    Points
    150
    Par défaut
    Et bien je viens de corriger les problèmes que t'avais dit, déjà y a plus l'erreur de "usb_config"
    Y a eu une erreur du même type, je l'ai résolue en faisant la même chose.
    Par contre pour usb_descriptor, c'est bien un .c et il se trouve déjà dans le même répertoire que le main.c...

    On en viendra sûrement a bout

    Par contre les prochains jours je pourrais peut être pas faire de tests, je voyage une semaine, je pourrais donc continuer sur le sujet mais pas forcement tester puisque je n'aurais pas mon PC avec moi ^^

    Merci

  11. #91
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Pas de soucis.
    Donc le problème restant c'est usb_descriptor.c

    Par contre je n'ai pas vu le usb_descriptor.h correspondant ? Du coup je n'arrive pas à comprendre comment il est appelé par main.c

    Est ce qui faut le compiler et le linker au projet ? Il faudait lire la doc que je n'ai pas puisque sous Linux je ne peux rien installer mais surement qu'ils en parlent (son rôle, comment il intervient, ...)

    Ensuite il y aura la phase 2
    Envoyer le .hex généré dans ta démo board pour valider que le soft marche bien lorsque tu branches le tout au PC.

    Puis phase 3
    Elagage du source en retirant du code tout ce qui ne te concerne pas et il y en a plein des trucs qui concerne d'autres micros


    Après tout ça tu pourra modifier le code et l'adapter à ton besoin.
    A+
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  12. #92
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 273
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Pas de soucis.
    Donc le problème restant c'est usb_descriptor.c

    Par contre je n'ai pas vu le usb_descriptor.h correspondant ? Du coup je n'arrive pas à comprendre comment il est appelé par main.c

    Est ce qui faut le compiler et le linker au projet ? Il faudait lire la doc que je n'ai pas puisque sous Linux je ne peux rien installer mais surement qu'ils en parlent (son rôle, comment il intervient, ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
    make[1]: Entering directory 'C:/Users/Daniel/Documents/MPLABXProjects/tesrt.X'
    make  -f nbproject/Makefile-default.mk dist/default/production/tesrt.X.production.hex
    make[2]: Entering directory 'C:/Users/Daniel/Documents/MPLABXProjects/tesrt.X'
    "C:\Program Files (x86)\Microchip\mplabc18\v3.47\bin\mcc18.exe"  -p18F45K50 -I"../../../../../Microchip Solutions/Microchip/Include" -I"../../../../../Microchip Solutions/Microchip/Include/Usb" -ms -oa-  -I "C:\Program Files (x86)\Microchip\mplabc18\v3.47\bin"\\..\\h  -fo build/default/production/usb_descriptors.o   usb_descriptors.c 
    "C:\Program Files (x86)\Microchip\mplabc18\v3.47\bin\mcc18.exe"  -p18F45K50 -I"../../../../../Microchip Solutions/Microchip/Include" -I"../../../../../Microchip Solutions/Microchip/Include/Usb" -ms -oa-  -I "C:\Program Files (x86)\Microchip\mplabc18\v3.47\bin"\\..\\h  -fo build/default/production/main.o   main.c 
    C:\Users\Daniel\Documents\MPLABXProjects\tesrt.X\HardwareProfile.h:108:Error [1099] "Demo board not defined.  Either define DEMO_BOARD for a custom board or select the correct processor for the demo board."
    make[2]: *** [build/default/production/main.o] Error 3
    nbproject/Makefile-default.mk:110: recipe for target 'build/default/production/main.o' failed
    make[2]: *** Waiting for unfinished jobs....
    make[1]: *** [.build-conf] Error 2
    make[2]: Leaving directory 'C:/Users/Daniel/Documents/MPLABXProjects/tesrt.X'
    make: *** [.build-impl] Error 2
    nbproject/Makefile-default.mk:78: recipe for target '.build-conf' failed
    make[1]: Leaving directory 'C:/Users/Daniel/Documents/MPLABXProjects/tesrt.X'
    nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
    
    BUILD FAILED (exit value 2, total time: 368ms)
    Donc les problèmes qui s'affichent ici sont causés par usb_descriptor selon toi ?

    Citation Envoyé par Vincent PETIT Voir le message
    Ensuite il y aura la phase 2
    Envoyer le .hex généré dans ta démo board pour valider que le soft marche bien lorsque tu branches le tout au PC.
    Donc si j'ai bien compris, les erreurs sont quasi toutes résolues ?

    Citation Envoyé par Vincent PETIT Voir le message
    Puis phase 3
    Elagage du source en retirant du code tout ce qui ne te concerne pas et il y en a plein des trucs qui concerne d'autres micros
    Grace aux nombreux commentaires du code je pense que ça ne sera pas très difficile, étant donné que les commentaires précisent ce qui correspond a un micro ou a un autre ^^

    Citation Envoyé par Vincent PETIT Voir le message
    Après tout ça tu pourra modifier le code et l'adapter à ton besoin.
    et dire que ce ne sera que la moitié...

  13. #93
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Citation Envoyé par danieldou Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    C:\Users\Daniel\Documents\MPLABXProjects\tesrt.X\HardwareProfile.h:108:Error [1099] "Demo board not defined.  Either define DEMO_BOARD for a custom board or select the correct processor for the demo board."
    Donc les problèmes qui s'affichent ici sont causés par usb_descriptor selon toi ?
    Il faut aller voir dans HardwareProfile.h visiblement il faut définir la board j'y jetterai un oeil demain
    Il y a de moins en moins d'erreurs (là j'en vois qu'une)

    Ensuite, il y a encore usb_descriptor ! Il n'a pas générer d'erreur mais je n'ai pas encore trouver où il s'intègre dans le programme.

    A demain.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  14. #94
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 273
    Points : 150
    Points
    150
    Par défaut
    Apparemment si j'utilise XC8 les erreurs ne sont pas les mêmes...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
    make[1]: Entering directory 'C:/Users/Daniel/Documents/MPLABXProjects/tesrt.X'
    make  -f nbproject/Makefile-default.mk dist/default/production/tesrt.X.production.hex
    make[2]: Entering directory 'C:/Users/Daniel/Documents/MPLABXProjects/tesrt.X'
    "C:\Program Files (x86)\Microchip\xc8\v1.35\bin\xc8.exe" --pass1  --chip=18F45K50 -Q -G  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 -I"../../../../../Microchip Solutions/Microchip/Include" -I"../../../../../Microchip Solutions/Microchip/Include/Usb" --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,-plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"    -obuild/default/production/usb_descriptors.p1  usb_descriptors.c 
    "C:\Program Files (x86)\Microchip\xc8\v1.35\bin\xc8.exe" --pass1  --chip=18F45K50 -Q -G  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 -I"../../../../../Microchip Solutions/Microchip/Include" -I"../../../../../Microchip Solutions/Microchip/Include/Usb" --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,-plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"    -obuild/default/production/main.p1  main.c 
    ../../../../../Microchip Solutions/Microchip/Include\Compiler.h:134: warning: (111) redefining preprocessor macro "Nop" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 45)
    ../../../../../Microchip Solutions/Microchip/Include\Compiler.h:135: warning: (111) redefining preprocessor macro "ClrWdt" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 40)
    ../../../../../Microchip Solutions/Microchip/Include\Compiler.h:136: warning: (111) redefining preprocessor macro "Reset" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 46)
    make[2]: *** [build/default/production/main.p1] Error 1
    ../../../../../Microchip Solutions/Microchip/Include\USB/usb_device.h:63: error: (141) can't open include file "usb_config.h": No such file or directory
    make[2]: *** Waiting for unfinished jobs....
    make[2]: *** [build/default/production/usb_descriptors.p1] Error 1
    ../../../../../Microchip Solutions/Microchip/Include\Compiler.h:134: warning: (111) redefining preprocessor macro "Nop" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 45)
    make[1]: *** [.build-conf] Error 2
    make: *** [.build-impl] Error 2
    ../../../../../Microchip Solutions/Microchip/Include\Compiler.h:135: warning: (111) redefining preprocessor macro "ClrWdt" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 40)
    ../../../../../Microchip Solutions/Microchip/Include\Compiler.h:136: warning: (111) redefining preprocessor macro "Reset" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 46)
    ../../../../../Microchip Solutions/Microchip/Include\./USB/usb_device.h:63: error: (141) can't open include file "usb_config.h": No such file or directory
    (908) exit status = 1
    nbproject/Makefile-default.mk:102: recipe for target 'build/default/production/main.p1' failed
    (908) exit status = 1
    nbproject/Makefile-default.mk:110: recipe for target 'build/default/production/usb_descriptors.p1' failed
    make[2]: Leaving directory 'C:/Users/Daniel/Documents/MPLABXProjects/tesrt.X'
    nbproject/Makefile-default.mk:78: recipe for target '.build-conf' failed
    make[1]: Leaving directory 'C:/Users/Daniel/Documents/MPLABXProjects/tesrt.X'
    nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
    
    BUILD FAILED (exit value 2, total time: 250ms)
    T'en pense quoi ?

    PS : J'ai essayé de configurer le projet pour qu'il fonctionne avec la DemoBoard mais quand je vais dans "Run Debugger/Programmer Self Test" j'obtiens "Self Test Not SupportedSN: BUR133651659"...
    J'ai recréé le projet en selectionnant la DemoBoard, l'erreur n'apparait pas, mais d'autres oui --'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
    make[1]: Entering directory 'C:/Users/Daniel/Documents/MPLABXProjects/Msd.X'
    make  -f nbproject/Makefile-default.mk dist/default/production/Msd.X.production.hex
    make[2]: Entering directory 'C:/Users/Daniel/Documents/MPLABXProjects/Msd.X'
    "C:\Program Files (x86)\Microchip\xc8\v1.35\bin\xc8.exe" --pass1  --chip=18F45K50 -Q -G  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 -I"../../../../../Microchip Solutions/Microchip/Include/Usb" -I"../../../../../Microchip Solutions/Microchip/Include" --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,-plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"    -obuild/default/production/main.p1  main.c 
    "C:\Program Files (x86)\Microchip\xc8\v1.35\bin\xc8.exe" --pass1  --chip=18F45K50 -Q -G  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 -I"../../../../../Microchip Solutions/Microchip/Include/Usb" -I"../../../../../Microchip Solutions/Microchip/Include" --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,-plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"    -obuild/default/production/usb_descriptors.p1  usb_descriptors.c 
    ../../../../../Microchip Solutions/Microchip/Include\Compiler.h:134: warning: (111) redefining preprocessor macro "Nop" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 45)
    ../../../../../Microchip Solutions/Microchip/Include\Compiler.h:135: warning: (111) redefining preprocessor macro "ClrWdt" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 40)
    ../../../../../Microchip Solutions/Microchip/Include\Compiler.h:136: warning: (111) redefining preprocessor macro "Reset" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 46)
    ../../../../../Microchip Solutions/Microchip/Include\Compiler.h:134: warning: (111) redefining preprocessor macro "Nop" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 45)
    ../../../../../Microchip Solutions/Microchip/Include\Compiler.h:135: warning: (111) redefining preprocessor macro "ClrWdt" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 40)
    ../../../../../Microchip Solutions/Microchip/Include\Compiler.h:136: warning: (111) redefining preprocessor macro "Reset" (C:\Program Files (x86)\Microchip\xc8\v1.35\include\pic18.h: 46)
    HardwareProfile.h:107: error: (103) #error: "Demo board not defined.  Either define DEMO_BOARD for a custom board or select the correct processor for the demo board."
    HardwareProfile.h:464: error: (120) operator "(" in incorrect context
    HardwareProfile.h:465: error: (103) #error: System clock speed must exceed 400 kHz
    ../../../../../Microchip Solutions/Microchip/Include\MDD File System\SD-SPI.h:43: error: (141) can't open include file "FSconfig.h": No such file or directory
    make[2]: *** [build/default/production/main.p1] Error 1
    make[2]: *** Waiting for unfinished jobs....
    (908) exit status = 1
    nbproject/Makefile-default.mk:102: recipe for target 'build/default/production/main.p1' failed
    usb_descriptors.c:166: warning: (335) unknown pragma "romdata"
    make[1]: *** [.build-conf] Error 2
    make: *** [.build-impl] Error 2
    make[2]: Leaving directory 'C:/Users/Daniel/Documents/MPLABXProjects/Msd.X'
    nbproject/Makefile-default.mk:78: recipe for target '.build-conf' failed
    make[1]: Leaving directory 'C:/Users/Daniel/Documents/MPLABXProjects/Msd.X'
    nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
    
    BUILD FAILED (exit value 2, total time: 319ms)

  15. #95
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Dans le fichier HardwareProfile.h

    Décommente cette ligne //#define DEMO_BOARD USER_DEFINED_BOARD
    Essaye de recompiler pour voir

    A+
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  16. #96
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2013
    Messages : 273
    Points : 150
    Points
    150
    Par défaut
    Resalut ^^

    Vraiment désolé de pouvoir revenir que maintenant, j'ai eu quelques emmerdes au niveau professionnel, ce qui m'a pris pas mal de temps en moment ^^
    J'ai décommenté la ligne que tu a dit, aucune erreur de compilation

    Comme je te l'avais dit, mon but avec ce projet, était d'apprendre un maximum en électronique (numérique principalement) et ça a pas mal marché pour la pratique, j'ai une bien meilleure compréhension des microcontrôleurs et de l'électronique générale, du coup maintenant je voudrais plutôt revenir a un peu de théorie que j'apprendrais en même que la pratique dans certains projets.
    Selon toi, qu'est ce que je dois faire pour réussir a maîtriser l'électronique (analogique, je suppose que connaitre le fonctionnement et l'utilisation de chaque composant suffit non ?) de sorte a ce que lorsque j'aurais un projet en électronique (quasiment tout les projets un minimum importants fonctionnent avec les microcontrôleurs) que je puisse assez rapidement programmer n'importe quel microcontrôleur (PIC ou autres) ?
    En gros je voudrais pas sauter les étapes trop rapidement, du coup je compte repartir sur de bonnes bases, donc tu me conseillerais (cours, site, livre etc..) quoi pour maîtriser électronique analogique et numérique (j'entends par la, maîtriser la plupart des microcontrôleurs)

    Désolé encore pour l'attente et merci d'avance pour tes conseils

  17. #97
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Salut Daniel,
    Pas de soucis on a tous des choses importantes à régler !
    Citation Envoyé par danieldou Voir le message
    j'ai une bien meilleure compréhension des microcontrôleurs et de l'électronique générale, du coup maintenant je voudrais plutôt revenir a un peu de théorie que j'apprendrais en même que la pratique dans certains projets.
    Eh bien voilà.... Peut importe si tu ne fini pas cette clé USB, je pense que tu as compris l'intérêt et toutes les portes que vont t'ouvrir le trio informatique/microcontrôleur/électronique (l'embarqué quoi !)

    Comme tu l'as très bien compris il y a 3 choses à savoir (et tu verras qu'avec un minimum de connaissances tu pourras faire beaucoup de chose)

    - L'électronique analogique car sans ça, tu sera incapable de faire une petite alimentation pour faire tourner ton montage, de dimensionner une transistor pour allumer une LED ou pour faire coller un relai correctement, de faire un petit ampli pour un signal que tu souhaites envoyer dans le micro, .... En gros ne pas connaître l'électronique analogique, c'est comme aller acheter la Playstation 4 avec le dernier Call of Duty Blackops, tout installer chez toi et au moment où tu appuies sur le bouton ON de la Play....... tu te rends compte que tu n'as pas de courant chez toi !
    De toi à moi, il y a beaucoup de choses que l'on peut facilement comprendre si on te les expliques "avec les mains", simplement et surtout sans commencer par une équation mathématique de 10m de long !

    - L'électronique numérique car sans elle, impossible de comprendre les bus SPI, I2C entres autres, impossible de comprendre les schémas de principe qui se trouvent dans la datasheet, impossible de te servir de la logique qui est très utiles, impossible de comprendre des notions de multiplexage, de registre a décalages etc... En gros ne pas connaître l'électronique numérique, c'est comme aller acheter le dernier Iphone, tu l'allumes et ... tu te rends compte que tout est écrit en chinois et que tu n'y comprends rien !
    De toi à moi, il y a beaucoup de choses que l'on peut facilement comprendre si on te les expliques "avec les mains", simplement !

    - Le micro-contrôleur, qui va tout faire fonctionner !!!! Sans lui, c'est retour dans les années 50 ! Et oui tu as raison, aujourd'hui les micro sont devenus tellement peu cher qu'on en met dans tout pour remplacer des fonctions électroniques très simple. Même si ce n'est pas justifié techniquement parlant, la notion d'encombrement, car c'est toujours la course à la miniaturisation, prime et si un petit micro peut remplacer 5 composants et prendre moins de place alors, feu !
    De toi à moi, un légende urbaine veut que l'électronique et l'apprentissage d'un micro soit compliqué ! Bizarre car en réalité il suffit de lire la datasheet, c'est un vrai mode d'emploi

    Bref, les phrases en bleues c'est pour l'humour et les phrases soulignées c'est le vrai soucis car.....
    Trouver de la littérature Française est assez compliqué (je suis désolé de le dire mais c'est le constat que je fais.) Pour ne citer qu'un exemple, si un jour tu ouvres par exemple "Digital Signal Processing: A Practical Guide for Engineers and Scientists" (traitement du signal) et n'importe qu'elle bouquin français sur le même thème, tu tombes parterre ! Nos bouquins sont beaucoup trop mathématiques, donc abstraits, donc un frein à la compréhension.


    Laisse moi un peu de temps pour que je regarde des sites internet plutôt.
    Chez moi je n'ai quasiment que des bouquins Américains et je les trouves largement plus compréhensibles et complets que des bouquins Français.

    A+
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

Discussions similaires

  1. Montage/démontage automatique des clef USB
    Par troumad dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 27/10/2007, 10h48
  2. [FC6] Perdu le montage auto des USB
    Par PM_calou dans le forum RedHat / CentOS / Fedora
    Réponses: 1
    Dernier message: 27/08/2007, 11h27
  3. Montage cle USB qui veut plus marcher
    Par pierabobl dans le forum Matériel
    Réponses: 10
    Dernier message: 07/06/2006, 14h09
  4. Probleme de montage clé usb sous debian
    Par shrucky dans le forum Matériel
    Réponses: 7
    Dernier message: 08/05/2006, 11h31
  5. problème de montage de clé usb
    Par shrucky dans le forum Matériel
    Réponses: 3
    Dernier message: 18/03/2006, 22h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo