transmission Serial IR et attiny84

Bonjour ce message fait suite au topic ici Transmission IR serie Nano et attiny84 - Réalisations et Projets Finis - Arduino Forum

Ici le code utilisé,
La transmission avec Softwareserial est neutralisée par le -1 dans la déclaration comme indiqué dans la notice de la librairie.

Pour résumer d un attiny à un autre, j'ai une bonne porteuse qui varie entre 37960 et 38040 en fréquence. Cette fréquence est bien accrochée par le TSOP4838 du recepteur.

Il n en va pas de même avec le débit de SoftwareSerial, que je doit ajuster à chaque fois.... de 2450 à 2610 bds...... malgré le quartz externe.
Une pile suivi d un LM2940 est utilisé en source d energie....

En utilisant un nano à la place de l attiny je n ai pas du tout ce soucis....et affiche un vrai 2400bds....

la différence entre les deux : un UART sur le nano, et probablement une alim mieux régulée

Le code utilisé pour les émetteurs :

[code]

// transmission serie Infrarouge avec attiny 84
// porteuse 38khz sur timer1
// serial on timer 0 sortie PA7 canal B du timer 0
// attiny avec 16Mhz externe.



#include <SoftwareSerial.h>

volatile unsigned char startbyte=225; // en tête transmission
volatile unsigned char valuebyte; // donnée à transmettre
volatile unsigned char staticbyte=55; // pour contrôle
volatile unsigned char checksumbyte; // Somme : donnée + contrôle

SoftwareSerial Serial(-1, PA7); // rx : -1 car reception desactivée selon document software serial

void setup(){

  pinMode(PA1,OUTPUT);//temoin transmision Led
  pinMode(PA5,OUTPUT);// timer 1 port B  
  pinMode(PA6,OUTPUT);// timer 1 port A 
  pinMode(PA7,OUTPUT);// timer 0 port B

// OSCCAL = 0x5B;  // calibration timer interne
 

  //configuration de la porteuse 38khz sur timer 1
  noInterrupts();  
  TCNT1 = 0;
  TCCR1A=0;
  TCCR1B=0;
  TCCR1B |=(1<<WGM12); //Start timer 1 in CTC mode
  // les deux canaux du timer1 sont activés pour attaquer avec 2x20mA les Leds
  TCCR1A |=(1<<COM1B0); //Timer1 in toggle canal B
  TCCR1A |=(1<<COM1A0); //Timer1 in toggle canal A
  TCCR1B |=(1<<CS10) ; //prescaler
  interrupts();
  OCR1A=210; //CTC Compare value integration du decalage lié à la calibration du timer
  OCR1B=210; //CTC Compare value
  //--------------------------------------------
  Serial.begin(2550); // valeur differente selon l'attiny utilisé.....
}    

void loop(){ // controle de transmission : transmet les numeros 1 à 200, par salve de 3 numeros
 if (valuebyte >200) (valuebyte=1); 
 for (valuebyte=1;valuebyte<200;valuebyte++) {
 checksumbyte=valuebyte+staticbyte; 
 for (int i=0;i<3;i++) {
 digitalWrite(PA1,HIGH);// Led on
 Serial.write((uint8_t)startbyte); // start_byte 
 Serial.write((uint8_t)valuebyte); // value_byte  
 Serial.write((uint8_t)staticbyte); // static_value  
 Serial.write((uint8_t)checksumbyte); // checksum : value byte+static byte
 digitalWrite(PA2,LOW);
 //delay(10);
 digitalWrite(PA1,LOW);// Led off
 delay(100); //attente de 0.1 sec entre chaque 3 salves
}
}

}

[/code]

Et là je n ai pas encore parlé des soucis liés à la temperature...

Eh bien, mais messages suscitent un enthousiasme debordant.....ais je manquer quelque chose??

Merci à vous.

Bonjour

nous sommes à un moment de l'année ou les raisons de s'enthousiasmer loin du web , du forum, d'Arduino... ne manquent pas !!...........patience !!

En attendant voici une explication probable (sous réserve, non pratiqué)

Il se pourrait que le Tiny84 ne soit pas complètement informé de la présence du quartz externe et qu'il soit toujours en configuration d'usine pour l'horloge(horloge interne peu précise)

Sur la page web du noyau (core) pour les Tiny on lit ceci :

When using a chip for the first time, or after changing the clock speed or BOD settings, you must do "burn bootloader" to set the fuses, even if you are not using a chip with a bootloader

Il ne suffit donc pas de sélectionner l'option Quartz 16MHz externe dans le menu déroulant des cartes, il faut modifier en conséquence les 'fusibles' au moyen de la commande de "gravure de la séquence d'initialisation". Cette commande ne servant pas içi à flasher un bootloader mais uniquement à flasher les nouvelles valeurs des fusibles déterminant certaines configurations initiales du Tiny84 au reset.
modification des fusibles.jpg

Hello, merci pour ton retour, en effet j'avais un peu dans l'idée que les vacances compromettaient la dynamique du forum...

Concernant ce problème de flashage en effet il faut en avoir connaissance,
merci pour ton aide je vais avancer dans ce sens et explorer cette piste.

Je commenterai ici mes résultats..