PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe zu ATmega32 - I²C - RN-Motorctrl



Leuchtturm
18.07.2007, 15:20
Hi Leute,

ich hätte da gerne mal ein Problem: [-o<

was ich habe: Ich habe es hingekriegt, einen Getriebemotor über eine Kombination aus RN-Motorcontrol/RN-Dualmotor über die serielle Schnittstelle vom PC mit dem vom Robotikshop downloadbaren Programm "RN-Motorcontrol" zu steuern - funktioniert - so weit keine große Kunst.

was ich in Zukunft möchte: Ich möchte die Steuerung nicht vom PC, sondern von einem Atmega32 übernehmen lassen, wobei ich die serielle Schnittstelle des AVR weiterhin für die Kommunikation mit dem PC frei halten möchte.

Soll heißen, ich möchte für die Kommunikation zwischen AVR und RN-Motorcontrol die I²C/TWI-Schnittstelle verwenden. Ich habe jetzt schon stundenlang in Foren rumgesucht und mir schwirrt der Schädel.

Soll ich die Lib von Peter Fleury oder die TWI.h verwenden?
Wie sende ich ein einzelnes Byte vom AVR (Master) an RN-Motorcontrol (Slave)? und und und...?

Was mir sehr weiterhelfen würde, wäre ein Programmbeispiel in C von jemandem, der das schon mal gemacht hat - in dieser Kombination.

Falls diese Frage schon mal gestellt wurde, würde vielleicht auch ein Link dahin reichen.

Grüße
Ralf

PS: Ich bin noch Neuling in AVR´s , also bitte die Antworten meinem Niveau anpassen :-b

Leuchtturm
19.07.2007, 12:14
OkOk,

keine Resonanz.. Hmmmmm.

Dann könnte vielleicht mal jemand auf dieses Programm schauen, bzw. warum das nicht funktioniert:



#include <avr/io.h>
#include "i2cmaster.h"
#include "twimaster.c"



#define RNMotor 0x58 // Adresse von RNMotorcontrol


void main(void)
{
unsigned int i;
unsigned char ret;
unsigned char val[6]={0x23,0x23,0x03,0x02,0x01,0x96}; //




i2c_init(); // I2C Interface initialisieren



while(1)
{
for(i=0;i<6;i++)
{
ret = i2c_start(RNMotor+I2C_WRITE); // Addresse und Schreibmodus aktivieren
if ( ret )
{
// Versuch, die Startbedingungen zu setzen gescheitert, z.B. wenn das Board
// nicht gefunden wurde
i2c_stop();
}
else
{
// Versuch, die Startbedingungen zu setzen erfolgreich
i2c_write(val[i]); // Daten schreiben
i2c_stop(); // Bus wieder freigeben
}
}

}

}



Das Programm wird einwandfrei compiliert, gelinkt. Nach dem Übertragen auf den AVR tut sich jedoch nichts. Eigentlich müsste sich Motor1 drehen.

Für nen kleinen Stups in die richtige Richtung wäre ich ganz dankbar.

Grüße
Ralf