ATmega Port-Pin Hardwarefrage

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • ATmega Port-Pin Hardwarefrage

      Hallo Leute!

      Nach einem tollpatschigen Versuch vor einigen Monaten bin ich etwas verunsichert.
      In der vorschnellen, leichtgläubigen Idee das der NANO ja mit 3,3V arbeitet, habe ich daran mal einen CC2D33 via I²C dran gehängt.
      Erst nachdem alles reibungslos funktionierte kam in mir die Erinnerung zurück das der Nano zwar einen 3,3V-Ausgang hat, selber aber doch auf 5V arbeitet.

      Streng genommen ist der CC2D nicht 5V-tolerant und mit 3,6V abs.Max definiert...einfach nur Glück das nix abgeraucht war?
      Immerhin dachte ich bislang selbstverständlich das alle Portpins eines ATmega gemäß der üblichen CMOS-Technologie durchweg Push-Pull-Ausgänge wären.
      Also bei Output Low eben ein N-FET den Pin hart auf Vss und bei Output High ein P-FET diesen hart auf Vcc schaltet.

      Am Nano hingegen am Hardware I²C-Port sieht nach diversen Messungen am Oszi alles für mich so aus als ob sich diese Pins als reine Open-Drain-Ausgänge haltet:
      Egal ob die I²C-SCL feuert oder auf SDA was wackelt: Highpegel an der falschen Testschaltung liegt dank der 2x47k PullUps an 3,3V auch auf sauberen 3,3V.
      Entferne ich die beiden 47k-PullUps messe ich an SCL und SDA gar keinen Pegel.
      Im Gegenteil: Am Tastkopf sehe ich bei entsprechender Verstärkung die High's als seichte Rauschphasen bei einstelligen mV (hochomiger Pin) und die Low's als unverrauschte Nulllinie.
      Also ganz so als ob am Nano (ATmega324) die Hardware-I²C nur High-Z und Low (eben Open Drain) laufen würden.

      Frage1:
      Kann ich mich darauf verlassen bei allen ATmega-Familien am Hardware-I²C, oder ist das eine Besonderheit beim ATmega324?

      Frage2:
      Kann man andere Ports am ATmegas die unter 5V laufen ebenso als reine Open-Rains ansteuern?
      Habe nämlich durchaus häufiger 3,3V und anderes buntes zeugs an meinen Schaltungen, die kein High im Sinne von 5V abbekommen sollten. Bislang setze ich da immer extern einen N-FET dazwischen. Sollte das aber auch via Software gehen wäre das nicht übel.

      Das Bascom-Handbuch als auch die diversen detailierten Datenblätter von Atmel habe ich schon mehrfach durchgekaut, finde aber da nirgendwo eine Erklärung zu diesem I²C-Verhalten.

      Grüße

      Jürgen
    • I2C arbeitet mit pullups, das gehört zum Buskonzept. So können sich 2 aktive Ausgänge nicht zerstören.

      Wenn du sowas bei anderen Ausgängen nachbilden willst, dann musst du den pin immer zwischen Eingang (tristate) und Ausgang (by default=0) umschalten. Das sollte min den DDRX-Register am leichtesten gehen.
      DDRa.0=0 setzt porta.0 auf Eingang
      DDRa.0=1 setz den porta.0 auf Ausgang und der ist ohne weitere Angabe auf 0, also Gnd. Um sicher zu gehen kann man ja vorher porta.0=0 schreiben.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------