PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mehrere ATtiny13 über PC steuern



kmsoftly
18.04.2010, 20:36
Hallo zusammen,

ich bin gerade an folgendem Projekt:

Es sollen zwei Roboterarme mit je 3 Gelenken entwickelt werden. Jedes Gelenk kann

a) an- und abwinkeln
b) drehen

D.h. es werden insgesamt 12 DC-Motoren benötigt, die mit 6 x L6205 angesteuern werden. Die Steuerung des Neige- bzw. Drehwinkels erfolgt mittels Spannungsteiler (Widerstand und Poti, das durch die Motorachse gedreht wird). Die abgegriffenen Spannungswerte werden durch einen AD-Wandler (6 x ATtiny13) mit Sollwerten verglichen. Der MC liefert dann die Steuerspannung für den Vorwärts- bzw. Rückwärtsbetrieb der beiden Motoren des Gelenks an den L6205. Ist der vorgegebene Spannungswert (also der gewünschte Winkel) erreicht, schaltet der ATtiny13 den jeweiligen Pin auf Low.

Die jeweiligen Winkelvorgaben sollen vom PC über die RS232-Schnittstelle über einen MAX232 an die jeweiligen Mc's geliefert werden. Und genau das ist mein Problem:

Wie erkennt der einzelne ATtiny13 das ein Wert für ihn gedacht ist? Ich stelle mir das so vor, dass alle ATtinys wie an einer Art Bus hängen und mit dem RXD-Ausgang des MAX232 verbunden sind. Die Kommunikation muss ja nur in eine Richtung erfolgen (PC --> MC).

Der vom PC gelieferte Winkelwert soll im MC registriert und mit dem aktuellen Winkelwert verglichen werden. Ist der gelieferte Wert kleiner/größer als der Istwert, wird der Motor solange vorwärts/rückwärts bewegt, bis Ist- und Sollwert übereinstimmen.

Jeder ATTiny hat folgende Pins belegt:
1x Reset
1x VCC
1x Ground
4x Ansteuerung L6205

es wäre als noch ein Pin übrig um die Winkelvorgaben für die 2 Motoren zu liefern.

Ein Übersichtsplan zur Erklärung ist angehängt.

Hab ich mich sehr wirr ausgedrückt? Na ja, ich glaube Ihr wisst, was ich meine. Hat jemand eine Erklärung für mich? Oder vielleicht sogar ein Beispiel? Bin über jede Hilfe dankbar. Aber wenn es geht bitte in einfachen Worten. Ich bin leider noch sehr unerfahren mit der ganzen Materie.

Danke
Bruno

TheDarkRose
18.04.2010, 20:54
Ich würde eher am PC einen Seriell zu I2C Wandler benutzen und die ganze µC über I2C vernetzen. dann kannst du auch schön praktisch adressen vergeben.

kmsoftly
18.04.2010, 21:39
Ich würde eher am PC einen Seriell zu I2C Wandler benutzen und die ganze µC über I2C vernetzen. dann kannst du auch schön praktisch adressen vergeben.Danke für den Tip, aber TWI wollte ich eigentlich nicht verwenden.
- Erst mal habe ich nur einen freien Pin je MC und bräuchte aber zwei (SDA und SCL).
- die Entfernung beträgt bis zu 1 m
- die Störanfälligkeit ist mir zu groß

Gruß
Bruno

PICture
19.04.2010, 00:32
Hallo!

@ kmsoftly

Wenn du eigenes Protokol für die Datenübertragung benutzen könntest, kannst du zu immer zwei Bytes schicken: Adressbyte und Steuerbyte.

Jeder µC sollte nur die Steuerbytes für Weiterverarbeitung nehmen, die mit seiner Adresse für ihn geschickt wurden. Somit kann man bis zu 256 µCs am RS232 bei einem MAX232 verwenden.

Einziges Nachteil ist, dass die Komunikation langsamer ist, was aber vielleicht mit doppelter Baudrate kompensiert werden könnte.

MfG

kmsoftly
19.04.2010, 11:01
Wenn du eigenes Protokol für die Datenübertragung benutzen könntest, kannst du zu immer zwei Bytes schicken: Adressbyte und Steuerbyte.


Genau so hatte ich mir das vorgestellt. Sollte so ähnlich funktionieren wie MPC.


Jeder µC sollte nur die Steuerbytes für Weiterverarbeitung nehmen, die mit seiner Adresse für ihn geschickt wurden.

Ja, und genau da habe ich meine Schwächen. Wie sage ich dem ATtiny welche Adresse er hat und wie kriege ich ihn dazu die Steuerbytes einzulesen? In der Theorie leuchtet mir das alles ein, aber an der praktischen Umsetzung hapert es :-&

Über ein wenig Hilfestellung wäre ich sehr dankbar.

Gruß
Bruno

PICture
19.04.2010, 13:47
Hallo!

Ich kann dir nur algemein helfen, weil ich als PIC Benutzer die AVRs zu wenig kenne.

Alle an RS232 Bus angeschlossene µC müssen ständig den Bus überwachen z.B. per Interrupt von USART damit keine aus PC geschickte Informationen verloren gehen.

Wenn jeder µC beim flaschen eigene Adresse ins EEPROM bzw. Flasch bekommt, kann er bei jeden empfangenen zwei Bytes, durch Vergleich feststellen, ob der zweite für ihn bestimmt ist und entsprechend reagieren.

Wenn etwas unklar wäre, frag, bitte, ohne Zitaten weiter... :)

MfG

kmsoftly
19.04.2010, 15:16
Dummerweise hat der ATtiny13 aber kein USART. Müsste ich dann wohl softwaremäßig lösen.

Gruß
Bruno

PICture
19.04.2010, 15:31
Vielleicht lohnt es sich wegen Aufwand in Software, wenn Platz dafür gibt, einen anderen AVR mit USART nehmen ? ;)

MfG

kmsoftly
19.04.2010, 16:13
Ja, das hab ich mir auch überlegt. Ich werde wohl je Arm einen ATMega8 nehmen.

Danke & Gruß
Bruno