Hi,


mein letzter Post ist ja schon etwas her aber das Projekt ist schon einige Schritte weiter gekommen.
Mittlerweile bin ich fertig mit den Tests der Rotationsencoder und habe mich im Verlauf der Tests entschlossen jeder Achse einen autarken Achsencoder mit eigenem µC zu spendieren (ATtiny26).
Das ist nötig, weil mir die Performance des ATMEGA64 sonst für die UI(User Interface) Anzeige und den NC-Pfadintegrator nicht reicht.

Die Anbindung der einzelnen externen Encoder sieht so aus:
Code:
  Schematics for three slave devices:
  -----------------------------------

  M     /PA0 o--*
  a   D |PA1 o--|
  s   A |PA2 o--|
  t   T |PA3 o--*==========*=========o  PA0..PA6 SLAVE1.Data
  e   A |PA4 o--|           \========o  PA0..PA6 SLAVE2.Data
  r     |PA5 o--|            \=======o  PA0..PA6 SLAVE3.Data
        \PA6 o--*

      W /PB0 o-----------------------o PA7 SLAVE1.WR
      R |PB1 o-----------------------o PA7 SLAVE2.WR
        \PB2 o-----------------------o PA7 SLAVE3.WR

      R /PB3 o-----------------------o PB6 SLAVE1.RDY
      D |PB4 o-----------------------o PB6 SLAVE2.RDY
      Y \PB5 o-----------------------o PB6 SLAVE3.RDY
also ein 9 bit breiter Datenbus der mit einem Statetransition Protokoll Timingunabhängig die Daten auslesen kann.

Das Protokoll ist folgendermassen implementiert:
Code:
  µC(Slave)   DIR         µC(Master)
 -----------------------------------
  RDY         ->          Q: Is slave ready?
              <-          DATA
              <-          WR
  ___
  RDY         ->
                          __
              <-          WR
  DATA        ->
  RDY         ->          Q: Is slave ready?


  DTE     µC(Slave)
  DCE     µC(Slave)
  RDY     ready signal from DCE to DTE
  WR      write signal from DTE to DCE
  DATA    7 bit data lines DTE <-> DCE

Ablauf zum auslesen der Position und Geschwindigkeit IST-Werte:
1) Erstellen eines Positions/Geschwindigkeit Snapshots im Multicastbetrieb (alle Achsen gleichzeitig)
2) Datenbus auf Tristate stellen (wiederum Multicast)
3) Geschwindigkeit/Speed Tupels aller Achsen nacheinander auslesen


Zur Anzeige benutze ich einen VT525 Terminal den ich als Softwareemulation gechrieben habe. Mit dem Terminal wird via UART kommuniziert und das UI aufgebaut. Im Terminal wird ein Menu (blauer Balken unten) eingeblendet um die verschiedenen Funktionen zu aktivieren.

Momentan bin ich damit beschäftigt den externen Encoder (ATtiny26) mit dem Master µC (ATMEGA64) zu verbinden und in Testcases die Stabilität der Datenkommunikation zu ermitteln und evtl. zu verbessern.

Hier mal ein paar Screenshots vom Terminal UI wie der ATMEGA ihn aufbaut.
Bild hier  
Bild hier  


Naja, jetzt bau ich gerade unter dem Menupunkt TESTS einen Versuch ein um die Daten des externen Encoders im 4ms Intervall auszulesen und dann auf dem UI anzuzeigen, so dass ich sehen kann ob das fehlerlos funktioniert.


Gruss,

O.