Homepage Wiki Forum Buy

GNUBLIN embedded GNU/Linux

Open source learning and training plattorm for embedded GNU / Linux
A projects from Hochschule Augsburg and embedded projects GmbH

Project homepage: http://www.gnublin.org
Wiki: http://wiki.gnublin.org
Aktuelle Zeit: Mo 18. Dez 2017, 03:17

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi 30. Apr 2014, 12:35 
Offline

Registriert: So 27. Okt 2013, 23:13
Beiträge: 16
Hallo Leute,

habe am WE ein Paar Tests mit dem AD-Wandler gemacht und festgestellt, dass mit dem jetzigen Gerätetreiber das zyklische Auslesen aller Kanäle etwas umständlich ist. Deshalb habe ich einen neuen Treiber zusammengekloppt (siehe Anhang). Dieser Treiber unterstützt:

- aktivieren und deaktivieren der Kanäle über write-syscall
Code:
   /* Aktivieren Kanal zwo */
   unsigned char data[2] = { '1', 2 };
   write(fd, data, sizeof(data));

   /* Deaktivieren Kanal zwo */
   unsigned char data[2] = { '0', 2 };
   write(fd, data, sizeof(data));

- auslesen aller Kanäle mit einem einzigen read-syscall
Code:
   unsigned short samples[4];
   read(fd, samples, 4 * 2);

- wenn ein Kanal nicht aktiv ist, beträgt der ausgelesene Wert '0xffff'. Zugriff aus mehreren/parallelen Anwendungen ist möglich. Ein Anwendung kann Kanal X auslesen und eine andere Kanal Y

- Zugriff über sysfs möglich:
Code:
$ cat /sys/devices/platform/lpc313x_adc.0/adc[0-4]

- der Treiber hat einen internen Kernel-Thread, der zyklisch die AD-Werte aktualisiert. Die Zykluszeit in Millisekunden lässt sich auslesen/ändern über sysfs:
Code:
$ cat /sys/devices/platform/lpc313x_adc.0/cycle

- die Auflösung von 10 Bits kann zwar nicht modifiziert werden, aber das kommt vielleicht noch.

- der Treiber braucht ein "platform_device", deshalb muss man in dem passenden Maschine-Code folgendes einfügen:
Code:
static struct resource lpc313x_adc_resources[] = {
   [0] = {
      .start  = ADC_PHYS,
      .end   = ADC_PHYS + 0x30,
      .flags   = IORESOURCE_MEM,
   },
};

static struct platform_device lpc313x_adc_device = {
   .name      = "lpc313x_adc",
   .resource   = lpc313x_adc_resources,
   .num_resources   = ARRAY_SIZE(lpc313x_adc_resources),
};

Any feedback is welcome!

MfG,

Luis G


Dateianhänge:
Dateikommentar: AD-Gerätetreiber mit Beispielanwendung und Makefile
lpc313x_adc.tar.gz [5.32 KiB]
157-mal heruntergeladen


Zuletzt geändert von Luis am Mo 5. Mai 2014, 22:04, insgesamt 1-mal geändert.
Nach oben
 Profil  
 
BeitragVerfasst: Mi 30. Apr 2014, 17:15 
Offline

Registriert: Di 26. Jun 2012, 10:27
Beiträge: 172
Sehr schön, sogar mit AD-Wandlung im Hintergrund und ansprechbar sowohl über DevFile als auch über SysFS besser geht's nicht.


Code:
   /* Aktivieren Kanal zwo */
   unsigned char data[2] = { '1', 2 };
   write(fd, data, sizeof(data));

   /* Deaktivieren Kanal zwo */
   unsigned char data[2] = { '0', 2 };
   write(fd, data, sizeof(data));
Aber das ist immer eine Sache die mir nicht gefällt, warum ein Charakters als Kommando und nicht einfach eine Integer.


Nach oben
 Profil  
 
BeitragVerfasst: Mo 5. Mai 2014, 22:08 
Offline

Registriert: So 27. Okt 2013, 23:13
Beiträge: 16
Kirsch hat geschrieben:
Aber das ist immer eine Sache die mir nicht gefällt, warum ein Charakters als Kommando und nicht einfach eine Integer.

Jau, da stimme ich zu. Ich habe es geändert (siehe Anhang meines oberen Beitrags). Danke für den Hinweis.

Gruss,

Luis


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de