Arduino Forum

International => Français => Topic started by: infobarquee on Sep 05, 2012, 02:38 pm

Title: conflit rf434 et ethernet shield [Résolu]
Post by: infobarquee on Sep 05, 2012, 02:38 pm
bonjour tout le monde,
encore un petit projet un peu fou puisque j'ai un peu de temps libre enfin.

je compte piloter via un nono d'autres nono en utilisant un rf434mhz.
je récupère des données via l'ethernet shield sur un server ou je le reprog a volonté en lui envoyant les données, il les parse, etc...

le problème que je rencontre est que dès que je mets dans le setup() les données pour le rf434, je ne peux plus recevoir les données via ethernet sur le nono.
Quote
// Initialise the IO and ISR
  // vw_set_ptt_inverted(true); // Required for DR3100
   vw_setup(2000);    // Bits per sec
   vw_set_tx_pin(3);


j'ai essayé toutes les pins de 2 à 13 rien a faire, je commente ces lignes et tout rentre dans l'ordre, mais évidemment plus moyen d'envoyer des données via rf.
comme d'habitude je dois passer a coté d'un truc tout bête, mais ou?

merci d'avance
Title: Re: conflit rf434 et ethernet shield
Post by: Artouste on Sep 05, 2012, 03:13 pm

bonjour tout le monde,
encore un petit projet un peu fou puisque j'ai un peu de temps libre enfin.

je compte piloter via un nono d'autres nono en utilisant un rf434mhz.
je récupère des données via l'ethernet shield sur un server ou je le reprog a volonté en lui envoyant les données, il les parse, etc...

le problème que je rencontre est que dès que je mets dans le setup() les données pour le rf434, je ne peux plus recevoir les données via ethernet sur le nono.
Quote
// Initialise the IO and ISR
   // vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);    // Bits per sec
    vw_set_tx_pin(3);


j'ai essayé toutes les pins de 2 à 13 rien a faire, je commente ces lignes et tout rentre dans l'ordre, mais évidemment plus moyen d'envoyer des données via rf.
comme d'habitude je dois passer a coté d'un truc tout bête, mais ou?

merci d'avance

Les canards vont bien ?  :smiley-mr-green:
tu a validé individuellement les différentes parties ?
reception 433 OK ?
ethernet OK ?
Tu a fait ensuite un bilan d'occupation des pins entre les modules ?
Quelquefois il y peu y avoir  un "conflit de canard"   8)
je ----> []

Title: Re: conflit rf434 et ethernet shield
Post by: barbudor on Sep 05, 2012, 03:19 pm
Quel shield Ethernet ?
Normalement les shields Ethernet n'utilisent que le SPI

Le module RF c'est un bête module cablé à la main ou un shield ?

Apparemment tu a branché ton RF434 sur la broche TX(3) qui est aussi utilisée par Serial.
J'aurais soupçonné ca mais si tu as essayé d'autres broches ...

Peut être que le conflit de ressource est ailleurs ? timer ?
Il faudrait faire une passe sur le code des 2 libs pour savoir si elles n'utiliseraient pas le même timer ?
Title: Re: conflit rf434 et ethernet shield
Post by: infobarquee on Sep 05, 2012, 03:23 pm
héhéhéhé toujours là quand un truc de malade se prépare :)
les canards vont bien et ils y en a même des nouveaux, mais pas nés ici.

oui tout les modules fonctionnes individuellement.
changement des cartes uno et ethernet.

si je désactive les 2 lignes pour le rf, tout fonctionne nickel.
dès que je décomente pour activer le rf en transmission, ben ca réceptionne plus les données en udp donc plus de traitement des variables.
et ceci même si le rf n'est pas connecté.

j'ai lu quelque part à un pb de timer entre l'ethernet et le rf, cela aurait il un rapport?

EDIT
c'est ce module de rf http://forum.snootlab.com/viewtopic.php?f=38&t=399
je vois bien la led rx clignoter quand les données arrivent, mais aucun traitement.

EDIT2
si je désactive simplement
vw_setup(2000);    // Bits per sec
ca refonctionne, mais pas testé l'émission dans ce cas là
Title: Re: conflit rf434 et ethernet shield
Post by: barbudor on Sep 05, 2012, 08:01 pm
J'ai rapidement regardé la lib VirtualWire et vw_setup() configure le TIMER 1

