Forum: Mikrocontroller und Digitale Elektronik Zwei Arduinos verbinden.


von Jan R. (Gast)


Lesenswert?

Hallo,

muss zwei Arduinos verbinden,

Zur datenübertrageung darf nur eine Leitung und masse verwendet werden.

I2C kann ich nicht nehmen bräuchte ein zweites Kabel :-(


Also die Anwendung, der erste Arduino, hat zwei Potis angeschlossen, 
über das Kabel, Solen deren ADC werte an den zweiten Arduino übertragen 
werden.
1
int Motor = 12;
2
int Pot;
3
int Pot2;
4
5
6
void setup() {                
7
  
8
  pinMode(Motor, OUTPUT);     
9
}
10
11
12
void loop() {
13
  Pot = analogRead(A0);
14
  Pot2 = analogRead(A2);
15
  digitalWrite(Motor, HIGH);   
16
  delay(2);              
17
  digitalWrite(Motor, LOW);    
18
  delayMicroseconds(250);
19
  digitalWrite(Motor, HIGH);
20
  delayMicroseconds(Pot+5);
21
  digitalWrite(Motor, LOW);
22
   delayMicroseconds(250);
23
  digitalWrite(Motor, HIGH);
24
  delayMicroseconds(pot+5);
25
  digitalWrite(Motor, LOW);
26
  delayMicroseconds(250);
27
  
28
}

Senderprogramm.

Diese Zeiten sollen vom empfänger gemessen und Interpretiert werden.

Dieser Delay von 2ms soll das Synchronisationssignal sein.

Sprich das emfänger Programm startet rat, wenn es die 2ms gemessen hat.

Danach sollte das mpfängerprogramm Synchron zum Sender laufen.

In der Theorie klappt das jetz auch.

In der Praxis, habe ich das Problem, dass ich die Zeiten nicht 
ordentlich messen kann.

Gibt es eine Libary, bei welcher ich den Timer soald der auf High 
schaltet startet, und sobald wider low ist, der Timer gestoppt und der 
Wert gespeichert wird.
Danke schonmal.

von Bernhard K. (bskeller)


Lesenswert?

nimm den uart und verwende nur die tx leitung vom sender.
fertig!
dann könntest du sogar ascii übertragen.

von Frank (Gast)


Lesenswert?

Soll die Datenübertragung in zwei Richtungen gehen?

- verbinde an beiden Arduinos RX mit TX (Arduino hört sich selbt)

- verbinde die beiden RX/TX der Arduinos über Dioden so miteinander, 
dass die Endstufen in den TX-Leitungen die Leitung nur auf Masse ziehen 
können (Pullup-R nach Plus)

Dann denk dir ein Protokoll aus, bei dem einer der Arduinos der Master 
ist. Der Slave sendet nur, wenn er "gefragt" wird - das vermeidet 
Kollissionen auf der Datenleitung. Feddich.

Du könntest nat. auch ein komplettes CSMD/CD oder /CA programmieren :-)

von Frank (Gast)


Lesenswert?

Tippfehler, muss heissen: CSMA ...

von Jan R. (Gast)


Lesenswert?

Frank schrieb:
> Tippfehler, muss heissen: CSMA ...

Hi, kann man in Arduino so programmieren, dass der einen Interrupt 
macht, um die neuen Daten zu bekommen ?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.