
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
> > Hallo, ich benutze eine C-Control I 1.2 und diese soll als Bordcomputer für eine von Studenten entwickelte Höhenrakete verwendet werden. Hierfür soll der Prozessor die Temperatur im Tank und den Luftdruck überwachen. Während die Rakete auf der Rampe steht sollen diese beiden Informationen kontinuierlich an einen angeschlossenen PC übertragen werden. Nach dem Start sollen die beiden Werte im internen Speicher abgelegt und nach der Bergung ausgelesen werden. Das Programm habe ich fertig und die Platine existiert auch schon. Leider habe ich das Problem das das Programm zwar sehr gut funktioniert, jedoch nach 31 Messzyklen immer eine 300 und dann 5000 ausgibt und dann seine komplette arbeit einstellt. Woran kann das liegen? Ich benutze ja auf der Rampe den Speicher nicht, weshalb dieser auch nicht voll sein kann. Die Zahl 31 taucht in meiner gesamten Programmierung überhaupt nicht auf. Hilfe! Bitte! > > ein Programmlisting könnte unter Umständen hilfreich sein. :-] Okay, dann mal hier das Listing. Ich dachte das währe zu lang um es hier rein zu setzen. 'Definition der Variablen define a byte 'Verschiebebyte um die Seriellen Daten hintereinander zu schalten define i byte 'Zaehlbyte der Uebertragenen Daten des A/D Wandlers define x word 'Messzyklenzaehler define Bit word 'Biterstellung aus der Seriellen Datenuebertragung des A/D Wandlers define Pointer byte 'Überspringen unnötiger Rechenoperationen nach Fallschirmausloesung define Bitwert word 'Umwandlung vom Hoechsten Bit zum Niedrigsten define Summewert word 'Summierung der Seriellen Bits in ein Datenwort define erg1 word 'Beliebiges Ergebniss (Mehrfachverwendung!!!) define Vario1 word 'Umgebungsdruckmessung1 define Vario2 word 'Umgebungsdruckmessung2 define Dvario word 'Druckabgleich define Temperatur word 'Temperatur vom Analogeingang define Counter word 'Zaehler beim Loggen 'Aus- und Eingaenge definieren define SDO Port [1] 'A/D Wandler Datenausgabe define CS Port [2] 'A/D Wandler Aktivierung define SCK Port [3] 'A/D Wandler Synchronisation define RELAIS Port [16] 'Schaltausgang Fallschirmauslösung define RAMPE Port [9] 'Eingang "Steht auf Rampe" define GROUNDED Port [10] 'Eingang "Geborgen und Datenauslesen" define TEMP AD [1] 'Analoger Temperatursensor define LAMPE Port [11] 'Rechenoperationsanzeige 'Beginn des Programms #Start LAMPE=1 'Dient der Funktionsüberwachung pause 50 LAMPE=0 if RAMPE=0 then goto Luft else goto Boden #Boden 'Am Boden, auf Rampe oder geborgen if GROUNDED<>0 then goto Ground 'Abfrage: Vor Start oder bereits geborgen? Vario1=0 Temp=0 gosub Auslesen1 'Auslesen des Umgebungsdruckes Vario1=erg1 Temperatur=0 gosub Auslesen2 'Auslesen der Tanktemperatur gosub DatenausgabeRampe pause 50 goto Start #Auslesen2 'Auslesen der Temperatur Temperatur=TEMP Return #DatenausgabeRampe 'Einfach Datenausgeben an die Serielle Schnittstelle Print Vario1,Temperatur Return #Luft 'Nach dem Start if x>301 then goto break Vario1=0 Vario2=0 Dvario=0 gosub Auslesen1 '1.Druckmessung Vario1=erg1 pause 27 gosub Auslesen1 '2.Druckmessung Vario2=erg1 Dvario=Vario2-Vario1 'Druckabgleich: Steigt die Rakete oder fällt sie schon wieder? gosub log If Pointer=1 then goto A If x>5 then gosub FallschirmScharf #A x=x+1 goto Start #Auslesen1 'Auslesen des Umgebungsdruckes SCK=0 CS=1 Cs=0 Wait SDO=0 FOR i=1 to 4 SCK=1 SCK=0 Next Bitwert=0 Summewert=0 erg1=0 for i=1 to 15 SCK=1 Bit=SDO*-1 a=15-i Bitwert=Bit SHL a SCK=0 Summewert=Summewert+Bitwert Next erg1=Summewert CS=1 SCK=0 CS=0 Return #log 'Speichern der Daten im internen Speicher open# for append if filefree then print# Counter else gosub filefull print# Vario1 print# Vario2 print# Dvario close# Counter = Counter+1 return #filefull close# return #DatenausgabeBoden 'Auslesen der geloggten Flugdaten open# for read Print "Ausgabe der Daten:" Print "" #Dumpnext if eof then goto EndOfFile else input# Counter input# Vario1 input# Vario2 input# Dvario print Counter,Vario1,Vario2,Dvario Print "" goto Dumpnext #EndOfFile Print "Daten Ausgelesen" close# End #break wait GROUNDED<>0 goto Ground #FallschirmScharf 'Verhindert auslösen des Fallschirms vor verlassen der Rampe if Dvario>15 then gosub Ausloesen Return #Ausloesen 'Fallschirmauslösung RELAIS=1 Pointer=1 return #Ground 'Rakete geborgen, Auslesegerät angeschlossen goto DatenausgabeBoden |
| Antwort schreiben |