Hallo, ich habe hier gerade einen selbstgebauten AfroESC-Klon liegen. Die Ansteuerung über Servosignal geht auch so weit. Ich wöllte das gerne aber auch noch über I2C probieren. Wie ist das Protokoll dafür? Ich sende die Adresse, das Write-Bit, das ganze wird Geackt, dann sende ich einfach die Daten für die Geschwindigkeit, in dem Fall 0x55, das ganze wird auch Geackt. Aber der Motor dreht sich nicht. Ich habe schon mehrere Kombis von mehreren gesendeten Bytes probiert, z.B. 0x00 0x55 oder 0x55 0x01 oder ... Hat hier schon mal jemand so etwas gemacht?
Such mal im Forum von mikrokopter.de, da gibts Beträge zu dem Thema
Hab geguckt. Das http://wiki.mikrokopter.de/en/BL-Ctrl_V1.2#Controlling_with_own_Hardware gefunden. Mein Code ist identisch, der Motor dreht sich aber trotzdem nicht. Einzig das Kein-Signal-Erkannt-Piepoen vom SimonK hört auf.
Peter K. schrieb: > Hallo, > > ich habe hier gerade einen selbstgebauten AfroESC-Klon liegen. Die > Ansteuerung über Servosignal geht auch so weit. Ich wöllte das gerne > aber auch noch über I2C probieren. Wie ist das Protokoll dafür? Ich > sende die Adresse, das Write-Bit, das ganze wird Geackt, dann sende ich > einfach die Daten für die Geschwindigkeit, in dem Fall 0x55, das ganze > wird auch Geackt. Aber der Motor dreht sich nicht. > Ich habe schon mehrere Kombis von mehreren gesendeten Bytes probiert, > z.B. 0x00 0x55 oder 0x55 0x01 oder ... > > Hat hier schon mal jemand so etwas gemacht? Du kannst Dir den Sourcecode dafür hier mal ansehen: http://svn.mikrokopter.de/websvn/filedetails.php?repname=Projects&path=%2FTransportables_Koptertool%2Ftags%2FV3.x%2FPKT355_FC086.zip motortest.c twimaster.* I2C-Mode ist der relevante Anteil in motortest.c. Gehört zu dem PKT-Projekt, deshalb musst Du die PKT spezifischen Teile rausschmeissen oder anpassen, Displayausgabe,Uart etc. Die "Gas"-Werte müssen zyklisch gesendet werden, sonst bleibt der Motor stehen. Christian
Hier noch mal mein Code. Das ist doch eigentlich der selbe?
1 | #ifndef F_CPU
|
2 | #define F_CPU 16000000UL
|
3 | #endif
|
4 | |
5 | #include <avr/io.h> |
6 | #include <util/delay.h> |
7 | #include <avr/interrupt.h> |
8 | |
9 | #include "uart.h" |
10 | #include "i2cmaster.h" |
11 | |
12 | #define UART_BAUD_RATE 38400
|
13 | |
14 | int main(void){ |
15 | int ret; |
16 | |
17 | DDRD = 0xFF; |
18 | |
19 | uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); |
20 | |
21 | i2c_init(); |
22 | |
23 | sei(); |
24 | |
25 | uart_putc(0xFF); |
26 | |
27 | while(1){ |
28 | ret = i2c_start(0x50 + (1 << 1) + I2C_WRITE); |
29 | if(ret){ |
30 | i2c_stop(); |
31 | }else{ |
32 | i2c_write(200); |
33 | //i2c_write(0);
|
34 | i2c_stop(); |
35 | }
|
36 | |
37 | _delay_ms(50); |
38 | }
|
39 | return 0; |
40 | }
|
Für alle die es wissen wollen: Es geht inzwischen. Man muss dem Regler ganz am Anfang erstmal 0x00 schicken.
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.