Forum: Mikrocontroller und Digitale Elektronik Mikro-C für LCD-Anzeige mit folgenden Bedingungen:


von me-$-on (Gast)


Lesenswert?

Hallo @ alle erstmal.
Da ich schon viel las über LCD und Mikrocontroller ( programmiert habe 
ich sowas nie zuvor, geschweige denn mir eine programmier-Einheit 
gelötet, aber ich sehe das als PRIMA einstieg) wollte ich mal hier 
anfragen, was ich denn tun müsste, um folgendes zu realisieren.
-
Eine 20*4 LCD anzeige, die mir CPU-Bezeichnung, CPU-Clock und Temperatur 
anzeigt.
-Ich weiss, das wird zichfach beschrieben, aber ich will dafür keine 
3rd-P software verwenden, um das LCD zu speisen.
Ich hätte gerne ,dass sich das Ganze übers BIOS abfragen lässt, also, 
schon beim Power-on-self-test meines PC's ein code ausgeführt wird, der 
mir die erwünschten Resultate auf dem LCD präsentiert.
(Sonst müsste ich ja auf das hochbooten des Os warten, damit erst die 
Software gestartet wird, und daraufhin das LCD gespeist wird).
Aber ich möchte es gerne OS-unabhängig speisen und auf 3rd-p software 
verzichten.
Und da weiss ich nicht,wie ich das anstellen soll.
 - Wie holt sich der controller diese Daten, oder wer holt sie sich
   überhaupt?
 - kann der Mikrocontroller überhaupt solche Anfragen stellen, wenn ich
   ihn per USB oder LPT mit dem System verbinde?
 - Wenn nicht, wie überhaupt?
Zu meinem Stand:
 - Bstler, tüftler hobbymassig, auch casmodd(ell)ing.
 - C/C++-Programmierer, effektiv seit 2 Jahren, seit nem halben mit
   Assembler am beginnen, daher werde ich einges schon verstehen.
Wäre echt dankbar für n kleinen Tipp.

von Timo (Gast)


Lesenswert?

Ich denke da wirst du kein Glück haben. Ohne OS wird soetwas wie 
Prozessor ID soweit ich weiß auf keinen Port rausgegeben.

von Michael U. (Gast)


Lesenswert?

Hallo,

wenn Du gut bist, in den Bootcode der Systempartition hängen und von da 
erstmal anzeigen. Später dann per Software vom System aktuell halten.

So wie es ein Bootselektor macht, vielleicht mal bei den Linuxern 
schauen, LiLo oder Grub sollten da zumindest Ansätze geben können.

Gruß aus Berlin
Michael

von Christoph (Gast)


Lesenswert?

Denke auch nicht dass das geht. Du wirst wohl oder übel warten müssen 
bis dein OS hochgefahren ist und deine Ansteuersoftware (ob 3rd party 
oder selbstgeschrieben) ausführen kann. Warum sollte das BIOS auch 
irgendeinen Code dritter ausführen? Dazu ist es nicht gedacht, weswegen 
es dann auch die Kontrolle an ein Betriebssystem weitergibt.

AFAIK funktionieren diese Dinger eher so, das deine auf dem PC laufende 
Software die entsprechenden Daten ermittelt und das LCD/µC nur als 
reines Ausgabemedium dienen. Deswegen funzen einige dieser Dinger ja 
auch ohne µC, sondern nur mit einem LCD am Parallelport ;)

Plattformunabhängigkeit wird daher auch schwer werden, da es (glaube 
ich!) auch keine systemübergreifenden Verfahren gibt, um 
Systeminformationen auszulesen oder den Parallelport/USB anzusteuern. 
Unter Linux wird man da vermutlich auf die Infos aus /proc zugreifen 
können, unter Windows ka...

von Joerg W. (joergwolfram)


Lesenswert?

Bootloader (Lilo oder Grub) im Sourcecode nehmen, die benötigten 
Funktionen mit reinschreiben und das Ganze compilieren. Dann reicht 
theoretisch auch ein LCD am Parport ohne zusätzlichen Mikrocontroller 
aus.

Gruß Jörg

von Oliver (Gast)


Lesenswert?

Bootsektor ist noch viel zu spät. Das ist ja dann doch wieder 
betriebssystemabhängig :-)

Du wirst nicht drum herumkommen, das PC-Bios zu modifizieren, und die 
gewünschten Daten über irgendeine Schnittstelle auszugeben. Und das ist 
für normale Hobbyprogrammierer, auch mangels passender Dokumentationen, 
jenseits aller Möglichkeiten.

Ohne gebootetes OS geht es nicht. Und dann reicht für die Aufgabe ein 
x-beliebiges LCD, und z.B. der kleinste AVR, den du noch gelötet 
bekommst.

Oliver

von Εrnst B. (ernst)


Lesenswert?

Einfache Lösung:
Einfach das, was beim Hochfahren angezeigt werden soll im EEPROM des µC 
ablegen, bei Power-On anzeigen.
Später, wenn das BS und die Software läuft, kann das ja aktualisiert 
werden.

Klappt nur nicht, wenn du ständig den Prozessor wechselst.

/Ernst

von Christoph (Gast)


Lesenswert?

Dann muss er den Parallelport aber ohne Hilfe des Kernels 
ansteuern...befindet sich Grub bei seiner Ausführung eigentlich noch im 
Real Mode oder springt der gleich in den Protected Mode?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Warum sollte das BIOS auch irgendeinen Code dritter ausführen?
> Dazu ist es nicht gedacht, weswegen es dann auch die Kontrolle an ein
> Betriebssystem weitergibt.

Das ist nicht ganz korrekt. Es gibt die Technik der BIOS-Erweiterung, 
die beispielsweise von Graphikkarten und bootfähigen 
IDE/SCSI/RAID-Controllern genutzt wird.

Bei ISA-Rechnern war das noch recht einfach gelöst, das BIOS überprüfte 
bestimmte Speicherbereiche im Adressraum des Rechners in 
32-kByte-Schritten auf das Vorhandensein eines bestimmten Codes (0x55AA 
oder ähnlich) und auf Korrektheit einer an einem definierten Offset im 
32-kByte-Block gespeicherten Prüfsumme. Stimmte alles, wurde zu einem 
bestimmten Zeitpunkt der Code in diesem 32-kByte-Block (Einsprung 
wiederum an einem definierten Offset) aufgerufen.

So war das schon zu XT-Zeiten.

Bei PCI-Karten ist das naturgemäß etwas komplizierter, dürfte sich vom 
Grundkonzept her aber ähneln. Nur wird hier die PCI-Karte selbst 
anmelden, daß sie ein ROM hat. Die genaueren Spezifikationen dafür 
dürften unter www.pci.org zu finden sein.

Den Hardwareaufriss kann man sich möglicherweise durch Zweitverwertung 
einer bereits vorhandenen PCI-Karte sparen; ein geeigneter Kandidat 
dafür sind Netzwerkkarten, die oft sogar Sockel für BOOT-ROMs aufweisen. 
Nun muss man nur noch herausfinden, wie der Code darin gestaltet zu sein 
hat ... et voilà!

von peter (Gast)


Lesenswert?

Brauchst Du das Floppy-Laufwerk noch? Vermutlich kannst Du auf dieses 
verzichten!

Stelle das Bios auf "Booten ab Floppy" ein, entferne Das Floppy-Laufwerk 
und baue Dir eine uC Schaltung die Du an die Floppy-Schnittstelle 
anschliesst.

Mit dem mC-Schaltung kannst Du den Bootvorgang abfangen, irgend was 
machen (z.B. eine Miniapplikation in den PC-Laden, welche Dir die 
gewünschten Daten liefert) und dann Schlussendlich mit dem Bootvorgang 
ab Harddisk weiterfahren...

Infos, wie Du mit einem uC eine Floppy mit Bootsektor emulierst etc... 
bzw. wie die Floppy-Schnitstelle funkoniert und sich das ganze verhalten 
muss, darüber musst Du Dich am besten via Internet schlau machen...

Wikipedia, Google, dieses Forum etc...

von me-$-on (Gast)


Lesenswert?

