Frage zur Ansteuerung des COM-Ports

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
moin
Beiträge: 59
Registriert: 03.07.2007 08:38
Wohnort: Norddeutschland

Frage zur Ansteuerung des COM-Ports

Beitrag von moin »

Ich möchte 900 Messwerte (von meinem Mikrocontroller) unter PB 4 über die serielle Schnittstelle einlesen und graphisch ausgeben.
Ich stelle mir das so vor, dass der Mikrocontroller ein Startzeichen sendet (z.B. HEX 01) und die Daten in ein Array geschrieben werden bis ein Stopp_Zeichen eintrift (z.B. HEX02). Diese Daten könne dann ausgegeben werden.
Was das Auslesen des COM-Ports betrifft stehe ich wie der Ochse vorm Berg :-). Gibt es noch eine leichtere Möglichkeit als die MVCOM oder kennt ihr eine gute Anleitung? (Das mitgelieferte Beispiel ist für mich ziemlich unverständlich).
Ich würde mich über Tipps freuen.
Gruss
moin

P.S. Die Ergebnisse der Such-Funktion haben mir nicht wirklich geholfen, da mir die Anfänge (MVCOM) fehlen.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

du gestattest, dass ich das ins "Hardware & Elektronik" verschiebe?

es geht ja um die ansteuerung von externer hardware,
und dort lesen die profis regelmäßig mit. ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Wie soll das mit den Daten gehen? Start und Stopbit dürften dann aber
nicht in den 900 Bytes Daten vorkommen, oder?

Eine andere Möglichkeit, wäre, vielleicht ein Startsignal mittels
Com GetCTS, ComGetDSR oder ComGetDCD zu prüfen, wenn dieses Hi ist
und Stopsignal, wenn es Lo ist. Bei High müssten die Daten über RXD mittels
ComRead dann eingelesen werden, bis ein Lo auf einer der GetXXX kommt.


Die Hilfe der neuen MVCOM ist leider nicht vollständig. Wenn du die ältere
MVCOM für Pb 3.9x runterläds, ist dort auch die Helpfiele mit LoopBack-
stecker sowie der Anschlussbelegung zu den Funktionen dabei.

Leider kann ich das nicht ohne Hardware nachvollziehen. Evt. müsste ich
das mit einem Loopbackstecker simulieren. Dafür ist das Beispiel von Marc Vitry
gemacht worden ;)

Gruss Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

Beitrag von Helmut »

Zitat:
Startzeichen sendet (z.B. HEX 01)

Nicht Start- und Stopbit
Zeichen empfangen, prüfen ob es die Startbedingung ist, wenn ja, Arr-Zähler auf 1 setzen, weitere Zeichen einlesen und prüfen ob die Stobbedingung da ist, wenn ja, Arr-Zählerstand ev. merken und Arr-Daten weiterverarbeiten.
Ich hoffe das ist das Ziel.
MfG
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Sorry, ich war wohl zu schnell. Klar, sollte Startzeichen und Stopzeichen heissen :roll:

Was ich meinte, dieses Startzeichen sowie das Stopzeichen darf dann aber
nicht in den 900 Bytes vorkommen. Wenn es nur Zahlen sind, wäre es, wie
du beschrieben hast, kein Problem ;). Damit ginge alles über eine Leitung.

Gruß, Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
moin
Beiträge: 59
Registriert: 03.07.2007 08:38
Wohnort: Norddeutschland

Beitrag von moin »

Meine Signale liegen zwischen 50 und 200. Daher können alle Werte niedriger als 50 als Steurzeichen verwendet werden.
Ich habe mir den Vorgang so vorgestellt, wie ihn Helmut im vorletzten Beitrag beschrieben hat. Der PC muß auf die Steuerzeichen werten, da er nur empfangen, aber keine Signale an die Mikrocontrollerschaltung senden kann(bisher).
Wenn sich das PureBasic-Programm aber deutlich vereinfacht, werde ich auch noch dieses Kabel ziehen. Man könnte dann auf die Steuerzeichen verzichten, da die Anzahl der Signale fest ist.
Gruß moin
moin
Beiträge: 59
Registriert: 03.07.2007 08:38
Wohnort: Norddeutschland

Beitrag von moin »

Der Knoten in meinen Gehirnwindungen ist geplatzt. Hier meine einfache Lösung, die ich in den nächsten Tagen ausbauen werde:
Das Programm wartet 5s und teigt dann alle Zeichen an, die in dieser Zeit empfangen worden sind.

Code: Alles auswählen

Dim Daten.w (1000)

MyCom.s = "Com3: baud=19200 parity=N data=8 stop=1"
HCom.l

HCom = ComOpen(MyCom,0,10000,10000)
If HCom
	Delay (5000)
        DataToRead.l = ComInputBufferCount(Hcom)            ; Get the number of data waiting in the com buffer
        ;MessageRequester(" Data...",Str(DataToRead))
            
       ; If DataToRead > 0
        	MyBuffer2.s = Space(DataToRead)             ;Set the buffer size to store the data
        	If ComRead(Hcom,@MyBuffer2,DataToRead)
        		MessageRequester("Reading...","Data: " + MyBuffer2)
        	EndIf
       ; EndIf
Else
MessageRequester("SerTest","Can't open the Com port", #MB_ICONERROR) 
    End 
EndIf

ComClose(hcom)
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Sieht gut aus :allright: .
Dann brauchst du auch kein Start-, und Stopbyte weil die Anzahl der Bytes
bekannt ist.

Was misst dein Mikrocontroller, wenn man fragen darf?

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

Beitrag von Helmut »

Sicher, dass er 5 Sekunden drauf wartet, ob im Com-Port Daten kommen?
Macht das Programm nicht eher eine Pause von 5Minuten im Programm?
Antworten