Programme langage C sinusoidale

Fermé
jimadores Messages postés 2 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 20 mars 2008 - 20 mars 2008 à 14:56
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 21 mars 2008 à 08:37
Bonjour,
je souhaite realiser un signal sinusoidale
en programmant un AT mega 16 avec un prog en langage C ,qui m'incremente et decremente mon port 8 bits


c'est a dire passer de la valeur 0000 0000 à 1111 1111 puis le decrementer 1111 1111 à 0000 0000 pour obtenir un signal en marche d'escalier d'une forme approchante a celui d'une sinusoide de frequence de 1,56Khz avec un reseau R2R et apres je le filtre

donc je souhaite juste le programme qui realise l'incrementation et la decrementation
merci d'avance a vous ,j'en est vrement besoin merci
A voir également:

2 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
20 mars 2008 à 16:59
Pas si facile.
Il faut que tu travail en binaire, ou avec des entier ?
8bits, c'est 256 valeur.
si tu fait :
S(t)=128*(sin(w*t)+1);

tu aura ton signal. w est ta pulsation (fréquence fois deux pi) et t le temps.
si tu ne peux pas utiliser la fonction sinus, c'est plus dur.
si w*t n'est pas trop proche de pi/2, tu peux utiliser le dévellopement limité de sinus :
sin(t)=t-t^3/3!+t^5/5!
     =sum_n=0^inf (-1)^n*t^(2n+1)/(2n+1)!
si tu prend un n assez grand, tu peux ennemer la fonction sinus assez loin (en fait, je crois même que tu peux faire plusieurs périodes).
0
jimadores Messages postés 2 Date d'inscription jeudi 20 mars 2008 Statut Membre Dernière intervention 20 mars 2008
20 mars 2008 à 17:25
je ne peut pas utiliser la fonction sinus et je travail avec des nombre entier
je suis vrement depasser la
merci pour ton aide
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
21 mars 2008 à 08:37
je te conseil de travailler avec des reels, puis de convertir en entier, c'est plus simple.
Pour le dévellopement limitée, j'ai une erreur inférieur à 1% sur l'interval [0,pi[ en prenant les 6 premiers termes (soit jusqu'à x^11) pour le reste il suffit d'utiliser les propriétés de parité et de périodicité de sinus.
il faut que utilise comme entier un "unsigned char" qui en binaire vaut bien 8 bit (du moins la plupart du temps : ascii étendu) comme ça tu as un lien direct entre ton binaire et la valeur entière représenter, si tu ne met pas unsigned, tu va avoir un problème avec les nombres négatifs.
0