Mikrokontroller mit PWM's für 13 Servos ?

P

Philip

Guest
Hallo zusammen

Ich möchte einen Roboter bauen und muss dazu 13 Servos gleichzeitig ansteuern.
Das möchte ich mit Pulsweitenmodulatoren machen (für Graupner-Servos).

Jedoch hat kaum ein Mikrokontroller so viele PWM's eingebaut.
(Der Microchip PIC18F8621 zwar schon, aber der Programmer und der C-Compiler ist mir viel zu teuer.)


So suche ich Alternativen:

-Zwei uC über I2C verbinden, aber ist das schnell genug und wie kann man die beiden debuggen (mit vertretbarem Aufwand) ?

-Die Pulsweite jeweils in kleineren uC's "zwischenspeichern" ?

-Die digitalen Ports im entsprechenden Takt schalten, was aber eher Verschwendung von Rechenzeit wäre.

-?


Was würdet ihr machen ?


Grüsse und vielen Dank im voraus.
Philip
 
Philip wrote:
Ich möchte einen Roboter bauen und muss dazu 13 Servos gleichzeitig ansteuern.
Das möchte ich mit Pulsweitenmodulatoren machen (für Graupner-Servos).

Jedoch hat kaum ein Mikrokontroller so viele PWM's eingebaut.
[...]

-Die digitalen Ports im entsprechenden Takt schalten, was aber eher
Verschwendung von Rechenzeit wäre.
So würde ich das machen. Die Pulsfrequenz ist ja relativ langsam, wenn
man die Timer schlau einsetzt und nicht in irgendwelchen Warteschleifen
rumhängt bleibt auch noch "genug" Zeit für andere Aufgaben. Notfalls
kannst du immer noch einen eigenen Controller dazu abkommandieren.
 
Am Sun, 14 Dec 2003 01:57:15 +0100 schrieb Philip:
-Zwei uC über I2C verbinden, aber ist das schnell genug und wie kann man die beiden debuggen (mit vertretbarem Aufwand) ?
So würd ichs machen - wenn mann dann noch einen ľC mit eigener
Unterstützung von I2C oder SPI nimmt, dann verbraucht das sogut wie keine
Rechenzeit. Und I2C ist mit 1 MBit (wenn ich mich nicht irre) schnell
genug. Da ja Servos nun auch nicht so wahnsinnig schnell sind.
Außerdem kann man so evtl. kleinere und günstigere ľC nehmen.

-Die digitalen Ports im entsprechenden Takt schalten, was aber eher Verschwendung von Rechenzeit wäre.
Auch 'ne Lösung - mach aber denke ich viel Arbeit beim Programmieren. Dafür
ist ein super genaues Timing nötig, wenn ich die verschiedenen Ausgänge mit
unterschiedlichen Pulsweiten ansteuern möchte.
Denke das ist nicht ganz so einfach ohne das ich nachher irgendwelche
Ruckler in der Bewegung habe.

Gruß
Michael
 
Hallo Philip,

Philip schrieb:

-Die Pulsweite jeweils in kleineren uC's "zwischenspeichern" ?
Das halte ich fuer eine brauchbare Idee. 16F627 z.B.

-Die digitalen Ports im entsprechenden Takt schalten, was aber eher
Verschwendung von Rechenzeit wäre.
Und eher nicht funktioniert. Du musst fuer ein Servo den Impuls auf ca.
3us genau einhalten, sonst fangen die an zu brummen oder gar zu zittern.
Dein Roboter leidet dann unter dem grossen Tatterich :).
Eine Moeglichkeit zum uC-sparen gibt es noch, einen Multiplexer. Da ja
die Servos nur alle 20ms einen neuen Impuls brauchen, und manche es auch
nicht viel haeufiger moegen, kann man bis zu 10 Impulse erzeugen und zum
jeweiligen Servo Multiplexen. Ein 16F627 koennte das bequem erledigen.
Und die serielle Schnittstelle ist dann auch noch frei.
Den Code zur Pulserzeugung kann ich Dir aus meinen Fluesterantrieben zur
Verfuegung stellen :).

Gruss, Kurt

--
PiN - Präsenz im Netz GITmbH
Kurt Harders
http://www.pin-gmbh.com
 
Philip <flupp@hispeed.ch> wrote in news:brgcil$geu$1@newshispeed.ch:

Hallo zusammen

Ich möchte einen Roboter bauen und muss dazu 13 Servos
gleichzeitig ansteuern. Das möchte ich mit Pulsweitenmodulatoren
machen (für Graupner-Servos).

Jedoch hat kaum ein Mikrokontroller so viele PWM's eingebaut.
Ich glaube der MSP430F14x hat recht viele. Er hat zwar nur 2 Timer,
dafuer aber hat Timer 1 drei PWM Ausgänge und Timer2 7 PWM Ausgänge.
Nunja ergibt 10; fehlen noch 3 ;-).
Du kannst die Ausgänge von Timer1 auf je 3 verschiedene Ausgänge
schalten (sozusagen muxen, wie in nem andren Artikel hier beschrieben)
und hast dann Timer1 mit virtuell 9 Ausgängen. Somit sind das dann 16
PWM Ausgänge.

Wie verhält sich eigentlich ein Servo, wenn er mal überhaupt keinen
Impuls bekommt?, also z.B. nicht alle 10ms sondern nur alle 30ms?,
zittert der dann auch? Oder ist wirklich nur die Impulsbreite eines
Impulses wichtig und die Länge der Impulspause egal?

M.
--
Bitte auf mwnews2@pentax.boerde.de antworten.
 
Hi Philip,

ein Freund von mir arbeitet in einem Unternehmen,
das Servocontroller herstellt. Vielleicht ist das, was
du brauchst. Mit einem Servo controller ist es sehr easy
die Servos zu steuern und es ist kleiner als ein uC.
Entweder infoYYY@ZZZanimatronik.de oder direkt
an meinen Freund pervoelzYYY@ZZZanimatronik.de
Die web site Adresse ist http://www.ZZZanimatronik.de/
(Produkt -> Servocontroller S10, kann bis zu 12 Servos
steuern, Steuerung per RS232) Ich selbst benutze eins,
und benutze ihn für meinen Roboter. Anscheinend soll
die Synchronisation der Servosteuerungen sogar besser
funktionieren als mit einem uC.
Gruß,

Oliver Adria

PS : All die YYYs und ZZZs weg'cut'ten.



"Philip" <flupp@hispeed.ch> wrote in message
news:brgcil$geu$1@newshispeed.ch...
Hallo zusammen

Ich möchte einen Roboter bauen und muss dazu 13 Servos gleichzeitig
ansteuern.
Das möchte ich mit Pulsweitenmodulatoren machen (für Graupner-Servos).

Jedoch hat kaum ein Mikrokontroller so viele PWM's eingebaut.
(Der Microchip PIC18F8621 zwar schon, aber der Programmer und der
C-Compiler ist mir viel zu teuer.)


So suche ich Alternativen:

-Zwei uC über I2C verbinden, aber ist das schnell genug und wie kann man
die beiden debuggen (mit vertretbarem Aufwand) ?

-Die Pulsweite jeweils in kleineren uC's "zwischenspeichern" ?

-Die digitalen Ports im entsprechenden Takt schalten, was aber eher
Verschwendung von Rechenzeit wäre.

-?


Was würdet ihr machen ?


Grüsse und vielen Dank im voraus.
Philip
 
In article <brgcil$geu$1@newshispeed.ch>,
Philip <flupp@hispeed.ch> writes:
Hallo zusammen

Ich möchte einen Roboter bauen und muss dazu 13 Servos gleichzeitig ansteuern.
Das möchte ich mit Pulsweitenmodulatoren machen (für Graupner-Servos).

Jedoch hat kaum ein Mikrokontroller so viele PWM's eingebaut.
(Der Microchip PIC18F8621 zwar schon, aber der Programmer und der C-Compiler ist mir viel zu teuer.)

Ich hab sowas schon jitterfrei mit einem 8051 gemacht
Hier ein Testquellcode.
Im unteren Beispiel sind 2 servos angesteuert, 10 gehen.
13 srvos müssten auch noch gehen.

Der Timer muß modus 1 laufen, sein Interrupt als einziger auf höchste
priorität eingestellt sein.
Der compiler war sdcc (unter GPL).


unsigned char pos[]={0,0,0,0,0,0,0,0,0,0,0,0};


#pragma SAVE
#pragma EXCLUDE dpl,dph,b

