Go Down

Topic: Softserial met 38400bd (Read 774 times) previous topic - next topic

jwsmid

Ik heb een probleem met Softserial
Ik wil gegevens uit een zendontvanger lezen met eem MEGA 2560 en deze weer geven op een tft
Met een snelheid van 4800bd en 9600 bd gaat het goed maar ik wil snelheid op een 38400bd hebben maar dat gaat niet goed.
De zendontvanger aan de pc met snelheid van 38400bd geeft geen problemen.
Ik dacht dat het eerst in het geschreven programma het probleem door een combinatie van de TFT met Touch en de SD Reader maar dat is niet het geval.
Ik heb ergens  al gelezen dat de Softserial niet goed werkt met hogere snelheden.
Wie heefd een oplossing?

robtillaart

Een MEGA heeft 4 hardware serial ports, zijn die allemaal in gebruik?

SoftSerial zou moeten werken bij 38400, maar omdat de timing software controlled is is het erg afhankelijk van hoeveel interrupts er zijn e.d. en welke andere dingen de processor moet doen.
Heb meer info nodig over systeem SW && HW om iets zinnigs te kunnen zeggen.
Dus post je code en schema !
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

jwsmid

Hallo Rob

Ik heb klein programma dat de zend-ontvanger uitlees in de mega 2560 r3 gezet zonder het gedeelte dat de tft aanstuurt of de touche-screen (de tft niet aangesloten).
Zelfs nu ik een kale mega gebruik kan ik de zender met 38400bd niet uitlezen.

Als ik
mySerial.begin(38400); //
rig.begin(38400);  //

op 4800 of 9600 zet dan gaat het met serial-monitor wel goed

ik heb hier het stuk programma dat voor voor het uitlezen van de zendontvanger


#include <SoftwareSerial.h>
#include "FT817.h"

const int rxPin = 13;// pen 13 rood
const int txPin = 12;// pen 12 groen
long freq;

FT817 rig;

void setup()
{
 
  // init serial
  Serial.begin(57600);
  SoftwareSerial mySerial(rxPin,txPin);
  rig.assignSerial(mySerial);
  mySerial.begin(38400);
 
  }

void loop()

{
     
  rig.begin(38400);
  leesfrequentie();
   
     }

void leesfrequentie() // lees de frequentie uit de set

{unsigned long getFreqMode();
  unsigned long z;
  z=rig.getFreqMode();
  Serial.println (z);
}

robtillaart

Als je code post, kun je dan

1) met CTRL - T in de IDE krijg je auto layout => nettere code

2) gebruik aub code tags  - dat is de # button boven de smiley's
(je kunt je bovenstaande post modifyen, de code selecteren en op de # button drukken)

je kunt bij een MEGA 4 hardware serials  gebruiken
Serial: 0 (RX) and 1 (TX); Serial 1: 19 (RX) and 18 (TX); Serial 2: 17 (RX) and 16 (TX); Serial 3: 15 (RX) and 14 (TX). Used to receive (RX) and transmit (TX) TTL serial data. Pins 0 and 1 are also connected to the corresponding pins of the ATmega16U2 USB-to-TTL Serial chip.
see - http://arduino.cc/en/Main/ArduinoBoardMega2560 -
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

jwsmid

Hallo Rob

Als ik ik goed begrijp moet ik de een van de vier hardware serial poorten gebruiken maar SoftwareSerial werkt niet met deze vier hardware poorten dat heb ik al getest .
Of moet je iets extra  instellen dat deze wel werkt?
jwsmid

robtillaart

Je moet juist niets instellen, en niet de SOftwareSerial mappen op de HardwareSerial poortne.
je hebt op de MEGA Serial, Serial1, Serial2 en Serial3

net zoals je zegt
Serial.begin(115200);

zeg je nu

Serial1.begin(38400);

etc

let op de pinnummers

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Go Up