Généré signal carré pic

Résolu
flolarajasse Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   -  
flolarajasse Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   -
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

13 réponses

chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
Salut,
cela ne serait pas plutot:
while(TRUE)
{
PORTA1=1;
delay_ms(100);
PORTA1=0;
delay_ms(100);
}
@+
3
flolarajasse Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   14
 
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
tibobo_77 Messages postés 1358 Date d'inscription   Statut Membre Dernière intervention   263
 
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
flolarajasse Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   14
 
je le programme en C!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flolarajasse Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   14
 
pourtant je fais du C depuis un petit moment, mais là je galère un peu.peut-être la fatigue ;-)
0
tibobo_77 Messages postés 1358 Date d'inscription   Statut Membre Dernière intervention   263
 
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
flolarajasse Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   14
 
ok je vais tester sa.en te remerciant ;-)
0
chuka Messages postés 965 Date d'inscription   Statut Membre Dernière intervention   378
 
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
flolarajasse Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   14
 
merci chuka ;-)
0
flolarajasse Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   14
 
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
tibobo_77 Messages postés 1358 Date d'inscription   Statut Membre Dernière intervention   263
 
Ce serai plus jolie de le faire dans une interruption, comme le dit chuka, mais ça devrai marcher.
0
flolarajasse Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   14
 
ok je vais tester. Merci du coup de pouce ;) @+
0
flolarajasse Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   14
 
sa n'a pas l'air de marcher, sa m'affiche "code has no effect", en clair sa ne fait rien!!:'(
0