www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega324PA I2C / TWI aktivieren, TWBR write-only?


Autor: Sascha W. (bucky2k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche gerade den I2C des 324ers ans Laufen zu bekommen, aber mit 
P. Fleury's code den ich erfolgreich auf einem ATMega128 laufen habe 
passiert nichts (Kein SCL messbar). Nun fiel mir auf, dass die 
Initialisierung zu einem Fehler führt, da ich das Register TWBR nicht 
auslesen kann (immer 0). Ist dies korrekt und das TWBR ist write-only? 
Oder liegt da schon der Hund begraben, evtl. weil ich ATMega324P statt 
ATMega324PA im Studio eingestellt habe (PA nicht für C unterstützt)?

Original Init:
uint8_t TWIM_Init (uint32_t TWI_Bitrate)
  {
  TWBR = (uint8_t) ((F_CPU/(8*TWI_Bitrate))-2);
  if (TWBR < 1) return FALSE;
  return TRUE;
  }

Abgeändert da ich write-only des TWBR vermutete:
uint8_t TWIM_Init (uint32_t TWI_Bitrate)
  {
  int brr = ((uint8_t) ((F_CPU/(8*TWI_Bitrate))-2)); 
  TWBR = brr;
  if (brr < 1) return FALSE;
  return TRUE;
  }

printf("%d",TWBR) ergibt immer null, egal was ich zuvor versuche 
reinzuschreiben...

Hat jemand ne Idee was ich falsch mache?

Autor: Sascha W. (bucky2k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, sehr seltsam. Es hat etwas mit der RS232 Implementierung von 
Manfred Langemann zu tun. Diese darf ich erst nach der I2C Init 
initialisieren, sonst habe ich kein zugriff auf das TWBR Register... Was 
das wohl sein kann... Will nur schonmal bescheid geben, nicht, dass sich 
jemand die Mühe gibt den Fehler in der I2C zu suchen... Es liegt wohl 
irgendwie am RS232...

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist PRTWI in PRR gesetzt?  Dann wäre TWBR nicht mehr beschreibbar, 
sondern würde 0 zurückgeben, würde also passen.

Autor: Sascha W. (bucky2k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, PRR ist komplett auf 0. Nun mit der uart lib von P. Fleury läuft 
es auch, irgendwas passierte in der uart lib von M. Langemann was das 
Schreiben des Registers TWBR verhinderte. Nun läuft der TWI. In einem 
alten Projekt mit ATMega128 das selbe, setze ich die RS232 Init vor das 
Init des I2C geht nix mehr... Aber nun hab ich ja eine Lösung

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.