Généré signal carré pic

Résolu
Bonjour,
Je souhaite généré un signal carré grâce à mon PIC 18F4550 à une certaine fréquence souhaitée.Comment faire?
Pouvez vous m'aidez svp?
Merci
Flo
Configuration: Windows XP
Firefox 3.5.7

13 réponses

  1. Salut,
    cela ne serait pas plutot:
    while(TRUE)
    {
    PORTA1=1;
    delay_ms(100);
    PORTA1=0;
    delay_ms(100);
    }
    @+
    3
    1. c bon j'ai trouvé.j'ai tout simplement fait :

      void main(void)
      {
      while (TRUE)
      {
      usb_task();
      usb_debug_task();

      output_high(PIN_B0);
      delay_us(200);
      output_low(PIN_B0);
      delay_us(200);
      }

      }

      et c'est bon sa marche très bien!!
      merci du coup de main ;D
      2
      1. Tu le programmes pour qu'il te renvoie des suites de 0 et de 1 sur une sortie numérique.
        Pour ce qui est de la fréquence, base toi sur ton quartz.
        Et puis, ton pic, tu le programmes comment?
        1
        1. je le programme en C!
          0
          1. pourtant je fais du C depuis un petit moment, mais là je galère un peu.peut-être la fatigue ;-)
            0
            1. Franchement je pense que ça suffit (sauf si tu as d'autre choses a faire, il y aura besoin d'une interruption)

              while(1){
              PORTA1(1)
              wait(t)
              PORTA1(0)
              wait(t)
              }

              ou t est la demie période de T avec f=1/T.
              Et PORTA1 une de tes sorties numérique

              Pardon pour la syntaxe, ça fait des années que je n'ai pas fait de microC...
              0
              1. ok je vais tester sa.en te remerciant ;-)
                0
                1. Salut,
                  sinon utilise les interruption timer....
                  dans l'interruption tu fais ton changement d'etat du bit en sortie voulu (par exemple le 1er bit du portA est en sortie)
                  LATAbits.LATA1^=1;
                  Bon courage!!

                  @+
                  0
                  1. en fait ce serait juste cela?

                    #define PORTA1 PIN_A1

                    void main()
                    {

                    setup_adc_ports(NO_ANALOGS|VSS_VDD);
                    setup_adc(ADC_OFF);
                    setup_psp(PSP_DISABLED);
                    setup_spi(SPI_SS_DISABLED);
                    setup_wdt(WDT_OFF);
                    setup_timer_0(RTCC_INTERNAL);
                    setup_timer_1(T1_DISABLED);
                    setup_timer_2(T2_DISABLED,0,1);
                    setup_comparator(NC_NC_NC_NC);
                    setup_vref(FALSE);

                    while(TRUE)
                    {
                    PORTA1==(1);
                    delay_ms(100);
                    PORTA1==(0);
                    delay_ms(100);
                    }

                    }

                    merci d'avance
                    0
                    1. Ce serai plus jolie de le faire dans une interruption, comme le dit chuka, mais ça devrai marcher.
                      0
                      1. ok je vais tester. Merci du coup de pouce ;) @+
                        0
                        1. sa n'a pas l'air de marcher, sa m'affiche "code has no effect", en clair sa ne fait rien!!:'(
                          0