D/A Wandler über com1??

Fragen zu Elektronik und Elektro allgemein.Fragen zu Bauteilen wie z.B. Tansistoren, Dioden, Kondensatoren usw.

Fragen zu Elektronik und Elektro allgemein.Fragen zu Bauteilen wie z.B. Tansistoren, Dioden, Kondensatoren usw.

Moderator: Moderatorengruppe

COM Port

Neuer Beitragvon BernhardS am Dienstag 1. Januar 2008, 17:35

Hallo,

(Den COM-Port kann man übrigens auch ohne eine DLL oder sonst etwas ganz gut steuern.)


Würde mich interessieren. SirMel wollte VB verwenden, da kenne ich halt die beschriebene Methode. Geht es einfacher?

Bernhard
BernhardS
30518
Moderator
 
Beiträge: 4597
Registriert: Donnerstag 17. Februar 2005, 17:50
Postleitzahl: 84028
Land: Germany / Deutschland

Neuer Beitragvon Master-Jimmy am Dienstag 1. Januar 2008, 19:37

Die Funktion EscapeCommFunction der WindowsAPI stellt eigentlich alle sechs gewünschten Funktionen zur Verfügung:
TXD --> HIGH
TXD --> LOW
RTS --> HIGH
RTS --> LOW
DTR --> HIGH
DTR --> LOW

Wenn man's damit macht wird zwar der Code länger (komplizierter?), weil man auch die Schnittstelle selber öffnen und einstellen muss. Dafür kann man aber die DLL über Bord werfen, was zumindest ich immer sehr gerne mache.

So ca. pflege ich das jeweil zu codieren:
Code: Alles auswählen
#include <windows.h>

#define   DTR   0
#define   RTS   1
#define   TXD   2

HANDLE      hCom; //Handle auf den Port

struct{int dtr; int rts; int txd;}com1; //Die Aktuellen Zustaende der Leitungen sind hier gespeichert

/******************************************************************************************************/

void port_initialisieren(void)
{
   DCB      interface_parameter;
   COMMTIMEOUTS   timeout_einstellungen;

   //Port oeffnen:
   hCom=CreateFile("COM1",
         GENERIC_READ|GENERIC_WRITE,
         0,
         NULL,
         OPEN_EXISTING,
         0;
         NULL);

   //Schnittstellen-Parameter einstellen:
   GetCommState(hCom,&interface_parameter);
   interface_parameter.DCBlength=sizeof(interface_parameter);
   interface_parameter.BaudRate=9600;
   interface_parameter.ByteSize=8;
   interface_parameter.StopBits=1;
   interface_parameter.Parity=NOPARITY;
   SetCommState(hCom,&interface_parameter);

   timeout_einstellungen.ReadIntervalTimeout=100;
   timeout_einstellungen.ReadTotalTimeoutMultiplier=100;
   timeout_einstellungen.ReadTotalTimeoutConstant=100;
   timeout_einstellungen.WriteTotalTimeoutMultiplier=100;
   timeout_einstellungen.WriteTotalTimeoutConstant=100;
   SetCommTimeouts(hCom,&timeout_einstellungen);

   //Reset auf Default-Werte:
   EscapeCommFunction(hCom,SETDTR);
   EscapeCommFunction(hCom,SETRTS);
   EscapeCommFunction(hCom,CLRBREAK);
   com1.dtr=0; com1.rts=0; com1.txd=0;
}

/******************************************************************************************************/

void WriteOutput(int leitung, int neuer_pegel)
{
   if(neuer_pegel)
   {
      switch(leitung)
      {
         case DTR : EscapeCommFunction(hCom,CLRDTR)   com1.dtr=1;   break;
         case RTS : EscapeCommFunction(hCom,CLRRTS);   com1.rts=1;   break;
         case TXD : EscapeCommFunction(hCom,SETBREAK);   com1.txd=1;   break;
      }
   }
   else
   {
      switch(leitung)
      {
         case DTR : EscapeCommFunction(hCom,SETDTR);   com1.dtr=0;   break;
         case RTS : EscapeCommFunction(hCom,SETRTS);   com1.rts=0;   break;
         case TXD : EscapeCommFunction(hCom,CLRBREAK);   com1.txd=0;   break;
      }
   }
}


Ich habe das noch nie mit VisualBasic ausprobiert und bin da auch überhaupt nicht bewandert. Da es aber in C/C++ geklappt hat und VisualBasic von Microsoft selbst ist, denke ich mal, dass es da auch funzt.
Benutzeravatar
Master-Jimmy
30520
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

C

Neuer Beitragvon BernhardS am Mittwoch 2. Januar 2008, 07:12

Hallo,

Besten Dank schonmal.
Ich kann zwar kein C, stolpere aber immer öfters drüber. Werde es vermutlich doch mal angehen.

Bernhard
BernhardS
30529
Moderator
 
