Läuft![]()
bitte Schönheitsfehler bemängeln!
TobiasCode:'------------------------------------------------------------------------------- 'Konfiguration µC: $regfile = "m32def.dat" 'AT-Mega32 $crystal = 14745600 'Quarz: 14,7456 MHz $baud = 9600 'Baudrate definieren $hwstack = 80 ' default use 32 for the hardware stack $swstack = 80 ' default use 10 for the SW stack $framesize = 80 ' default use 40 for the frame space '------------------------------------------------------------------------------- 'Ein- Ausgänge: Ddra = &B00000000 '1 Ausgang, 0 Eingang = Pin PA7-0 Ddrb = &B11111111 '1 Ausgang, 0 Eingang = Pin PB7-0 Ddrc = &B11111111 '1 Ausgang, 0 Eingang = Pin PC7-0 Ddrd = &B01111111 '1 Ausgang, 0 Eingang = Pin PD7-0 Porta = &B00000000 '1 = Pullup Portb = &B00000000 '1 = Pullup Portc = &B11111111 '1 = Pullup Portd = &B00000000 '1 = Pullup '------------------------------------------------------------------------------- 'Timer1 = 16 Bit Config Timer1 = Timer , Prescale = 64 'Teiler 1/8/64/256/1024 Enable Timer1 'timer einschalten Const Timer1vorgabe = 7936 '7936 = 4 mal pro Sekunde Timer1 = Timer1vorgabe On Timer1 Ontimer1overflow 'Unteprogramm aufrufen '------------------------------------------------------------------------------- 'Analogmessung: Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc 'Starte analog Messung '------------------------------------------------------------------------------- 'USB Confi!!!! Echo Off '///für USB-Stick Open "com1:" For Binary As #1 '///für USB-Stick 'Dim Samples As Word 'Anzahl der Messungen Dim Delayms As Long 'Messintervall in ms (Long bis 2.147.483.647) Dim Channels As Word 'Anzahl der Messkanäle (8Kanäle -> 0-7)(Word bis 65535) Dim N As Integer Dim I As Integer Dim L As Integer Dim S As String * 40 Dim Ad As Integer Dim Messung As Long 'Anzahl der gemessenen Werte (Long bis 2.147.483.647) Dim Wartezeit As Long 'Wartezeit über Timer Dim Auslesen_ok As Bit 'ausleseroutine erfolgreich Dim Logging As Bit '1 = Daten werden aufgezeichnet '------------------------------------------------------------------------------- 'Vor Programmstart: Auslesen_ok = 0 Logging = 0 Wartezeit = 999 Delayms = 0 Enable Interrupts Start Adc 'Analogmessung starten Usb_auslesen: Stop Timer1 Do Input S Loop Until S = "D:\>" 'USB Controller abfragen, bis D:\> gesendet wird Waitms 1000 Print "rd todo.txt" + Chr(13); 'todo.txt Datei LESEN Input Delayms 'Wartezeit zwischen den Messungen aus Datei übernehmen Get #1 , L Input Channels 'Anzahl der Messkanäle aus Datei übernehmen Get #1 , L Input S Auslesen_ok = 1 Start Timer1 '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'Hauptprogramm Do...Loop '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- Do '_______________________________________________________________________________ 'Reset If Pind.7 = 0 Then 'RESET Logging = 0 Messung = 0 'Zähler für Messungen zurücksetzen Portb.0 = 0 'schreib LED aus Gosub Usb_auslesen End If '_______________________________________________________________________________ 'speichern If Logging = 1 Then Logging = 0 Gosub Usb_schreiben End If Loop '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'ENDE - Hauptprogramm Do...Loop '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- Usb_schreiben: Print "OPW Log.txt" + Chr(13); 'Datei Log.txt öffnen Input S Portb.0 = 1 'schreib LED an Incr Messung S = Str(messung) + Chr(9) For I = 0 To Channels 'Kanäle 0-7 MAX Ad = Getadc(i) 'hole Analogwert von Kanal = (Variable "I") S = S + Str(ad) 'S + aktuellen Analogkanal If I < Channels Then S = S + Chr(9) 'wenn noch nicht alle Kanäle abgefragt wurden kommt ein Chr(9) = Tab drann!!! Next I S = S + Chr(13) + Chr(10) 'zum Schluss noch Zeichen 13+10 Carriage Return + Line Feed L = Len(s) 'gibt die Länge von String "S" wieder Print "WRF "; 'Befehl um in die geöffnete Datei zu schreiben Put #1 , 0 Put #1 , 0 Put #1 , 0 Put #1 , L 'L ist die Länge vom String S Put #1 , 13 Print S ; Input S Print "CLF log.txt" + Chr(13); 'Datei log.txt schließen Input S Portb.0 = 0 'schreib LED aus Return '------------------------------------------------------------------------------- 'TIMER SPRUNGMARKEN: Ontimer1overflow: Timer1 = Timer1vorgabe Incr Wartezeit 'Toggle Portb.0 'nur zum testen ob timer1 läuft If Wartezeit => Delayms And Auslesen_ok = 1 Then 'Wartezeit zwischen den Messungen Wartezeit = 0 'Wartezeit zurücksetzen Logging = 1 'Daten werden aufgezeichnet End If Return
PS. ich habe den Fehler im alten Programm gefunden:
irgendwie ist mir den End Befehl 2 mal ins Programm geschlichen....![]()
Code:Usb_auslesen: Stop Timer1 ... Start Timer1 End Return ------- Usb_schreiben: ... End Return







Zitieren

Lesezeichen