Audiyofan
Audiyofan




Poster un nouveau sujet Répondre au sujet  [ 148 messages ]  Aller à la page Précédente  1 ... 5, 6, 7, 8, 9, 10  Suivante
Auteur Message
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Dim 15 Jan 2012, 12:12 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 8920
Localisation: St Mathieu de Tréviers près de Montpellier
Salut Philbob

J'ai besoin de toi

J'arrive a afficher sur la droite de l'zcran LCD la valeur de 0 à 1023 , soit la conversion ADC
mais c'est tout :oops: , pour transformer le résultat je nage , je nage
pourrais tu m'expliquer ou indiquer un lien qui me permette de comprendre
j'arrive pas à appliquer une formule mathématique dans la routine
j'arrive juste à diviser par 10 par exemple le résultat adc et l'afficher
mais ce n'est pas ce que je voulais

ton dernier post est bien détaillé sauf que j'y arrive pas

Aller je vais courrir maintenant qui fait bon et réfléchir mais c'est pas gagné :oops:

A tout de suite

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Dim 15 Jan 2012, 23:26 
Hors ligne
Membre Assidu
Avatar de l’utilisateur

Inscription: Dim 09 Oct 2011, 16:53
Messages: 198
Localisation: 15kms sud Rennes
Bonjour,

@Totof

Etape 1) Mesure

On suppose que le potentiometre est alimenté entre Vcc et la masse.
Vcc est la tension d'alim du µC, la masse est également celle du µC.

Volume à fond, la sortie du potentiometre donne Vcc (pas d'atténuation).
Volume au plus bas, la sortie du potentiometre est à 0V.

Dans ces conditions, la mesure par l'ADC donnera un résultat compris entre
1023 pour Vcc et 0 pour 0V.

Ce résultat est un entier de 10 bits stocké dans un mot de deux octets non signé
déclaré avec le type uint16_t.

Etape 2) Conversion en db

Pour mémoire: niveau_db = 20 x log10 ( tension_mesurée / tension_reference )

Dans notre cas, la tension de référence est Vcc (soit 1023).
Comme la fonction log10 prend un flottant comme argument, on doit convertir
la valeur retournée par l'ADC en flottant.
Pour éviter une erreur possible dans le cas ou la tension mesurée est nulle
(log10(0)=-infini) on lui ajoute 1.

La conversion ADC étant sur 10 bits, l'atténuation max mesurable va donc de
0 db à 60 db.

Etape 3) Moyenne

Pour éviter les fluctuations de la valeur affichée, on réalise une moyenne glissante
sur 20 valeurs. La mesure se stabilise pour un nombre de cycles d'environ 5 fois
la profondeur de la moyenne (un peu comme la charge d'une capa) soit ici 5x20=100 cycles.

Un cycle représente la période d'arrivée des infos de la RC5 (soit 112mx).
100 cycles font approximativement 10 secondes.
C'est le temps necessaire pour stabiliser une mesure qui passe de 0 à -60 db.
C'est aussi le temps que met le ALPS à parcourir toute sa gamme.

Etape 4) Affichage

Rien ne sert d'afficher des décimales pour l'attenuation.
Il faut prendre la valeur absolue de l'atténuation pour éviter les problemes
d'affichage des entiers négatifs (ce n'est peut etre pas bien géré par les
routines que tu as)



Exemple de code:

//-------------------------------------------------------------------------------------
//routine de mesure
//-------------------------------------------------------------------------------------
uint16_t can_mesure(uint8_t voie,uint8_t noise_reduction)
{
volatile uint16_t res;

//aden=0 arret
ADCSRA &= ~_BV(ADEN);

//multiplexage (choix de la voie)
ADMUX=0+voie;

//ADC noise reduction
if (noise_reduction!=0)
{
MCUCR=16;
}

//aden=1 mise en route
ADCSRA = 128+4+1;

//debut conversion
ADCSRA |= _BV(ADSC);

//attente fin de conversion
while ((ADCSRA & 64)!=0)
{
}

//conversion
res=ADCL+ADCH*256;

return res;
}

