www.mikrocontroller.net

Forum: Compiler & IDEs TWI Atmega128


Autor: TechInfo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Experimentiere mit dem TWI bzw. I2C.

Habe eine I2C-LCD-Display mit PCF8574-Portexpander an Port D des 
Atmegas128 angeklemmt und möchte nun testen, ob die Kommunikation 
klappt.

Dazu habe ich aus dem Datenblatt des Atmega das C-Example genommen:
        i2cSetBitrate(100);

        cli();
  TWCR=(1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));
  TWDR= 0x78 & 0xFE;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));
  TWDR=0x00;
  TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));
  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);

Damit müßten alle Portpins auf 0 gesetzt werden. Wenn ich aber an den 
Pins des LCD-Displays messe (die mit dem Portexpander-Baustein verbunden 
sind), sind RS, R/W, E sowie D5 auf High Potenzial. Der Rest Low.

Hat jemand noch eine andere Möglichkeit, die TWI-Funktion zu testen?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hat jemand noch eine andere Möglichkeit, die TWI-Funktion zu testen?

Das TWI-Beispiel der avr-libc benutzt Standard-EEPROMs.  Die kannst
du zum Bleistift von alten DIMMs ablöten bzw. gleich da drauf benutzen.

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> TWDR= 0x78 & 0xFE;
ist das die richtige adresse? beim PCF8574 (ohne A) ist die adresse 
"0x4n"
n: 2-14d bzw. 2-E -- hängt von den Pins A0-A2 ab

sonst vl. mal die I2c-Lib von peter Fleury ausprobieren: jump.to/fleury
hth. Jörg

Autor: TechInfo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja du hast Recht, die Adresse war falsch. Aber auch nach der Änderung 
gab es keine Besserung.

Fleury macht es in seinem Beispiel genauso wie im Datenblatt 
beschrieben.

Ich habe mit einem Oszi mal am TCL-Pin gemessen, der ist immer auf High, 
also es wird kein Takt erzeugt. Muss man den TWI noch irgendwie 
aktivieren, außer dass man das TWEN-Bit setzt? Die Bitrate ist auf 
100kHz eingestellt, die Berechnung für das TWBR-Register ergab 72, müßte 
bei 16MHz-CPU-Takt soweit stimmen.

Autor: kosmonaut_pirx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
vll dumme frage: die pull-ups aktiviert ?
(oder waren's pull-downs. weiß nicht mehr so genau)
kenne die lib aber nicht.
bye kosmo

Autor: TechInfo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es sind Pull-Ups beim LCD-Display gesetzt. Müssen beim AVR die Ports 
auch als Pull-Ups gesetzt werden?

Benutze ja zur Zeit nicht die lib sondern den Code-Schnipsel aus dem 
Datenblatt (s.o.)

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst an beiden Leitungen Pull-Ups mit ca. 4,7k (die internen 
haben ~20k s. Datasheet, d.h. die sind zu schwach).
Hast du eine Möglichkeit Debug-Infos auszugeben (UART, LEDs, LCD...) ?
Wenn ja, versuch mal, nachdem die Adresse gesendet wurde, das Register 
TWSR auszulesen/~geben.
In der <util/twi.h> stehen Makros für die Status codes (deren Name steht 
im Datenblatt), hier wird TW_MT_SLA_ACK erwartet (s. Datablatt ).

hth. Jörg
ps.: hast du das : 
http://www.asurowiki.de/pmwiki/pmwiki.php/Main/LCD... ergoogelt?

Autor: TechInfo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jörg

Ich brauche aber nur an jeweils einem Ende den Pull-Up, oder? Die hab 
ich jetzt an der LCD-Platine aktiviert.

Mittlerweile scheint auch eine Kommunikation zu stande zu kommen. Ich 
hatte nach den jeweiligen Kommandos nicht das Status-Register 
ausgelesen. Anscheinend möchte TWI das aber so, denn nachdem ich eine 
entsprechende Abfrage eingefügt hatte, kommt etwas an. Wundert mich nur, 
dass TWI LESEzugriffe unbedingt benötigt...

Danke für die Adresse, habe heute bestimmt 20 verschiedene Pages 
durchgelesen, die war nicht dabei ;)

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Pull_Ups den richtigen wert haben, spielt es keine große Rolle 
, wo die sind.
Das mit den Lesezugriffen ist merkwürdig. Kannst du mal den Code zeigen?
Schön das es geht. :)

gruß Jörg

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.