Beiträge: 4597
Registriert: Donnerstag 17. Februar 2005, 17:50
Postleitzahl: 84028
Land: Germany / Deutschland

Neuer Beitragvon SirMel am Mittwoch 2. Januar 2008, 18:47

hey super vielen dank für die information hast mir geholfen=)
SirMel
Threadstarter
30554
Bronze Mitglied
 
Beiträge: 37
Registriert: Sonntag 15. Juli 2007, 11:58

C

Neuer Beitragvon BernhardS am Freitag 4. Januar 2008, 18:28

Hallo,

jetzt hab ich mir ein paar C Einführungen angeschaut. Große Überraschung: So etwas in der Richtung konnte ich schon mal, ungefähr 1981 auf einer PDP11/08.
Ich hör schon wieder auf, wenn die älteren Herren in Nostalgie verfallen, das kommt nicht so gut an.

Bernhard
BernhardS
30633
Moderator
 
Beiträge: 4597
Registriert: Donnerstag 17. Februar 2005, 17:50
Postleitzahl: 84028
Land: Germany / Deutschland

Neuer Beitragvon Master-Jimmy am Freitag 4. Januar 2008, 18:39

BernhardS hat geschrieben:Ich hör schon wieder auf, wenn die älteren Herren in Nostalgie verfallen, das kommt nicht so gut an.
Damit habe ich kein Problem. -Ich finde das teils sogar ungemein interessant.
Es kommt manchmal vor, dass bei uns eine ganze Stunde über die Klingge springen muss, wenn unser Lehrer mal wieder in die Welt des "händisch" Compilieren usw. abdriftet und das nervt definitiv niemand (Nicht nur weil's weniger anstrengend ist als zu arbeiten :P ).

Das Ur-C (K&R-C) wurde in den 70er-Jahren entwickelt und auch Pascal müsste damals bereits verfügbar gewesen sein.-Ist also gut möglich.

Übrigens:
Diese Seite hier bietet meiner Meinung nach eine rel. fundierte Einführung in C++. Wenn man da bis Kapitel 5 liest versteht man schon sehr viele C-Programme.
Zuletzt geändert von Master-Jimmy am Freitag 4. Januar 2008, 19:21, insgesamt 1-mal geändert.
Benutzeravatar
Master-Jimmy
30635
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Re: C

Neuer Beitragvon derguteweka am Freitag 4. Januar 2008, 18:42

Moin,

BernhardS hat geschrieben:Große Überraschung: So etwas in der Richtung konnte ich schon mal, ungefähr 1981 auf einer PDP11/08.

Welch' eine Ueberraschung :D
Ich zitier' mal aus http://www.num.math.uni-goettingen.de/Dokumentationen/C/Einfuehrung/einleitung.html:

Geschichte

* 1969: Ken Thomson (Bell Laboratories) schreibt die erste Version von UNIX in Assembler (ist nicht portabel!).
* 1970: Ken Thomson entwickelt auf einer PDP/7 die Sprache B als Weiterentwicklung der Sprache BCPL; B ist eine typlose Sprache, die nur Maschinenworte kennt.
* 1974: Weiterentwicklung von B zu C durch Dennis M. Ritchie und Brian W. Kernighan und erste Implementation auf einer PDP/11
* C ist in den USA weit verbreitet und findet auch im Rest der Welt immer mehr Anwendung. Dies hängt zum einen mit den Eigenschaften der Sprache C und zum anderen mit der wachsenden Verbreitung des Betriebssystems UNIX und seiner Derivate zusammen.
* 1978: Als Quasi-Standard für die Programmiersprache C gilt für lange Zeit allgemein das Buch:

Brian W. Kernighan & Dennis M. Ritchie:
The C programming language
Prentice Hall, Englewood Cliffs N.Y. (1978)


Gruss
WK
derguteweka
30636
Moderator
 
Beiträge: 1048
Registriert: Freitag 18. August 2006, 15:47

Nostalgie

Neuer Beitragvon BernhardS am Samstag 5. Januar 2008, 17:00

Hallo,

Welt des "händisch" Compilieren

die Spitzenleistung im händisch programmieren war an der 11/08 eine Reihe von etwa 30 Kippschaltern. Nach einem Totalabsturz (geht auch ohne Windows, nur nicht so leicht) konnte man da die Ur-Bootsequenz eingeben. Adresse und Befehlscode einstellen in 1 und 0, dann übernehmen und zum Schluss wieder auf Anfangsadresse stellen und ausführen.

Der Scherz Jahre später: "Real Programmers write: copy con > Program.exe " hat noch nicht mal zum Lächeln gereicht.

Bernhard
BernhardS
30684
Moderator
 
Beiträge: 4597
Registriert: Donnerstag 17. Februar 2005, 17:50
Postleitzahl: 84028
Land: Germany / Deutschland

Vorherige

Zurück zu Fragen zur Elektronik

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 45 Gäste