void it0 (void) interrupt 1 using 1
{
static unsigned char fco=0;
static unsigned x;

// adjust timeroverflow to irq
_asm
mov a,_TL0 ; ermitteln ob seit timeroverflow eiene gerade Taktzahl vergangen ist
jb acc.0,$00001 ; 1 takt verschlafen wenn das Ergebnis gerad ist
nop ; da djnz 2 takte braucht
$00001:
mov a,#24
clr c
subb a,_TL0 ;die wartezeit aus 24 - vergangenen ticks berechnen
mov _tmp,a
clr c
rrc a ;durch 2 teilen

$00002:

djnz acc,$00002 ;warten. Jetzt ist der jitter raus.
_endasm;
// 25 ticks over
x=65536-1000-(int)pos[fco]; //zeit für das servo aus dem array berechnen
TH0=x>>8;
TL0=x&255;
if(fco==0){ser1=1;} //servo 1 Puls auf 1
else if(fco==1){ser1=0;ser2=1;} //servo 1 puls weg,Servo 2 Puls starten
else if(fco==2){ser2=0;}
if(++fco>9)fco=0; //nachstes servo

}

--
MFG Gernot
 
Hallo,
Wie verhält sich eigentlich ein Servo, wenn er mal überhaupt keinen
Impuls bekommt?, also z.B. nicht alle 10ms sondern nur alle 30ms?,
zittert der dann auch? Oder ist wirklich nur die Impulsbreite eines
Impulses wichtig und die Länge der Impulspause egal?
Bei den Billigservos (nicht Digitalservos) wird nur in
der High-Zeit des Impulses der Motor geregelt.
Wenn kein Impuls anliegt kann man das Servo ohne Kraftaufwand
aus der aktuellen Position wegdrücken, sendet man die Pulse öfters
als 20ms wird das Servo stärker, allerdings beginnt dann die
Regelung zu schwingen. Also Pausen von 20ms +- 2ms sind sicher
im grünen Bereich, was genau eingehalten muss ist die High-Zeit,
weil sonst das Servo ständig regelt und dann laut wird (wurde
aber eh schon erwähnt)

MfG,
Johannes
 
Moin Philip,

In's Unreine gedacht: Die Servos wollen idR mit 50 Hz angesteuert
werden, macht 20 ms. Da passen sechs bis sieben Servos rein, wenn man
von maximal knapp 3 ms Pulsweite ausgeht. Normalerweise arbeiten die
Servos im Bereich von 0.8ms bis 2.4 ms, Mitte bei 1.6 ms. Hab aber
auch schon welche gehabt, die sich nicht exakt daran hielten.

Dafür reichen dann genau zwei timer. Einer tickert konstant mit 50 Hz.
Der andere wird zyklisch umprogrammiert und auf die jeweiligen
Ausgangsports gelegt. Das ganze sollte im interrupt laufen, damit noch
Rechenzeit übrigbleibt. Möglicherweise gibt es bei dieser Lösung ein
Problem mit Jitter, das wäre auszuprobieren.

Für 13 Servos sollten also vier unabhängige Timer reichen, wobei 16-
bittige zu empfehlen sind, da die Servos bei 8 Bit Auflösung doch
schon recht grob gerastert positionieren.

Rainer

--
Man kann andauernd wundern
(Stephan Kendzia in de.comp.hardware.drucker)
 
Moin Kurt,

Und eher nicht funktioniert. Du musst fuer ein Servo den Impuls auf
ca. 3us genau einhalten, sonst fangen die an zu brummen oder gar zu
zittern.
ack. Man sollte deshalb 16-Bit-Timer nehmen, auch wenn das auf den
ersten Blick wie overkill aussieht. Bei der Einhaltung des 50Hz-
Rasters sind die aber imho nicht so empfindlich.

Rainer

--
Ich für meinen Teil kann nur feststellen: Es ist nie zu spät für eine
glückliche Kindheit... (Joachim Neudert in ger.ct)
 
Philip wrote:
Ich möchte einen Roboter bauen und muss dazu 13 Servos gleichzeitig
ansteuern. Das möchte ich mit Pulsweitenmodulatoren machen (für
Graupner-Servos).
(...)
Was würdet ihr machen ?
Ich habe eine ähnliche Aufgabenstellung mal so gelöst:

