LED
Anmeldungsdatum: 15.02.2008
Beiträge: 54
Verfasst am: 17.06.2008 11:06 Titel: $part macht nur 16 Werte, habe jedoch 32 Werte
--------------------------------------------------------------------------------
Hallo Forum,
Ein Mikrocontroller sendet mir 32 Messwerte durch Komma getrennt über die RS232 an PL.
Mit dem Bauteil Part kann ich leider nur 16 Messwerte decodieren.
Muss ich jetzt mein µC Programm umstricken, oder gibt es eine einfache Möglichkeit.
mfg
LED
Nach oben
Mike D
Anmeldungsdatum: 03.07.2006
Beiträge: 236
Verfasst am: 17.06.2008 12:50 Titel:
--------------------------------------------------------------------------------
Hallo LED,
unter der Vorraussetzung, dass die Messwerte eine konstante Zeichenlänge haben, könntest du mit 2 $Copy die Zeile halbieren und dann auf 2 $Part geben.
Mike
Nach oben
LED
Anmeldungsdatum: 15.02.2008
Beiträge: 54
Verfasst am: 17.06.2008 13:10 Titel:
--------------------------------------------------------------------------------
Danke Mike D für die schnelle Antwort
Ich sende vom AD Eingang die messwerte als dezimal Wert, alos 0 bis 1023. Es ist also unterschiedliche Zeichenlänge.
Aber ich könnte das µC Programm (Bascom Basic) umstricken, so das jeweils pro Wert zwei Bytes gesendet werden, damit konstante Zeichenlänge und nur max 2 Bytes pro Wert statt 4 als dezimal Wert.
Dann stehe ich aber auf dem Schlauch, wüsste erst mal nicht wie ich das in PL mache. Ausserdem müssten die Werte wieder in Dezimal zurückgewandelt werden.
sende von den 16 AD Eingängen jeweils Maximum und Minimum Wert.
Hier erst mal mein Orginal
mfg LED
Code:
$prog , 255 , &B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
Config Pind.5 = Output
Led Alias Portd.5
$baud = 57600
'Config Com4 = 115200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Open "com4:" For Binary As #4 'USB Buchse
Const Tz = "," ' Trennzeiche ist ein Komma
Dim Kanal As Byte
'Min Max Buffer
Dim Adcmax(16) As Word 'Tabelle Maximum Werte
Dim Adcmin(16) As Word 'Tabelle Minimum Werte
Dim Index As Byte 'Zeiger auf Speicherplatz
Dim Wert As Word
' *** ADC ***
Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
Start Adc
' *** Timer1 16 Bit ***
Const Timervorgabe = 3036 'Vorgabe für Timer um die genaue Intervallfrequenz zu erreichen
Config Timer1 = Timer , Prescale = 256
On Timer1 Timer1_isr
Enable Timer1
Enable Interrupts
'*** Hauptschleife ***
Do
Led = 1
For Kanal = 0 To 15
If Kanal > 7 Then Kanal = Kanal + 24 ' Wegen Bascom 1.11.9.1 Bug notwendig
Wert = Getadc(kanal)
If Kanal > 7 Then Kanal = Kanal - 24 ' Wegen Bascom 1.11.9.1 Bug notwendig
Kanal = Kanal + 1 ' Array ADCmax startet bei 1 und nicht bei 0
If Adcmax(kanal) <Wert> Wert Then Adcmin(kanal) = Wert
If Adcmin(kanal) = 0 Then Adcmin(kanal) = Wert ' Wenn = im Speicher (kleinster Wert) trotzdem überschreiben
Kanal = Kanal - 1
Next Kanal
Loop
' *** Timer 1 Interrupt Programm ***
' Aufruf jede Sekunde
Timer1_isr:
Timer1 = Timervorgabe
Led = 0
Print "*" ; Tz;
For Index = 1 To 16
Print Adcmax(index) ; Tz;
Adcmax(index) = 0
Print Adcmin(index) ; Tz;
Adcmin(index) = 0
Next Index
Print "#" ; Tz
Return
End
Nach oben
Mike D
Anmeldungsdatum: 03.07.2006
Beiträge: 236
Verfasst am: 17.06.2008 13:25 Titel:
--------------------------------------------------------------------------------
dann sende doch einmal nach dem 16. Wert statt des , ein ;.
In PL trennst du dann die Zeile mit einem 2-kanaligen $Part am ; und gibst die Hälten dann auf 2 $Part
Mike
Nach oben
LED
Anmeldungsdatum: 15.02.2008
Beiträge: 54
Verfasst am: 17.06.2008 14:13 Titel:
--------------------------------------------------------------------------------
Danke Mike D, du hast mir sehr geholfen.
Auf die Idee Part nochmal zum trennen zu nehmen wäre ich nicht gekommen, obwohl es ja logisch ist.
Habe das Programm nochmal geändert, funktioniert jetzt wunderbar.
Jetzt fehlt mir nur noch eine Art Prüfsumme, aber das ist nicht so dringend.
Code:
' *** Timer 1 Interrupt Programm ***
' Aufruf jede Sekunde
Timer1_isr:
Timer1 = Timervorgabe
Led = 0
For Index = 1 To 16
Print Adcmax(index) ;
Adcmax(index) = 0
If Index = 8 Then Print "#" ; Else Print ",";
Print Adcmin(index) ; Tz;
Adcmin(index) = 0
Next Index
Print
Return
End
$part macht nur 16 Werte, habe jedoch 32 Werte
$part macht nur 16 Werte, habe jedoch 32 Werte
Beitrag von abacom » Dienstag 14. Oktober 2008, 12:58
ABACOM support
Gehe zu
- SOFTWARE-UPDATES
- ProfiLab
- ↳ PROFILAB Kundenprojekte und Aufgabenstellungen
- ↳ Einsteigerfragen / FAQ
- ↳ Darstellung / Visualisierung
- ↳ Zählfunktionen, Zeitsteuerung und Programmablauf
- ↳ Messwertverarbeitung
- ↳ STRING-Verarbeitung
- ↳ Datenschnittstellen
- ↳ Hardware-Anbindung, I/O-Schnittstellen
- ↳ (Fern-)Bedienung / Externe Eingabegeräte
- ↳ Plattformen / PC-Systeme
- ↳ Aus- und Weiterbildung
- ↳ Makros & Schaltungen
- ↳ Projekte
- ↳ Heizungssteuerung
- ↳ Ofensteuerung
- ↳ Elektrische Antriebe
- ↳ Wetter und Klima
- ↳ Kraftfahrzeugtechnik
- ↳ Lichttechnik
- ↳ Multimedia
- ↳ Messtechnik
- ↳ Haussteuerungen
- ↳ Modellbau
- ↳ Elektronik und µ-Controller
- ↳ DLL-Programmierung
- ↳ Kundenspezifische Jobangebote rund um ProfiLab
- ↳ PROFILAB SOFTWARE Support
- ↳ Thema: Frontplatte und Frontplattenelemente
- ↳ Thema: Schaltung und Bauteile
- ↳ Thema: Makros
- ↳ Thema: Compiler
- ↳ Thema: Installation, Updates, Plattformen
- ↳ Thema: Geschwindigkeit und Systemauslastung
- ↳ Thema: ProfiLab-WebServer
- ↳ Thema: Anregungen zu ProfiLab
- ↳ PROFILAB HARDWARE Support
- ↳ Thema Hardware-Beispiele / Examples
- ↳ Thema Schaltungsaufbau, EMV, Störungen
- ↳ Thema RS232
- ↳ Thema Modbus
- ↳ Thema Temperatur
- ↳ Thema Relais
- ↳ Thema Multimeter
- ↳ Thema GPIB
- ↳ Thema Portzugriffe und LPT
- ↳ Geräte: ABACOM
- ↳ Geräte: BMCM
- ↳ Geräte: Conrad / Voltcraft
- ↳ Geräte: Deditec
- ↳ Geräte: DLP-Design
- ↳ Geräte: ELV
- ↳ Geräte: Greisinger
- ↳ Geräte: H-Tronic
- ↳ Geräte: Hygrosens
- ↳ Geräte: IO-Warrior
- ↳ Geräte: Kolter Electronic
- ↳ Geräte: LabJack
- ↳ Geräte: Meilhaus
- ↳ Geräte: Quancom
- ↳ Geräte: Velleman
- ↳ Weitere Geräte
- RealView
- ↳ REALVIEW SOFTWARE Support
- ↳ Einsteigerfragen / FAQ
- ↳ Kundenprojekte
- ↳ Anregungen
- ↳ REALVIEW HARDWARE Support
- sPlan
- ↳ SPLAN SOFTWARE Support
- ↳ Thema: Bibliotheken, Bauteile und Symbole
- ↳ Thema: Schaltpläne zeichnen und bearbeiten
- ↳ Thema: Seitenverwaltung, Blätter, Formblätter, Zoom
- ↳ Thema: Import, Export und Drucken
- ↳ Thema: Installation, Versionen, Updates, Plattformen
- ↳ Thema: Anregungen zu sPlan
- ↳ SPLAN SYMBOLE - Tauschbörse
- ↳ sPlan-Symbole: Elektronikbauteile, µ-Controller, Röhren und Halbleiter
- ↳ sPlan-Symbole: Installation und Anlagenbau, SPS
- ↳ sPlan-Symbole: Andere Fachgebiete, Pneumatik, Hydraulik, Kfz, etc.
- ↳ sPlan 8.0 - Demoversion
- Sprint-Layout
- ↳ SPRINT-LAYOUT SOFTWARE Support
- ↳ Einsteigerfragen / FAQ
- ↳ Thema: Platinenherstellung / Fertigungstechnik
- ↳ Thema: Isolationsfräsen und Bohren
- ↳ Thema: Gerberdateien
- ↳ Thema: Makros und Bauteile
- ↳ Thema: Lötaugen, Pads, Leiterbahnen, Masse
- ↳ Thema: Layer, Lötstop, Umriss
- ↳ Thema: Koordinaten und Raster
- ↳ Thema: Import, Export und Drucken
- ↳ Thema: Installation, Versionen, Updates, Plattformen
- ↳ Thema: Anregungen zu Sprint-Layout
- ↳ Kundenprojekte
- LochMaster
- ↳ LOCHMASTER SOFTWARE Support
- ↳ LochMaster - Tauschbörse
- ↳ Einsteigerfragen / FAQ
- ↳ Kundenprojekte
- ↳ Installation, Updates, Plattformen
- ↳ Anregungen
- FrontDesigner
- ↳ FRONTDESIGNER SOFTWARE Support
- ↳ FrontDesigner: Anregungen
- ↳ HPGL-Export, Fräsen und Gravieren
- AudioWave
- ↳ AUDIOWAVE SOFTWARE Support
- ↳ AudioWave: Anregungen
- ... und mehr von www.electronic-software-shop.com
- ↳ Link zum ABACOM - Webshop
- ↳ USB-µPIO / netPIO
- ↳ Fimware /TEMP12
- ↳ Fimware /GPIO18
- ↳ Fimware /INCR3
- ↳ Fimware /FREQ
- ↳ Fimware /PWMIO18
- ↳ USB-ADC Messmodul, 12 Bit
- ↳ USB-LRB Relaiskarte, 8-fach
- ↳ USB-LCD Textdisplay, 4x20
- ↳ Andere Artikel
- Sonstiges
- ↳ Sonstiges