Par contre je ne vois rien dans Ethernet
Tu utilises bien la lib Ethernet de arduino/libraies/Ethernet ?
Ou un autre ?
Title: Re: conflit rf434 et ethernet shield
Post by: infobarquee on Sep 05, 2012, 09:51 pm

J'ai rapidement regardé la lib VirtualWire et vw_setup() configure le TIMER 1

Par contre je ne vois rien dans Ethernet
Tu utilises bien la lib Ethernet de arduino/libraies/Ethernet ?
Ou un autre ?

c'est bien cette lib, à moins qu'être en ide 0.22 sous nunux change quelque chose dans les libs.
mais la je pige pas trop.
Title: Re: conflit rf434 et ethernet shield
Post by: infobarquee on Sep 07, 2012, 09:45 am
bonjour,
petit test ce matin, par acquis de conscience et miracle ca fonctionne.
si quelqu'un peut m'expliquer pourquoi?
cela voudrait dire qu'il y a une priorité?
le code bloque plus, a voir si les données sont bien envoyées par contre au récepteur.

au départ j'avais mis la conf du rf à la fin comme ceci
Quote
void setup() {
  Ethernet.begin(mac, ip, gateway, mask);
  Udp.begin(localPort);
  Serial.begin(9600);
  envoiip();
  Serial.println("setup");
      // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);    // Bits per sec
    vw_set_tx_pin(3);
    //vx_tx_active();


}




et j'ai inversé comme ceci, et ca fonctionne
Quote
void setup() {
      // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);    // Bits per sec
    vw_set_tx_pin(3);
    //vx_tx_active();
  Ethernet.begin(mac, ip, gateway, mask);
  Udp.begin(localPort);
  Serial.begin(9600);
  envoiip();
  Serial.println("setup");



}

Title: Re: conflit rf434 et ethernet shield
Post by: skywodd on Sep 07, 2012, 01:48 pm
Bonjour,

La librairie ethernet n'utilise pas le timer1 normalement, UDP par contre je ne sait pas (je pense pas).
Il doit y avoir un registres qui est modifié par Ethernet.begin() et qui bloque vw_setup() par la suite.

Il faudrait comparé vw_setup() et Ethernet.begin() pour voir quelle(s) action(s) pourraient donner ce conflit.
Title: Re: conflit rf434 et ethernet shield
Post by: infobarquee on Sep 10, 2012, 09:19 pm
bonjour tout le monde,
bon je bute sur un léger problème encore avec le rf.
je peux envoyer des données, mais il y a un maximum a ne pas dépasser en réception.
jusqu'a 27 caractères (123456789123456789123456789) pas de problème.
28 caractères = galère  :smiley-yell:
y aurait il un moyen d'augmenter cette limite?
Title: Re: conflit rf434 et ethernet shield
Post by: Artouste on Sep 10, 2012, 09:45 pm

bonjour tout le monde,
bon je bute sur un léger problème encore avec le rf.
je peux envoyer des données, mais il y a un maximum a ne pas dépasser en réception.
jusqu'a 27 caractères (123456789123456789123456789) pas de problème.
28 caractères = galère  :smiley-yell:
y aurait il un moyen d'augmenter cette limite?

Bonsoir Infobarquee
il va falloir "cancaner" un peu plus sur le sujet  :smiley-mr-green:
lien vers docs et refs  8)
si se sont des betes modules RF en E et R, ils ne sont pas en causes
!
ton probleme est peut etre du à un buffer soft qui sature , emission ou reception
il faut aussi voir ton code
Title: Re: conflit rf434 et ethernet shield
Post by: infobarquee on Sep 10, 2012, 10:43 pm
salut Artouste,
alors je vais coincoiner un peu plus.
suffit de prendre les scripts d'origine http://forum.snootlab.com/viewtopic.php?f=38&t=399
bon je pense avoir trouvé le pourquoi du problème
0-255-60-199-60-124-60-99-60 ne passe pas,
on vire les -, ca passe
0s255s60s199s60s124s6s09s96s0 ne passe pas

donc, ce n'est pas un problème de nombre de caractères en fait, mais du mélange de type de caractère.

Title: Re: conflit rf434 et ethernet shield
Post by: infobarquee on Sep 11, 2012, 08:50 am
re test ce matin,
en mettant de a à z, soit 26 lettres, ca passe.
abcdefghijklmnopqrstuvwxyza soit 27, ca passe encore
abcdefghijklmnopqrstuvwxyzab soit 28, ca passe plus

