Forum: Mikrocontroller und Digitale Elektronik USB-Relaiskarte


von Florian D. (code-wiz)


Lesenswert?

Hallo allerseits,

ich ärgere mich darüber, dass meine externen Festplatten sich per 
SCSI-Befehlen nicht ausschalten lassen.

Daher die Frage:
Hat jemand von Euch schon einmal eine USB-Relaiskarte (für > 8 Relais) 
entworfen und kann das Design zur Verfügung stellen?

Ansonsten müsste ich mich wohl selbst daransetzen und das Rad vermutlich 
zum x. Mal erfinden (bzw. bauen). Ich habe hier noch ein paar PICs 
herumliegen, die USB sprechen, damit ließe sich das umsetzen. Wollte 
aber vorher klären, ob ich mir die Arbeit eventuell sparen kann.

Grüße,

Florian

von Florian D. (code-wiz)


Angehängte Dateien:

Lesenswert?

Da die Resonanz nicht allzu groß war, hier einmal mein erster Wurf.

Ich würde mich freuen, wenn jemand einmal einen Blick darauf werfen 
könnte und evtl. Probleme bekanntgibt.

Die zweite Seite ist noch nicht fertig (ich war zu faul, ein Relais in 
Kicad zu zeichnen). An den ULN2803 würden dann die Relais geschaltet und 
wohl LEDs mit Vorwiderstand entspr. parallel.

Die Spannungsversorgung bereitet mir am meisten Kopfzerbrechen. Die 
Frage ist, ob sich das Ein- und Ausschalten der Relais nicht ggf. 
störend auf die 5V-Versorgung auswirkt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du willst SCSI-Festplatten abschalten, aber am Bus angeschlossen lassen? 
Bist Du Dir sicher, daß das eine gute Idee ist?

von Florian D. (code-wiz)


Lesenswert?

Nein, ich meine USB-Festplatten, die unter Linux als SCSI-Devices 
auftauchen.

von Mike (Gast)


Lesenswert?

Hat schon jemand erfunden, www.google.de und nach "avr usb" suchen.

http://www.obdev.at/products/avrusb/automator.html

von Florian D. (code-wiz)


Lesenswert?

Das Problem mit dem 'Automator' ist, dass dort fest 8 Relais 
untergebracht sind. Ich würde das Ganze aber gerne skalierbar haben. 
Übrigens frage ich mich gerade, ob das von denen eine gute Idee ist, die 
LEDs direkt an die Eingänge des ULN2803 zu hängen. Da ich die genauen 
Werte des ULN2803 jetzt ad hoc nicht parat habe, möchte ich nicht 
behaupten, dass das Unsinn ist.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Unter anderen* Betriebssystemen funktioniert das softwaregesteuerte 
Abschalten von Festplatten, die an USB-IDE-Bridges angeschlossen sind.

Vielleicht wäre es eine sinnvollere Lösung, die 
Powermanagementunterstützung des verwendeten Linux in dieser Hinsicht 
weiter zu untersuchen? Ich kann mir kaum vorstellen, daß das nicht schon 
gelöst wurde bzw. bin überrascht davon, daß das nicht selbstverständlich 
geht.


*) ganz böses Zeug aus Nordwestamerika

von Florian D. (code-wiz)


Lesenswert?

Prinzipiell funktioniert das wohl auch unter Linux, aber wohl nicht mit 
den billigen Gehäusen/Controllern, die ich hier habe. Die Menschen, die 
sich um das Projekt openslug kümmern, behaupten zumindest, dass es 
klappt. Vermutlich würde es mit dem ausländischen Betriebssystem auch 
mit meinem Setup Probleme geben.

von Florian D. (code-wiz)


Lesenswert?

Der Controller ist übrigens ein JM20337

http://www.jmicron.com/JM20337.html

von Gast (Gast)


Lesenswert?

Guck mal nach dem "IO Warrior".

von Florian D. (code-wiz)


Lesenswert?

Gast wrote:
> Guck mal nach dem "IO Warrior".

14,80 EUR bzw. 11,75 EUR pro Stück ist leider zu teuer.

Der PIC 18F2550 kostet um die 8 EUR das Stück.

Rumliegen hätte ich die so oder so.

von Florian D. (code-wiz)


Lesenswert?

Sehe gerade, dass ich die Pull-Ups zwischen '373 und ULN2803 vergessen 
habe. Werde morgen mal den vervollständigten Schaltplan veröffentlichen.

von Εrnst B. (ernst)


Lesenswert?

Hab hier 4 verschiedene USB-Platten getestet, drei davon liessen sich 
softwaremässig ausschalten, eine nicht.

Lustigerweise funktionierts grad bei den "billigen" USB-Only Platten, 
die USB+Firewire Platte weigert sich.

Ich verwende das sg_start Utility aus dem sg3_utils Paket. je nach 
Platte gehts mit
> sg_start 0 /dev/$disk
oder
> sg_start 0 -pc=2 /dev/$disk

Hier ein kleines Shellscript, dass die Platte nach 10Minuten Inaktivität 
runterfährt:
1
#!/bin/sh
2
3
disk=$1
4
interval=600
5
6
state=`grep " $disk " /proc/diskstats`
7
count=$interval
8
up=1
9
10
while sleep 10; do
11
   count=$(($count-10))
12
   newstate=`grep " $disk " /proc/diskstats`
13
   if [ "$state" = "$newstate" ]; then
14
      if [ $count -lt 0 ]; then
