TobiasBlome
28.05.2010, 20:27
Hallo,
wie schon mal erwähnt bau ich einen Datenlogger mit SD-Card und FAT16 Dateisystem.
Nun ist der Logger so gut wie fertig...
Ich fasse alle Messwerte in einem String zusammen. Nun hab ich nachträglich noch 2 Werte hinzugefügt und Bascom meckert...
Source Variable does not match in the target Variable...
Zu_schreiben = Anzahl_str + ";" + K0000 + "mV;" + K1111 + "mV;" + K222 + "A;" + K33 + ";" + K44 + ";" + K55 + ";" + K66 + ";" + K77 + "C" + ";" + Pulsbreite11 + " ; " + Drehzahl_t01 + "&" + Drehzahl_t02
Wenn ich Drehzahl_t01 & Drehzahl_t02 weg lasse ist alles einwandfrei!
Was ist daran falsch? Insgesamt brauche ich ca 130 Zeichen - wieviele Zeichen passen denn in einen String? 254? hab auch schon was von 70 gelesen...
hier mal im Zusammenhang:
'Fusebits setzen (nur beim erstem Mal):
'$PROG &HFF,&HFF,&HD1,&HFF
'Funktion:
'SD Schreiben, Strings zusammensetzen
'Logging: 8 analog kanäle mit umrechnung 5x pro sekunde
'led2 grün blitzen kurz an: bereit
'led2 grün blitzen kurz aus: aufzeichnen
'led blinken 50/50: FEHLER
'Aufzeichnung: alles in eine Datei. Datei wird erstellt wenn nicht vorhanden;
' sonst wird am Ende weitergeschrieben
'jedes Logging bekommt eine neue Nummer und wird im EEPROM abgespeichert
'beim Loggen wird die Datei geöffnet und beschrieben.
'Erst durch den Befehl Logging zu ende über Schalter wird die Datei geschlossen.
'stürzt der µC beim Logging ab, sind alle Daten vom aktuellen Logging weg!
'J3 offen d.h. 5 mal pro Sek. loggen
'J3 geschlossen d.h. 1 mal pro Sek. loggen
'ADC0 = Volt - RC-Empfängerspannung
'ADC1 = Volt - Akku max. 30V
'ADC2 = Ampere - Akku
'ADC3 = frei
'ADC4 = frei
'ADC5 = frei
'ADC6 = frei
'ADC7 = Motor TEMP
'PC 7 = Sollwert von Empfänger
'PC 6 = von Empfänger für LOGGING
'PD 2 = Drehzahl1
'PD 3 = Drehzahl2
'PD 6 = LED1
'PD 7 = LED2
$regfile = "M644def.dat"
$crystal = 20000000
$hwstack = 200
$swstack = 200
$framesize = 400
$baud = 19200
'-------------------------------------------------------------------------------
'Ein- Ausgänge:
Ddra = &B00000000 '1 Ausgang, 0 Eingang = Pin PA7-0
'Ddrb = &B00000000 '1 Ausgang, 0 Eingang = Pin PB7-0
Ddrc = &B00000000 '1 Ausgang, 0 Eingang = Pin PC7-0
Ddrd = &B11000000 '1 Ausgang, 0 Eingang = Pin PD7-0
Config Pinb.4 = Output 'CS
Config Pinb.6 = Input 'MISO / DO
$include "config_mmc.bas"
$include "config_avr-dos.bas"
'-------------------------------------------------------------------------------
'Timer0 = 8Bit
Config Timer0 = Timer , Prescale = 256 'Teiler 256 = 78125Hz @ 20MHz
On Timer0 Ontimer0overflow 'Unteprogramm aufrufen
'Timer0 = Timer0vorgabe
Enable Timer0 'timer einschalten
'Timer1 = 16 Bit 5 mal pro Sek @ 20MHz
Config Timer1 = Timer , Prescale = 256 'Teiler 1/8/64/256/1024
On Timer1 Ontimer1overflow 'Unteprogramm aufrufen
Const Timer1vorgabe = 49911
Timer1 = Timer1vorgabe
Enable Timer1 'timer einschalten
'Timer2 = 8 Bit
'Config Timer2 = Timer , Prescale = 1024 'Teiler 1/8/64/256/1024
'On Timer2 Ontimer2overflow 'Unteprogramm aufrufen
'Const Timer2vorgabe = 111 '111 = 100x / sec
'Timer2 = Timer2vorgabe
'Enable Timer2 'timer einschalten
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Analogmessung:
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc 'Starte analog Messung
'-------------------------------------------------------------------------------
'EEPROM Variablen:
Dim Lognummer_ee As Eram Word 'Anzahl der Loggings
Dim Lognummer As Word
'-------------------------------------------------------------------------------
'Drejzahlmessung:
Config Int0 = Falling 'wechsel von High auf Low
On Int0 Drehzahl_0 'Interrupt-Routine
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Variablen:
'SD
Dim Tmpbyte As Byte 'zum initialisieren
Dim Btemp1 As Byte 'zum initialisieren
'Analogeingänge
Dim K0 As Word 'Spannung Empfänger
Dim K00 As Single
Dim K000 As Long
Dim K0000 As String * 5
Dim K1 As Word 'Spannung Akku
Dim K11 As Single
Dim K111 As Long
Dim K1111 As String * 5
Dim K2 As Word 'Strom Akku
Dim K22 As Single
Dim K222 As String * 4
Dim K3 As Integer
Dim K33 As String * 4
Dim K4 As Integer
Dim K44 As String * 5
Dim K5 As Integer
Dim K55 As String * 5
Dim K6 As Integer
Dim K66 As String * 5
Dim K7 As Integer 'MotorTemp
Dim K77 As String * 5
'TEMP NTC:
Dim Ohm As Single
Dim Temp1 As Single 'wegen den negativen Zahlen!!!
Dim Temp2 As Single
Dim Temp3 As Single
Dim Temp As Single
Dim Anzahl As Long 'Zähler für schreiben
Dim Anzahl_str As String * 6
Dim Zu_schreiben As String * 200
Dim Rec As Bit 'wird von J1 oder Empfänger(Pulsein) gesetzt
Dim Rec_z As Word 'wird von Timer 1 hochgezählt 5*/sec
Dim Rec_sd As Bit 'Datei öffnen schließen
Dim Led As Byte
Dim Logzeit As Word 'Einstellung wie oft loggen
Dim Loginfo As String * 20 'Text in txt Datei wie oft/sec geloggt wurde
'RC-Empfänger auswerten
Dim Pulsbreite1 As Word 'Knüppelstellung Knüppel 1
Dim Pulsbreite11 As String * 3
Dim Pulsbreite2 As Word 'Knüppelstellung Knüppel 2
Dim Pulsbreite22 As String * 3
'UHR
Dim Ss As Byte 'sekunden
Dim Mm As Byte 'minuten
Dim Hh As Byte 'stunden
Dim Dd As Byte 'tage
Dim Mo As Byte 'monate
Dim Yy As Word 'jahre
'Drehzahlmessung
Dim T01 As Byte 'Wert Timer0
Dim T02 As Long 'Wert Timer0 Anzahl Überläufe
Dim Drehzahl_t01 As Byte
Dim Drehzahl_t02 As Long
Dim Drehzahl As Word 'Drehzahl umgerechnet
'-------------------------------------------------------------------------------
'ALIAS
J1 Alias Pinc.2 'Schalter logging
J2 Alias Pinc.1
J3 Alias Pinc.0 'LogZeit
Led1 Alias Portd.6
Led2 Alias Portd.7
'-------------------------------------------------------------------------------
'Variablen belegen:
Ss = 0 'sekunden
Mm = 0 'minuten
Hh = 0 'stunden
Dd = 1 'tage
Mo = 1 'monate
Yy = 2010 'jahre
Lognummer = Lognummer_ee 'Wert von EEPROM auslesen
Print "lognummer: " ; Lognummer
Waitms 500
Print "START SD-Test..."
'_________________________________________________ ______________________________
'Init MMC/SD Card
Tmpbyte = Driveinit()
Print "Init: " ; Str(tmpbyte)
Print "Trying to read File system..."
Btemp1 = Initfilesystem(1) ' Partition 1
Print "Btemp1: " ; Btemp1
If Btemp1 <> 0 Then 'Wenn Fehler
Print "Error: " ; Btemp1 ; " beim Initialisieren des Dateisystems"
Waitms 500
Print "SD - FEHLER"
Goto Fehler
Else
Print "SD-Card OK"
End If
'_________________________________________________ ______________________________
'LogZeit Festlegen
If J3 = 0 Then
Logzeit = 1 '5 mal pro Sek. loggen
Loginfo = " (Log 5x / sek)" 'Text in txt Datei
Else
Logzeit = 5 '1 mal pro Sek. loggen
Loginfo = " (Log 1x / sek)" 'Text in txt Datei
End If
Enable Int0 'Drehzahlmessung 1 aktiv
Enable Interrupts 'Interrupts global
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Hauptprogramm Do...Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Do
Toggle Led1
'Steuerung LED2 für "logging ON/OFF"
Incr Led 'led hochzählen
If Led > 20 Then 'Blinkgeschwindigkeit
If J1 = 1 Then 'erster JUMPER
Led2 = 0 'Grüne LED2 "Logging"
Rec = 1 'also Aufnahme
Else
Led2 = 1 'Grüne LED2 "Logging"
Rec = 0
End If
Led = 0 'Zähler
End If
'Datei öffnen und schließen
If Rec = 1 And Rec_sd = 0 Then
Open "LOG.txt" For Append As #1
Print #1 , "Lognummer: " ; Lognummer ; Loginfo
Incr Lognummer 'LogNummer hochzählen und
Lognummer_ee = Lognummer 'in EEPROM übertragen
Rec_sd = 1
End If
If Rec = 0 And Rec_sd = 1 Then
Close #1
Rec_sd = 0
End If
If Rec_z = 0 Then Goto Sprung 'um Rechenzeit zu sparen nur messen/rechnen, wenn nicht auf SD geloggt wird
'================================================= ==============================
'Eingänge Auswerten:
'Empfänger einlesen
Pulsein Pulsbreite1 , Pinc , 7 , 1 'Pulsbreite auslesen (1=High Impuls)
Pulsbreite11 = Str(pulsbreite1)
Pulsbreite11 = Format(pulsbreite11 , "000")
'Print "Pulsbreite 1: " ; Pulsbreite1
'Knüppel OBEN
' If Pulsbreite1 > 146 And Kanal1o = 0 Then 'wenn Knüppel oben und Kanal1oben=0 dann
' Toggle Ausgang1 'Pin 1 mal schalten (entweder auf Hi oder Low je nach vorherigem zustand)
' Kanal1o = 1 'Variable Kanal1o setzen damit nicht neu getoggled werden kann
' End If
' Pulsein Pulsbreite2 , Pinc , 6 , 1 'Pulsbreite auslesen (1=High Impuls)
'Print "Pulsbreite 2: " ; Pulsbreite2
'Knüppel OBEN
' If Pulsbreite2 > 146 And Kanal1o = 0 Then 'wenn Knüppel oben und Kanal1oben=0 dann
' Toggle Ausgang2 'Pin 1 mal schalten (entweder auf Hi oder Low je nach vorherigem zustand)
' Kanal1o = 1 'Variable Kanal1o setzen damit nicht neu getoggled werden kann
' End If
'Analogkanäle einlesen
K0 = Getadc(0) 'Wert aus Analogeingang laden
K1 = Getadc(1) 'Wert aus Analogeingang laden
K2 = Getadc(2) 'Wert aus Analogeingang laden
K3 = Getadc(3) 'Wert aus Analogeingang laden
K4 = Getadc(4) 'Wert aus Analogeingang laden
K5 = Getadc(5) 'Wert aus Analogeingang laden
K6 = Getadc(6) 'Wert aus Analogeingang laden
K7 = Getadc(7) 'Wert aus Analogeingang laden
'Analog umrechnen:
'milliVOLT(K0) 'Gesamtspannung 30V-> 3,26086957bzw26,7391304V
'3,3V = 1023 dh 30,36V = 1023 Stufen
' 30360mV / 1023 Stufen = 29,6774mV / Stufe
K00 = K0 'Word in Single
K000 = K00 * 30.25 'ermittelter Wert (errechnet:29.6774193113118)
K0000 = Str(k000)
K0000 = Format(k0000 , "00000")
'milliVOLT(K1)
K11 = K1 'Word in Single
K111 = K11 * 30.25
K1111 = Str(k111)
K1111 = Format(k1111 , "00000")
'STROM A
K22 = K2
K22 = K22 * 0.14648 'Stromumrechnung 3,3V=150A -> 150A/1024Stufen= 0.14648A/Stufe
'Analogkanäle formatieren
K222 = Fusing(k22 , "000.0")
K33 = Str(k3)
K33 = Format(k33 , "0000")
K44 = Str(k4)
K44 = Format(k44 , "0000")
K55 = Str(k5)
K55 = Format(k55 , "0000")
K66 = Str(k6)
K66 = Format(k66 , "0000")
'TEMP MESSUNG(K7)
Ohm = 1.9 * K7 'Analogeingang bei 1020 Ohm = 504 -> 1020/504=2,0238095(24,5°C) (Wert kleiner=Temp größer)
'Temp = 3730 / (Log(1,9*NTC) + 5.59017600439636) - 273
Temp = Log(ohm) 'RECHNEN
Temp = Temp + 5.59017600439636 'RECHNEN
Temp = 3730 / Temp 'RECHNEN
Temp = Temp - 273 'RECHNEN Kelvin in Celsius
K77 = Fusing(temp , "##.#")
'ENDE Eingänge auswerten
'================================================= ==============================
Sprung:
'Logging LED zurückschalten
If Led = 0 Then
Toggle Led2 'Grüne LED2 "Logging"
End If
'Logging
If Rec = 1 And Rec_z => Logzeit Then
Incr Anzahl
Anzahl_str = Str(anzahl)
Anzahl_str = Format(anzahl_str , "000000")
'Alles in einen String zusammenfassen
Zu_schreiben = Anzahl_str + ";" + K0000 + "mV;" + K1111 + "mV;" + K222 + "A;" + K33 + ";" + K44 + ";" + K55 + ";" + K66 + ";" + K77 + "C" + ";" + Pulsbreite11 + " ; " + Drehzahl_t01 + "&" + Drehzahl_t02
Gosub Sd_schreiben
'Print Rec_z 'Kontrolle: wenn > 1 dann Zykluszeit zu groß -> kein Loggen 5x/sec möglich!
Rec_z = 0 'Variable von Timer zurücksetzen
End If
'Datensatznummer zurücksetzen
If J1 = 0 Then 'Schalter logging = 0
Anzahl = 0
End If
Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Hauptprogramm Do...Loop ENDE - ENDE - ENDE - ENDE - ENDE - ENDE
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'_________________________________________________ ______________________________
'Daten auf SD - Card schreiben:
Sd_schreiben:
'Datei öffnen / erstellen wenn nicht vorhanden!
'Open "LOG.txt" For Append As #1
Print #1 , Zu_schreiben 'Variable auf SD schreiben
Print Zu_schreiben 'Variable auf COM / PC anzeigen
'Close #1
Return
'_________________________________________________ ______________________________
'bei SD Fehler
Do
Fehler:
Print "Fehler!!!"
Led2 = 1 'Grüne LED blinken für FEHLER
Waitms 500
Led2 = 0 'Grüne LED blinken für FEHLER
Waitms 500
Loop
'_________________________________________________ ______________________________
Ontimer1overflow:
Timer1 = Timer1vorgabe
Incr Rec_z
Return
'_________________________________________________ ______________________________
Drehzahl_0: 'Timer1-Capture
T01 = Timer0 'Erst Timer0Wert sichern
Timer0 = 0 'Sofort Timer-Reset
Drehzahl_t01 = T01
Drehzahl_t02 = T02
T02 = 0
Return
'_________________________________________________ ______________________________
Ontimer0overflow:
Incr T02 'Anzahl der Timer0 Überläufe
Return
wie schon mal erwähnt bau ich einen Datenlogger mit SD-Card und FAT16 Dateisystem.
Nun ist der Logger so gut wie fertig...
Ich fasse alle Messwerte in einem String zusammen. Nun hab ich nachträglich noch 2 Werte hinzugefügt und Bascom meckert...
Source Variable does not match in the target Variable...
Zu_schreiben = Anzahl_str + ";" + K0000 + "mV;" + K1111 + "mV;" + K222 + "A;" + K33 + ";" + K44 + ";" + K55 + ";" + K66 + ";" + K77 + "C" + ";" + Pulsbreite11 + " ; " + Drehzahl_t01 + "&" + Drehzahl_t02
Wenn ich Drehzahl_t01 & Drehzahl_t02 weg lasse ist alles einwandfrei!
Was ist daran falsch? Insgesamt brauche ich ca 130 Zeichen - wieviele Zeichen passen denn in einen String? 254? hab auch schon was von 70 gelesen...
hier mal im Zusammenhang:
'Fusebits setzen (nur beim erstem Mal):
'$PROG &HFF,&HFF,&HD1,&HFF
'Funktion:
'SD Schreiben, Strings zusammensetzen
'Logging: 8 analog kanäle mit umrechnung 5x pro sekunde
'led2 grün blitzen kurz an: bereit
'led2 grün blitzen kurz aus: aufzeichnen
'led blinken 50/50: FEHLER
'Aufzeichnung: alles in eine Datei. Datei wird erstellt wenn nicht vorhanden;
' sonst wird am Ende weitergeschrieben
'jedes Logging bekommt eine neue Nummer und wird im EEPROM abgespeichert
'beim Loggen wird die Datei geöffnet und beschrieben.
'Erst durch den Befehl Logging zu ende über Schalter wird die Datei geschlossen.
'stürzt der µC beim Logging ab, sind alle Daten vom aktuellen Logging weg!
'J3 offen d.h. 5 mal pro Sek. loggen
'J3 geschlossen d.h. 1 mal pro Sek. loggen
'ADC0 = Volt - RC-Empfängerspannung
'ADC1 = Volt - Akku max. 30V
'ADC2 = Ampere - Akku
'ADC3 = frei
'ADC4 = frei
'ADC5 = frei
'ADC6 = frei
'ADC7 = Motor TEMP
'PC 7 = Sollwert von Empfänger
'PC 6 = von Empfänger für LOGGING
'PD 2 = Drehzahl1
'PD 3 = Drehzahl2
'PD 6 = LED1
'PD 7 = LED2
$regfile = "M644def.dat"
$crystal = 20000000
$hwstack = 200
$swstack = 200
$framesize = 400
$baud = 19200
'-------------------------------------------------------------------------------
'Ein- Ausgänge:
Ddra = &B00000000 '1 Ausgang, 0 Eingang = Pin PA7-0
'Ddrb = &B00000000 '1 Ausgang, 0 Eingang = Pin PB7-0
Ddrc = &B00000000 '1 Ausgang, 0 Eingang = Pin PC7-0
Ddrd = &B11000000 '1 Ausgang, 0 Eingang = Pin PD7-0
Config Pinb.4 = Output 'CS
Config Pinb.6 = Input 'MISO / DO
$include "config_mmc.bas"
$include "config_avr-dos.bas"
'-------------------------------------------------------------------------------
'Timer0 = 8Bit
Config Timer0 = Timer , Prescale = 256 'Teiler 256 = 78125Hz @ 20MHz
On Timer0 Ontimer0overflow 'Unteprogramm aufrufen
'Timer0 = Timer0vorgabe
Enable Timer0 'timer einschalten
'Timer1 = 16 Bit 5 mal pro Sek @ 20MHz
Config Timer1 = Timer , Prescale = 256 'Teiler 1/8/64/256/1024
On Timer1 Ontimer1overflow 'Unteprogramm aufrufen
Const Timer1vorgabe = 49911
Timer1 = Timer1vorgabe
Enable Timer1 'timer einschalten
'Timer2 = 8 Bit
'Config Timer2 = Timer , Prescale = 1024 'Teiler 1/8/64/256/1024
'On Timer2 Ontimer2overflow 'Unteprogramm aufrufen
'Const Timer2vorgabe = 111 '111 = 100x / sec
'Timer2 = Timer2vorgabe
'Enable Timer2 'timer einschalten
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Analogmessung:
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc 'Starte analog Messung
'-------------------------------------------------------------------------------
'EEPROM Variablen:
Dim Lognummer_ee As Eram Word 'Anzahl der Loggings
Dim Lognummer As Word
'-------------------------------------------------------------------------------
'Drejzahlmessung:
Config Int0 = Falling 'wechsel von High auf Low
On Int0 Drehzahl_0 'Interrupt-Routine
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Variablen:
'SD
Dim Tmpbyte As Byte 'zum initialisieren
Dim Btemp1 As Byte 'zum initialisieren
'Analogeingänge
Dim K0 As Word 'Spannung Empfänger
Dim K00 As Single
Dim K000 As Long
Dim K0000 As String * 5
Dim K1 As Word 'Spannung Akku
Dim K11 As Single
Dim K111 As Long
Dim K1111 As String * 5
Dim K2 As Word 'Strom Akku
Dim K22 As Single
Dim K222 As String * 4
Dim K3 As Integer
Dim K33 As String * 4
Dim K4 As Integer
Dim K44 As String * 5
Dim K5 As Integer
Dim K55 As String * 5
Dim K6 As Integer
Dim K66 As String * 5
Dim K7 As Integer 'MotorTemp
Dim K77 As String * 5
'TEMP NTC:
Dim Ohm As Single
Dim Temp1 As Single 'wegen den negativen Zahlen!!!
Dim Temp2 As Single
Dim Temp3 As Single
Dim Temp As Single
Dim Anzahl As Long 'Zähler für schreiben
Dim Anzahl_str As String * 6
Dim Zu_schreiben As String * 200
Dim Rec As Bit 'wird von J1 oder Empfänger(Pulsein) gesetzt
Dim Rec_z As Word 'wird von Timer 1 hochgezählt 5*/sec
Dim Rec_sd As Bit 'Datei öffnen schließen
Dim Led As Byte
Dim Logzeit As Word 'Einstellung wie oft loggen
Dim Loginfo As String * 20 'Text in txt Datei wie oft/sec geloggt wurde
'RC-Empfänger auswerten
Dim Pulsbreite1 As Word 'Knüppelstellung Knüppel 1
Dim Pulsbreite11 As String * 3
Dim Pulsbreite2 As Word 'Knüppelstellung Knüppel 2
Dim Pulsbreite22 As String * 3
'UHR
Dim Ss As Byte 'sekunden
Dim Mm As Byte 'minuten
Dim Hh As Byte 'stunden
Dim Dd As Byte 'tage
Dim Mo As Byte 'monate
Dim Yy As Word 'jahre
'Drehzahlmessung
Dim T01 As Byte 'Wert Timer0
Dim T02 As Long 'Wert Timer0 Anzahl Überläufe
Dim Drehzahl_t01 As Byte
Dim Drehzahl_t02 As Long
Dim Drehzahl As Word 'Drehzahl umgerechnet
'-------------------------------------------------------------------------------
'ALIAS
J1 Alias Pinc.2 'Schalter logging
J2 Alias Pinc.1
J3 Alias Pinc.0 'LogZeit
Led1 Alias Portd.6
Led2 Alias Portd.7
'-------------------------------------------------------------------------------
'Variablen belegen:
Ss = 0 'sekunden
Mm = 0 'minuten
Hh = 0 'stunden
Dd = 1 'tage
Mo = 1 'monate
Yy = 2010 'jahre
Lognummer = Lognummer_ee 'Wert von EEPROM auslesen
Print "lognummer: " ; Lognummer
Waitms 500
Print "START SD-Test..."
'_________________________________________________ ______________________________
'Init MMC/SD Card
Tmpbyte = Driveinit()
Print "Init: " ; Str(tmpbyte)
Print "Trying to read File system..."
Btemp1 = Initfilesystem(1) ' Partition 1
Print "Btemp1: " ; Btemp1
If Btemp1 <> 0 Then 'Wenn Fehler
Print "Error: " ; Btemp1 ; " beim Initialisieren des Dateisystems"
Waitms 500
Print "SD - FEHLER"
Goto Fehler
Else
Print "SD-Card OK"
End If
'_________________________________________________ ______________________________
'LogZeit Festlegen
If J3 = 0 Then
Logzeit = 1 '5 mal pro Sek. loggen
Loginfo = " (Log 5x / sek)" 'Text in txt Datei
Else
Logzeit = 5 '1 mal pro Sek. loggen
Loginfo = " (Log 1x / sek)" 'Text in txt Datei
End If
Enable Int0 'Drehzahlmessung 1 aktiv
Enable Interrupts 'Interrupts global
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Hauptprogramm Do...Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Do
Toggle Led1
'Steuerung LED2 für "logging ON/OFF"
Incr Led 'led hochzählen
If Led > 20 Then 'Blinkgeschwindigkeit
If J1 = 1 Then 'erster JUMPER
Led2 = 0 'Grüne LED2 "Logging"
Rec = 1 'also Aufnahme
Else
Led2 = 1 'Grüne LED2 "Logging"
Rec = 0
End If
Led = 0 'Zähler
End If
'Datei öffnen und schließen
If Rec = 1 And Rec_sd = 0 Then
Open "LOG.txt" For Append As #1
Print #1 , "Lognummer: " ; Lognummer ; Loginfo
Incr Lognummer 'LogNummer hochzählen und
Lognummer_ee = Lognummer 'in EEPROM übertragen
Rec_sd = 1
End If
If Rec = 0 And Rec_sd = 1 Then
Close #1
Rec_sd = 0
End If
If Rec_z = 0 Then Goto Sprung 'um Rechenzeit zu sparen nur messen/rechnen, wenn nicht auf SD geloggt wird
'================================================= ==============================
'Eingänge Auswerten:
'Empfänger einlesen
Pulsein Pulsbreite1 , Pinc , 7 , 1 'Pulsbreite auslesen (1=High Impuls)
Pulsbreite11 = Str(pulsbreite1)
Pulsbreite11 = Format(pulsbreite11 , "000")
'Print "Pulsbreite 1: " ; Pulsbreite1
'Knüppel OBEN
' If Pulsbreite1 > 146 And Kanal1o = 0 Then 'wenn Knüppel oben und Kanal1oben=0 dann
' Toggle Ausgang1 'Pin 1 mal schalten (entweder auf Hi oder Low je nach vorherigem zustand)
' Kanal1o = 1 'Variable Kanal1o setzen damit nicht neu getoggled werden kann
' End If
' Pulsein Pulsbreite2 , Pinc , 6 , 1 'Pulsbreite auslesen (1=High Impuls)
'Print "Pulsbreite 2: " ; Pulsbreite2
'Knüppel OBEN
' If Pulsbreite2 > 146 And Kanal1o = 0 Then 'wenn Knüppel oben und Kanal1oben=0 dann
' Toggle Ausgang2 'Pin 1 mal schalten (entweder auf Hi oder Low je nach vorherigem zustand)
' Kanal1o = 1 'Variable Kanal1o setzen damit nicht neu getoggled werden kann
' End If
'Analogkanäle einlesen
K0 = Getadc(0) 'Wert aus Analogeingang laden
K1 = Getadc(1) 'Wert aus Analogeingang laden
K2 = Getadc(2) 'Wert aus Analogeingang laden
K3 = Getadc(3) 'Wert aus Analogeingang laden
K4 = Getadc(4) 'Wert aus Analogeingang laden
K5 = Getadc(5) 'Wert aus Analogeingang laden
K6 = Getadc(6) 'Wert aus Analogeingang laden
K7 = Getadc(7) 'Wert aus Analogeingang laden
'Analog umrechnen:
'milliVOLT(K0) 'Gesamtspannung 30V-> 3,26086957bzw26,7391304V
'3,3V = 1023 dh 30,36V = 1023 Stufen
' 30360mV / 1023 Stufen = 29,6774mV / Stufe
K00 = K0 'Word in Single
K000 = K00 * 30.25 'ermittelter Wert (errechnet:29.6774193113118)
K0000 = Str(k000)
K0000 = Format(k0000 , "00000")
'milliVOLT(K1)
K11 = K1 'Word in Single
K111 = K11 * 30.25
K1111 = Str(k111)
K1111 = Format(k1111 , "00000")
'STROM A
K22 = K2
K22 = K22 * 0.14648 'Stromumrechnung 3,3V=150A -> 150A/1024Stufen= 0.14648A/Stufe
'Analogkanäle formatieren
K222 = Fusing(k22 , "000.0")
K33 = Str(k3)
K33 = Format(k33 , "0000")
K44 = Str(k4)
K44 = Format(k44 , "0000")
K55 = Str(k5)
K55 = Format(k55 , "0000")
K66 = Str(k6)
K66 = Format(k66 , "0000")
'TEMP MESSUNG(K7)
Ohm = 1.9 * K7 'Analogeingang bei 1020 Ohm = 504 -> 1020/504=2,0238095(24,5°C) (Wert kleiner=Temp größer)
'Temp = 3730 / (Log(1,9*NTC) + 5.59017600439636) - 273
Temp = Log(ohm) 'RECHNEN
Temp = Temp + 5.59017600439636 'RECHNEN
Temp = 3730 / Temp 'RECHNEN
Temp = Temp - 273 'RECHNEN Kelvin in Celsius
K77 = Fusing(temp , "##.#")
'ENDE Eingänge auswerten
'================================================= ==============================
Sprung:
'Logging LED zurückschalten
If Led = 0 Then
Toggle Led2 'Grüne LED2 "Logging"
End If
'Logging
If Rec = 1 And Rec_z => Logzeit Then
Incr Anzahl
Anzahl_str = Str(anzahl)
Anzahl_str = Format(anzahl_str , "000000")
'Alles in einen String zusammenfassen
Zu_schreiben = Anzahl_str + ";" + K0000 + "mV;" + K1111 + "mV;" + K222 + "A;" + K33 + ";" + K44 + ";" + K55 + ";" + K66 + ";" + K77 + "C" + ";" + Pulsbreite11 + " ; " + Drehzahl_t01 + "&" + Drehzahl_t02
Gosub Sd_schreiben
'Print Rec_z 'Kontrolle: wenn > 1 dann Zykluszeit zu groß -> kein Loggen 5x/sec möglich!
Rec_z = 0 'Variable von Timer zurücksetzen
End If
'Datensatznummer zurücksetzen
If J1 = 0 Then 'Schalter logging = 0
Anzahl = 0
End If
Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Hauptprogramm Do...Loop ENDE - ENDE - ENDE - ENDE - ENDE - ENDE
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'_________________________________________________ ______________________________
'Daten auf SD - Card schreiben:
Sd_schreiben:
'Datei öffnen / erstellen wenn nicht vorhanden!
'Open "LOG.txt" For Append As #1
Print #1 , Zu_schreiben 'Variable auf SD schreiben
Print Zu_schreiben 'Variable auf COM / PC anzeigen
'Close #1
Return
'_________________________________________________ ______________________________
'bei SD Fehler
Do
Fehler:
Print "Fehler!!!"
Led2 = 1 'Grüne LED blinken für FEHLER
Waitms 500
Led2 = 0 'Grüne LED blinken für FEHLER
Waitms 500
Loop
'_________________________________________________ ______________________________
Ontimer1overflow:
Timer1 = Timer1vorgabe
Incr Rec_z
Return
'_________________________________________________ ______________________________
Drehzahl_0: 'Timer1-Capture
T01 = Timer0 'Erst Timer0Wert sichern
Timer0 = 0 'Sofort Timer-Reset
Drehzahl_t01 = T01
Drehzahl_t02 = T02
T02 = 0
Return
'_________________________________________________ ______________________________
Ontimer0overflow:
Incr T02 'Anzahl der Timer0 Überläufe
Return