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


von Sascha W. (bucky2k)


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:
1
uint8_t TWIM_Init (uint32_t TWI_Bitrate)
2
  {
3
  TWBR = (uint8_t) ((F_CPU/(8*TWI_Bitrate))-2);
4
  if (TWBR < 1) return FALSE;
5
  return TRUE;
6
  }

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

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

Hat jemand ne Idee was ich falsch mache?

von Sascha W. (bucky2k)


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...

von Hc Z. (mizch)


Lesenswert?

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

von Sascha W. (bucky2k)


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

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.