Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Page 4 sur 6 PremièrePremière 4 DernièreDernière
Affichage des résultats 46 à 60 sur 84

MikroC et CDC USB

  1. bypbop

    Date d'inscription
    juillet 2009
    Âge
    35
    Messages
    310

    Re : MikroC et CDC USB

    Bonjour vede,
    donc si je comprends bien par ex : si je veux d0 et d6 en entrées je dois faire :

    trisd = %01000001;
    si je veux affecter la valeur d'un port en entrée à une variable je dois faire :

    temp = portd.b6;

    cordialement;
    bypbop
     


    • Publicité



  2. vede

    Date d'inscription
    août 2009
    Localisation
    Bleurilles-sur-Bré (Groland-de-l'Autre-Côté)
    Âge
    42
    Messages
    3 353

    Cool Re : MikroC et CDC USB

    Citation Envoyé par bypbop Voir le message
    Bonjour vede,
    donc si je comprends bien par ex : si je veux d0 et d6 en entrées je dois faire

    trisd = %01000001;

    si je veux affecter la valeur d'un port en entrée à une variable je dois faire :

    temp = portd.b6;

    cordialement;
    bypbop
    Bonsoir Bypbop,

    oui, c'est bien ça ;O]

    vede
    ;O]
     

  3. bypbop

    Date d'inscription
    juillet 2009
    Âge
    35
    Messages
    310

    Re : MikroC et CDC USB

    Bonjour vede,

    j'avance un petit peu aujourd'hui sur mon projet alors j'ai ajouté certaine chose au code de base premièrement j'allume la led sur le port b4 et j'envoie une autre variable par usb pour la temperature j'ai une valeur mais pas la bonne ... tu verras j'ai commenté pas mal de chose qui n'influence pas le montage ...

    ps : qd je decommente temperature=10; ca m envoie bien 10 dans hid terminal

    unsigned short m, k;
    char temperature;
    unsigned short userRD_buffer[1];
    unsigned short userWR_buffer[1];

    void interrupt() {
    asm CALL _Hid_InterruptProc
    asm nop
    }

    void Init_Main() {
    // Disable all interrupts
    // Disable GIE, PEIE, TMR0IE, INT0IE,RBIE
    //INTCON = 0;
    //INTCON2 = 0xF5;
    //INTCON3 = 0xC0;
    // Disable Priority Levels on interrupts
    //RCON.IPEN = 0;
    //PIE1 = 0;
    //PIE2 = 0;
    //PIR1 = 0;
    //PIR2 = 0;

    // Configure all ports with analog function as digital
    //ADCON1 |= 0x0F;

    // Ports Configuration
    //TRISA = 0;
    //TRISB = 0;
    //TRISC = 0xFF;
    TRISD = 00100000;
    //TRISE = 0;

    //LATA = 0;
    //LATB = 0;
    //LATC = 0;
    //LATD = 0;
    //LATE = 0;
    }


    void main() {
    portd.b4=1;
    Init_Main();
    Hid_Enable(&userRD_buffer, &userWR_buffer);

    do {

    for (k = 0; k < 255; k++) {
    temperature = PORTD.B5;
    //temperature = 10;
    // Prepare send buffer
    userWR_buffer[0] = k;
    userWR_buffer[1] = temperature;
    // Send the number via USB
    while(!Hid_Write(&userWR_buffe r[1], 1));

    delay_ms(1000); // une ch'tite temporisation ;O]

    }
    }
    while (1);

    Hid_Disable();
    }
    En faisant ca j'obtiens 35 en boucle dans le hid terminal j espere avoir correctement calbé la sonde ...
    je mets en pièce jointe le cablage pour voir si c 'est correct . La sonde est en vue de face (ecriture en face).

    Cordialement,
    bypbop
    Images attachées
     

  4. vede

    Date d'inscription
    août 2009
    Localisation
    Bleurilles-sur-Bré (Groland-de-l'Autre-Côté)
    Âge
    42
    Messages
    3 353

    Cool

    Bonsoir Bypbop,

    en effet, ça fonctionnera jamais tel quel ;O]

    Le câblage est bon...

    C'est niveau logiciel... la temperature n'est
    pas directement lisible sur le port... elle utilise
    un protocole de communication (comme RS232,
    USB... mais qui s'appelle "One Wire")...

    dans mon projet, j'utilise la librairie fournie par
    MikroE pour gérer ce protocole... comme je fait
    d'ailleurs pour RS232, USB... pas IIC que j'ai émulé...

    il faut donc que tu te penches sur la doc
    (librairie One Wire de MikroC) et mon
    exemple de code avec la DS18B20...

    pour récupérer la température ;O]

    enfin je suis là...
    donc t'inquiétes...
    on va plier ça rapidement ;O]

    vede
    ;O]

    ps : la datasheet de la sonde est aussi trés interessante....
    tu vas voir comment certains se prennent la tête pour
    stocker une temperature ;O] ....

    re ;O]

    en effet, il faut que tu commences pas
    l'aide de MikroC sur la librairie One Wire
    (Help > Hard Libraries > One Wire)...
    ya un exemple (DS18x2x) et le schéma de base...

    delà tu regardes mon code :
    http://vede.free.fr/electronique/ds1...s232/ds232.rar
    (en MB, mais c'est kif kif...)

    et la datasheet :
    http://www.maxim-ic.com/quick_view2.cfm?qv_pk=2812

    et tu devrais avancer...
    n'hésites pas si question,
    vede
    ;O]

    ps : il faut utiliser les "fonctions" One_Wire_Reset(), One_Wire_Write()...etc...

    re ps : ce monologue est un complément d'informations...
    Dernière modification par gienas ; 22/01/2010 à 13h20. Motif: Fusion de deux réponses consécutives
     

  5. bypbop

    Date d'inscription
    juillet 2009
    Âge
    35
    Messages
    310

    Re : MikroC et CDC USB

    Bonjour vede,
    ahh ok je pensais qu'on avait directement la temperature
    ok je regarde ca et te tiens au courant ...

    Cordialement,
    bypbop
     

  6. vede

    Date d'inscription
    août 2009
    Localisation
    Bleurilles-sur-Bré (Groland-de-l'Autre-Côté)
    Âge
    42
    Messages
    3 353

    Cool Re : MikroC et CDC USB

    Citation Envoyé par bypbop Voir le message
    Bonjour vede,
    ahh ok je pensais qu'on avait directement la temperature
    ok je regarde ca et te tiens au courant ...

    Cordialement,
    bypbop
    Bonsoir Bypbop,

    bon je t'ai extrait la partie de code MB fonctionnelle
    pour communiquer avec une sonde DS18B20...

    et t'es allé voir mes 2 posts?

    Joyeuse Année 2010

    http://forums.futura-sciences.com/el...picoeoeoe.html

    Code:
    ' initialisation sonde
         ow_reset(PORTA, 4)                ' onewire reset
         ow_write(PORTA, 4, $CC)        ' command to DS1820
         ow_write(PORTA, 4, $4E)        ' demande envoi 3 bits de config. ($4E)
         ow_write(PORTA, 4, $65)        ' envoi TH
         ow_write(PORTA, 4, $81)        ' envoi TL
         ow_write(PORTA, 4, $0)          ' demande résolution t. sur 9 bits
         ow_reset(PORTA, 4)                ' onewire reset
         ow_write(PORTA, 4, $CC)        ' command to DS1820
         ow_write(PORTA, 4, $48)         ' copy scratchpad ($48)
    
    ' programme en boucle de lecture
    ' et d'affichage de la température
    while true
         ow_reset(PORTA, 4)                ' onewire reset
         ow_write(PORTA, 4, $CC)        ' command to DS1820
         ow_write(PORTA, 4, $44)        ' demande convertissage température ($44)
         delay_us(100)
         ow_reset(PORTA, 4)                ' onewire reset
         ow_write(PORTA, 4, $CC)        ' command to DS1820
         ow_write(PORTA, 4, $BE)        ' demande lecture température ($BE)
         oct1 = ow_read(PORTA, 4)       ' lit 1 er octet du scratchpad
         oct2 = ow_read(PORTA, 4)       ' lit 2 éme octet du scratchpad
    
     'décodage et affichage... TODO...
    wend
    aprés faut "décoder" les 2 octets oct1 et oct2,
    pour en "extraire" la température...

    je t'envois le code dans un prochain post...

    et n'hésites pas si question,
    vede
    ;O]
    Dernière modification par vede ; 19/01/2010 à 18h42.
     

  7. bypbop

    Date d'inscription
    juillet 2009
    Âge
    35
    Messages
    310

    Re : MikroC et CDC USB

    Re Vede, donc pour l'initialisation de la sonde qui pour moi est sur le port D 5 je dois faire ca ...

    ow_reset(PORTD.B5, 4) ' onewire reset
    ow_write(PORTD.B5, $CC) ' command to DS1820
    ow_write(PORTD.B5, $4E) ' demande envoi 3 bits de config. ($4E)
    ow_write(PORTD.B5, $65) ' envoi TH
    ow_write(PORTD.B5, $81) ' envoi TL
    ow_write(PORTD.B5, $0) ' demande résolution t. sur 9 bits
    ow_reset(PORTD.B5) ' onewire reset
    ow_write(PORTD.B5, $CC) ' command to DS1820
    ow_write(PORTD.B5, $48)
    Cordialement,
    bypbop
     

  8. vede

    Date d'inscription
    août 2009
    Localisation
    Bleurilles-sur-Bré (Groland-de-l'Autre-Côté)
    Âge
    42
    Messages
    3 353

    Cool Re : MikroC et CDC USB

    re ;O]

    non, plutôt comme ça (extrait de l'exemple de l'aide de MC)

    Code:
        Ow_Reset(&PORTD, 5);           // Onewire reset signal
        Ow_Write(&PORTD, 5, 0xCC);    // Issue command SKIP_ROM
        Ow_Write(&PORTD, 5, 0x44);   // Issue command CONVERT_
        ....
    cad :
    Ow_fonction( &PORT, PIN, COMMANDE);

    vede
    ;O]
     

  9. bypbop

    Date d'inscription
    juillet 2009
    Âge
    35
    Messages
    310

    Re : MikroC et CDC USB

    Bonjour vede,

    voila j'ai integré le code micro de l exemple avec la sonde c'est bon j'ai une valeur qui varie bien dès que je touche la sonde mais apparement il faut faire un calcul pour avoir la temperature et ca je ne comprends pas moi j'ai cette valeur

    122, 133, 144 ...
    a quoi correspond cette valeur ?

    Ow_Reset(&PORTD, 5);
    Ow_Write(&PORTD, 5, 0xCC);
    Ow_Write(&PORTD, 5, 0x44);
    Delay_us(120);

    Ow_Reset(&PORTD, 5);
    Ow_Write(&PORTD, 5, 0xCC);
    Ow_Write(&PORTD, 5, 0xBE);

    temperature = Ow_Read(&PORTD, 5);
    temperature = (Ow_Read(&PORTD, 5) << 8) + temperature;
    Cordialement,
    bypbop
    Dernière modification par bypbop ; 20/01/2010 à 10h23.
     

  10. bypbop

    Date d'inscription
    juillet 2009
    Âge
    35
    Messages
    310

    Re : MikroC et CDC USB

    Re vede,

    J'avais acheter cette photo resistance dans le but de l'ajouter sur mon montage maintenant que la sonde fonctionne a peu près je vais l'ajouter

    photo resistance : http://fr.farnell.com/jsp/search/pro...sp?SKU=1652638

    je n'ai pas sous la main de resistance variable de toute facon je veux juste recuperer la valeur de la photoresistance sur mon pic.

    comment puis je faire ?

    Cordialement,
    bypbop
     

  11. vede

    Date d'inscription
    août 2009
    Localisation
    Bleurilles-sur-Bré (Groland-de-l'Autre-Côté)
    Âge
    42
    Messages
    3 353

    Cool

    Bonjour Bypbop,

    pour la sonde je t'envoie un code plus tard (avant ce soir)...

    pour récupérer la valeur de la LDR (photo-résistance),
    il faut la connecter à une entrée analogique du PIC, au
    travers d'un pont de résistance, et tu auras une tension
    lue +/- proportionnelle à la luminosité...

    exemple :

    .........entrée analogique
    ...................||
    ...................||
    +5v -- LDR -- || -- R10K -- Ov

    et là tu auras une tension sur l'entrée proportionnelle à
    la résistance de la LDR, cad à la luminosité ambiante...

    vede
    ;O]

    ps : le code pour la sonde, qui fonctionne de 0 à 125°C

    Code:
        
         (...)
          oct1 = Ow_Read(&PORTD, 5);
          oct2 = Ow_Read(&PORTD, 5);
          oct1 = oct1 >> 4
          oct2 = oct2 << 4
          temperature = oct1 + oct2
    v ;O]

    re ps :

    et pour la LDR, un exemple d'utilisation d'une entrée analogique avec un 16F88 :
    http://vede.free.fr/electronique/16f88/can/

    et de la doc sur l'utilisation et la configuration de l'ADC sur un 16F88 :
    http://pagesperso-orange.fr/fabrice..../ADC_16F88.htm

    et tu trouveras dans l'aide de MikroC, dans les librairies,
    un exemple d'utilisation de ADC_Read()...

    v;O]
    Dernière modification par gienas ; 22/01/2010 à 13h22. Motif: Fusion de trois réponses consécutives
     

  12. bypbop

    Date d'inscription
    juillet 2009
    Âge
    35
    Messages
    310

    Re : MikroC et CDC USB

    Re vede encore merci pour tes precieux conseils
    pour l'exemple je comprends mieux

    donc de + 5v à la photoresistance
    de la photoresistance à une resistance de 10ko et à la masse

    entre la photoresistance je vais à une entrée de mon pic 18f4550 marqué

    AN je suppose ... AN0 ou AN1 par exemple

    Cordialement,
    bypbop
     

  13. vede

    Date d'inscription
    août 2009
    Localisation
    Bleurilles-sur-Bré (Groland-de-l'Autre-Côté)
    Âge
    42
    Messages
    3 353

    Cool Re : MikroC et CDC USB

    Citation Envoyé par bypbop Voir le message
    Re vede encore merci pour tes precieux conseils
    pour l'exemple je comprends mieux

    donc de + 5v à la photoresistance
    de la photoresistance à une resistance de 10ko et à la masse

    entre la photoresistance je vais à une entrée de mon pic 18f4550 marqué

    AN je suppose ... AN0 ou AN1 par exemple

    Cordialement,
    bypbop
    re ;O]

    oui c'est ça ...
    entre la résistance et la LDR tu "vas" à l'entrée ADC...

    en fait je vais te donner petit un exemple :

    -mesurer avec un multimètre la résistance de la LDR
    dans la lumière ambiante d'utilisation prévue...

    -prendre une R fixe avec une valeur la plus proche de la R-LDR...

    -delà en câblant ça sur le principe d'un pont diviseur
    de tension à 2 résistance, tu trouveras :

    -environ 2,5Volts sur l'entrée AN en lumière ambiante
    (vu que c'est un ADC 10 bits, une valeur d'environ 512)

    -plus la luminosité augmentera, plus la tension augmentera...
    (entre 2,5 et 5V... soit entre 512 et 1024, niveau résultat ADC)

    -plus la luminosité diminuera, plus la tension diminuera...
    (entre 2,5 et 0V... soit entre 512 et 0, niveau résultat ADC)

    (ou inversement selon "la place" de la LDR...rapport à la Masse...)...

    vede
    ;O]

    ps : pour les calculs, adaptations, étalonnage,
    il faut voir le bloc (R fixe + R-LDR) comme une
    R fixe placée en série avec un potard...
    cad un diviseur de tension... plus une résistance fixe "talon"...

    re-ps : et avant il faut initialiser l'ADC...
    et sélectionner le port ADC à utiliser...

    re-re-ps : la "courbe" d'une LDR est rarement linéaire...
     

  14. bypbop

    Date d'inscription
    juillet 2009
    Âge
    35
    Messages
    310

    Re : MikroC et CDC USB

    Bonjour vede,

    Pour la temperature ca fonctionne nikel par contre pour l'intensité lumineuse c'est autre chose . Pour le cablage j'ai bien une variation sur la sortie qui va au pic en fonction de la luminosité donc le cablage est bon.

    pour le code j'ai fait ca :


    unsigned short m, k, temperature, oct1, oct2, lumiere;
    unsigned short userRD_buffer[1];
    unsigned short userWR_buffer[1];

    void interrupt() {
    asm CALL _Hid_InterruptProc
    asm nop
    }

    void Init_Main() {
    // Disable all interrupts
    // Disable GIE, PEIE, TMR0IE, INT0IE,RBIE
    //INTCON = 0;
    //INTCON2 = 0xF5;
    //INTCON3 = 0xC0;
    // Disable Priority Levels on interrupts
    //RCON.IPEN = 0;
    //PIE1 = 0;
    //PIE2 = 0;
    //PIR1 = 0;
    //PIR2 = 0;

    // Configure all ports with analog function as digital
    //ADCON1 |= 0x0F;

    // Ports Configuration
    TRISA = 000001;
    TRISB = 0;
    TRISC = 0xFF;
    TRISD = 00100000;
    TRISE = 0;

    //LATA = 0;
    //LATB = 0;
    //LATC = 0;
    //LATD = 0;
    //LATE = 0;
    }


    void main() {
    Init_Main();
    portd.b4=1;


    Hid_Enable(&userRD_buffer, &userWR_buffer);

    do {



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

    Ow_Reset(&PORTD, 5);
    Ow_Write(&PORTD, 5, 0xCC);
    Ow_Write(&PORTD, 5, 0x44);
    Delay_us(120);

    Ow_Reset(&PORTD, 5);
    Ow_Write(&PORTD, 5, 0xCC);
    Ow_Write(&PORTD, 5, 0xBE);

    oct1 = Ow_Read(&PORTD, 5);
    oct2 = Ow_Read(&PORTD, 5);
    oct1 = oct1 >> 4 ;
    oct2 = oct2 << 4 ;
    temperature = oct1 + oct2 ;


    lumiere = PORTA.B0;

    // Prepare send buffer
    userWR_buffer[0] = k;
    userWR_buffer[1] = temperature;
    userWR_buffer[2] = lumiere;


    // Send the number via USB
    while(!Hid_Write(&userWR_buffe r[1], 1));

    delay_ms(1000); // une ch'tite temporisation ;O]

    }
    }
    while (1);

    Hid_Disable();
    }
    j'utilise la borne 2 de mon pic RA0

    sinon pour la temperature ca marche d'enfer

    while(!Hid_Write(&userWR_buffe r[1], 1));

    delay_ms(1000); // une ch'tite temporisation ;O]

    }
    petite question A quoi correspond ce 1 ??

    Comment puis je faire pour envoyer plusieurs valeur en mm tps ??

    Hid_Write(&userWR_buffer[1], 1);
    Hid_Write(&userWR_buffer[2], 1);
    Hid_Write(&userWR_buffer[3], 1);



    Cordialement
     

  15. vede

    Date d'inscription
    août 2009
    Localisation
    Bleurilles-sur-Bré (Groland-de-l'Autre-Côté)
    Âge
    42
    Messages
    3 353

    Cool

    Bonsoir Bypbop,

    cool ;O] pour la température ;O]

    bon sinon, ça ça fonctionnera pas :

    lumiere = PORTA.B0

    pas directement, c'est "un peu" comme la sonde...

    il faut commencer par initialiser le convertisseur,
    puis sélectionner le canal, puis lancer une conversion,
    puis attendre la fin, puis attendre un peu (100µs)
    avant d'en re-lancer une (de conversion...)...

    sinon, ce cours
    http://pagesperso-orange.fr/fabrice..../ADC_16F88.htm
    malgrés que ce soit pour un 16F88,
    donne une trés bonne explication du fonctionnement
    général de l'ADC des PICs, quel que soit le type de PIC (16F, 18F)...

    c'est "toujours" via les registres :
    -ADCON et/ou
    -ADCON0 et/ou
    -ADCON1 et/ou
    -ANSEL et/ou

    puis la valeur (10 bits) dans
    -ADRESL
    -ADRESH

    et aussi des infos dans l'aide de MikroC (Help > Librairies > ADC)
    (si tu utilises cette librairie même plus besoin de t'emmer..r avec
    les registres concérnés ;O])

    ça fait longtemps que j'ai pas utilisé l'ADC du 4550...
    mais je vais regarder, te tiens au jus d'ici demain soir...

    sinon après, je sais pas exactement, pour le buffer USB...
    ni pour envoyer des variables "en même temps"...
    faudrait aller voir sur le Forum MikroE...

    vede
    ;O]

    re ;O]

    au niveau du code:

    c'est par là qu'il va falloir dé-commenter/ajouter des lignes
    pour pouvoir utiliser le convertisseur :

    // Configure all ports with analog function as digital
    //ADCON1 |= 0x0F;

    et là ça va pas,

    // Ports Configuration
    TRISA = 000001;
    TRISB = 0;
    TRISC = 0xFF;
    TRISD = 00100000;
    TRISE = 0;

    pour A et D, il faut mettre

    TRISA = 0b00000001;
    TRISD = 0b00100000;

    cad un "0b" devant, pour signifier au compilo que c'est en notation binaire...

    car sinon A et D = 00000001...

    vede
    ;O]
    Dernière modification par gienas ; 22/01/2010 à 13h25. Motif: Fusion de deux réponses voisines inutilement rapprochées
     


    • Publicité




