Forum: Mikrocontroller und Digitale Elektronik Attiny - Arduino I2C Problem


von Dominik L. (domi_96)


Angehängte Dateien:

Lesenswert?

Hallo,

ich will Daten vom Arduino Micro zu einem Attiny2313 senden. Dafür habe 
ich den USI TWI Slave driver von Martin Junghans (www.jtronics.de) 
verwenden. Das ganze funktioniert auch schon recht brauchbar, ich kann 
am Arduino Daten auslesen und ich kann auch einzelne Bytes zum Attiny 
senden. Allerdings kann ich nicht mehrere Bytes (ein Array mit 5 Bytes) 
senden. Wenn ich das Versuche schreibt der Attiny die Empfangenen Bytes 
in den Buffer zum Senden. Ich gebe mal alle Dateien in den Anhang - und 
hier noch meine Ausgabe vom Arduino:

Sending...
Receiving -
154;155;156;157;158;159;160;161;162;163;164;165;1;2;3;4;

Verkabelt sollte alles richtig sein, ich habe einen L7805CV zur 
Spannungsversorgung des Attinys und dahinter noch einen Keramik 
Kondensator. PullUps habe ich 4,7k für die beiden I2C Ports verwendet 
und Masse vom Arduino mit der Masse des Attinys verbunden.

Vielen Danke schon mal für eure Hilfe !

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Dominik L. schrieb:
> verwenden. Das ganze funktioniert auch schon recht brauchbar, ich kann
> am Arduino Daten auslesen und ich kann auch einzelne Bytes zum Attiny
> senden. Allerdings kann ich nicht mehrere Bytes (ein Array mit 5 Bytes)
> senden. Wenn ich das Versuche schreibt der Attiny die Empfangenen Bytes
> in den Buffer zum Senden. Ich gebe mal alle Dateien in den Anhang - und
> hier noch meine Ausgabe vom Arduino:

 Entweder bin ich zu dumm, oder...
 Was sendet der Arduino, was empfängt der Tiny und woher weisst du wo
 was hingeschrieben wird ?
 Dein TxBuffer ist gleich hinter RxBuffer, wenn du deinen Rx Zeiger
 nicht auf Null setzst, ist es kein Wunder, dass der Tiny munter ins
 TxBuffer schreibt.

von Dominik L. (domi_96)


Lesenswert?

Also der Arduino sendet die ersten 5 Elemente aus seinem Byte Array:
0,1,2,3,4
Diese 5 Werte sollten ja im RxBuffer liegen (das macht der USI TWI Slave 
driver).
Der Tiny schreibt permanent Werte in den TxBuffer, zum Testen habe ich 
hier einfach die zahlen von 150-165 genommen (dachte es liegt an der 
Schleife darum habe ich alle einzeln festgelegt aber die Schleife ist 
korrekt). Später sollen hier natürlich einmal andere Werte stehen die 
sich ständig ändern (Motorpositionen von einem Encoder).

> Was sendet der Arduino, was empfängt der Tiny und woher weisst du wo
> was hingeschrieben wird ?
Der Arduino sendet 0,1,2,3,4 und soweit ich das verstanden habe schreibt 
er dabei in den rxbuffer:
1
if (buffer_adr == 0xFF) {    // First access, read buffer position
2
  if(data<=buffer_size) {
3
    buffer_adr= data; }     // Set position as received
4
  else {
5
    buffer_adr=0; }                     // Set address to 0
6
else {
7
rxbuffer[buffer_adr]=data;   // Write data to buffer
8
buffer_adr++;     // Increment buffer address for next write access
9
}
 siehe auch usiTwiSlave.c Zeile 359-379

Die buffer_size ist auf 16 gestellt in usiTwiSlave.h
1
#define buffer_size 16;
2
volatile uint8_t rxbuffer[buffer_size]; 
3
volatile uint8_t txbuffer[buffer_size];

Vielen Dank für deine Antwort ! :)

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Dominik L. schrieb:
> Receiving -
> 154;155;156;157;158;159;160;161;162;163;164;165;1;2;3;4;

 Für mich sieht das so aus als ob nur 4 Bytes empfangen sind.
 Zeiger wird nicht zurückgestellt, du kriegst Bytes von [4] bis [15],
 dann fängt der von vorne, erstes gesendetes Byte fehlt, du kriegst
 Bytes von [0] bis [3] und da sind die Werte von 1 bis 4 eingeschrieben.

von Dominik L. (domi_96)


Lesenswert?

Sehr merkwürdig weil es sich ja um eine fertige I2C Implementierung 
handelt, die hier im Forum empfohlen wurde und auch von anderen 
verwendet wird (finde leider gerade die Threads gerade nicht mehr). Weiß 
jetzt leider nicht was ich ändern müsste oder was da schief läuft :(

Grüße,
Domi

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.