Hallo
ich habe ein kleines Problem mit dem Auslesen der Drehgeber des MD23 Motortreiber Boards, angeschlossen ans RN-Control 1,4 mit ATMega32.
Über das Bascom Beispielprogramm drehzahl.bas funktioniert es, aber ich möchte es gern mit C in AVR Studio schreiben.
Hier mal ein Bild meines Roboters:
Bild hier
Ich habe versucht den Code aus dem Bascom Beispielprogramm in C zu übersetzen, leider bekomme ich nur irgendwelche Zahlen, mal 90, mal 74, mal 255...
Ich habe zum Testen erstmal nur das kleinste Bit auslesen wollen, hier mein Code, mit dem ich bei jedem Tastendruck einen Motor beschleunige, dann den Wert auslesen will, dann den Motor wieder abbremse. Leider ampfange ich bei jedem Tastendruck die Zahl 124...
hier zum vergleich der Bascom code aus dem mitgelieferten Beispielprogramm:Code:int data; /*### Drehgebertest ### */ void vor(void) { i2c_init(); i2c_start(0xB0); //Slave Adresse des Motortreiber 1 i2c_write(0x00); //Motor 1 i2c_write(0xFF); //vorwärts i2c_stop(); waitms(200); i2c_init(); i2c_start(0xB0); //Slave Adresse des Motortreiber 1 i2c_write(0x05); //Byte 4 Drehgeber 1 Position (aus MD23 Data Sheet) i2c_stop(); i2c_start(0xB1); //Slave Adresse Motortriber 1 + 1 Bit data = i2c_read(0); //Lesen i2c_stop(); sprintf(buff, "%d", data); //in char umwandeln sendUSART(buff); //senden waitms(200); i2c_start(0xB0); //Motortreiber 1 i2c_write(0x00); //Motor 1 i2c_write(0x80); //anhalten i2c_stop(); }
Ich dachte ich hab es etwa genau so gemacht wie im Bascom Programm, außer dass ich nur ein byte auslese.Code:Function Md23_impulse(byval Motor As Byte) As Long Local W1 As Byte Local W2 As Byte Local W3 As Byte Local W4 As Byte Local Impulse As Long Local I2cread As Byte I2cread = Md23_slaveid + 1 If Motor = 1 Then I2cstart I2cwbyte Md23_slaveid I2cwbyte 2 'Leseregister festlegen I2cstop Else I2cstart I2cwbyte Md23_slaveid I2cwbyte 6 'Leseregister festlegen I2cstop End If I2cstart I2cwbyte I2cread I2crbyte W1 , Ack I2crbyte W2 , Ack I2crbyte W3 , Ack I2crbyte W4 , Nack I2cstop Impulse = 0 Impulse = Impulse Or W1 Shift Impulse , Left , 8 Impulse = Impulse Or W2 Shift Impulse , Left , 8 Impulse = Impulse Or W3 Shift Impulse , Left , 8 Impulse = Impulse Or W4 Md23_impulse = Impulse End Function
kann mir jemand helfen?
was ist falsch am Code? kann es auch sein dass ich pull ups irgendwie falsch gesetzt habe oder die fusebits falsch eingestellt sind?
Fusebits:
Bild hier
Danke schonmal







Zitieren

Lesezeichen