Poursuivez votre recherche :




Sur le même thème :




 

Discussions similaires

  1. Problème de communication USB (cdc) sur PIC
    Par carcan dans le forum Électronique
    Réponses: 24
    Dernier message: 25/03/2010, 11h00
  2. Pic18f2550 + USB CDC + AN0
    Par slayerman dans le forum Électronique
    Réponses: 4
    Dernier message: 10/06/2009, 08h46
  3. mikroC
    Par sloter dans le forum Électronique
    Réponses: 6
    Dernier message: 09/03/2009, 22h13
  4. [Brun] avarie platine 5 CD Philips CDC 751
    Par gauthiergp dans le forum Dépannage
    Réponses: 6
    Dernier message: 12/10/2008, 10h46
  5. [Divers] Chageur cd blaupunkt CDC-A08
    Par jeanclaude83 dans le forum Dépannage
    Réponses: 0
    Dernier message: 29/04/2008, 14h08

A voir en priorité dans les contenus de Futura-Sciences : moteur usb, electronique usb, 12v usb, temperature usb, max232 usb, ...
Nous vous recommandons : non usb, player usb, usb ventilateur, matlab usb, emetteur usb, ...
Sur le forum : cm usb, camescope usb, bios usb, meteo usb, usb utilisation, ...
Dans tout le site : pic18 usb cdc, pic usb cdc, pic18 usb cdc 2000, usb cdc driver high speed, mikroc usb pic, mikroc usb hid, cdc, ...