so nach einer langen pause bin ich wieder am projekt, die fertigung mancher teile dauert ewig, die grundplatte steht und ich bin nun damit beschäftigt mir die software zu erarbeiten.
Hardware immer noch die selbe:
PC --> RS232 --> RN-Control --> 2 x Motortreiber MD23 --> 3 x EMG Motoren
ich arbeite mit AVR studio 4 und habe zur zeit folgendes problem:
ich möchte zum test die Werte der Drehgeber der EMG motoren über die RS232 schnittstelle ins Hyperterminal senden, im MD23 Testprogramm md23drehzahl.bas funktioniert das auch schon.
ich möchte aber nun mit AVR studio in C programmieren und bei einem tastendruck die motoren beschleunigen, drehgeberpositionen lesen und an hyperterminal senden.
im Bascom beispiel sieht der teil so aus:
Code:
Case 4 Zaehler = Md23_impulse(1)
Umdrehungen = Zaehler / 360
Print "Impulse: " ; Zaehler ; " Umdrehungen: " ; Umdrehungen
.
.
.
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 sagen wie ich in C bytes aus einem register lese und über RS232 senden kann?
das senden von Text über RS232 mit USART funktioniert, allerdings weiß ich nicht wie ich das register des motortreibers zugreifen auslesen kann und an hyperterminal übermittel.
benutze ich die funktion USART_Transmit(); oder besser sendUSART(); wie im C-Demoprogramm?
ich habe es so probiert, bekomme allerdings nur immer die gleichen festen werte:
Code:
unsigned char position;
char buf [4];
sendUSART("\r\n Drehgeberwerte: ");
i2c_init();
i2c_start(0xB0); //Adresse des Motortreiber 1
i2c_write(0xB2); //Adresse Byte 1 Drehgeber 1 Position (aus MD23 Datenblatt)
i2c_rep_start(0xB0+I2C_READ);
position = i2c_readNak();
sprintf(buf, "%03d", position);
sendUSART(buf);
i2c_stop();
über hilfe wäre ich sehr dankbar
Lesezeichen