INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino schnelle Datenübertragung mit 2Mbit/s
06.05.2015, 14:59
Beitrag #1
Arduino schnelle Datenübertragung mit 2Mbit/s
Hi Leute,

ich bin ein absoluter Arduino Anfänger und bräuchte jetzt eure Hilfe.
Mit C, habe ich ein bisschen im laufe meines Studiums programmiert, aber
ist schon etwas her. Ich habe keinen Beitrag über diesen Thema gefunden und habe deswegen einen Thema erstellt.

Ich habe 2 Arduinos einmal den Uno und den Due. Der Due soll mit einem
Funkmodul (nrf24l01) Daten an den Uno senden. Der Empfänger soll diese
Daten dann an einem LCD anzeigen. Nun soll die ganze Sache aber mit 2
Mbit/s Übertragungsrate erfolgen.

Wie kann überhaupt die Übertragungsrate sehen oder testen ?

Ich habe erst versucht, die Daten zu senden und zu empfangen. Das habe
ich auch schon hinbekommen.

Was muss ich am Code verändern oder ergänzen, damit die Daten schneller
gesendet werden können ?

Unten sieht ihr den Sendercode. Ich weiß nicht mehr weiter und ich
hoffe, ihr könnt mir weiter helfen.


Vielen Dank schon mal im voraus.

SENDER:

#include <SPI.h> //Aufruf der SPI Library
#include <nRF24L01p.h>
#include <regMapCmds.h>

nRF24L01p transmitter(7,8); // Funkmodul mit Pin 7 CSn
und Pin 8 CE einstellen


#define MISO 74 //definiere MISO als Pin 74
#define SCLK 76 //definiere SCLK als Pin 76

unsigned int uibyte1; //byte1 mit 8Bit
unsigned int uibyte2; //byte2 mit 8Bit
unsigned int uibyte3; //byte3 mit 8Bit
// 3*8Bit = 24Bit

float xx =0.0;
float xy =0.0;
float wert=0.0;
float wert2=0.0;


String message;

void setup()
{

pinMode(SCLK, OUTPUT); // legt Pin SCLK als Ausgang fest
pinMode(MISO, INPUT); // legt Pin MISO als Eingang fest
pinMode(1, OUTPUT);

resette_adc(); // Springe in Funktion resette_adc


SPI.begin();
SPI.setBitOrder(MSBFIRST); //Most significant Bit zuerst
SPI.setClockDivider(SPI_CLOCK_DIV4); //Teilt 16MHz durch 8 und gibt
als
SCLK 2MHz aus
SPI.setDataMode(SPI_MODE0); //SPI Modus CPOL=0, CPAH=0
digitalWrite(SCLK, LOW);
digitalWrite(MISO, LOW);



transmitter.channel(90); //Senderkanal 90
transmitter.TXaddress("KUADA"); //Name des Empfängers
transmitter.init(); //Funkmodul wird initialisiert

}

void loop() //Normalerweise die eigentlich
Hauptfunktion
{
if (digitalRead(MISO) == HIGH) lese_ad(); // Wenn MISO Pin HIGH ist
gehe zu Funktion
lese_ad
}
void resette_adc() //Funktion zum AD-Wandler Reset,
{ //dazu muss die SCKL auf HIGH
digitalWrite(SCLK, HIGH); // für mindestens 4 Wandlungszyklen sein
delayMicroseconds(120); // Ein Wandlungszyklus = 24µs
}


void lese_ad()
{
DRDY_MODUS(); //Springe in Funktion DRDY_MODUS

uibyte1 = SPI.transfer(0x00); //lese byte1 MSB
uibyte2 = SPI.transfer(0x00); //lese byte2
uibyte3 = SPI.transfer(0x00); //lese byte3 LSB


for(int i=0;i<25;i++){ //Berechnung der Durchschnittswerts
aufgrund von Wandlerschwankungen
xx+=(uibyte1<<16 | uibyte2<<8 | uibyte3); //Einlesen der Bytes mit
Bitverschiebung in korrekte Position
}
xx=trunc(xx/25);

xy = (5.0/65536.0); //Bereichsbreite 16bit

if (uibyte1 == 255) //MSB = HIGH
{
wert2 = ((xx *xy)-1.77250); // Der AD-Wandler Wert (Spannung)
wert = wert2 -5.00;
message = "HIGH ";
message +=wert;
transmitter.txPL(message ); //AUSGABE
transmitter.send(SLOW);
digitalWrite(1, HIGH);
delay(250);
}
else
{
wert = ((xx *xy)-1.77250); // Der AD-Wandler Wert (Spannung)

message = "LOW ";
message +=wert ;
transmitter.txPL(message); //AUSGABE
transmitter.send(SLOW);
digitalWrite(1, HIGH);
delay(250);
}
}


void DRDY_MODUS() // Funktion für den Data Ready
Modus.
{ // Zeigt alle 24µs an, dass neue
Daten zum lesen bereit stehen
delayMicroseconds(2.25); // Immer zu Beginn vom
Wandlungszyklus, nach Ablauf können Daten gelesen werden
} // t4 = 1,5µs HIGH + t2 = 375ns
LOW t3 = 375ns
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.05.2015, 17:39
Beitrag #2
RE: Arduino schnelle Datenübertragung mit 2Mbit/s
Hallo armut, (what a name!)

hier: http://mcuoneclipse.com/2013/07/20/tutor...rdm-board/ gibt es ein Projekt für das FRDM Board bei Nutzung der NRFs. Das Interessante sind die Angaben und Codes zu den Registern. Es wird auch das RF_SETUP / RF_DR Register beschrieben. Mit dem kannst du die ADR setzen. Eine Routine zum Schreiben der Register ist auch gleich dabei.
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Datenübertragung vom Arduino Mega 2560 zu Hterm Datatom 1 94 13.11.2016 23:08
Letzter Beitrag: hotsystems
  I2c Datenübertragung diode1990 1 589 15.11.2015 22:57
Letzter Beitrag: hotsystems
  Datenübertragung per USB Arduino Due chhec 0 411 12.10.2015 10:05
Letzter Beitrag: chhec
  Problem mit serieller Datenübertragung olflab 4 921 06.05.2015 10:13
Letzter Beitrag: Thorsten Pferdekämper
  Arduino Ethernet mit USB 2 Serial Converter/Welche Einstellungen im Arduino-Sketch lociluke 1 1.106 05.05.2015 13:40
Letzter Beitrag: Bitklopfer
  Arduino Mega-Projekt mit EEPROM auf Arduino Due portieren Foto-Ralf 17 3.130 16.03.2015 12:06
Letzter Beitrag: Foto-Ralf
  serielle Datenübertragung Soma 3 1.111 16.09.2014 21:45
Letzter Beitrag: Thorsten Pferdekämper

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste