[gelöst]TLC549 A/D-Wandler in C ansprechen, wie???
- dopehouse
- Beiträge: 452
- Registriert: 01.09.2005 12:02:16
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: Hildesheim (Niedersachsen)
-
Kontaktdaten:
[gelöst]TLC549 A/D-Wandler in C ansprechen, wie???
Hallo Leute!
Habe folgendes Problem. Wir haben in der Schule einen Temperaturmesser ( http://www.wvss-projekte.de/index.php?s ... &prj=tmess ) gebaut, der über die serielle Schnittstelle an den Rechner angeschlossen wird und als A/D-Wandler den TLC549 benutzt. Nun gibt es von unserem Lehrer nur ein Programm, dass nur unter Windoof (mit Wine gehts auch) läuft. Da das für mich keine Lösung ist, wollte ich das Teil mal nativ unter Linux ansprechen. Nun stehe ich allerdings vor dem Problem, dass ich absolut keinen Plan habe, wie ich das Ding ansprechen soll. Ich habe zwar im Netz ein Kernelmodul gefunden, dass allerdings mit dem 2.6er Kernel nicht mehr funktioniert.
Ich hab es bereits über die Funktionen outb, inb und ioperm versucht, was allerdings daran gescheitert ist, dass ich als root einen Speicherzugriffsfehler bekomme und als normaler User nur eine zurückweisung bekomme, da alles schon am Befehl ioperm scheitert.
Am liebsten hätte ich es aber auch über die die open, fcntl und co Funktionen erledigt, falls das überhaupt möglich ist.
Ich muss dazu sagen, dass ich bisher noch nie so nah an der Hardware programmiert habe und mein wissen auf dieser Ebene gegen NULL geht, was mich aber auch nicht daran hindert etwas dazu zu lernen.
Ich hoffe hier finden sich einige Hardwarefreaks, die mir bei meinem Problem einen Weg zur lösung zeigen können.
Habe folgendes Problem. Wir haben in der Schule einen Temperaturmesser ( http://www.wvss-projekte.de/index.php?s ... &prj=tmess ) gebaut, der über die serielle Schnittstelle an den Rechner angeschlossen wird und als A/D-Wandler den TLC549 benutzt. Nun gibt es von unserem Lehrer nur ein Programm, dass nur unter Windoof (mit Wine gehts auch) läuft. Da das für mich keine Lösung ist, wollte ich das Teil mal nativ unter Linux ansprechen. Nun stehe ich allerdings vor dem Problem, dass ich absolut keinen Plan habe, wie ich das Ding ansprechen soll. Ich habe zwar im Netz ein Kernelmodul gefunden, dass allerdings mit dem 2.6er Kernel nicht mehr funktioniert.
Ich hab es bereits über die Funktionen outb, inb und ioperm versucht, was allerdings daran gescheitert ist, dass ich als root einen Speicherzugriffsfehler bekomme und als normaler User nur eine zurückweisung bekomme, da alles schon am Befehl ioperm scheitert.
Am liebsten hätte ich es aber auch über die die open, fcntl und co Funktionen erledigt, falls das überhaupt möglich ist.
Ich muss dazu sagen, dass ich bisher noch nie so nah an der Hardware programmiert habe und mein wissen auf dieser Ebene gegen NULL geht, was mich aber auch nicht daran hindert etwas dazu zu lernen.
Ich hoffe hier finden sich einige Hardwarefreaks, die mir bei meinem Problem einen Weg zur lösung zeigen können.
Zuletzt geändert von dopehouse am 10.06.2007 13:31:24, insgesamt 1-mal geändert.
Das ist ja mal ein tolles Projekt, wiso machen wir das nicht inder Schule
So was ist überhaupt der Grund warum ich C-Programierung lernen will...
Ich kann also nicht viel über die Funktionen sagen.
Mit
siehst du erst mal welche Basisadressen dein(e) rs232 Port(s) haben.
Ich hab da son schönes Buch über Embedded Systems mit einem Kapitel Parallelport und eins
Serielle.
Der nutzer muss auch noch in einer bestimmten Gruppe sein welche mit
rauszufinden ist.
Hier steht außerdem noch das die Struktur termios in linux/include/asm/termbits.h definiert, genutzt wird. Gibt sogar ne manpage man termios. Es wurde auf eine url verwiesen die nicht mehr existiert, aber googel
hat dann noch was gefunden: [1], [2], [3].
Naja, irgendwie bezieht sich das ganze aber darauf, das die TxD, RxD Leitungen zur Datenübertragung genutzt werden. Bei deiner Schaltung wird aber völlig anders vorgegangen, es wird mit den Anschlüssen DTR, CTS und RTS eine, so wie es laut Datenblatt aussieht, SPI-Kompatible Schnittstelle softwaremäßig generiert. Heißt jedes Bit vom Protokoll selbst steuern! SPI ist ähnlich aufgebaut wie IIC (oder I2C, im PC-Bereich SM-Bus) nur mit getrennten Daten Ein/Ausgängen, und ein Chip-Select. Und dann noch die Sequenzen des TLC einbasteln um die gewünschten Reaktionen zu erreichen, hui hui das wird aber umfangreich
Ich habe selbst schon mal Serielle EEPROM's und Port Expander per I2C über einen Mikrocontroller (MSC51 Familie) angesprochen. Natürlich in Assembler. Das is nich ohne.
Irgendwann mach ich sowas auch nochmal...
Also eine richtige Anleitung hab'sch nich
[1]
[2]
[3]
was zu SPI
Gruss cirrussc
So was ist überhaupt der Grund warum ich C-Programierung lernen will...
Ich kann also nicht viel über die Funktionen sagen.
Mit
Code: Alles auswählen
cat /proc/ioports | grep serial
Ich hab da son schönes Buch über Embedded Systems mit einem Kapitel Parallelport und eins
Serielle.
Der nutzer muss auch noch in einer bestimmten Gruppe sein welche mit
Code: Alles auswählen
ls -l /dev/ttyS0*
Hier steht außerdem noch das die Struktur termios in linux/include/asm/termbits.h definiert, genutzt wird. Gibt sogar ne manpage man termios. Es wurde auf eine url verwiesen die nicht mehr existiert, aber googel
hat dann noch was gefunden: [1], [2], [3].
Naja, irgendwie bezieht sich das ganze aber darauf, das die TxD, RxD Leitungen zur Datenübertragung genutzt werden. Bei deiner Schaltung wird aber völlig anders vorgegangen, es wird mit den Anschlüssen DTR, CTS und RTS eine, so wie es laut Datenblatt aussieht, SPI-Kompatible Schnittstelle softwaremäßig generiert. Heißt jedes Bit vom Protokoll selbst steuern! SPI ist ähnlich aufgebaut wie IIC (oder I2C, im PC-Bereich SM-Bus) nur mit getrennten Daten Ein/Ausgängen, und ein Chip-Select. Und dann noch die Sequenzen des TLC einbasteln um die gewünschten Reaktionen zu erreichen, hui hui das wird aber umfangreich
Ich habe selbst schon mal Serielle EEPROM's und Port Expander per I2C über einen Mikrocontroller (MSC51 Familie) angesprochen. Natürlich in Assembler. Das is nich ohne.
Irgendwann mach ich sowas auch nochmal...
Also eine richtige Anleitung hab'sch nich
[1]
[2]
[3]
was zu SPI
Gruss cirrussc
Gruß cirrussc
--------------------
„Der Mensch steigert zur Zeit die Nutzung dessen, was seiner Willkür unterliegt - und kommt sich sehr klug dabei vor.“ H. Gruhl
--------------------
„Der Mensch steigert zur Zeit die Nutzung dessen, was seiner Willkür unterliegt - und kommt sich sehr klug dabei vor.“ H. Gruhl
- dopehouse
- Beiträge: 452
- Registriert: 01.09.2005 12:02:16
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: Hildesheim (Niedersachsen)
-
Kontaktdaten:
Naja, ist ne schulische Ausbildung zum Tech. Assi. für Informatik.
Die Links hatte ich schon alle durch, mit Ausnahme des Links über SPI. Notfalls muss ich mich nächste Woche mal richtig darüber vom Lehrer aufklären lassen, wie er das mit seinem Windows Programm gemacht hat. Vielleicht lassen sich daraus ja schonmal einige Erkenntnisse nutzen.
Falls sich aber doch noch jemand findet, der noch etwas mehr weiß, wäre ich sehr glücklich.
Die Links hatte ich schon alle durch, mit Ausnahme des Links über SPI. Notfalls muss ich mich nächste Woche mal richtig darüber vom Lehrer aufklären lassen, wie er das mit seinem Windows Programm gemacht hat. Vielleicht lassen sich daraus ja schonmal einige Erkenntnisse nutzen.
Falls sich aber doch noch jemand findet, der noch etwas mehr weiß, wäre ich sehr glücklich.
na, dafür brauchen Debian-Nutzer aber kein Google:cirrussc hat geschrieben:Hier steht außerdem noch das die Struktur termios in linux/include/asm/termbits.h definiert, genutzt wird. Gibt sogar ne manpage man termios. Es wurde auf eine url verwiesen die nicht mehr existiert, aber googel
Code: Alles auswählen
aptitude install manpages-dev
mandb
"man tty_ioctl" liefert die entscheidenden Infos.
Noch mehr gibt's zu sehen, wenn man die Hinweise am Ende der
man-page unter "see also" verfolgt oder "apropos ioctl" eingibt.
Nützliche Programme/Pakete sind z.B.:
- statserial
- setserial
- picocom (minicom oder seyon sind keine Alternative)
Es im Debianforum auch ein Beispielprogramm in C.
Das kann zwar nichts in Richtung SPI oder TLC, aber
immerhin sieht man die entscheidenden ioctl-Aufrufe.
Beware of programmers who carry screwdrivers.
- dopehouse
- Beiträge: 452
- Registriert: 01.09.2005 12:02:16
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: Hildesheim (Niedersachsen)
-
Kontaktdaten:
Danke, sieht alles erstmal sehr interessant aus. Werde mir das heute Abend mal alles anschauen und schauen, ob ich damit weiter komme.
PS: Kernelmodul an den neuen Kernel anpassen sollte zwar möglich sein, allerdings muss ich mich da auch erstmal etwas einarbeiten, da meine bisherigen Programmiererfahrungen eher aus dem Bereich von von GTK+ Anwendungen kommen. So sachen, wie Kernelmodule programmieren oder Ansprechen von Hardware hab ich bisher noch nicht gemacht. Aber ich werd mein BESTES geben
PS: Kernelmodul an den neuen Kernel anpassen sollte zwar möglich sein, allerdings muss ich mich da auch erstmal etwas einarbeiten, da meine bisherigen Programmiererfahrungen eher aus dem Bereich von von GTK+ Anwendungen kommen. So sachen, wie Kernelmodule programmieren oder Ansprechen von Hardware hab ich bisher noch nicht gemacht. Aber ich werd mein BESTES geben
- dopehouse
- Beiträge: 452
- Registriert: 01.09.2005 12:02:16
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: Hildesheim (Niedersachsen)
-
Kontaktdaten:
So Leute, hab das ganze Zeugs gestern zum laufen bekommen und mache gerade ne kleine Bibliothek daraus. Werde das ganze dann nochmal mit dem Lehrer zusammen testen und dann als Paket bereitstellen. War mal wieder ne sch*** Arbeiter, die aber auch wieder Spaß gemacht hat und ich hab mal wieder etwas dazugelernt (wieso hatte ich mit Windoof nie solche Erlebnisse?). Ich denke mal, dass Mitte der Woche alles fertig ist und ich es dann für alle anderen, die Interesse daran haben und der LGPL bereitstelle. Den Link dazu werde ich dann hier rein posten, falls von euch auch einer Interesse hat.
@cosmac: statserial war eine riesige Hilfe, die anderen beiden Tools aber weniger. Aber ohne statserial wäre ich bestimmt immer noch bei NULL oder knapp dahinter
Also nochmal ein fettes Dankeschön an dich.
@cosmac: statserial war eine riesige Hilfe, die anderen beiden Tools aber weniger. Aber ohne statserial wäre ich bestimmt immer noch bei NULL oder knapp dahinter
Also nochmal ein fettes Dankeschön an dich.
So, bist du schnelldopehouse hat geschrieben:So Leute, hab das ganze Zeugs gestern zum laufen bekommen...
Also, falls mal wieder jemand Argumente braucht...dopehouse hat geschrieben:War mal wieder ne sch*** Arbeiter, die aber auch wieder Spaß gemacht hat und ich hab mal wieder etwas dazugelernt (wieso hatte ich mit Windoof nie solche Erlebnisse?).
Sowas gehört in jeden ordentlich Haushaltdopehouse hat geschrieben:Den Link dazu werde ich dann hier rein posten, falls von euch auch einer Interesse hat.
Ja, setserial wollte ich eigentlich wieder raus-edieren. Und wenn du die Daten maldopehouse hat geschrieben:statserial war eine riesige Hilfe, die anderen beiden Tools aber weniger.
über die richtigen Pins übertragen würdest, würdest du picocom lieben
Beware of programmers who carry screwdrivers.
- dopehouse
- Beiträge: 452
- Registriert: 01.09.2005 12:02:16
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: Hildesheim (Niedersachsen)
-
Kontaktdaten:
So, wie versprochen gibt es hier die Bibliothek, die ich zu dem Problem geschrieben habe.
http://sourceforge.net/projects/libtlc54x
Es ist noch ein wenig dran zu tun. So gibt es zur Zeit noch keine Dokumentation und ich sollte vielleicht noch schauen, ob ich nicht noch irgendwo Fehler finde. Mit der ersten Anwendung funktioniert es aber zumindest schon. Die Homepage für das Projekt ist auch noch nicht fertig, folgt aber in Kürze.
Für all jene, die die Schaltung von http://www.wvss-projekte.de/index.php?s ... &prj=tmess nachgebaut haben oder nachbauen wollen, habe ich dann noch die passende Anwendung für Linux.
http://www.dopehouse.dyndns.org/Software/T-Mess-Linux
Die Anwendung ist derzeit (13. Juni 2007) noch in einem sehr frühen Stadium, funktioniert aber soweit schonmal und die Temperatur wird auch korrekt berechnet.
An dieser Stelle dann nochmal ein Dank an euch für eure Hilfe.
http://sourceforge.net/projects/libtlc54x
Es ist noch ein wenig dran zu tun. So gibt es zur Zeit noch keine Dokumentation und ich sollte vielleicht noch schauen, ob ich nicht noch irgendwo Fehler finde. Mit der ersten Anwendung funktioniert es aber zumindest schon. Die Homepage für das Projekt ist auch noch nicht fertig, folgt aber in Kürze.
Für all jene, die die Schaltung von http://www.wvss-projekte.de/index.php?s ... &prj=tmess nachgebaut haben oder nachbauen wollen, habe ich dann noch die passende Anwendung für Linux.
http://www.dopehouse.dyndns.org/Software/T-Mess-Linux
Die Anwendung ist derzeit (13. Juni 2007) noch in einem sehr frühen Stadium, funktioniert aber soweit schonmal und die Temperatur wird auch korrekt berechnet.
An dieser Stelle dann nochmal ein Dank an euch für eure Hilfe.
Geil!
Werd den TLC bei der nächsten Reicheltbestellung kommen lassen (alles andere hab ich reichlich).
Wird keine richtige Nutzanwendung aber um die Interaktion von Anwendung, Bibliothek und Hardware zu erkunden ists optimal (für mich).
Klasse, sehr kompetente Leute hier vertreten!
Gruß cirrussc
Werd den TLC bei der nächsten Reicheltbestellung kommen lassen (alles andere hab ich reichlich).
Wird keine richtige Nutzanwendung aber um die Interaktion von Anwendung, Bibliothek und Hardware zu erkunden ists optimal (für mich).
Klasse, sehr kompetente Leute hier vertreten!
Gruß cirrussc
Gruß cirrussc
--------------------
„Der Mensch steigert zur Zeit die Nutzung dessen, was seiner Willkür unterliegt - und kommt sich sehr klug dabei vor.“ H. Gruhl
--------------------
„Der Mensch steigert zur Zeit die Nutzung dessen, was seiner Willkür unterliegt - und kommt sich sehr klug dabei vor.“ H. Gruhl