Programme langage C sinusoidale

jimadores Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   1 299
 
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