WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Quick Basic Befhele in Matlab? AD-Wandler

 

Andreas0815

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2010, 11:46     Titel: Quick Basic Befhele in Matlab? AD-Wandler
  Antworten mit Zitat      
Hallo und Guten Tag,
ich bin neu in der Prgrammierer Welt und auch im Forum. Ich wollte mich etwas mit AD-Wandlern beschäftigen. Als Einstieg habe ich mir den AD-Wandler TLC549 ausgesucht der allerdings über die RS232 Schnitstelle angesteuert wird (http://www.franksteinberg.de/uni8ad.htm). Auf der seite findet sich auch der QBasci Code:

Code:
'-- TLC549.bas
' - liest den Universal 8-Bit AD Wandler aus
' - der Messwert ist ein Mittelwert aus 127 Messungen
' - unter DOS oder im DOS-Modus ausfuehren
' - PUBLIC DOMAIN
' - Anschluss an die serielle oder parallele Schnittstelle
' - Verbindungen: (Bauanleitung im Internet www.franksteinberg.de)
'  - TLC549              COM       LPT   -      Zweck ---------------------------
'  - VCC           <-     TxD       D 7           Versorgungsspannung fuer Platine
'  -  I/O Clock   <-    DTR       D 0           Taktleitung
'  - DATA OUT   ->    CTS       SELECT       Daten vom Wandler
'  - CS              <-    RTS        D 1           Wandler-Aktivierung (Chip-Select)

DEFINT A-Z         'Standard fuer Variablen ist Integer

Ref! = .128        'hier Referenzspannung angeben
Delay = 120        'Delayschleifen fuer den Wandler bei schnellen PCs


BA = &H3F8   'COM1  1016

 Ausg = BA + 4                'I/O Adresse Ausgang (ModemSteuerRegister) an Offset 4
 Eing = BA + 6                 'I/O Adresse Eingang (ModemStatusRegister) an Offset 6
 OUT BA + 3, 64                'Stromversorgung des Wandlers an TxD -> VSS ein
 CLKhigh = 1                   'ByteWert fuer CS low  / CLK high  (Bit0 RTS)
 CShigh = 2                    'ByteWert fuer CS high / CLK low   (Bit1 DTR)
 Clow = 0                      'ByteWert fuer CS low  / CLK low
 BitW = 16                     'ByteWert des Datenbits            (Bit4 CTS)

CLS
WIDTH 40                             'große Schrift
PRINT
PRINT "Universal 8-Bit AD-Wandler    
PRINT
PRINT "Referenzspannung ="; Ref!; "Volt"

DO                                                         'Beginn der Hauptschleife
 
  SWert = 0                                                'alten Summenwert loeschen
  OUT Ausg, CShigh                                      'CS high
  TS! = TIMER: DO: LOOP WHILE TS! = TIMER            'Timer-Sprung abwarten
  TS! = TIMER: DO: LOOP WHILE TS! = TIMER             'eine Timer-Periode (55mS) warten
  OUT Ausg, Clow                            'CS low

  FOR i = 1 TO 127                                     '127 Werte lesen
 
   FOR j = 7 TO 0 STEP -1                               '8 Bits fuer einen Wert
    FOR p = 1 TO Delay: NEXT                            'Delay bei schnellen PCs
                        'Wertigkeit des Datenbits summieren
    IF (INP(Eing) AND BitW) THEN EW = EW + 2 ^ j
    OUT Ausg, CLKhigh                                   'CLK high
    OUT Ausg, Clow                                      'CLK low
   NEXT j                                                  'naechstes Bit
 
   SWert = SWert + EW                                   'Summe fuer Mittelwert bilden
   IF EW < WMin THEN WMin = EW                       'Minimalwert speichern
   IF EW > WMax THEN WMax = EW                       'Maximalwert speichern
   EW = 0                                                  'letzten Einzelwert loeschen

  NEXT i                                                  'naechsten Wert lesen

  'Werte anzeigen
  LOCATE 10
  PRINT USING "Minimalwert  ###  Digits"; WMin
  PRINT USING "Maximalwert  ###  Digits"; WMax
  PRINT USING "Streuung     ###  Digits"; WMax - WMin + 1
  SWert = SWert / 127                       'Mittelwert aus 127 Messungen
  PRINT USING "Mittelwert   ###  Digits"; SWert
  U! = SWert * Ref! / 256                   'Messspannung berechnen
  PRINT
  PRINT USING "Spannung   #.###  Volt "; U!
 
  WMin = 333                                               'alten Minimalwert loeschen
  WMax = 0                                                'alten Maximalwert loeschen
  SWert = 0                                                'alten Summenwert loeschen
 
  '0,5 Sek-Delay zum Betrachten der Werte:
  TS! = TIMER: DO: LOOP UNTIL TIMER - TS! > .5

LOOP WHILE INKEY$ = ""                                  'Ende bei Tastendruck

WIDTH 80                                                   'auf Normalschrift schalten

 

Das Programm läuft sehr gut und ich verstehe es auch, jedoch haben meine Versuche ähnliche Befehle wie CShigh in MATLAB zu finden keine Erfolge gebracht. Gibt es andere Möglichkeiten um den Conversion Cycle zu initiieren?
Muss ich eine Art Treiber für MATLAB schreiben in C++ oder dergleichen oder kann man irgendwie ähnliche Befhele um die einzelnen Leitungen der RS232 zu manipulieren finden?

Vielen Dank schon mal!
Andreas


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2010, 08:06     Titel:
  Antworten mit Zitat      
.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.05.2010, 09:57     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Das Programm läuft sehr gut und ich verstehe es auch, jedoch haben meine Versuche ähnliche Befehle wie CShigh in MATLAB zu finden keine Erfolge gebracht. Gibt es andere Möglichkeiten um den Conversion Cycle zu initiieren?


Verstehe nich was du damit meinst?
CShigh ist doch eine Variable kein Befehl?
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas0815

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2010, 15:14     Titel:
  Antworten mit Zitat      
Oh ...ok ich dachte dass es irgendwie nach "set to 1" aussieht und es ein Befehl mit Parameter ist. Aber so gint das schon mehr Sinn. Ich danke Dir. Soviel wohl zum "ich verstehe es auch". Trotzdem bleibt da noch das Problem mit den I/O Adressen. In dem QBasic Programm wird einfach etwas zu den Adressen addiert und so andere Adressen angesprochen .. richtig? In Matlab geht ähnliches mit s1= serial ('COM1', 'BAUD', '1200'); und dann kann ich aber nicht einfach s1 + 4 schreiben. Wie kann ich in Matlab diese Adressen genau ansprechen.. ich mach mich auch mal auf die Suche!
Danke !
Andreas
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.