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.
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
@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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.