Hallo Ich suche einen möglichst kleinen, leichten und natürlich günstigen 8-Bit µC, der 4 PWM-Signalausgänge hat (für DC und Servos), sowie einen Analog-Digital Wandler als Eingang. Sprache sollte C sein. Vielen Dank für eure Hilfe Grüsse Waspy
Waspy schrieb: > natürlich günstigen Was ist für dich günstig? Wenn der Chip halbsoviel wie das Porto kostet? Oder weniger als der Extrakäse auf der Piza oder ein Kaffee Latte? MfG Klaus
Waspy schrieb: > 4 PWM-Signalausgänge Jeder I/O Pin kann als PWM Signalausgang benutzt werden. Alles eine Frage der Software. Waspy schrieb: > 4 PWM-Signalausgänge hat (für DC und Servos) Was bitte ist PWM für DC und Servos? PWM ist PWM, was man damit macht ist doch Sache der nachfolgenden Elektronik.
Waspy schrieb: > > 8-Bit µC, der 4 PWM-Signalausgänge hat (für DC und Servos), sowie einen > Analog-Digital Wandler als Eingang. Sicher, daß der eine AD-Eingang die komplette Eingabeseite ist oder hast Du in der Spec noch die Eingänge für Taster, RC-Signaleingänge oder eine serielle Schnittstelle vergessen? Dann würde nach der o.a. Spec z.B. ein PIC12F1840 o.ä. im 8-Pin DFN-Gehäuse entsprechen.
Ok, der 1501 ist ggf. noch besser, da er auch schon 4 Hardware-PWMs hat. (naja, läuft bei mir unter "o.ä." ;)) Allerdings ist fraglich, ob die 4 PWM Einheiten zum gleichzeitigen Ereugen des niederfrequenten Servo PWM-Signals und der hohen PWM-Frequenz für den "DC" (ich nehme an, das soll wohl ein DC-Motor sein?) geeignet sind oder die Servo-Signale nicht ohnehin eher per Software erzeugt werden müssen.
Ein konkretes beispiel für 10 Servo Kanäle mit nur einem einfachen Timer (keine PWM Hardware) findest du hier: http://stefanfrings.de/servocontroller/index.html PWM Kanäle brauchst du also nur für direkten Anschluss von DC Motoren.
Waspy schrieb: > 4 PWM-Signalausgänge für Servos Die kann man über einen einzigen Pin ansteuern. Als Dekodierer reicht da ein 4017. Auch (fast beliebig grosse)Motore kann man so über sog. Fahrtregler steuern.
Hallo Erstmal danke für die Antworten. Um das ganze ein wenig zu präzisieren: Ich möchte das Signal das der Empfänger normalerweise direkt ans Servo sendet auslesen, was dann ein zeitgesteuertes Programm laufen lässt. Das PWM-Signal für die Servos möchte ich verwenden da ich es so gelernt habe und anderweitig schon genug Probleme auftauchen werden. Vielleicht noch: Programmieren möchte ich am PC also ohne irgendwelche Eingabegeräte (Eclipse kenne ich bis jetzt) Grüsse Waspy
Waspy schrieb: > Das PWM-Signal für die Servos > möchte ich verwenden da ich es so gelernt habe und anderweitig schon > genug Probleme auftauchen werden. Na ja. das ist jetzt aber nicht wirklich ein Argument. Mehrere Servos mit nur einem einzigen Timer anzusteuern ist simpel, solange du einen einzigen Timer mit einem Compare Interrupt hast und das ganze so einstellen kannst, dass du mit den Pulszeiten hin kommst. Die Servos werden dann im Hintergrund angesteuert und das auf beliebigen Ausgabepins. Für das restliche Progamm sind die Servos einfach nur ein Array von Werten, in das sie die Servopositionen schreiben und um den Rest kümmert sich der (simple) Interrupt. Das kann praktisch jeder heutige µC. Und das, wenn es genügend Ausgabepins gibt, problemlos bis hoch zu 10 bis 12 Servos. Mit jedem weiteren Timer kommen dann wieder maximal 10 bis 12 Servos dazu, wobei man dann allerdings einen kleinen Jitter (abhängig von der Taktfrequenz des µC) wohl in Kauf nehmen muss. Nicht so simpel ist es hingegen, einen µC zu finden der 4 PWM erzeugen kann, ohne dass du dir dabei die halbe µC-Hardware dadurch blockierst und dann auch noch die Ausgänge pinmässig dort hast, wo du dir das Platinendesign einfach machen kannst. > möchte ich verwenden da ich es so gelernt habe D.h. du hast bereits einen µC mit dem du umgehen kannst? Wenn der 1 Timer hat mit einem Compare Interrupt, dann hast du bereits den Fuss in der Tür. Jetzt musst du dich nur noch von der Idee trennen, dass alle Servos gleichzeitig ihren Puls kriegen müssen, sondern dass es auch völlig ausreichend ist, wenn die reihum ihren Puls zeitversetzt kriegen und dass die 20ms so ziemlich das aller unwichtigste an der ganzen Sache ist und in 20 Minuten ist deine Servoansteuerung fertig. am Beispiel eines 16 Bit Timers
1 | volatile uint16_t ServoPosition[4]; |
2 | |
3 | ....
|
4 | CompareInterrupt() |
5 | {
|
6 | static uint8_t aktuellesServo = 0; |
7 | |
8 | if( aktuellesServo == 0 ) |
9 | schalte Ausgang für Servo 0 auf 0 |
10 | else if( aktuellesServo == 1 ) |
11 | schalte Ausgang für Servo 1 auf 0 |
12 | else if( aktuellesServo == 2 ) |
13 | schalte Ausgang für Servo 2 auf 0 |
14 | else if( aktuellesServo == 3 ) |
15 | schalte Ausgang für Servo 3 auf 0 |
16 | |
17 | aktuellesServo++; |
18 | if( aktuellesServo == 10 ) |
19 | aktuellesServo = 0; |
20 | |
21 | if( aktuellesServo == 0 ) |
22 | schalte Ausgang für Servo 0 auf 1 |
23 | else if( aktuellesServo == 1 ) |
24 | schalte Ausgang für Servo 1 auf 1 |
25 | else if( aktuellesServo == 2 ) |
26 | schalte Ausgang für Servo 2 auf 1 |
27 | else if( aktuellesServo == 3 ) |
28 | schalte Ausgang für Servo 3 auf 1 |
29 | |
30 | if( aktuellesServo < 4 ) |
31 | Compare Wert += ServoPosition[aktuellesServo]; |
32 | else
|
33 | Compare Wert += CompareWert für ca 2 ms; |
34 | }
|
35 | |
36 | ....
|
37 | |
38 | // Wann immer eine Servo auf eine Position fahren soll, wird der
|
39 | // CompareWert dafür anhand der bekannten Timertaktung ausgerechnet
|
40 | // und das Ergebnis davon in ServoPosition geschrieben.
|
41 | // Achtung: ev. ist dafür ein atomarer Zugriff notwendig
|
abhängig von den Pin-Positionen bzw. der Verteilung der Pins auf Ports, sind da noch Vereinfachungen möglich, zb im setzen der Servoausgänge auf 0 das als 'Rundumschlagaktion' dann einfach alle 4 Ausgänge auf einmal auf 0 setzen kann. Ich lass die Servo Anzahl bis 10 hochlaufen, damit sich eine Pulswiederholung für ein einzelnes Servo von ca. 20ms ergibt. Aber wie gesagt: die 20ms sind nicht kritisch. Ob das jetzt 15 oder 18 oder 20ms sind, ist den Servos ziemlich gleichgültig. Das muss nicht genau sein und wenn die Zeit so ungefähr stimmt, dann passt das schon.
:
Bearbeitet durch User
Waspy schrieb: > Vielleicht noch: Programmieren möchte ich am PC also ohne irgendwelche > Eingabegeräte (Eclipse kenne ich bis jetzt) Das dürfte schwierig werden, so ohne Tastatur, Maus, Tablet, Touchscreen, Touchpad ....
Mitlesa schrieb: > Waspy schrieb: >> Vielleicht noch: Programmieren möchte ich am PC also ohne irgendwelche >> Eingabegeräte (Eclipse kenne ich bis jetzt) > > Das dürfte schwierig werden, so ohne Tastatur, Maus, Tablet, > Touchscreen, Touchpad .... Man kann auch überall das Haar in der Suppe finden Sry aber nächstes mal bevor du so ne Antwort gibst überlegst du dir bitte nochmals ob mir das hilft oder nicht
Waspy schrieb: > Programmieren möchte ich am PC also ohne irgendwelche > Eingabegeräte (Eclipse kenne ich bis jetzt) Was ist denn hier mit Eingabegeräte gemeint? Also die vom PC (Maus,Tastatur) können es ja nicht sein, so weit bin ich schon...
eigentlich macht das jeder arduino, da sind die biblotheken vorhanden.
Sry für den Doppelpost @ Karl Heinz ja ich hab ein bischen schon mit Mikrocontroller gearbeitet aber ich würde meine Kenntnisse jetzt nicht als ausreichend einschätzen um so was ohne Anleitung hinzukriegen und um mich noch gross in etwas reinzuarbeiten fehlt mir eigentlich das Interesse am Mikrocontroller. Bei deinem Code sehe ich jetzt nicht wie du jedes Servo einzel ansteuerst. So wie ich dich jetzt verstanden habe erzeugst du ein PWM Signal und verteilst das auf unterschiedliche Ausgänge oder?
Hä? schrieb: > Was ist denn hier mit Eingabegeräte gemeint? Also die vom PC > (Maus,Tastatur) können es ja nicht sein, so weit bin ich schon... k.A was es alles so gibt hab mal vermutet das es so kleine mobile handprogrammiergeräte gibt oder so...
Waspy schrieb: > Sry für den Doppelpost > > @ Karl Heinz > ja ich hab ein bischen schon mit Mikrocontroller gearbeitet aber ich > würde meine Kenntnisse jetzt nicht als ausreichend einschätzen um so was > ohne Anleitung hinzukriegen und um mich noch gross in etwas > reinzuarbeiten fehlt mir eigentlich das Interesse am Mikrocontroller. > > Bei deinem Code sehe ich jetzt nicht wie du jedes Servo einzel > ansteuerst. So wie ich dich jetzt verstanden habe erzeugst du ein PWM > Signal und verteilst das auf unterschiedliche Ausgänge oder? Man könnte es so sagen. Aber viel simpler ist es, zu sagen, dass der Compare Interrupt so eingestellt wird, das er auslöst wenn die Pulszeit für ein bestimmtes Servo abgelaufen ist. Dann wird der zugehörige Ausgang für dieses Servo auf 0 geschaltet und der Ausgang für das nächste Servo auf 1. Dessen Pulszeit beginnt dann zu laufen und der Compare Wert vom Timer wird so eingestellt, dass der Timer sich mittels Interrupt wiedder meldet wenn diese Pulszeit abgelaufen ist. Und so geht das immer weiter. Der Timerinterrupt kommt immer dann, wenn die Pulszeit für ein Servo zu Ende ist und dann beginnt der Puls für das nächste Servo.
1 | +------+ |
2 | | | |
3 | Servo 0 -----+ +---------------------------------- |
4 | |
5 | +----+ |
6 | | | |
7 | Servo 1 ------------+ +----------------------------- |
8 | |
9 | +--------+ |
10 | | | |
11 | Servo 2 -----------------+ +-------------------- |
12 | |
13 | +------+ |
14 | | | |
15 | Servo 3 --------------------------+ +------------- |
16 | |
17 | ^ |
18 | | Interrupt |
19 | |
20 | ^ |
21 | | Interrupt |
22 | |
23 | ^ |
24 | | Interrupt |
25 | |
26 | ^ |
27 | | Interrupt |
28 | |
29 | ^ |
30 | | Interrupt |
Der Timer-Interrupt findet an den Pulsflanken statt. D.h. eigentlich umgekehrt: Der Interrupt findet statt wenn Zeiten abgelaufen sind. Die Flanken an den entsprechenden Pins sind dann die Reaktion des Programms darauf.
:
Bearbeitet durch User
Waspy schrieb: > um mich noch gross in etwas > reinzuarbeiten fehlt mir eigentlich das Interesse am Mikrocontroller. > Oooops. Hab ich beim ersten mal lesen überlesen. Dann noch einen schönen Tag. Da fehlt nämlich mir das Interesse daran, zu versuchen jemandem etwas beizubringen, der keine Lust dazu hat etwas zu lernen.
Karl H. schrieb: > der keine Lust dazu hat etwas zu lernen. Na, das passt doch zu den "Eingabegeräten" .....
was neues lernen heisst ja nicht das man das was man bereits weiss nicht auch anders anwenden kann... danke trotzdem das dus versucht hast an die anderen: bin mir ja einiges gewohnt von Foren aber wenn 50% der Posts einfach Bullshit ist da einfach nicht genau gelesen oder was weiss ich und mir nur einer wirklich zu helfen versucht sry dann ists wirklich das schlechteste Forum in dem ich war
Waspy schrieb: > an die anderen: [..] Bullshit Na suuper, vielen Dank. Und dafür habe ich für dich das Microchip Produktverzeichnis durchforstet um den passenden µC herauszusuchen.
Waspy schrieb: > dann ists wirklich das schlechteste Forum in dem ich war Für dich gibt es sicher noch viel besser geeignete Foren.
In dem Forum hier ist halt die Qualität der Antworten noch stärker als üblich von der Qualität der Frage abhängig. Waspy schrieb: > ohne Anleitung hinzukriegen und um mich noch gross in etwas > reinzuarbeiten fehlt mir eigentlich das Interesse am Mikrocontroller. Und damit macht man sich hier keine Freunde, die meisten Leute hier wollen etwas lernen oder den Leuten beim lernen helfen. Jemand anders die Arbeit abnehmen tut nunmal mehr oder weniger niemand freiwillig für einen Fremden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.