Go Down

Topic: conflit rf434 et ethernet shield [Résolu] (Read 3645 times) previous topic - next topic

barbudor


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

Artouste



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:

infobarquee

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.
AUCUNE AIDE PAR MP

barbudor

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

infobarquee


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?
AUCUNE AIDE PAR MP

barbudor

#20
Sep 14, 2012, 08:52 pm Last Edit: Sep 14, 2012, 08:53 pm by barbudor Reason: 1
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


infobarquee

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 ;)
AUCUNE AIDE PAR MP

Go Up