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


von Gerd Schroer (Gast)


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

von Peter D. (peda)


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

von thkais (Gast)


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.

von Martin (Gast)


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

von Peter D. (peda)


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

von Gerd Schroer (Gast)


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

von Gerd Schroer (Gast)


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

von Peter D. (peda)


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

von Gerd Schroer (Gast)


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

von Peter D. (peda)


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

von Gerd Schroer (Gast)


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

von Zoffi (Gast)


Lesenswert?

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

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.