UART transmettre problème ...

L

laststep

Guest
J'utilise le conseil apex altera de développer un robot autonome en utilisant un dispositif Bluetooth.
J'ai créer un code UART pour transmettre et recevoir à partir de Bluetooth.Mon recevoir une partie est ok cause il peut lire correctement le i clés ont appuyez sur le côté PC.Le problème est lorsque je transmets la chaîne à la PC, certains caractères sont corrompus, mais parfois il peut Diplay toute la chaîne correctement.

Ci-dessous est ma transmettre le codage peuvent some1 rappeler quel est le problème avec cette simple transmission de codage.

merci
commencer
(processus de réinitialisation, clkin, Y) commencent
if (reset = '1 ') then
y <= s0;
TxD <= '1 ';
TranComplete <= '0 ';
elsif (clkin'event et clkin = '1 ') then
cas y est
quand S0 => si RR = '1 'alors
y <= s1;
DATAIN <= entrée;
else y <= s0;
End If;
lorsque S1 => TxD <= '0 ';
y <= s2;
lorsque S2 => TxD <= DATAIN (0);
y <= S3;
quand s3 => TxD <= DATAIN (1);
y <= S4;
quand s4 => TxD <= DATAIN (2);
y <= S5;
quand s5 => TxD <= DATAIN (3);
y <= S6;
quand s6 => TxD <= DATAIN (4);
y <= S7;
quand S7 => TxD <= DATAIN (5);
y <= S8;
quand s8 => TxD <= DATAIN (6);
y <= s9;
quand s9 => TxD <= DATAIN (7);
y <= S10;
quand s10 => TxD <= '1 ';
y <= S11;
quand s11 => y <= s12;
quand S12 => y <= s13;
quand S13 => y <= S14;
quand S14 => y <= s15;
quand s15 => y <= s16;
TranComplete <= '1 ';
quand s16 => y <= s0;
TranComplete <= '0 ';
when others => y <= s0;
Fin de cas;
End If;
Terminer le processus;

 
&lt;a href="http://www.komputerswiat.pl/nowosci/internet/2010/45/rozdajemy-filmy-na-dvd-dolacz-do-nas-na-facebooku.aspx"&gt; &lt;img align="left" src="http://www.komputerswiat.pl/media/2010/280/1436130/facebook-zja.jpg" /&gt;&lt;/a&gt; Chcesz wygrać atrakcyjne nagrody? Dołącz do nas na Facebooku.&lt;img width='1' height='1' src='http://rss.feedsportal.com/c/32559/f/491281/s/f843cde/mf.gif' border='0'/&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://da.feedsportal.com/r/83965901696/u/0/f/491281/c/32559/s/f843cde/a2.htm"&gt;&lt;img src="http://da.feedsportal.com/r/83965901696/u/0/f/491281/c/32559/s/f843cde/a2.img" border="0"/&gt;&lt;/a&gt;

Read more...
 
Si vous êtes connecté en permanence, ou bien à travers la connexion Bluetooth?Habillés personnages à travers une connexion sans fil semble indiquer un problème de puissance du signal.Soit assez de l'expéditeur n'est pas puissant ou le récepteur n'est pas assez sensible.

Si vous êtes actuellement connecté en permanence (ce qui je pense), est votre pilote d'un RS232 vrai?Si vous essayez de vous connecter directement à partir du FPGA en inversant les données avant sa sortie, veillez à spécifier un rapide Vitesse de balayage LVCMOS 3.3V conducteur.Conduite avec un taux de dérive lente ou seulement à un niveau 2.5V pourrait provoquer ce problème.

Si vous êtes sûr que les niveaux d'entraînement sont bonnes, alors je regarde les paramètres d'horloge.Si votre source clkin n'est pas tout à fait correct pour le baudrate choisie, puis mélangé caractères peuvent occasionnellement se produire.Des erreurs de pointage peut être toléré, mais si vous êtes hors plus d'environ 5-8% watch out.

Essayez de pointer son départ un caractère motif répétitif comme 0xAA.Horloge ceci dans une boucle et de regarder le signal avec un champ d'application.Vous devriez être capable de mesurer des largeurs de bits et de déterminer combien vous êtes près à la vitesse de transmission réelles.

Enfin, essayez un autre ordinateur comme source de capture.Je préfère utiliser des machines de bureau.Les ordinateurs portables sont à utiliser une masse flottante et un environnement bruyant de commutation d'alimentation électrique.Dans ce genre de situations et surtout avec de longs câbles, beaucoup de bruit se introduites.

 
J'essaie la méthode 2, fil dur par le biais de puces Bluetooth RS232 et aussi par portable n dekstop mais tous obtenir le même résultat (t, parfois afficher correctement parfois quelques corrompus char string parfois près de la moitié a disparu mais recevoir est ok cause i 4x en utilisant la fréquence à l'échantillon le signal.

Je pense que le plus probablement est le générateur de vitesse de transmission (utilisation 2,4576 MHz counterdivide n cristal binaire vers le 9600) ou le problème de code source.

Si c'est la partie matérielle comment peut-on le résoudre?Crystal Modifier ou compteur binaire, mais en temps réel travail que nous cant get exactement la bonne freq même?Ou mettre le contrôle de flux?

Pour la partie logiciel, recevez pas le problème de causer à ses asynchrone, il détecte le bit de départ d'abord, puis commencer à échantillonner le signal.Mais, pour transmettre une partie pas moyen de faire de cette cause quand je commence à transmettre une chaîne à l'i HyperTerminal effectivement répéter le processus.Donc, si le match na pas freq ou 4-5% exécuter awway puis il s'accumule ...
Alors, comment résoudre ce problème.

 
Votre cristal 2.4576MHZ est exactement 256 fois la vitesse de transmission.C'est pourquoi, avec un prédiviseur 256 comte, vous devriez être en mesure d'atteindre la vitesse de transmission exactement.C'est pourquoi vous voyez les fréquences impaires telles Crystal Ball en particulier dans des circuits à microcontrôleur.

Toute erreur dans la vitesse de transmission est seulement à travers un seul octet.Il se synchronise à chaque ré-bit de départ.C'est pourquoi vous pouvez toujours être fiable avec l'erreur de plusieurs pour cent la fréquence.
La puce UART dans l'ordinateur fonctionne comme ceci: A l'orée bit de départ, attendez 1,5 périodes d'horloge, puis extrait les bits de données en premier.Après ce bit de données, les bits de l'échantillon toutes les suivantes, après avoir attendu 1 période d'horloge.Le supplémentaires initiaux 0,5 période est de tenter de mesurer chaque bit à fermer son centre.Tant que la dérive cumulative n'est pas assez grand pour vous mettre dans le prochain bit, vous êtes sur OK.

Votre code semble générer le bit de stop en état S10.Il convient de tenir ce niveau de sortie jusqu'à ce que le bit de départ suivant dans l'état S1.Bien que le compilateur doit tenir la valeur de précédent pour les Etats où la sortie n'est pas définie, vous mai voulez essayer d'en définir explicitement le niveau de la sortie TxD dans chaque état.Cela garantira que les TxD ne peut pas devenir faible dans tout autre État et ressemblent à un bit de départ à l'UART en aval.Aussi, je pense que vous devez absolument préciser l'état de TxD dans s0.Cela empêche un glitch bit de départ du démarrage de la machine d'état.
Enfin, essayez un autre programme Serial Port Monitor autres que Hyperterminal.HyperTerminal est connu pour avoir des problèmes et entrer dans l'élaboration d'erreur lorsque les paquets cassés sont reçues.Terra-parcours est plutôt bon et est un freeware.Il a la ablility dans le port série de moniteur pour vider les tampons et réinitialiser le port.Je commencerais Terra terme ou un autre de mieux contrôler le port série et puis connectez votre circuit de transmission d'un motif de test dans une boucle sans fin.Après avoir tout branché et fonctionne.Puis vider la mémoire tampon et réinitialiser le port.Si la capture du port série est alors correct, il semblerait que vous avez quelques problèmes de démarrage.Si la saisie des données du port série est un mélange de bonnes données et mauvais, alors je soupçonne que vous avez trouvé quelques bits supplémentaires START de quelque part.Encore une fois, en regardant la transmission d'un champ d'application devrait vous en dire beaucoup.

 
Merci pour la réponse, elle aidera beaucoup
I hav essayez d'envoyer la chaîne infinie aux NI PC découvert que si je n'utilise que les transmettent les seules quelques corrompu de données volumineux mais si combiner tous les composants comme récepteur et d'autre part, l'augmentation de chaîne de corruption de façon spectaculaire.Donc, je pense est mon problème de synchronisation des programmes.Mais lorsque vous envoyez un port à l'utilisation de certains je programme port série également garantir dévers est sans erreur.

Après tout, je décide de compter le char au lieu de lire l'affichage n le char depuis mon programme seulement eu quelques cordes à afficher N, il fonctionne bien.

 
Je suis très surpris que le composant du récepteur augmenterait les erreurs sur la transmission latérale.Il s'agit d'un problème commun lors de la mise en œuvre d'un logiciel UART sur un microcontrôleur.La raison en est le microcontrôleur peut pas faire deux choses en même temps.Le FPGA ne se limite pas comme ça.Le récepteur et l'émetteur de machines d'état sont indépendants et, par conséquent, ils peuvent se produire est en même temps.

Lorsque j'ai vu les problèmes, c'est quand l'UART ou les puces d'interface ont une erreur de câblage.Une connexion à la terre manquante dans le câble d'interface peut provoquer ce problème.Si le câble est très long, moi aussi j'ai eu des problèmes avec des câbles à paires torsadées.Si le recevoir et transmettre sont torsadés ensemble, ils finissent par couplage croisé un dans l'autre.Je voudrais temporairement crochet d'un ordinateur portable à la fin du FPGA du câble et vérifier que les deux PC peuvent parler de manière fiable sur le câble et la configuration du connecteur.
À 9600 bauds, alors le taux d'erreur devrait être très faible.Nous avons depuis des années des images transmises ROM entier à cette vitesse de transmission.Bien que le système a une CRC pour détecter les erreurs, il est très rare et nécessite une nouvelle tentative.

 
En fait, le problème viennent de la partie 2
1) ma partie programmation comme je le dis avant.Becoz quand je transmettre le signal que de la partie émetteur, le taux d'erreur est très faible, mais après je combiner la partie émetteur avec une partie pour former 1 Système d'ensemble, l'accroissement du taux d'erreur.

