Go Down

Topic: [Résolue] Génération d'un signal carré par une arduino méga (Read 1 time) previous topic - next topic

200sx200

Bonjour tous le monde,

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 :

Code: [Select]


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);
}

--------------------------------------




Merci d'avance pour votre aide.

68tjs

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.
http://www.gammon.com.au/forum/?bbtopic_id=123

200sx200

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 ?

J-M-L

Vous avez essayé avec la arduino-pwm-frequency-library?

EDIT - soucis potentiel sur MEGA... je regarde
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

200sx200

Non du tout, je vais regarder ce qu'il en ai, merci.

_pepe_

Supprimé

200sx200

Bonjour,

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:
Code: [Select]

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).

hazerty565

#7
Sep 02, 2017, 05:59 pm Last Edit: Sep 02, 2017, 06:03 pm by hazerty565
http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-dds-sinewave-generator/

tien voila quelque chose qui pourras t'aider

par la suite, il faut un ampli pour le tranformer en carré

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

200sx200

Merci pour vos réponse. Je vais lire ces pages.

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.

_pepe_

Supprimé

200sx200

Ah d'accord au t'en pour moi, merci.

Il existe un moment de vérifier le bon fonctionnement sur la Pin ?

_pepe_

Supprimé

_pepe_

Supprimé

200sx200

D'accord merci pour ces explications, je n'aurais rien avec un voltmètre ?

Go Up