www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mehrere LM75 mit ATmega16 emulieren... Ansätze?


Autor: Gerd Schroer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mahlzeit Leute!

Wie in der Überschrift angedeutet, stellt sich die Frage ob man mit
einem ATmega16 mehrere (4 Stück um genau zu sein) LM75 "emulieren"
kann.
Zur Info: Der LM75 von NationalSemiconductors ist ein Temperatursensor
mit intgriertem A/D-Wandler und I2C-Interface.

Hintergrund: Die Bausteine die mein Mainboardhersteller verbaut hat
sind so ziemlich das allerletzte. Allerdings habe ich eine
SMBus-Schnittstelle. Da würde es sich ja eigentlich anbieten, eigene
Sensoren am MoBo anzubringen und die Daten über den SMBus
einzuspeisen.
Der LM75 hat jedoch den Nachteil, dass er ein riesen Baustein ist und
man ihn folglich schlecht zwischen die Kühlrippen schieben kann.
Andere, theoetisch auch geeignete Bausteine werden aber Treibermässig
nicht unterstützt.
Also habe ich mir gedacht, ich messe einfach mit nem AVR und 4 PT100
die Temperaturen an den Stellen wo es wichtig ist, emuliere pro Sensor
einen LM75, hänge den Atmel an den SMBus und der Rest wird vom Treiber
des Betriebssystems erledigt (der gar nicht mitbekommt, dass da gar
keine echten LM75 am Bus hängen).
Die Frage ist also, verfügt der ATmega16 über genug Ressourcen, um 4
(virtuelle) I2C-Schnittstellen zur Verfügung zu stellen, bzw. mit 4
Adressen auf einer I2C-Schnittstelle zu lauschen UND nebenbei noch 4
PT100 auszuwerten?
Hat vielleicht schon mal jemand so etwas gemacht oder bei ähnlichen
Projekten Erfahrungen gesammlt?

Gruss
Gerd

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem Mega16 wird das schwierig.
Das Hardware I2C kann leider nur eine Adresse erkennen.

Aber der Tiny26 könnte das mit Leichtigkeit.
Der hat ein abgerüstetes I2C, was nur die Slave-Funktion hat und das
Adreßbyte selber auswerten muß.
D.h. damit kannst Du dann auf allen 4 Adressen Daten übertragen.

Und wenn Du die DS18B20 als Sensor nimmst, brauchst Du auch keinerlei
Analogkram wie für den PT100.


Peter

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann auf dem Mega16 auch ein Software-I²C programmieren, das mehrere
Adressen erkennt. Da nur die Slave-Funktion gebraucht wird, ist das
relativ einfach.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke auch das das kein Problem sein sollte, der
kann ja mit einer Schnittstelle auf mehreren Adressen reagieren
und die temp-Messungen muß er ja nicht sofort machen. Man kann
den Mega ja periodisch messen lassen und liefert auf i²c Anfrage
hin immer den zuletzt gemessenen wert.

Gruß
  Martin

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@thkais

Ich kenn den SMBus nicht, aber wenn der das Philips I2C Standard Timing
macht, dann ists aus mit C programmieren und höchstoptimierter Assembler
ist angesagt.

4µs Pulsbreite sind selbst bei 16MHz nur 64 Zyklen und 10 Zyklen
brauchst Du schon für den Interrupt betreten und verlassen, da ist noch
nichts gepusht und gepopt.

Und nebenbei dann auch noch was messen wollen, naja.


Das es unmöglich ist, will ich nicht sagen, aber es ist schon verdammt
nahe dran.


Peter

Autor: Gerd Schroer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohjeh...

Ich hab mir mal die Specs von www.smbus.org angeschaut, und es ist wie
peter "angedroht" hat: 4µs Pulsbreite.
Und wenn man bedenkt dass ich bisher mit C nur ein paar LEDs hab
blinken lassen und alles andere mit Bascom gemacht habe, dann sinkt mir
da doch der Mut. Da ist Assembler Utopie.
Gibts vielleicht frei adressierbare Buffer für den I2C/SMBus...? Wohl
eher nicht, was?
Hmmm, also muss ich wohl weitersuchen nach einem Baustein der a) einen
Treiber mit sich bringt und b) klein genug für meine Zwecke ist.
Oder ich nehme einen Baustein und schreibe mir selbst einen Treiber -
aber das ist auch eher utopisch...

Gruss
Gerd

Autor: Gerd Schroer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab gerade festgestellt, dass es da ein paar nette Bausteine von Analog
Devices gibt, die auf mehreren Kanälen die Temperatur messen können und
das ganze dann auf den SMBus geben.
Stellt sich nur die Frage, wie ich an solche Teile komme, denn die sind
eher nicht im freien Handel...

Gruss
Gerd

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie gesagt, der Tiny26 kann als einziger AVR auf mehrere I2C-Adressen
antworten.

Müßte man bloß noch wissen, ob der SMBus das SCL-Stretching
unterstützt.
Dann kannst Du Dir ruhig Zeit lassen und den Tiny26 auch in Basic
programmieren.


Peter

Autor: Gerd Schroer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, wenn ich das jetzt richtig verstanden habe ist SCL-Stretching laut
Spec erlaubt. Hört sich ja schon mal gut an...
Aber wenn ich doch die I2C Geschichte sowieso per Software
implementiere kann ich doch auch jeden anderen AVR nehmen
(vorausgesetzt er hat genug Rechenleistung), oder? Im Datenblatt vom
Tiny26 hab ich jedenfalls nichts gefunden, was ihn für diese Aufgabe
mehr prädestinieren würde als meinen Mega16...
Oder hab ich da was übersehen?

Gruss
Gerd

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Im Datenblatt vom
Tiny26 hab ich jedenfalls nichts gefunden, was ihn für diese Aufgabe
mehr prädestinieren würde als meinen Mega16..."


Doch, Du kriegst einen Interrupt erst nach dem kompletten Byte und dann
wird SCL automatisch gestreckt, auch wenn Du den Interrupt nicht
innerhalb 4µs abarbeiten kannst.


Peter

Autor: Gerd Schroer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jau, hast recht.
Ich glaube, ich werds dann mal mit nem Tiny26 versuchen. Obwohl mir 2K
Programmspeicher etwas wenig erscheinen. Könnte knapp werden.
Allerdings kann ich auch nötigenfalls 2 von der Sorte nehmen, da ja
fast keine externe Beschaltung nötig ist.
Dann bin ich ja mal gespannt ob ich das hinbekomme...

Danke für die Tips!

Gruss
Gerd

Autor: Zoffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den LM75 gibts doch auch als SMD, der müsste zwischen die Rippen passen.

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.