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
zwei UNOs verbinden, brauche Hilfe
05.02.2015, 22:26
Beitrag #1
zwei UNOs verbinden, brauche Hilfe
hallo,

ich verstehe etwas nicht und bräuchte Hilfe…

Aufbau:
zwei Board Arduino uno, verbunden mit GND, und PIN8 ( bit0 PORTB )
einer sendet eine 0 auf pin 8, der andere empfängt...
nun zähle ich auf beiden Seiten die Schleifendurchläufe ( 2 x 8 bit )
und bekomme extrem unterschiedliche Werte heraus :
Sender äussere Schleife 150, innere 250
Empf. äussere Schleife 146, innere 145

Unterschied: 1124 Durchläufe, also ca. 6700 Taktzyklen

beide Bords UNO R3 mit 16MHz - selber Hersteller

die Schleifen sind doch identisch programmiert ? ich verstehe das
gerade nicht mehr, die Unterschiede sind doch recht groß oder nicht ?


hier Sender:

void loop(){

asm volatile (
"reset: \n\t"
" sbis %[lese], 0 \n\t"
" rjmp reset \n\t"
" cli \n\t"
" sbi %[portdir], 0 \n\t"
" cbi %[port], 0 \n\t"
" ldi r17, 150 \n\t"

"lp2: ldi r16, 250 \n\t"
"lp1: sbic %[lese] , 0 \n\t"
" rjmp fertig \n\t"
" dec r16 \n\t"
" brne lp1 \n\t"
" dec r17 \n\t"
" brne lp2 \n\t"

"fertig: \n\t"
" sbi %[port], 0 \n\t"
" cbi %[portdir], 0 \n\t"
" sbi %[port], 0 \n\t"
" sei \n\t"
"end: \n\t"

: [antwort] "+r" (aa)
: [portdir] "I" (_SFR_IO_ADDR(DDRB)),
[port] "I" (_SFR_IO_ADDR(PORTB)),
[lese] "I" (_SFR_IO_ADDR(PINB))

:"r16", "r17", "r18"
);

//Serial.println(aa);

delay(2500);
}


hier Empfänger:

void loop(){

asm volatile (

"warte: \n\t"
" sbic %[lese], 0 \n\t"
" rjmp warte \n\t"
" cli \n\t"
" ldi r17, 0 \n\t"

"lp2: ldi r16, 0 \n\t"
"lp1: sbic %[lese], 0 \n\t"
" rjmp fertig \n\t"
" inc r16 \n\t"
" brne lp1 \n\t"
" inc r17 \n\t"
" brne lp2 \n\t"

"fertig: \n\t"
" sei \n\t"
" mov %1, r17 \n\t"
" mov %2, r16 \n\t"

: "+r" (aa), "+r" (bb), "+r" (cc)
: [portdir] "I" (_SFR_IO_ADDR(DDRB)),
[port] "I" (_SFR_IO_ADDR(PORTB)),
[lese] "I" (_SFR_IO_ADDR(PINB))
:
);


Serial.println(bb);
Serial.println(cc);
Serial.println();



}


das ist bei beiden gleich !

volatile int aa, bb, cc;

void setup(){

Serial.begin(115200);
delay(2000);

pinMode(_wire, INPUT_PULLUP);

pinMode(_led,OUTPUT);
digitalWrite(_led,LOW);


}

Markierten Text zitieren Antwort
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.02.2015, 22:17
Beitrag #2
RE: zwei UNOs verbinden, brauche Hilfe
(05.02.2015 22:26)deddi1999 schrieb:  hallo,

ich verstehe etwas nicht und bräuchte Hilfe…

Aufbau:
zwei Board Arduino uno, verbunden mit GND, und PIN8 ( bit0 PORTB )
einer sendet eine 0 auf pin 8, der andere empfängt...
nun zähle ich auf beiden Seiten die Schleifendurchläufe ( 2 x 8 bit )
und bekomme extrem unterschiedliche Werte heraus :
Sender äussere Schleife 150, innere 250
Empf. äussere Schleife 146, innere 145

Unterschied: 1124 Durchläufe, also ca. 6700 Taktzyklen

beide Bords UNO R3 mit 16MHz - selber Hersteller

die Schleifen sind doch identisch programmiert ? ich verstehe das
gerade nicht mehr, die Unterschiede sind doch recht groß oder nicht ?


hier Sender:

void loop(){

asm volatile (
"reset: \n\t"
" sbis %[lese], 0 \n\t"
" rjmp reset \n\t"
" cli \n\t"
" sbi %[portdir], 0 \n\t"
" cbi %[port], 0 \n\t"
" ldi r17, 150 \n\t"

"lp2: ldi r16, 250 \n\t"
"lp1: sbic %[lese] , 0 \n\t"
" rjmp fertig \n\t"
" dec r16 \n\t"
" brne lp1 \n\t"
" dec r17 \n\t"
" brne lp2 \n\t"

"fertig: \n\t"
" sbi %[port], 0 \n\t"
" cbi %[portdir], 0 \n\t"
" sbi %[port], 0 \n\t"
" sei \n\t"
"end: \n\t"

: [antwort] "+r" (aa)
: [portdir] "I" (_SFR_IO_ADDR(DDRB)),
[port] "I" (_SFR_IO_ADDR(PORTB)),
[lese] "I" (_SFR_IO_ADDR(PINB))

:"r16", "r17", "r18"
);

//Serial.println(aa);

delay(2500);
}


hier Empfänger:

