PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega32 via VS 2010 Anwendung über RS232 ansteuern



Schmiddi87
24.10.2012, 21:06
Guten Abend Community,

ich absolviere zurzeit im Rahmen meiner Weiterbildung zum Staatlich geprüften Techniker Fachrichtung Elektrotechnik eine 2,5 Monate lange Projektphase.
Dazu sei gesagt das mein Projektteam und ich nur Anfänger sind was das Programmieren ansich angeht, bzw wir nur die Grundlagen kennen.

Bei dem Projekt selber handelt es sich um eine Roboterplattform die mit einer Visual Studio 2010 Anwendung im Hand- und Automatikbetrieb über RS232 angesteuert wird. Aus Zeitgründen haben wir uns bei der Steuerelektronik für das Rn-Control Board 1.4 und das RN-VNH2 Dualmotor Board entschieden.

Unser Hauptproblem besteht momentan darin das wir zwar mit dem Atmega 32 senden können, diese Befehle/Daten auch vom Anwendungsprog empfangen werden. Aber die umgekehrte Richtung nicht klappt.

Wir nutzen für die Übertragung die uart.h und uart.c von Peter Fleury leider stehe ich der für die Programmierung des Atmegas verantwortlich ist nun etwas auf dem schlauch weil ich es net rausbekomme wie ich die empfangenen Daten bzw Zahlenwerte so aus dem UDR bekomme, das ich sie zum Beispiel mit einer switch verzweigung den Fahrbefehlen "vor", "zurück" usw zuzuweisen kann.


Wäre euch für Anregungen und Tips sehr dankbar da wir unter enormen Zeitdruck stehen.


MfG Sascha

Wsk8
24.10.2012, 21:40
Hier, das ist die Empfangsroutine vom Asuro:


void SerRead(unsigned char *data, unsigned char length, unsigned int timeout){
unsigned char i = 0;
unsigned int time = 0;


UCSRB = (1<<RXEN); // Empfaenger einschalten


if (timeout != 0)
{
/*
Die Funktion wird auf alle Faelle, auch ohne empfangene Daten, wieder
verlassen. --> nonblocking mode
*/
while (i < length && time++ < timeout)
{
if (UCSRA & (1<<RXC))
{
data [i++] = UDR;
time = 0;
}
}
if (time > timeout)
data [0] = 'T';
}
else
{
/*
Die Funktion wird auf alle Faelle erst nach dem Empfang von der
vorgegebenen Anzahl Zeichen verlassen. blocking mode
*/
while (i < length)
{
if (UCSRA & (1<<RXC))
data [i++] = UDR;
}
}
}

Musst halt noch auf deinen Mega32 umschreiben. Prinzip sollte aber das gleiche sein.

mfg

Schmiddi87
26.10.2012, 07:24
Hi danke für die Hilfe habs jezz doch hinbekommen zwar anders aber trotzdem danke