2) La partie Bluetooth, quand je remplacer le bluetooth avec câble série pour tester mon programme (i becoz utilisant le port série Bluetooth de protocole, de la théorie même de la communication série par le câble), le taux d'erreur est que la première partie.Mais chaque fois que je remplace par câble avec i Bluetooth découvrez que le taux d'erreur sont assez élevés.Aussi la partie récepteur manquantes et en ajoutant quelques caractères supplémentaires sur le site récepteur.

À ma grande surprise, quand je Pairing 2 com virtuel ensemble et moniteur à l'aide de la base i Visual Basic Application découvert que il y aura 1 char corrompus pour le groupe peu de char envoyé.

par la façon dont je mettre le contrôle de flux à zéro, si on met le haut puis le taux d'erreur va diminuer?En outre, certains conférencier dire en utilisant la somme de contrôle ne peut résoudre le problème, mais la façon de procéder à la vérification de la somme HyperTerminal?
Aussi, si vous utilisez je pense que la somme de contrôle de programmes doivent retrasmit beaucoup de beaucoup de temps pour obtenir le corrects 1.

 
Le contrôle de flux doit fonctionner si votre émetteur est en suspension (entre les bytes) lorsque vous recevez le «transmettre off" du signal ou de données.

 

Welcome to EDABoard.com

Sponsor

Back
Top