ELV USB-I2C & Schrittmotorsteuerung iSMT

OP #3534743
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.
Gast #3534775
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
Gast #3535191
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.
OP #3535416
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
}
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.