void loop(){

asm volatile (

"warte: \n\t"
" sbic %[lese], 0 \n\t"
" rjmp warte \n\t"
" cli \n\t"
" ldi r17, 0 \n\t"

"lp2: ldi r16, 0 \n\t"
"lp1: sbic %[lese], 0 \n\t"
" rjmp fertig \n\t"
" inc r16 \n\t"
" brne lp1 \n\t"
" inc r17 \n\t"
" brne lp2 \n\t"

"fertig: \n\t"
" sei \n\t"
" mov %1, r17 \n\t"
" mov %2, r16 \n\t"

: "+r" (aa), "+r" (bb), "+r" (cc)
: [portdir] "I" (_SFR_IO_ADDR(DDRB)),
[port] "I" (_SFR_IO_ADDR(PORTB)),
[lese] "I" (_SFR_IO_ADDR(PINB))
:
);


Serial.println(bb);
Serial.println(cc);
Serial.println();



}


das ist bei beiden gleich !

volatile int aa, bb, cc;

void setup(){

Serial.begin(115200);
delay(2000);

pinMode(_wire, INPUT_PULLUP);

pinMode(_led,OUTPUT);
digitalWrite(_led,LOW);


}

Markierten Text zitieren Antwort

Hallo,
ähm nichts gegen einen pfiffigen Assemblercode aber warum setzt du die SoftwareSeriell Lib nicht ein ?
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.02.2015, 09:14
Beitrag #3
RE: zwei UNOs verbinden, brauche Hilfe
hi,

ich möchte gerne verstehen wie es geht.
Mittlerweile habe ich die Boards mal vertauscht - das erzeugt ein anderes Ergebnis.
146 / 108 Durchläufe.
Also hat das mit der Genauigkeit der Taktschaltung zu tun.
Ich werde die Taktfrequenz beider Boards mit einem Frequenzmessgerät
bestimmen - da scheint der "Fehler" zu liegen. Die Abweichung beträgt ca. 14.25us bei einer Impulslänge von 2359us - ist doch garnicht so viel wie ich erst dachte…
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.02.2015, 12:44
Beitrag #4
RE: zwei UNOs verbinden, brauche Hilfe
Also ich würde den I2C Bus empfehlen, der "passt sich automatisch" in der Übertragungsgeschwindigkeit an :-)
Ausserdem kannst Du dir dabei Digitalports einsparen, die hat der Uno ja auch nicht gerade üppig.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.02.2015, 12:50
Beitrag #5
RE: zwei UNOs verbinden, brauche Hilfe
(10.02.2015 12:44)Foto-Ralf schrieb:  Also ich würde den I2C Bus empfehlen, der "passt sich automatisch" in der Übertragungsgeschwindigkeit an :-)
Ausserdem kannst Du dir dabei Digitalports einsparen, die hat der Uno ja auch nicht gerade üppig.

Hi,
I2C ..ähm geht das denn den einen 328er als Slave laufen zu lassen ? Beim SPI Bus kannst du den 328er als Slave laufen lassen...daszu dient dann das SS Signal auf Port 10.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2015, 14:40
Beitrag #6
RE: zwei UNOs verbinden, brauche Hilfe
(10.02.2015 12:50)Bitklopfer schrieb:  
(10.02.2015 12:44)Foto-Ralf schrieb:  Also ich würde den I2C Bus empfehlen, der "passt sich automatisch" in der Übertragungsgeschwindigkeit an :-)
Ausserdem kannst Du dir dabei Digitalports einsparen, die hat der Uno ja auch nicht gerade üppig.

Hi,
I2C ..ähm geht das denn den einen 328er als Slave laufen zu lassen ? Beim SPI Bus kannst du den 328er als Slave laufen lassen...daszu dient dann das SS Signal auf Port 10.
lg
bk

Sollte gehen.

Siehe: http://www.forum-raspberrypi.de/Thread-a...o-pro-mini
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2015, 20:39
Beitrag #7
RE: zwei UNOs verbinden, brauche Hilfe
(11.02.2015 14:40)Foto-Ralf schrieb:  ....
Sollte gehen.
...

...haste Recht, steht auch im Datenblatt das der 328er da Master und Slave Betrieb beherrscht... da hatte ich nicht nachgesehen gehabt. sorry...

lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Matlab und Arduino verbinden und Anal. Wert lesen Nextero 13 156 Gestern 20:07
Letzter Beitrag: GuaAck
  Prüfung eines Drucksensors mit Hilfe des Arduino r4c3 17 1.876 10.11.2017 22:24
Letzter Beitrag: r4c3
  Suche Hilfe für den Fehler in der Datei Holzwurm56 5 378 01.11.2017 14:26
Letzter Beitrag: Holzwurm56
  Hilfe bei Einschaltverzögerung gesucht Ingo 9 654 28.10.2017 19:04
Letzter Beitrag: Tommy56
Photo Hilfe bei meinem Arduino Projekt Niklas 10 562 23.09.2017 21:05
Letzter Beitrag: Niklas
  Zwei Arduinos mit ISP verbinden Binary1 17 1.799 01.08.2017 16:40
Letzter Beitrag: Binary1
  Ublox Neo 6M und Nextion ! Bitte um Hilfe. b3ta 19 1.413 13.07.2017 14:52
Letzter Beitrag: Tommy56
  Anfänger sucht erfahrene Hilfe Customizer 21 1.643 11.07.2017 21:37
Letzter Beitrag: Customizer
  Brauche einen Sketch zum Testen HDT 12 963 22.06.2017 07:37
Letzter Beitrag: HDT
  Bitte um Hilfe Arduino Nano-MAX7219-PIR_Sensor Opa_Klaus 35 2.489 20.05.2017 21:11
Letzter Beitrag: Opa_Klaus

Gehe zu:


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