HAMMER!
Bis her mehr an Info, als ich erwartet habe. Man sieht:
Es gibt doch noch foren, die nicht nur n schönes D-Zign haben, und noobs 
beherbergen.
Hier spricht die Quali.Da albert man nicht mit dem Board design, sondern 
lässtes schlicht und elegant.
Geniales Forum.
Werde mich anmelden.
-
So, zur sache:
Ich nehme also keinen AVR am Parallel-port, sondern direkt ein LCD, WENN 
ich es per 3rd-p software anspreche?
D.h. die software übernimmit die kommunikation mit dem LPT und die 
Steuerung der LCD?
Das heisst,sie emuliert einen microcontroller?
Oder wie geht sowas sonst?
Weiterhin:
Nehmen wir Rufus Beitrag: Die nic hält sockel bereit für eine hardware-
Kommunikation? Ich habe mein LAN als on board interface.
Ansonsten sitzen da noch onBoardound und ne PCI Express karte.
Kann mir jemand das, was Rufus geschildert hat, genauer erklären?
Ich meine: Wie kann ich denn ( er meint sicher Wake On Lan ) diesen 
Boot-rom nutzen (geht das mit on board? eher weniger, oder, muss schon 
ne eigene Karte sein , oder) und einen Code da rein bringen, der beim 
boot-up ausgeführt wird?
-
Oder anders: Nehmen wir an, ich flashe mein BIOS, ok?
müsste gehen.
und diese Flash-Bios version wurde von mir erweitert ( verdammt! Es ist 
doch binär! wie soll ich dass denn erweitern, ausser dissasemblen und 
dann meinen code dort unterbringen, SO DASS ER AUCH NICHTS STÖRT ) .
Diese erweiterung im BIOS müsste doch in der Lage sein, da sie ja beim 
POST ausgeführt wird ( der boot-strap-loader läuft durch ) meinen 
Prozessor anhand seiner Bezeichnung zu erkennen?
Erstmal das. Das mit dem LCD dann später.
Was könnte ich denn da lesen, um das genauer zu raffen?
Danke?

von Christoph (Gast)


Lesenswert?

Ich würde dir davon abraten, ein manipuliertes BIOS auf dein Board zu 
flashen wenn du nicht exakt weißt was du tust. Und wenn du es wüsstes, 
würdest du nicht diesbezügliche Fragen stellen ;)

Die Software, die das LCD via Parallelport ansteuert braucht keinen µC 
zu emulieren. Dem LCD ist es nämlich erstmal wurstegal, ob es von einem 
µC, einem PC-Parallelport oder einem Toaster angesteuert wird solange 
die elektrische Verbindung und die gesendeten Befehle korrekt sind.

Sieh dir doch erstmal an, wie so ein HD44780 Standard LCD angesteuert 
wird (z.B. im AVR-Tutorial auf der Seite hier), dann siehst du 
vielleicht schon etwas klarer.

@rufus: Das mit den BIOS Erweiterungen etc ist eine interessante Sache, 
danke für den Hinweis. Aber ich denke doch das der Aufwand für ein LCD, 
das nur ein paar Systeminformationen anzeigen soll recht hoch wäre (jaja 
ich weiß, hier gilt die "geht nicht-gibts nicht" Direktive ;))

von Jochen (Gast)


Lesenswert?

Nur graue Theorie:
Aber kann man solche Informationen nicht auch u.U. über den SMBus 
abfragen?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Kann man zwar, aber die Bausteine, die am SMBus hängen und die diversen 
Daten liefern sind i.d.R. komplett undokumentiert. Daher ist man auf 
Reengineering oder die Nutzung der den Motherboards beiliegenden 
grauenerregenden Software angewiesen.

Auch weisen Motherboards i.d.R. keine Anschlüsse für den SMBus auf, die 
müsste man sich irgendwo selber dranlöten (DIMM-Sockel).

Die von mir beschriebene Methode, eigenen Code auf dem PC vor dem 
eigentlichen Booten auszuführen löst natürlich dieses Problem überhaupt 
und gar nicht; wenn das BIOS nicht über eine definierte 
Programmierschnittstelle zur Abfrage der von ihm selbst angezeigten 
Informationen verfügt, müsste diese selbstgestrickt werden, was aufgrund 
der dürftigen Dokumentationslage ähnlich kompliziert werden dürfte wie 
der Versuch, unter einem OS an diese Informationen zu gelangen.

Gut, sowohl die Taktfrequenz als auch der CPU-Typ lassen sich auf andere 
Art und Weise feststellen, damit wären 66% des geforderten 
Funktionsumfanges erfüllt.

Die CPU-Temperatur muss eh laufend ermittelt werden, was sowieso den 
Einsatz von unter einem OS laufender Software vorschreibt. BIOS-Code ist 
nach dem Starten üblicher OS eh inaktiv.