Im Reload-Timerinterrupt des 16-bit-Timers setze ich einen Portpin,
und lege im Reload-Register des Timers die Zeit ab, wie lange der
Puls am Portpin dauern soll.
Beim nächsten Eintritt in den Timerinterrupt setze ich den Portpin
wieder auf low und setze den nächsten Portpin auf high...

Auf diese Weise werden die PWM-Signale zwar nacheinander erzeugt, aber
es gibt ja auch keinen Grund, die gleichzeitig erzeugen zu müssen
Bei 13 Servos wird man dann im ungünstigsten Falle ca. 25ms Pausenzeit
bekommen, was noch keine Nachteile bringt.

In meinem folgenden (getesteten) Code-Beispiel für 7 Servos habe ich
zwischen den PWM-Signalen immer noch eine kurze Pause gelassen - die
ist allerdings hier unnötig (wurde für die Erzeugung eines Multiplex-
PWM-Signals benötigt, welches ich aus dem Beispiel aber schon heraus
genommen habe).
Um einen jitterarmen PWM zu erhalten, dürfen weitere Interrupt-
Routinen nicht zu viel Rechenzeit schlucken (ggf. in den anderen
Interrupt-Routinen frühzeitig mit "sei()" Interrupts freigeben).
Ein leichter Jitter ist aber unproblematisch, da Modellbau-Servos
sowieso eine ziemlich große Totzeit (respektive Tot-Winkel) haben,
in der sie nicht reagieren.

Thomas.


// TimerInterrupt 1 (PWM-Multiplexsignal) //////////////////////////
//
//
SIGNAL(SIG_OUTPUT_COMPARE1A) // signal handler for tcnt1 interrupt
{
unsigned int delay = 0;
//
switch(PWMchannel)
{
case 1:
{
outp((PWM0 >> 8),OCR1AH); // Impulszeit setzen
outp((PWM0 &0xFF),OCR1AL);
sbi(PORTA,0); // PWM-Kanal 0 setzen
break;
}
case 3:
{
outp((PWM1 >> 8),OCR1AH); // Impulszeit setzen
outp((PWM1 & 0xFF),OCR1AL);
sbi(PORTA,1); // PWM-Kanal 1 setzen
break;
}
case 5:
{
outp((PWM2 >> 8),OCR1AH); // Impulszeit setzen
outp((PWM2 & 0xFF),OCR1AL);
sbi(PORTA,2); // PWM-Kanal 2 setzen
break;
}
case 7:
{
outp((PWM3 >> 8),OCR1AH); // Impulszeit setzen
outp((PWM3 & 0xFF),OCR1AL);
sbi(PORTA,3); // PWM-Kanal 3 setzen
break;
}
case 9:
{
outp((PWM4 >> 8),OCR1AH); // Impulszeit setzen
outp((PWM4 & 0xFF),OCR1AL);
sbi(PORTA,4); // PWM-Kanal 4 setzen
break;
}
case 11:
{
outp((PWM5 >> 8),OCR1AH); // Impulszeit setzen
outp((PWM5 & 0xFF),OCR1AL);
sbi(PORTA,5); // PWM-Kanal 5 setzen
break;
}
case 13:
{
outp((PWM6 >> 8),OCR1AH); // Impulszeit setzen
outp((PWM6 & 0xFF),OCR1AL);
sbi(PORTA,6); // PWM-Kanal 6 setzen
break;
}
//
case 14: // letzter Impuls beendet:
// // einige ms Pause
{
delay = 22050 - PWM0 - PWM1 - PWM2 - PWM3 - PWM4 - PWM5;
outp((delay >> 8), OCR1AH); // Wartezeit setzen
outp((delay & 0xFF),OCR1AL);
outp(0, PORTA); // Impulse rcksetzen
PWMchannel = 0; // Kanalabfolge da capo
break;
}
default: // Pausenzeit:
{
outp(1,OCR1AH); // Pausenzeiten 500us setzen
outp(244,OCR1AL);
outp(0, PORTA); // Impulse rcksetzen
break;
}
}
//
PWMchannel++; // n„chsten PWM-Kanal vorbereiten
}
 
Philip wrote:

Ich möchte einen Roboter bauen und muss dazu 13 Servos gleichzeitig
ansteuern.
Hallo,
vielleicht ist der SD20 von www.Roboter-Teile.de was für dich. DU musst
ich nur über I2C füttern und den Rest macht er alleine.
http://www.roboter-teile.de/Shop/pd-116159946.htm?categoryId=3


