Zitat Zitat von Richard
Das Original Can Protokoll ist etwas kompliziert
http://lutschi.biz/navi/ssp_186_CAN_Bus.pdf

ob man priorisierte Mechanismen braucht, die wieder eine besondere Bus-Hardware brauchen, hängt doch von den Anforderungen ab.
Die CAN-AVRs hatte ich mir angesehen, das ist zu Umfangreich und auch mechanisch vom Footprint des Chips zu gross, das fängt erst bei 64 Pins an und das lötet auch nieman freiwillig gerne von Hand.

Bei insgesamt 7 Teilnehmern sehe ich das entspannt.

die ATtiny84's haben 8k Flash, die ich sonst nicht verwenden muss.

eine Beinposition ist bei einer Auflösung von 256 pro Servo mit 3 Bytes beschrieben, d.h. ich bekomme also gut 2700 Positionen je Bein gespeichert (im Moment gehe ich davon aus, dass alle Beine den gleichen Inhalt im Flash benötigen, jeweils um ein paar kleine Positionen in der Sequenz versetzt bzw. auch gespiegelt).

Wenn ich 4 Gangarten haben will und auch Schrittfolgen für rechts-links-bewegungen vorbereitet im Flash habe brauche ich 12 Schrittsequenzen, kann also mit dem verfügbaren Speicher jeden Schrittzyklus in 225 Einzelschritte zerlegen.

danach wissen alle Beteiligten, was mit der jeweiligen Position gemeint ist und der Master kann diese Positionen abrufen, ohne jedes Mal die Einstellungen berechnen zu müssen.

Auf diesem Weg kann ich jede von 2700 Beinstellungen mit nur 12 Bit beschreiben.
in sinnvollen Grössenordungen (ganze Bytes) also 2 Bytes.
Bei den oben beschriebenen 100khz Bustakt (das ist für mich mittelmässig schnell, da ist auch noch "Luft" nach oben) würde dann die Übertragung des "Marschtaktes" 4 Bytes gross sein.

Wenn jeder Schritt 5cm weit reicht und ich 200 "Marschtakte" für jeden vollständigen Schritt brauche, alle 50ms ein Takt kommt - dann dauert ein vollstandiger schritt von 5cm 10 Sekunden - das ist entschieden zu langsam.
Entweder muss ich die Auflösung für einen Schritt verringern (50 statt 200 brächte mich von 18m/h auf 72m/h, das ist immer noch erheblich zu langsam) und/oder die Taktrate erhöhen (100% Zeitausnutzung brächte Faktor 10 und trotzdem nur 720m/h - Mein ungefähres Ziel liegt so bei 10.000m/h )

Da ich mit den Prozessoren an den Beinen nicht nur lokal reagieren will, sondern den Hauptprozessor entlasten will muss ich mir zusätzlich etwas einfallen lassen.

Beispielsweise eine separate "Marschtakt-Leitung".
Der Hauptprozessor würde zu Beginn eines Schrittes den Schrittyp ankündigen und auf der separaten Leitung dann z.B. je Schritt 200 Taktzyklen ausgeben, denen das Bein dann jeweils folgt. bei 100khz Marschtakt, 200 Teilschritten pro Schritt und 5cm Schrittweite wäre ich so auf 18 km/h - das sollte ausreichen. :-P

zur Synchronisation und zur Einleitung eines Schrittes sendet der Master den Schrit-Typ
"Master an Alle" (1 Byte) und im MessageTyp z.B. 0xE2 (1 Byte) für die Schrittfolge 2.
danach führt jeder Pegelwechsel einen Teilschritt aus, um nach 200 Teilschritten wieder einen weiteren Schritt einzuleiten.

4 Schrittfolgen - Gallopp, Trab, Gehen, robben
jeder schritt ist (abhängig vom Schrittyp) eine definierte Länge weit
zu jedem Schritt gibt es dann noch eine versetzte Schrittfolge, um nach rechts oder links zu laufen, die auch definiert sind.
jede schrittfolge ist in 200 Teilschritte zerlegt, die mit bis zu (naja, vielleicht geht ja mehr ) 100khz Takt abgearbeitet werden.

kann das so funktionieren?
Wo seht ihr die Haken?

Ralph