PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HELP. Sichere verbindung über RS232



fh-stefan
01.07.2005, 14:31
Hallo,
ich habe eine Problem.
Ih benutze AVR Mega32 und zum programieren CodeVisionAVR.
In meinem Programm soll µC und Sensor(dazwiechen ADA-Modul) über RS232 unterhalten.
Eigentlich klapt es prima, aber wenn es keine Verbindung zwieschen beiden stellt, hängt meine Programm. Ich möchte in Programm realisieren, wenn es kein Antwrot von Sensor kommt, muss eine Fehlermeldung auf LCD ausgegeben werden.


void GetDataAdam (char *sensor, char *data) //Variablen "sensor" und "data" werden übergeben
{
int probe1, probe2; // Definition integer-Variable
do
{
do
{
PORTD.2=1; // LTC485 wird angeschaltet

PORTD.5=1; // LTC485 auf "Senden" schalten
delay_ms(100); // kurz warten...
printf("%s",sensor); // Abfrage Senden, ADAM Eingang x Adresse 0xHEX //("#01x<CR>")(x steht für Sensornummer)
delay_ms(3); // kurz warten...
PORTD.5=0; // LTC485 auf "Empfangen" schalten
gets(data,9); // Daten vom seriellen Port in Variable Datax //kopieren (>+00.000<CR>") --> maximal 9 Zeichen
PORTD.2=0; // LTC485 wird abgeschaltet
probe1=(data[2]-0x30); // zweite Zahl vor den Komma der Sensordaten ablesen
probe2=(data[3]-0x30); // erste Zahl vor den Komma der Sensordaten ablesen

}

while( probe1!=0 && probe1!=1 ); //Überprüfen ob die Daten von Solarsensor richtig abgelesen wurde(zweite Zahl vor den Komma)


}
while(probe2>=9 && probe2<=0 ); //Überprüfen ob die Daten von Solarsensor richtig abgelesen wurde(erste Zahl vor den Komma)

}

Ich habe schon was gelesen, dass ich mit Interrupt was machen kann, aber wie, habe ich keine Ahnung(ich bin noch Anfänger). Oder giebt es andere Möglichkeit.

Dank voraus.

PicNick
01.07.2005, 15:01
Die function gets(data,9) wartet offenbar, bis sie neun Zeichen beisammen hat, egal, wie lange das dauert. Du muß immer prüfen, OB überhaupt was kommt.
Du kannst vorher einen Timer aufsetzen, der z.B. nach 10 Sekunden "feuer" schreit.
Wenn du aber schon vorher deine Zeichen beisammen hast, disablest du den Timer, bevor er auslöst. (also dann, wenn du aus den "do" Schleifen wieder draussen bist)

fh-stefan
01.07.2005, 15:07
Hallo PicNick,
Wie muss es in C-Programm aussehen. Was muss ich für Timer auf- und absetzen. Entschuldigung für meine Kenntnisse.

mfg Eugen

PicNick
01.07.2005, 15:15
Da kann ich dir nur empfehlen, diese Programm mal beiseite zu legen und irgendein Beispielprogramm mit Timer (LED-Blinken oder so) auszuprobieren, da siehst du, wie das geht.
Auch im Download-Bereich hier könnte was zu finden sein.
Timer-Interrupts sind was ganz Elementares, das mußt du Dir einverleiben.

schamp
04.07.2005, 13:33
Zu den Timer-Gschichtn gibts ne ganz gute Appnote von Atmel
AVR130: Setup and use the AVR Timers

http://www.atmel.com/dyn/resources/prod_documents/DOC2505.PDF