Gruß,


Oliver
 
Thomas Rehm wrote:
Ich habe eine ähnliche Aufgabenstellung mal so gelöst:
(...)
Mein Beispiel bezog sich übrigens auf den AVR-Controller AT90S8515,
Compiler ist der AVR-GCC.
Beim PIC dürfte es aber vom Prinzip her sehr ähnlich aussehen.

Thomas.
 
-Die digitalen Ports im entsprechenden Takt schalten, was aber eher
Verschwendung von Rechenzeit wäre.
Wenn mans einigermassen geschickt macht schluckt das kaum Rechenzeit -
hab sowas mal fuer 16 Servos auf nem AVR (@ 4Mhz) gemacht - ist in C und
damit vielleicht hilfreich :




volatile u08 servo_number;

s08 servo[SERVO_MAX];
s08 servo_max[SERVO_MAX];
s08 servo_min[SERVO_MAX];


/*================================ 22.07.2001
================================
* interrupt routine "SIG_OVERFLOW1" for 16 servos
*
* triggered by Timer 1 overflow
==============================================================================*/
SIGNAL(SIG_OVERFLOW1) /* signal handler for tcnt1 overflow
interrupt */
{
// reload Timer1
__outw(65535 - 1250, TCNT1L);

servo_number++;
if (servo_number == 8) {servo_number = 0;}

outp(1 << servo_number, SERVO_PORT);
outp(1 << servo_number, SERVO_PORT2);


__outw(65535 - 1250 + 750 + (servo[servo_number] * 3), OCR1AL);
__outw(65535 - 1250 + 750 + (servo[servo_number + 8] * 3), OCR1BL);


}


SIGNAL(SIG_OUTPUT_COMPARE1A) {

outp(0, SERVO_PORT);

}

SIGNAL(SIG_OUTPUT_COMPARE1B) {

outp(0, SERVO_PORT2);

}
 
"Rainer Knaepper" <rainerk@smial.prima.de> schrieb im Newsbeitrag
news:8zsTn4kDrLB@smial.prima.de...
Moin Philip,

-?

In's Unreine gedacht: Die Servos wollen idR mit 50 Hz angesteuert
werden, macht 20 ms. Da passen sechs bis sieben Servos rein, wenn man
von maximal knapp 3 ms Pulsweite ausgeht. Normalerweise arbeiten die
Servos im Bereich von 0.8ms bis 2.4 ms, Mitte bei 1.6 ms. Hab aber
auch schon welche gehabt, die sich nicht exakt daran hielten.

Dafür reichen dann genau zwei timer. Einer tickert konstant mit 50 Hz.
Dann bekommst Du aber nur beim ersten Servo immer genau die 20ms Zykluszeit
hin, fragt sich, ob das bei den anderen stört...

Oder Du tickerst den ersten Timer mit 50Hz * (Anzahl Servos)

Der andere wird zyklisch umprogrammiert und auf die jeweiligen
Ausgangsports gelegt. Das ganze sollte im interrupt laufen, damit noch
Rechenzeit übrigbleibt. Möglicherweise gibt es bei dieser Lösung ein
Problem mit Jitter, das wäre auszuprobieren.

Für 13 Servos sollten also vier unabhängige Timer reichen, wobei 16-
bittige zu empfehlen sind, da die Servos bei 8 Bit Auflösung doch
schon recht grob gerastert positionieren.

Rainer
Gruss Chregu
 
Kurt Harders wrote:
Du musst fuer ein Servo den Impuls auf ca. 3us genau einhalten, sonst
fangen die an zu brummen oder gar zu zittern.
Das kann ich nicht nachvollziehen. Die Servos haben i.A. einen
recht großen Totzeitbereich (um die 20us, wenn ich mich richtig
erinnere, was umgerechnet ca. 1 bis 2 Winkelgraden entspricht).

3us würde zudem eine Auflösung von ca. 400 Stufen bedeuten bzw. eine
Winkelauflösung von 1/4 Grad - und die Servos, die mir untergekommen
sind, sind weit davon entfernt, so fein aufzulösen.
Oder welche Servos verwendest Du? Ich suche nämlich ein (günstiges)
Servo mit sehr geringer - oder sogar ganz ohne - Totzeit.

