www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C Slave Problem AVR


Autor: Herb B. (s-stoerung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallöchen,

ich habe hier eine Steuerungsplatine mit einem Atnega168, welcher als
Slave fungieren soll. Im Slave Receiver Betrieb.

Ich bekomm vom Master die Adresse und anschließend 3 Datenbytes. Das
funktioniert auch soweit ganz Prima. Ich schreibe mir die Bytes dann
nacheinander in ein Array.

Jetzt ist es aber so das, wenn ich ich mir die Bytes ausgeben lasse, das
erste Byte falsch ist. Byte 2 und 3 sind richtig. und ich weiß nich wo
mein fehler ist.
hier die ISR:
Achso hier das Acknowledge als Makro:

#define I2C_ACK
(1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|(0<<TWWC) 
;


interrupt [TWI] void twi_isr(void)
{
switch (TWSR)
    {
    case 0x80:
    i2cdaten[x] = TWDR;
    x++;
    break;

    case 0xA0:
    x = 0;
    twidatcomplet = 1;
    break;
    }

I2C_ACK;

}

Wird bestimmt nur ne kleinigkeit sein aber ich komm hier nicht weiter.
Schon einmal Danke für eure Mithilfe ;)

Herb

Autor: Herb B. (s-stoerung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
huhu, keiner da der mir helfen kann???

achso, ich habe mir die Signale aufm Oszi angeschaut. Sind Ok, nur mein 
Slave checkt das erste der Bytes nicht. Ich weiß nur leider nicht was er 
einliest, da ich kein LCD an meiner Schaltung habe, ich las mir den 
Zusatnd nur über LED anzeigen.

Viel Grüße

Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist mir aufgefallen:

Dein Makro enthält nur einen Ausdruck. So allein auf einer Zeile macht 
der glaub keinen Sinn.

Im TWSR solltest du die unteren 3 Bits ausmaskieren.

Autor: Herb B. (s-stoerung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem makro isn tippfehler da ich aufm anderen rechner geprogt 
habe;)
aber danke;)

In den unteren 3 Bits vom TWSR sind laut Datenblatt die Prescaler(Bit 1 
und 0) und eins (Bit 3) ist ungenutzt. Und die Hex Status codes sind für 
Prescaler = 0 angegeben. Deswegen scheint mir meine Umsetzung richtig zu 
sein.

Oder?

Autor: Thomas Decker (t0mmy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Herb B. schrieb:
> Und die Hex Status codes sind für
> Prescaler = 0 angegeben. Deswegen scheint mir meine Umsetzung richtig zu
> sein.

Und was ist, wenn Prescaler mal nicht 0 ist, während du im switch 
steckst? Das hab ich heute im AVR Datenblatt oder im AppNote 315 
gelesen, dass man den Prescaler für die Statusabfrage maskiert.

Autor: Herb B. (s-stoerung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, Interresant.

Es ist schon spät und ich werd mir das morgn mal ansehen, aber warum 
sollte der Prescaler nicht null sein?

Grüße

Autor: Thomas Decker (t0mmy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Herb B. schrieb:
> aber warum
> sollte der Prescaler nicht null sein?

Das ist eine gute Frage, über die ich mir heute keine Gedanken machen 
will. Morgen will ich dann erstmal rausfinden, warum sich Peter Fleurys 
I²C-Mastercode bei mir manchmal in den while-Schleifen aufhängt.
Bin also gerade auch dabei, mir Atmels TWI-Interface näher 
anzuschauen...

Autor: Herb B. (s-stoerung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also die Prescaler Bits sind wie gesagt nur Master relevant. Habe sie 
sicherheitshalber maskiert. Aber hat nix geholfen...
Ich werd hier noch bekloppt :)
Verstehe nicht warum der beim ersten Datenbyte nur mist einliest.
Der Master toggelt die ganze zeit das LSB im Datenbyte eins. Und das 
will ich ausgeben.
Allerdings leuchtet die Led nur wenn die Daten übertragen werden, oder 
sie bleibt an und wird wärend der Datenübertragung dunkler.... gut, die 
Info wird auch nicht helfen :)

Autor: Herb B. (s-stoerung)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat sich erledigt, ich habs :)

Grüße

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.