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
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
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.
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
@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
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
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
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
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
"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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.