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