15
         count=$interval
16
         if [ $up = 1 ]; then
17
            echo -e "spin-down\t$disk\t" `date`
18
            sync
19
            state=`grep " $disk " /proc/diskstats`
20
            sg_start 0 -pc=2 /dev/$disk
21
            sg_start 0 /dev/$disk
22
            up=0
23
         fi
24
      fi
25
   else
26
      echo -e "drive $disc is up\t" `date`
27
      count=$interval
28
      state="$newstate"
29
      up=1
30
   fi
31
done

start mit
./scsi_idle.sh sdh &
./scsi_idle.sh sdi &
etc.

Schau mal ob das bei dir evtl auch funktioniert, vielleicht kannst du 
dir die Relais-Karte ja sparen.

/Ernst

von Florian D. (code-wiz)


Lesenswert?

Genau so habe ich das ausprobiert. Ich habe hier dummerweise ein paar 
von den Gehäusen mit dem oben genannten Chip. Damit geht es leider 
nicht.

von Εrnst B. (ernst)


Lesenswert?

Ok. dann wohl die Hardwarelösung.

Wenns statt dem PIC auch ein Tiny2313 o.ä. sein darf, hätt ich hier 
vielleicht was passendes für dich.

Läuft hier um die Türsprechanlage mit Asterisk zu koppeln, liest ein 
paar Portpins ein und schaltet zwei Relais.

Relativ simple Firmware auf USBtiny Basis, und ein kleines 
libusb-program für den Zugriff.
Leider kein Schaltplan oder Layout, ist auf die schnelle auf ner 
Streifenraster-Platine zusammengelötet.

/Ernst

von Florian D. (code-wiz)


Angehängte Dateien:

Lesenswert?

So, jetzt sollte die Schaltung komplett sein und nun wirklich genug 
Relais ermöglichen. Ich habe mich darüber geärgert, dass ich 8 
Adressleitungen verwendet habe und daraus nur eine ausgewählt habe. Da 
ich nicht alles umzeichnen wollte, habe ich ein paar Bauteile 
hinzugefügt und kann nun tatsächlich 256 * 8 Relais ansprechen, auch 
wenn dann der 7805 bestimmt abrauchen würde. Ich frage mich zwar, ob das 
nicht ein wenig übertrieben ist (mit dem Hammer die Erdnuss öffnen), 
aber vermutlich werde ich das testweise so aufbauen. Die Platine mit den 
Relais ist so gedacht, dass auf beiden Seiten 2x10-polige Anschlüsse 
sind, die durchgeschliffen werden und man mit den Jumpern oder 
Mäuseklavieren (mal schauen) jeweils pro Platine eine Adresse auswählt. 
Vielleicht könnte man den 74LS04 noch durch einen Transistor (oder 
müssen es vielleicht sogar zwei sein...) und ein paar Widerstände 
ersetzen, aber die LS-Familie verheißt keinen guten Stromfluss 
(eigentlich nur einen negativen) bei High-Pegel. Ich hatte jetzt 
allerdings keine Lust, das Rechnen anzufangen.

von nobody (Gast)


Lesenswert?

RELAIS- UND EINGANGSKARTE MIT USB-INTERFACE
http://bascom-forum.de/index.php/topic,105.msg315.html#msg315

von Karl H. (kbuchegg)


Lesenswert?

Florian Demski wrote:
> habe ich ein paar Bauteile hinzugefügt und kann nun tatsächlich
> 256 * 8 Relais ansprechen,

Ich hätte eine kaskadierbare Schiebregisterkette ala 595 genommen

595 -> 2803 -> Relais

Die Adressierung ergibt sich aus der Anordnung der Module
am Schieberegister-'Bus'

von Florian D. (code-wiz)


Lesenswert?

Karl heinz Buchegger wrote:
> Ich hätte eine kaskadierbare Schiebregisterkette ala 595 genommen
>
> 595 -> 2803 -> Relais
>
> Die Adressierung ergibt sich aus der Anordnung der Module
> am Schieberegister-'Bus'

Dafür müsste die Controller-Platine allerdings wissen, wie viele 
Schieberegister angeschlossen sind. Das Schieben selbst ist ja 
unkritisch, da es im MHz-Bereich stattfinden kann.

Ich überlege gerade: Die Controller-Platine könnte sogar feststellen, 
wie lang das gesamte Schieberegister ist, in dem einfach eine einzelne 1 
durchgeschoben wird und man den Ausgang des letzten SR wieder auf einen 
Eingang des µC zurückführt.

Man könnte natürlich auch I2C nehmen und mit PCF8574 arbeiten.

Der Vorteil bei den seriellen Lösungen (also auch I2C) wäre der 
geringere Leitungsbedarf (Takt, Daten, GND, +5V, +12V, [für 595 
zusätzlich noch /MR und /OE, evtl. DS]) und die geringere Anzahl an 
Bauteilen (vermutlich dadurch auch der geringere Preis).

Die Idee gefällt mir. Ich werde das gleich einmal umzeichnen.

von Florian D. (code-wiz)


Lesenswert?

nobody wrote:
> RELAIS- UND EINGANGSKARTE MIT USB-INTERFACE
> http://bascom-forum.de/index.php/topic,105.msg315.html#msg315

Für über 100 EUR finanziell uninteressant.

von Florian D. (code-wiz)


Angehängte Dateien:

Lesenswert?

Hier einmal die Version mit 74HCT595. Sieht gleich ein wenig 
aufgeräumter aus.

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.