Question

Ok, donc j'ai 3 appareils.

  • un microcontrôleur AVR papillon, mis en place avec USART
  • A Bifferboard, Debian, à l'aide d'un programme sur mesure pour série.
  • d'un Br fonctionnement de la machine de bureau @ y.

Je suis en train de faire de la Bifferboard envoyer de série à l'AVR, mais l'AVR ne reçoit jamais le signal, (nous avons vérifié les fils). Mais si je connecte l'AVR à la boîte de bureau, et envoie avec Br @ y est, il reçoit très bien.

Si je connecte le Bifferboard au bureau, Br @ y reçoit de très bien.

Heres le code pour le Bifferboard.

#include "string2num.h" //a custom header
#include <cstdlib>
#include <iostream>
#include <SerialStream.h>
using namespace LibSerial;
//using namespace std;



int main(int argc, char*argv[])
{
        if (argc<2)
        {
                std::cout<<argv[0]<<" requires the device name eg \'dev/tty0\' as a parameter\nterminating.\n";
                return 1;
        }

        SerialStream theSerialStream(argv[1]); //open the device
        if(!theSerialStream.IsOpen()) //did the device succesfuilly open
        {       //open faile
                std::cerr<<"Open " << argv[1] << " failed\n Terminating.\n";
                return 1; //exit failure
        }

        theSerialStream.SetVMin(0);//no min number of characters to send
        theSerialStream.SetVTime(0);// don't wait betwenn characters

        theSerialStream.SetBaudRate( SerialStreamBuf::BAUD_19200);
        theSerialStream.SetCharSize(SerialStreamBuf::CHAR_SIZE_8); //8
        theSerialStream.SetParity(SerialStreamBuf::PARITY_NONE);//   N
        theSerialStream.SetNumOfStopBits(1);//                       1

        theSerialStream.SetFlowControl(SerialStreamBuf::FLOW_CONTROL_NONE);


        std::cout<<"Ready for serial trasmission. Press Ctrl+C to quit\n";
        //insert basic instructions here

        while (1)
        {
                char input[BUFSIZ];

                std::cin>>input;

                char* values=getAllValues(input); //DECODE any formatting (this function is in the custom header)
                std::cout<<"about to transmit: " << values << "\n";

                theSerialStream << values;
                free(values);
        }
        theSerialStream.Close();
        return 0;



}

J'ai aussi essayé d'utiliser Minicom de Bifferboard -. Il peut parler aux fenêtres de bureau machine, mais pas l'AVR

Était-ce utile?

La solution

  

(Nous avons vérifié les fils)

Cela semble encore comme un problème de câblage. Si de Br @ y peut communiquer avec les deux, il ne semble pas être un problème de configuration. Vous devriez jeter un analyseur logique ou oscilloscope sur la broche de réception (et probablement sonder d'autres broches) de l'AVR et de voir ce qui se passe électriquement quand yo essayez d'envoyer des données à partir du Bifferboard.

Je serais prêt à parier que vous voyez les données sur une autre broche. Mais je ne parierais pas beaucoup, parce que la connectivité série RS232 est une chose délicate.

Autres conseils

Il est un long shot, mais sont tous les ports série en cours d'exécution au niveau même de tension? Je vois le bifferboard a un UART 3.3V, alors que l'AVR a un convertisseur de niveau. Le port de bureau peut être plus flexible au sujet de la tension.

Je vais jeter une autre possibilité « long shot ». En fonction de la puce de transciever utilisé sur un panneau, il peut ne pas être en mesure de produire sa propre tension d'alimentation négative (généralement par l'intermédiaire d'une pompe de charge) pour les niveaux RS232. Certaines puces vont « voler » leur alimentation négative de l'autre côté de la ligne, et qui fonctionne très bien si vous parlez à quelque chose comme un PC. Si les deux parties prennent cette approche, cependant, il ne fonctionne pas si grand. Tranceivers comme MAX232 (plus capsules externes et résistances) généreront leur propre alimentation négative, mais des puces comme le DS275 ne le font pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top