donc, on est bien limité à 27 caractères pour envoyer en une seule trame des données.

si quelqu'un a uns solution pour repousser cette limite, je suis preneur, sinon je vais être obligé de faire une fonction pour découper les données et les envoyer une par une, et franchement, ca me COIiiiiinc un peu :)
Title: Re: conflit rf434 et ethernet shield
Post by: Artouste on Sep 11, 2012, 12:32 pm


donc, on est bien limité à 27 caractères pour envoyer en une seule trame des données.

si quelqu'un a uns solution pour repousser cette limite, je suis preneur, sinon je vais être obligé de faire une fonction pour découper les données et les envoyer une par une, et franchement, ca me COIiiiiinc un peu :)
Ami des canetons, bonjour !
ton probleme viens de la lib virtualwire
voir la doc
http://www.open.com.au/mikem/arduino/VirtualWire.pdf
et particulièrement
----------------------------------------------------
6.0 Implementation Details
Messages of up to VW_MAX_PAYLOAD (27) bytes can be sent
Each message is transmitted as:
• 36 bit training preamble consisting of 0-1 bit pairs
• 12 bit start symbol 0xb38
• 1 byte of message length byte count (4 to 30), count includes byte count and FCS
bytes
• n message bytes, maximum n is VW_MAX_PAYLOAD (27)
• 2 bytes FCS, sent low byte-hi byte
----------------------------------------------------
A voir si la charge utile max (payload) peut etre "facilement" changée dans la lib, voir avec les petits genies du code.  8)

voir eventuellement du coté de VirtualWire.h si ça peut etre résolu

Code: [Select]
// Maximum number of bytes in a message, counting the byte count and FCS
#define VW_MAX_MESSAGE_LEN 30 // <------------------

// The maximum payload length
#define VW_MAX_PAYLOAD VW_MAX_MESSAGE_LEN-3 // <--------------- 30-3=27



Title: Re: conflit rf434 et ethernet shield
Post by: infobarquee on Sep 11, 2012, 12:47 pm
j'ai déjà fait joujou avec la lib en modifiant dans VirtualWire.h
Quote

// Maximum number of bytes in a message, counting the byte count and FCS
#define VW_MAX_MESSAGE_LEN 30 ====>100

// The size of the receiver ramp. Ramp wraps modulu this number
#define VW_RX_RAMP_LEN 160=========>260


mais aucun changement
Title: Re: conflit rf434 et ethernet shield
Post by: Artouste on Sep 11, 2012, 01:23 pm

j'ai déjà fait joujou avec la lib en modifiant dans VirtualWire.h
Quote

// Maximum number of bytes in a message, counting the byte count and FCS
#define VW_MAX_MESSAGE_LEN 30 ====>100

// The size of the receiver ramp. Ramp wraps modulu this number
#define VW_RX_RAMP_LEN 160=========>260


mais aucun changement

Il semblerait que ce soit du int8
static uint8_t vw_rx_buf[VW_MAX_MESSAGE_LEN];
et que ton 260 soit hors limite
A voir si c'est facile d'etendre la portée en passant juste les valeurs de 8 à 16
Title: Re: conflit rf434 et ethernet shield
Post by: barbudor on Sep 12, 2012, 06:31 pm

Il semblerait que ce soit du int8
static uint8_t vw_rx_buf[VW_MAX_MESSAGE_LEN];
et que ton 260 soit hors limite
A voir si c'est facile d'etendre la portée en passant juste les valeurs de 8 à 16


Artouste, le uint8_t s'applique au type de l'élément du tableau, pas à la taille du tableau.
la taille max d'un tableau est toujours un int (standard C)
Heureusement que tu peux faire des tableaux de 260 bytes ;)
Title: Re: conflit rf434 et ethernet shield
Post by: Artouste on Sep 12, 2012, 06:47 pm


Il semblerait que ce soit du int8
static uint8_t vw_rx_buf[VW_MAX_MESSAGE_LEN];
et que ton 260 soit hors limite
A voir si c'est facile d'etendre la portée en passant juste les valeurs de 8 à 16


Artouste, le uint8_t s'applique au type de l'élément du tableau, pas à la taille du tableau.
la taille max d'un tableau est toujours un int (standard C)
Heureusement que tu peux faire des tableaux de 260 bytes ;)


