
|
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 Pause (ist Offiziell verboten) hält den gesamten Rechenprozess an, Du solltest eine (sekpuls) Wartezeit verwenden. |
| Antwort schreiben |