Forum: Mikrocontroller und Digitale Elektronik ELV USB-I2C & Schrittmotorsteuerung iSMT


von Andre W. (andre_w)


Lesenswert?

Hallo,

Ich habe mir von ELV das USB-I2C Interface und einen Schrittmotor mit 
iSMT Schrittmotorensteuerung gekauft.
Damit soll es ja einfach sein einen Schrittmotor zu steuern...
Über HTerm kann ich dem auch sagen was ich von Ihm möchte, aber ich 
wollte das Programm auf dem Atmega88 haben. Das kriege ich aber nicht 
hin.

Also habe ich mir von Franzis ein Lernpaket gekauft. Microcontroller in 
C Programmieren. Jetzt kann ich zwar LED's zum leuchten bringen und auch 
an ADC einen Messwert auslesen und weiter verarbeiten, aber ich verstehe 
immer noch nicht was zwischen HTerm und dem TMC223 auf dem iSMT 
passiert.
Ich habe mir die Datenblätter vom Atmega88 und TMC223 angesehen und 
verstehe nur Bahnhof.

Also meine Fragen:
Kann mir jemand erklären was auf dem Atmega88 im USB-I2C passiert, wenn 
ich über HTerm meinen Befehl sende?

Hat jemand einen CODE oder kann mir einen schreiben, für Atmel Studio, 
indem ich mir ansehen kann wie der Motor angesteuert wird. Es würde mir 
reichen wenn er nur mal 1 Step rechts und links laufen würde.

Andre.

von peter_s (Gast)


Lesenswert?

warum hast du keinen arduino genommen? da ist der einstieg sehr einfach 
und es gibt massenhaft tipps und tricks im internet... und du kannst 
einen schrittmotor ansteuern ohne das du alles verstehen musst...

ist nicht immer gut, aber für den anfang hast du relativ schnell ein 
ersteserfolgserlebnis... viele grüsse

von Andre W. (andre_w)


Lesenswert?

@Peter_S
Leider findet man mit Google nicht immer die Einfachste Lösung.
ELV und Co. sind da halt weiter oben.

Bin aber etwas weiter.
http://www.trinamic.com/products/integrated-circuits/integrated-motion-controller-stepper-driver/tmc223

Versuche das jetzt zu verstehen und muss mir noch klar werden wie der 
Port konfiguriert wird.

Andre.

von Mike (Gast)


Lesenswert?

peter_s schrieb:
> warum hast du keinen arduino genommen? da ist der einstieg sehr einfach
> und es gibt massenhaft tipps und tricks im internet... und du kannst
> einen schrittmotor ansteuern ohne das du alles verstehen musst...

Nur geht es hier nicht um einen Schrittmotortreiber mit L298 sondern um 
eine Anbindung des TMC223 über I2C. Die Anwendung setzt sich also aus 
den beiden Teilen I²C-Kommunikation und TMC223-Steuerung zusammen.

von Andre W. (andre_w)


Angehängte Dateien:

Lesenswert?

Kann mir jemand erklären was der hier macht?
Die komplette Datei ist im Anhang.
Versucht der da den TMC223 zu finden?
1
//TWI interrupt handler
2
//Handles all states of the TWI of the AVR that can occur in master mode
3
SIGNAL(SIG_2WIRE_SERIAL)
4
{
5
  if(TWSR==0x08 || TWSR==0x10)  //Start condition or repeated start condition transmitted by us => we are becoming bus master!
6
  {
7
    TWDR=TWIMasterSendBuffer[0];   //Load the address byte ("SLA+W" or "SLA+R")
8
    TWCR=0x85;                     //Generate start condition and send the address byte
9
    TWIMasterSendPtr=1;
10
  }
11
  else if(TWSR==0x18 || TWSR==0x20)  //Address byte ("SLA+W") has been transmitted => send our first data byte.
12
  {
13
    TWDR=TWIMasterSendBuffer[TWIMasterSendPtr++];
14
    TWCR=0x85;
15
  }
16
  else if(TWSR==0x28 || TWSR==0x30)  //We can send all the other data bytes.
17
  {
18
    if(TWIMasterSendPtr<TWIMasterSendCount)     //more data bytes to be sent
19
    {
20
      TWDR=TWIMasterSendBuffer[TWIMasterSendPtr++];
21
      TWCR=0xC5;   //send next data byte
22
    }
23
    else
24
    {
25
      TWCR=0xD5;   //No more data bytes to be sent => Generate stop condition to release the bus
26
      TWIInUse=FALSE;
27
    }
28
  }
29
  else if(TWSR==0x38) //Bus arbitration lost => release bus immediately
30
  {
31
    TWIErrorFlag=TRUE;
32
    TWIInUse=FALSE;
33
    TWCR=0xC5;
34
  }
35
  else if(TWSR==0x40)  //Address byte ("SLA+R") has been transmitted and ACK has been received => we can now start to receive data bytes
36
  {
37
    TWIMasterReceivePtr=0;
38
    TWCR=0xC5;  //request first data byte
39
  }
40
  else if(TWSR==0x48)  //Address byte ("SLA+R") has been transmitted and NOT ACK has been received => abort the read process
41
  {
42
    TWIErrorFlag=TRUE;
43
    TWCR=0xd5;  //generate stop condition and release the bus  0x95
44
    TWIInUse=FALSE;
45
  }
46
  else if(TWSR==0x50)  //a data byte has been read from the slave and acknowledged
47
  {
48
    TWIMasterReceiveBuffer[TWIMasterReceivePtr++]=TWDR;
49
    if(TWIMasterReceivePtr<TWIMasterReceiveCount)
50
      TWCR=0xC5;  //at least two more data bytes to get => send ACK
51
    else
52
      TWCR=0x85;  //only one more data byte to get => send NOT ACK
53
  }
54
  else if(TWSR==0x58)  //the last data byte has been read from the slave
55
  {
56
    TWIMasterReceiveBuffer[TWIMasterReceivePtr++]=TWDR;
57
    TWCR=0xD5;   //generate a stop condition and release the bus  0x95
58
    TWIInUse=FALSE;
59
  }
60
  else  //Unknown state, just reset the interrupt flag.
61
  {
62
    TWIErrorFlag=TRUE;
63
    TWIInUse=FALSE;
64
    TWCR = 0xC5;  //Acknowledge and reset the interrupt flag
65
  }
66
}

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
Noch kein Account? Hier anmelden.