Der Nutzen einer Messung der CPU-Temperatur in der ersten Sekunde nach 
dem Einschalten des Rechners erscheint mir außerdem nur eingeschränkt 
sinnvoll.

von Andreas L. (andi84)


Lesenswert?

Der SMBus ist bei manchen Mainboards auch auf einer Stiftleiste 
herausgeführt. Bei Asus wird das für irgend ein Infopanel, das ich aber 
noch nie gesehen habe, verwendet. Für ein paar Sensoren gibt der Source 
von lm_sensors (Linuxprogramm) auskunft. Im Linuxkernel hat es auch noch 
einige Treiber drin. Wäre aber sowieso mal cool, ein LCD an den SMBus zu 
pfriemeln. Ob da jetzt ein µC dran ist, der Abfragen durchführ oder ob 
der Bus nur Text zum LCD bringt ist da erstmal zweitrangig. Wenn das 
Interface tut, kann man sich immer noch weiter vorantasten.
Man muss aber vorsichtig sein, was man auf dem SMBus treibt.
Es gibt da einige IBM-Laptops, die nach einem SMBus-Scan nicht mehr 
funktionieren, weil da irgendwas komisches im Bios steckt.

von Jochen (Gast)


Lesenswert?

> Kann man zwar, aber die Bausteine, die am SMBus hängen und die diversen
> Daten liefern sind i.d.R. komplett undokumentiert. Daher ist man auf
> Reengineering oder die Nutzung der den Motherboards beiliegenden
> grauenerregenden Software angewiesen.

Das stimmt bedingt...
Zum einen gibt es diverse Tools im INet, die das ja auch können.
http://www.almico.com/sfscreenshots.php
Ich habe mich zwar bisher nicht wirklich mit I2C auseinander gesetzt 
aber ich vermute mal, dass die Zahl hinter dem Dollar im ersten 
Screenshot eine Adresse ist, mit der man den entsprechenden Sensor 
ansprechen kann.

Ausserdem gibt es hier im Forum doch irgendwo einen I2C-Sniffer. Den 
kann man doch mal dran hängen und vielleicht kommt was sinnvolles dabei 
raus.

> Auch weisen Motherboards i.d.R. keine Anschlüsse für den SMBus auf, die
> müsste man sich irgendwo selber dranlöten (DIMM-Sockel).

PCI Express führt die beiden Leitungen anscheinend und da könnte man 
auch noch schön +12V abgreifen.
http://www.interfacebus.com/Design_PCI_Express_1x_PinOut.html
Eine Einsteckkarte! Das wäre doch genial! Sieht auf jedenfall 
professioneller aus als Kabel vom USB/RS232/LPT Anschluss wieder in den 
PC reinzulegen. ;)

von me-$-on (Gast)


Lesenswert?

Ok. Mit anderen Worten: Es ginge tatsächlich, ein LCD zu speisen, was 
angeht, wenn der Rechner hochfährt und etwaige Info schon vorm Start des 
OS ausliest.
Wenn es Sensoren auf dem ASUS board gibt, senden die doch sicher 
digitale signale, die ich irgendwie decodieren müsste, das Panel würde 
es ja auch tun.
An dem Board rumlöten will ich ungern, die Methode mit der 
Neztkerkkarte, die sich beim BIOS anmeldet und Code reinschreibt und 
ausführt....
sowas wäre schon eher mein Fall, oder aber:
Diese Sensoren für das Panel abchecken.Gut. Dann fangen wir ganz simpel 
an:
Ich brauch son Teil, womit ich mein Mikrocontroller programmiere.
Das Löttutorial dazu gibt es hier, ne?
Ok.Dann baue ich das mir bald.
Dann brauche ich ein LCD, was das anzeigt, was ich auf meinem 
Mikronontroller ( ich würde Assembler-programmierung bevorzugen) 
programmiere.
So ein Tut, um so eine Platine für ein LCD und einen Steckplatz für den 
Mikro-C zu löten gibt es auch hier, oder?
Jemand noch  GENIALE links , wo ich nützliche Info zu beidem bekomme?
Danke schonmal!

von Michael U. (Gast)


Lesenswert?

Hallo,

der SM-Bus ist ein I2C-Abkömmling, meines Wissens nur auf 5V festgelegt 
und anderer Taktratenbereich zulässig.

Gruß aus Berlin
Michael

von Jochen (Gast)


Lesenswert?


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.