bonsoir barbudor
yep, j'avais survolé un peu trop rapidement !  :smiley-mr-green:
Title: Re: conflit rf434 et ethernet shield
Post by: infobarquee on Sep 14, 2012, 07:54 am
bonjour,
n'empêche que, on ne peut envoyer que 27 caractères maxi en une seule fois, ce qui est franchement génant quelque part.
donc la seule solution pour le moment est d'envoyer une variable ou un petit groupe de variables sans dépasser les 27 fatidiques.

je suis en  train de tester le module bi directionnel (merci snootlab en passant ;) ) qui lui, peut envoyer/recevoir plus de caractères.
Title: Re: conflit rf434 et ethernet shield
Post by: barbudor on Sep 14, 2012, 06:14 pm
27 caractères pour envoyer des messages, c'est déjà pas mal.
Plus tu rallonge tes messages, plus tu prend le risque d'erreurs de transmission.
Mieux vaut couper en plusieurs petits messages bien protégés qu'avoir un gros message tout planté pour 1 octet frelaté.
Title: Re: conflit rf434 et ethernet shield
Post by: infobarquee on Sep 14, 2012, 07:47 pm

27 caractères pour envoyer des messages, c'est déjà pas mal.
Plus tu rallonge tes messages, plus tu prend le risque d'erreurs de transmission.
Mieux vaut couper en plusieurs petits messages bien protégés qu'avoir un gros message tout planté pour 1 octet frelaté.



c'est certain, mais je n'envoie qu'au maxi 31 caractères, donc il m'en manque 4, snifffff
je me suis rabattu donc sur la solution d'envoyer chaque paramètre par groupe avec un marqueur de début et entre chaque paramètres pour les parser, dommage car ca prend plus de temps en traitement et requiert des conditions aussi.

question à 1Franc (nostalgie oblige et moins cher :) ) :
pourquoi avoir limité à 27 bits la transmission puisque c'est sur le principe du port série?
Title: Re: conflit rf434 et ethernet shield
Post by: barbudor on Sep 14, 2012, 08:52 pm
Non, çà n'utilise pas le port série.
Il y a bien sérialisation des données mais suivant un format synchrone avec tout un entête en amont.
la sérialisation est effectuée sous interruption timer.

J'ai regardé le code et je ne vois rien qui justifie cette limitation à 30.

La modèle de transmission est intéressant. En effet sur ces transmetteurs 433MHz en AM (modulation d'amplitude) la porteuse n'est transmise que pour les bits à 1. Pour assurer que le récepteur arrive a régler correctement son contrôle de gain automatique (CAG), il faut qu'il y a ait toujours du signal présent même si le buffer à transmettre ne contient que des 0.
Chaque octet à transmettre est coupé en 2 nibble (1/2 octet) et chaque nibble (de 4 bits) est remplacé par un symbole de 6 bits qui contient 3 bits à 0 et 3 bits à 1.
La transmission est donc constituée au total de :
- 6 symboles de 6 bits 0x2A (B101010) qui composent donc 36 bits alternés 1/0
- 2 symboles de 6 bits 0x32 (B110010) et 0x34 (B110100) (toujours 50% de 1 et 50% de 0)
- 2 symboles de 6 bits représentant la longueur totale des données (1 octet qui vaut len + 1 (octet de longueur) + 2 (CRC 16 bits))
- 2*len symboles de 6 bits encodant les 'len' octets de données
- 4 symboles de 6 bits encodant les 2 octets du CRC16
Total pour 'len' octets : 14+2*len symboles de 6 bits = 84 + 12*len bits à transmettre

Bref, la longueur étant codé sur un octet, on pourrait espérer pouvoir transmettre des messages de 252 octets (255-3)
C'est sans compté que le compteur de symboles est sur un uint8_t donc comme il faut 2 symboles par octet on se retrouve avec une limite qui est alors 56 octets utiles (59 pour MESSAGE_LEN)

Donc c'est normal que ton essai avec 100 se soit soldé par un échec.

Je pense que tu peux donc changer sans risque VW_MAX_MESSAGE_LEN à 59

Title: Re: conflit rf434 et ethernet shield
Post by: infobarquee on Sep 15, 2012, 03:57 pm
bien vu pour le VW_MAX_MESSAGE_LEN, à 50 c'est nickel pour moi.  :smiley-mr-green:

merci à vous deux pour le coup de pouce ;)