//-------------------------------------------------------------------------------------

int main(void)
{
uint16_t mes;
float db;
float dbmoy;
uint8_t dbaff;

dbmoy=0;

sei();

while(1)
{
mes=can_mesure(0,1);
db=20*log10(((float)mes+1.0)/1023.0);
dbmoy=(dbmoy*19.0+db)/20.0;
dbaff=(uint8_t)(fabs(dbmoy));

}

return 0;
}
//-------------------------------------------------------------------------------------

_________________
Cordialement
Phil
(http://bidulic.free.fr)


Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Lun 16 Jan 2012, 00:13 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 8920
Localisation: St Mathieu de Tréviers près de Montpellier
Bonsoir Philbob

J'ai lu et re-lu cet après midi
et je suis arrivé à quelquechose de semblable mais pas aussi clair que toi

j'essayerai ta routine demain :oops:

J'ai du rajouter math.h pour les fonctions mathématiques
et je suis parti sur une simple conversion dB

ci-joint mon approche et une capture de l'affichage

#include <avr/io.h>
#include <util/delay.h>

//-------------------------------------------------------------------------------------
//mesure
//-------------------------------------------------------------------------------------
uint16_t can_mesure(uint8_t voie,uint8_t noise_reduction)
{
volatile uint16_t res;

//aden=0 arret
ADCSRA &= ~_BV(ADEN);

//multiplexage (choix de la voie)
ADMUX=0+voie;

//ADC noise reduction
if (noise_reduction!=0)
{
MCUCR=16;
}

//aden=1 mise en route
ADCSRA = 128+4+1;

//debut conversion
ADCSRA |= _BV(ADSC);

//attente fin de conversion
while ((ADCSRA & 64)!=0)
{
}

//conversion
res=ADCL+ADCH*256;

return res;
}


et ce que j'ai collé dans le préamp.c


...
#include <math.h>
...
uint16_t adc_result0; // Conversion ADC de la valeur lue sur le potentiomètre
signed int i;
float j,l;
signed long k,m;

signed char tampon[10];
...
// display the labels on LCD
i = can_mesure(7); // read adc value at PA7
j = (float)((i+1)*5)/1023.0;
k = (float)5/j;
l = log(k);
m = 10*l;
sprintf(tampon,"%2d",m);
dogm_gotoxy(11,1);
dogm_puts("-");
dogm_gotoxy(12,1);
dogm_puts(tampon);
dogm_gotoxy(14,1);
dogm_puts("dB");


C'est moins bien que ton code
mais c'est ce que je suis arrivé à faire :oops:

Faut maintenant que je trouve le moyen de mettre cet affichage
en principal , qui revienne comme l'affichage de la source en fait
avec ton code ou une évolution du miens si il y a besoin

Bonne nuit et encore merci pour ton aide et explications


Fichiers joints:
DSC04564.JPG
DSC04564.JPG [ 612.43 Kio | Vu 5164 fois ]

_________________
Ce qui est pris n'est plus a prendre
Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Lun 16 Jan 2012, 00:18 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 8920
Localisation: St Mathieu de Tréviers près de Montpellier
Une tite question avant d'aller dormir
je lirai la réponse demain matin :mrgreen:

ta routine avec l'interruption peut elle être insérer dans le même main
que l'interruption RC5 :?:

Bonne nuit

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Lun 16 Jan 2012, 06:36 
Hors ligne
Membre Assidu
Avatar de l’utilisateur

Inscription: Dim 09 Oct 2011, 16:53
Messages: 198
Localisation: 15kms sud Rennes
Bonjour,

@Totof

Insertion:

Normalement oui mais je n'en vois pas réellement l'intérêt.
Perso, je logerais la mesure dans la boucle while(1) du main,
juste après la lecture du RC5.
Pour l'affichage, cela se fera naturellement dans la partie
gestion du LCD.

_________________
Cordialement
Phil
(http://bidulic.free.fr)


Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Lun 16 Jan 2012, 07:09 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 8920
Localisation: St Mathieu de Tréviers près de Montpellier
Bonjour

Reste plus qu'a essayer ta routine alors :wink:

Et ensuite un bon nettoyage du préamp.c , car il reste des {} inutiles
je pense, une bonne édition papier et un stylo feront un bon début

Bonne journée

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Mar 17 Jan 2012, 07:40 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 8920
Localisation: St Mathieu de Tréviers près de Montpellier
Bonjour

@ Philbob

j'ai essayé de rentrer ta routine encapsulé dans le while
sous l'interruption du RC5
sûrement pas au bon endroit :oops:
de plus j'arrive pas à la faire fonctionner
Bref faut que je creuse et comprenne encore pas mal de truc

Une t'ite question pour dégrossir

puis je mettre cette routine dans mon
fichier read.c et récupérer la donnée
dans mon fichier preamp.c
un peu comme la routine RC5 en fait
une sorte de read.data :oops: :oops:

Autre détail , j'arrive à faire fonctionné cette partie de la formule
comme ceci mais pas la suite avec la moyenne glissante
quand je rajoute les lignes , le µc tourne en rond
comme si il n'arrivait pas à trouver la valeur

signed int r; // Conversion ADC de la valeur lue sur le potentiomètre
float j,l; //
signed long k,m; //

r = can_mesure(7); // read adc value at PA7
j = (float)((r+1)*5)/1023.0;
k = (float)5/j;
l = log10(k);
m = 20*l;

ici le m me donne bien la valeur en dB

Bref plein de question :wink:

ce que je comptais faire comme ajout au fichier read.c
// ma version revisitée avec Philbob

int read(void)
{
signed int i; // Conversion ADC de la valeur lue sur le potentiomètre
float j,l; //
signed long k,m; //
float dbmoy;
uint8_t dbaff;

dbmoy=0;


while(1)
{
i = can_mesure(7); // read adc value at PA7
j = (float)((i+1)*5)/1023.0;
k = (float)5/j;
l = log10(k);
m = 20*l;
dbmoy=(dbmoy*19.0+m)/20.0;
dbaff=(uint8_t)(fabs(dbmoy));

}

return 0;
}


A ce soir

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Sam 21 Jan 2012, 10:20 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 8920
Localisation: St Mathieu de Tréviers près de Montpellier
Bonjour

Après quelques jours studieux à décortiquer le languauge C propre au AVR de Atmel
j'ai peauffiné mon projet

ci-joint 4 captures

une paire pour illustrer la version avec lecture du volume sous forme de bargraphe
solution "visuelle"
une paire pour illustrer la version en pourcent
j'ai choisi les % plustôt que les dB car en dB on obtiens une profondeur de -60 à 0
en % de 0 à 100 donc la plage plus grande me conviens mieux
je me tâte entre ces 2 version maintenant , de plus le potar ALPS est un log
donc ça bouge faiblement au début puis plus rapidement à la fin :oops:

En archive les fichiers complet à jour (21/01/2012) sous Kicad et Kontrollerlab
donc toutes les sources mises à dispo
Si quelqu'un serait tenter ou voudrait un coup de main pour modifier
faire signe

Je vais passer aux essai en réel sur le système dès que j'ai fini de souder
les quelques composants manquant

Bonne lecture

Un grand merci à Philbob et à Wismerhill pour leurs aides et pour les idées tub18


Fichiers joints:
Potmotalps_bargraph1.JPG
Potmotalps_bargraph1.JPG [ 614.95 Kio | Vu 5114 fois ]
Potmotalps_bargraph2.JPG
Potmotalps_bargraph2.JPG [ 568.34 Kio | Vu 5114 fois ]
Potmotalps_pourcent1.JPG
Potmotalps_pourcent1.JPG [ 553.98 Kio | Vu 5114 fois ]
Potmotalps_pourcent2.JPG
Potmotalps_pourcent2.JPG [ 566.43 Kio | Vu 5114 fois ]
Potmotalps_Kicad_v1.4_1.5.tar.bz2 [504.94 Kio]
Téléchargé 224 fois
Potmotalps_Kontrollerlab_v1.4_V1.5.tar.bz2 [36.66 Kio]
Téléchargé 232 fois

_________________
Ce qui est pris n'est plus a prendre
Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Sam 21 Jan 2012, 17:55 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 8920
Localisation: St Mathieu de Tréviers près de Montpellier
Bonsoir

Après vérification et test de la platine relais
une erreur s'est glissée dans le fichier préamp_xxxxx.c
à la ligne 159 , le code hexadecimal doit être 0X7E à la place de 0X7F
la ligne correcte
DDR(SOURCE_PORT) = 0x7E;
en fait comme la logique de fonctionnement du relais mute
est l'inverse de celle des relais source il faut 01111110 à la place de 01111111
voilà rien de grave mais faut le corriger

Tout commentaire sur le montage est le bienvenu :mrgreen:

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Sam 21 Jan 2012, 23:59 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 8920
Localisation: St Mathieu de Tréviers près de Montpellier
Bonsoir

Amélioration du soir ===> espoir

vu que l'on peut modifier le potentiomètre manuellement , j'ai rajouter 3 lignes
pour mettre à jour l'affichage de la lecture du volume
à placer à la ligne 348,349 et 350 du fichier préamp_bargraphe.c par exemple

if(src_dbcnt == SWITCH_LONG_PUSH) // en cas d'appui long sur le bouton source, mise à jour
// de l'affichage du volume, mouvement manuel du potentiomètre par exemple
vol_stat_dsp = 1;


En faisant un appui long sur le bouton source ont met à jour l'affichage :mrgreen:

Bonne nuit

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Dim 22 Jan 2012, 08:27 
Hors ligne
Membre Assidu
Avatar de l’utilisateur

Inscription: Ven 11 Fév 2005, 06:51
Messages: 1424
Localisation: Toulouse
Totof a écrit:
En faisant un appui long sur le bouton source ont met à jour l'affichage :mrgreen:
Ca craint ! :shock:

Il faudrait que tu fasse une mesure à chaque cycle, que tu la compares avec la valeur affiché et que tu met à jour si l’écart est de plus d'une unité. 1% si tu es en %, 1 db si t'es en db...


Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Dim 22 Jan 2012, 09:21 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 8920
Localisation: St Mathieu de Tréviers près de Montpellier
Bonjour Wismerhill

Ah oui bonne idée ça :mrgreen:

Mettre comme le disait Philbob , une lecture du volume dans le while
1° stocker la valeur du potar au démarrage
2° passer si la valeur reste identique à la relecture
3° mettre à jour l'affichage si différent

je regarde ça après les obligations dominicales :oops:

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Dim 22 Jan 2012, 09:39 
Hors ligne
Membre Assidu
Avatar de l’utilisateur

Inscription: Ven 11 Fév 2005, 06:51
Messages: 1424
Localisation: Toulouse
Totof a écrit:
2° passer si la valeur reste identique à la relecture
La valeur bouge en permanence. Vaut mieux mettre en place un petit hystérésis de manière à ne pas calculer ton log et balancer des données à l'afficheur pour rien.


Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Dim 22 Jan 2012, 10:08 
Hors ligne
Site Admin
Avatar de l’utilisateur

Inscription: Mer 01 Oct 2003, 22:47
Messages: 8920
Localisation: St Mathieu de Tréviers près de Montpellier
Hystérésis tu parle d'un écart à rajouter à la consigne avant de bouger l'affichage
si oui c'est en cours d'essai
après essai et vérif je post :oops:
A plus

_________________
Ce qui est pris n'est plus a prendre


Haut
 Profil  
 
 Sujet du message: Re: Ajout d'une télécommande sur un ampli (ou un préamp)
MessagePosté: Dim 22 Jan 2012, 10:42 
Hors ligne
Membre Assidu
Avatar de l’utilisateur

Inscription: Ven 11 Fév 2005, 06:51
Messages: 1424
Localisation: Toulouse
Oui c'est ça.


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 148 messages ]  Aller à la page Précédente  1 ... 5, 6, 7, 8, 9, 10  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 27 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Aller à:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduction par: phpBB-fr.com