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 -
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
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:
- Programme langage C sinusoidale
- Langage ascii - Guide
- Programme demarrage windows - Guide
- Langage binaire - Guide
- Message programmé iphone - Guide
- Mettre en veille un programme - Guide
2 réponses
Pas si facile.
Il faut que tu travail en binaire, ou avec des entier ?
8bits, c'est 256 valeur.
si tu fait :
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 :
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).
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.
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.
je suis vrement depasser la
merci pour ton aide