Thomas.
 
"Philip" <flupp@hispeed.ch> schrieb im Newsbeitrag
news:brgcil$geu$1@newshispeed.ch...
Hallo zusammen

Ich möchte einen Roboter bauen und muss dazu 13 Servos gleichzeitig
ansteuern.
Das möchte ich mit Pulsweitenmodulatoren machen (für Graupner-Servos).

Jedoch hat kaum ein Mikrokontroller so viele PWM's eingebaut.
(Der Microchip PIC18F8621 zwar schon, aber der Programmer und der
C-Compiler ist mir viel zu teuer.)


So suche ich Alternativen:
Hallo Philip,
schau Dir mal die MB90F340 Familie
(http://www.fme.gsdc.de/products/mb903400.htm) von Fujitsu an, das Teil hat
16 Stück 8Bit PWMs, und der C-Compiler ist gratis. Der Chip kostet um die 11
EUR, z.B. bei Glyn (www.glyn.de).

Viele Grüße
Rainer
 
Hallo Rainer,

Rainer Knaepper schrieb:

ack. Man sollte deshalb 16-Bit-Timer nehmen, auch wenn das auf den
ersten Blick wie overkill aussieht. Bei der Einhaltung des 50Hz-
Rasters sind die aber imho nicht so empfindlich.
Ich verwende von einem PIC16F627 den 16-Bit-Zaehler und den Vergleicher,
der dann den Pin zuruecksetzt. Die 20ms sind nicht sooo kritisch, aber
bei 10ms haben schon einige Servos gestreikt. Bei 30ms habe schon Servos
gezuckt. Das haengt stark von den Servos ab.

Gruss, Kurt

--
PiN - Präsenz im Netz GITmbH
Kurt Harders
http://www.pin-gmbh.com
 
Hallo Thomas,

Thomas Rehm schrieb:

Das kann ich nicht nachvollziehen. Die Servos haben i.A. einen
recht großen Totzeitbereich (um die 20us, wenn ich mich richtig
erinnere, was umgerechnet ca. 1 bis 2 Winkelgraden entspricht).
Solche Servos habe ich noch nicht gehabt :). Ich habe bei Tests mit
FS100, Carson-Servos und diversen anderen Servos Totzeiten von maximal
5us gefunden. Wenn der Puls sich um 5us veraendert, laeuft der Motor an.
Das heisst aber, je nach Servo, nicht, dass sich auch am Abtrieb/Poti
was tut. Genau dann fangen die Servos an zu brummen.

3us würde zudem eine Auflösung von ca. 400 Stufen bedeuten bzw. eine
Winkelauflösung von 1/4 Grad - und die Servos, die mir untergekommen
sind, sind weit davon entfernt, so fein aufzulösen.
Das stimmt, wegen der Fettbremse im getriebe :).

Oder welche Servos verwendest Du? Ich suche nämlich ein (günstiges)
Servo mit sehr geringer - oder sogar ganz ohne - Totzeit.
Das Problem ist der Unterschied zwischen elektrischer Totzeit und
mechanischer Aufloesung.

Wenn Du wissen willst, wieso ich so genaue Aussagen mache, schau mal auf
http://www.mbtronik.de :).

Gruss, Kurt

--
PiN - Präsenz im Netz GITmbH
Kurt Harders
http://www.pin-gmbh.com
 
Philip <flupp@hispeed.ch> schrieb im Beitrag <brgcil$geu$1@newshispeed.ch>...
Was würdet ihr machen ?

Annahme: Wir haben genug (13) normale I/O-Pins .
Servos kommen da dran.
Im Programm steht ein ARRAY a mit (13) Sollpositionen (0..255) und ein i.
i=0, Port(i)=1, Timer-Interrupt in 2*(a+255) usec bestellen,
mit normalem Programm weitermachen

Timer-Interrupt: Port(i)=0, i=(i+1)%13, Port(i)=1,
Timer-Interrupt in 2*(a+255) usec bestellen,
mit normalem Programm weitermachen

Eventuell nicht gleich nach 12 kommt 0, sondern erst 25msec abwarten.

Braucht 0 (Zero, Null, keinen) PWM.
--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
 

Welcome to EDABoard.com

Sponsor

Back
Top