Je crée ce poste car depuis un moment avec "trimarco232" nous restons bloqué sur la génération d'un signal carré avec une méga2560 pour se synchroniser avec un ECU (lier au sujet 'PCM Control Unit' ).
J'ai besoin de crée un signal de 153.6khz alors que j'ai trouvé que la méga était limité à 65khz, vrai ou pas? y'a t'il des solutions ?
Voici le setup déjà utilisé sans aucun résultat :
void setup() {
pinMode (10, HIGH); // sur un mega OC2A est sur la pin 10
TCCR2A = 0x23 ;
TCCR2B = 0x09 ; // mode 7, clock prescale by 1
OCR2A = 104-1 ; // 16000khz / 104 = 153.8khz
Serial.begin(9600);
Serial2.begin(9600);
}
--------------------------------------
void setup() {
digitalWrite (10, HIGH); // sur un mega OC2A est sur la pin 10
TCCR2A = 0x23 ;
TCCR2B = 0x09 ; // mode 7, clock prescale by 1
OCR2A = 104-1 ; // 16000khz / 104 = 153.8khz
Serial.begin(9600);
Serial2.begin(9600);
}
--------------------------------------
void setup() {
pinMode (10, OUTPUT); // sur un mega OC2A est sur la pin 10
TCCR2A = 0x23 ;
TCCR2B = 0x09 ; // mode 7, clock prescale by 1
OCR2A = 104-1 ; // 16000khz / 104 = 153.8khz
Serial.begin(9600);
Serial2.begin(9600);
}
--------------------------------------
void setup() {
digitalWrite (10, OUTPUT); // sur un mega OC2A est sur la pin 10
TCCR2A = 0x23 ;
TCCR2B = 0x09 ; // mode 7, clock prescale by 1
OCR2A = 104-1 ; // 16000khz / 104 = 153.8khz
Serial.begin(9600);
Serial2.begin(9600);
}
--------------------------------------
Tu as l'air d'utiliser les timers. Avec un timer en mode CTC les micro avr peuvent générer des signaux jusqu'à la moitié de la fréquence horloge soit 8MHz.
Un site qui complète bien la datasheet du micro et qui pourrait t'intéresser : celui de Mike Gamon.
Merci pour ton retour, je débute et ne connais pas les Timers, ce code ne vient pas de moi mais de "trimarco232" qui m'aide beaucoup sur mon projet principal.
Je n'aurais pas trouvé seul ce code ou du moins pas de suite, Je reste donc sur cette méthode ?
Je parle de synchronisation, mais n'auras pas besoin de changer, c'est pour communiquer avec un ECU dont le protocole ce trouve ICI.
Extrait:
Communications baud rate is 9600 baud (default). Clock speed for this baud rate
is 153.6 Khz, plus or minus 5 khz (as tested by PL& MS). Other baud rates and
matched clocks may be possible as well. Clock GENERATED by the Host
terminal (Consult or PC Interface). Synchronizing the clock to the data lines is
NOT necessary. E.g. the clock free runs at the required speed. (16x the data rate).
Avec un timer contrôlé par des registres 8 bits et un diviseur d'horloge pour le timer N= 1
on obtient
OCRXA = 50 F = 156,863 kHz
OCRXA = 51 F = 153,846 kHz
OCRXA = 52 F = 150,943 kHz
68tjs:
Avec un timer contrôlé par des registres 8 bits et un diviseur d'horloge pour le timer N= 1
on obtient
OCRXA = 50 F = 156,863 kHz
OCRXA = 51 F = 153,846 kHz
OCRXA = 52 F = 150,943 kHz
J'ai une tolérance de 5khz donc 153.8 est très bien.
En le remplaçant à la place de "OCR2A = 104-1 ;"
J'obtient l'erreur Arduino : 'OCRXA' was not declared in this scope.
Pour la mesure des signaux il existe un outil assez universel pour environ 7€ : analyseur logique clone de Saleae.
Soyons d'accord la précision ne sera pas celle d'un fréquencemètre mais c'est suffisant.
J'obtient l'erreur Arduino : 'OCRXA' was not declared in this scope.
Que tu ne saches pas que cela se trouve dans la datasheet je le conçois aisément.
Mais qu'une fois que le renseignement t'a été donné je pense que tu te dois de lire la partie timer de la datasheet d'autant que le renseignement que je t'ai donné est pour un micro Atmega328p (UNO), pour un atmega2560 (Mega) une vérification s'impose.
Grosso modo tu as des registres pour :
fixer la valeur du pré-scaler d'horloge : c'est le fait de fixer une valeur différente de 0 qui lance le timer.
autoriser le timer à prendre le contrôle d'une des deux sorties qui lui sont affectées.
fixer le mode de génération de signaux (pour un signal de type horloge il faut le mode CTC)
fixer la fréquence
Evite de te servir du timer 0 qui est utilisé par les fonctions de temps arduino.
Et bien évidement le timer utilisé ne sera plus en configuration "arduino" mais en configuration 200sx200.
Oui et je t'en remercie mais je n'ai que survolé pour le moment, n'étant pas très doué en anglais je ne suis pas aller au fond des chose, mais je vais le faire.
Je vais étudier tous les messages et site posté jusqu'au bon fonctionnement
Bonjour,
merci pour vos implications
le souci que j'avais, c'est que je ne suis pas parvenu à obtenir les 2.5v qui correspondent à un signal carré sur la broche 10
ne disposant pas d'arduino mega, je n'ai pas (pu) voulu pousser plus loin les investigations
trimarco232:
Bonjour,
merci pour vos implications
le souci que j'avais, c'est que je ne suis pas parvenu à obtenir les 2.5v qui correspondent à un signal carré sur la broche 10
ne disposant pas d'arduino mega, je n'ai pas (pu) voulu pousser plus loin les investigations
1 erreur dans TCCR2A (activation de la voie B au lieu de la voie A) -> repompé sans vérifier ...
1 bévue dans le calcul de la période : OCR2A = 104-1 au lieu de OCR2A = 104/2 -1 -> oublié que la période d'un signal carré, c'est 2 fois la durée de l'impulsion ...