mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega128 mit 16MHz Takt und I2C-Probleme


Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, Leute!

Folgendes Problem: ich habe eine RnbFra 1.2 auf der ich einen ATMega128 
eingebaut habe.

Bisher hat der µC mit einem 8MHz-Takt problemlos seine Arbeit gemacht.
Jetzt habe ich einen neuen Quarz eingebaut, und läuft das ganze mit 
16MHz-Takt.

In Prinzip läuft alles noch problemlos, bis auf dem Servocontroller 
(ATTiny, mit 4MHz-Takt).

Dazu, beim Compilieren, kriege ich folgendes Warning:

large integer implicitly truncated to unsigned type

bei der Zeile:

TWBR = ((F_CPU/SCL_CLOCK)-16)/2;

Ich nutze die I2C-Library von Fleury und F_CPU ist 16000000UL und 
SCL_CLOCK 20000L.
Wenn ich manuell diese Berechnung ausführe, sehe ich daß ich versuche 
ein Wert vom 392 in den Register TWBR zu speichern.
Wenn ich aber richtig verstanden habe, ist TWBR ein 8-Bit Register.
Also, die Warnung ist richtig, und ist zu verstehen, warum die 
Kommunikation mit dem ATTiny ab und zu gestört ist.

Nun, da ich weiß daß der ATMega128 problemlos mit einem Takt vom 16MHz 
laufen kann, welches Wert soll ich genau in diesen Register schreiben?

Da die Library auf dem ATTiny eine Grenze hat, muß ich unbedingt ein 
I2C-Clock vom 20KHz nutzen.

Ich danke euch für eure Hilfe!
Luca Bertoncello

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hast du für einen Prescaler eingestellt? TWPS
Gehört der in der Rechnung nicht berücksichtigt?

Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hubert G. schrieb:
> Was hast du für einen Prescaler eingestellt? TWPS
> Gehört der in der Rechnung nicht berücksichtigt?

So ist die i2c_init:
  TWSR = 0;                         /* no prescaler */
  TWBR = ((F_CPU/SCL_CLOCK)-16)/2;  /* must be > 10 for stable operation */

Und, wie gesagt, F_CPU = 16000000UL und SCL_CLOCK = 20000L

Soll ich was ändern?

Grüße
Luca Bertoncello

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es wird bei diesem SCL-Clock ohne Prescaler nicht funktionieren.
Ich bin mir nur selbst nicht klar wie man diesen in der Rechnung 
berücksichtigt.

Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hubert G. schrieb:
> Es wird bei diesem SCL-Clock ohne Prescaler nicht funktionieren.
> Ich bin mir nur selbst nicht klar wie man diesen in der Rechnung
> berücksichtigt.

Erhlich gesagt, ich bin auch nicht wirklich sicher, was diese 
"Prescaler" ist, und wozu es jetzt deaktiviert worden ist.

Ich habe kein Problem es zu aktiveren, wenn es nutzt, obwohl sicher 
diese Warnung weiterhin bleiben wird.
Kannst du mir aber genau sagen, was es ist?

Danke
Luca Bertoncello

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dieser Prescaler teilt den SCL-Clock.
Wenn du Teiler 4 eingibst, musst du dein TWBR noch mal durch 4 teilen.

Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hubert G. schrieb:
> Dieser Prescaler teilt den SCL-Clock.
> Wenn du Teiler 4 eingibst, musst du dein TWBR noch mal durch 4 teilen.

Das bedeutet, daß ich versuchen soll, einen Prescaler-Wert zu setzen?

Also, anstatt
TWSR = 0;
 sollte ich
TWSR = 1;
 schreiben, oder?

Grüße
Luca Bertoncello

Autor: Luca Bertoncello (lucabert)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Luca Bertoncello schrieb:
> Hubert G. schrieb:
>> Dieser Prescaler teilt den SCL-Clock.
>> Wenn du Teiler 4 eingibst, musst du dein TWBR noch mal durch 4 teilen.
>
> Das bedeutet, daß ich versuchen soll, einen Prescaler-Wert zu setzen?
>
> Also, anstatt
TWSR = 0;
 sollte ich
TWSR = 1;
 schreiben,
> oder?

Also, nach ein paar Testsm, kann ich sagen, daß die Lösung RICHTIG ist.

Nun funktioniert alles prima!

Danke für den Tipp!

Grüße
Luca Bertoncello

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.