-         

Ergebnis 1 bis 2 von 2

Thema: Problem mit Programm oder DA-Converter

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.11.2005
    Ort
    Walhorn
    Alter
    61
    Beiträge
    15

    Problem mit Programm oder DA-Converter

    Anzeige

    Hallo zusammen,

    ich habe folgendes Problem. Ich lese eine analoge Spannung ein. Da diese nicht linear ist, wandele ich diese um und möchte diesen gewandelten Wert wieder als Analogwert ausgeben. Als DAC verwende ich den MAX5154

    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $hwstack = 64                                               ' default use 32 for the hardware stack
    $swstack = 64                                               ' default use 10 for the SW stack
    $framesize = 64                                             ' default use 40 for the frame space
    
    
    '------------ Led-Ausgänge -----------------------
    Config Portb.0 = Output
    Config Portb.1 = Output
    Config Portb.4 = Output
    
    Led1 Alias Portb.0
    Led2 Alias Portb.1
    Led3 Alias Portb.4
    
    '------------- Config für LCD -------------------
    Config Lcdbus = 4
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.1 , Rs = Portd.0
    Config Lcd = 16 * 2
    Config Lcdmode = Port
    Initlcd
    Cursor Off
    Cls
    
    '------------- SPI Schnittstelle fuer MAX 5145 konfigurieren ---
    
    Const Control = &H4000                                      ' Lade Eingangsregister A, DA-Register wird aktualisiert
    
    Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1
    Spiinit
    
    Ss Alias Portb.2
    Ss = 1
    
    
    
    
    
    '------------- Config für ADC -------------------
    Config Adc = Single , Prescaler = Auto , Reference = Off
    
    
    Config Portc = Input
    Enable Interrupts
    Start Adc
    
    '------------- Variablen deklarieren ------------
    
    Dim Wert As Word
    Dim R As Single
    Dim Entfernung As Single
    Dim Ana As Word
    Dim W As Word
    
    Dim X As Byte
    Dim Y As Byte
    
    Dim V As Single
    Dim Vref As Single
    Vref = 2.56
    
    Dim Spannung As Word
    Dim Daten As Byte
    
    
    Dim Da_data As Word
    Dim B(2) As Byte At Da_data Overlay
    Dim Vref2 As Single
    Dim Voltage As Single
    
    Declare Sub Set_dac(da As Word)
    
    
    '------------- Start-Routine --------------------
    Locate 1 , 1
    Lcd " DISTANZMESSUNG "
    Locate 2 , 1
    Lcd ""
    Wait 2
    Cls
    
    '------------- Hauptprogramm --------------------
    Main:
    
    
    Do
    Wert = 0
    Spannung = 0
    Wert = Getadc(0)
    Spannung = Getadc(1)
    Locate 1 , 1
    Lcd Wert ; "  "
    
    Locate 2 , 1
    
    'R =(2914 /(wert + 5)) - 1
    
    Ana = Wert + 5
    R = 2914 / Ana
    R = R - 1
    V = Vref / 1024
    V = V * Spannung
    V = Da_data
    
    
    Lcd Fusing(r , "#.##") ; "cm "
    
    '----------- Ledauswertung -----------------------
    
    If Wert < 70 Then
    Portb.0 = 1
    Else
    Portb.0 = 0
    
    If Wert > 577 Then
    Portb.1 = 1
    Else
    Portb.1 = 0
    
    If Wert >= 70 And Wert <= 580 Then
    Toggle Portb.4
    
    End If
    End If
    End If
    '----------- Ende Ledauswertung -----------------
    
    
    
    
    
    '---------------- D/A Max 5145 -------------------
    
    
    
     Vref2 = 2.49
     Voltage = Vref2 * Da_data
     Voltage = Voltage / 4096
     Voltage = Voltage * 2
     Locate 1 , 5
    
    
     Lcd "DAC = " ; Voltage ; " V"
     Call Set_dac(da_data)
    
    Sub Set_dac(da As Word)
     Shift Da , Left , 1                                        ' Platz für Bit S0 machen
      Da = Da Or Control                                        ' Kommandobits überlagern
      Ss = 0
      Waitms 10
      Spiout B(2) , 1
      Spiout B(1) , 1
      Ss = 1
    End Sub
    Goto Main
    Loop
    Mein Programm funktioniert nicht ganz richtig, denn es läuft nur bis zur DA-Wandlung und bleibt dann hängen. Eigentlich sollte es durchlaufen, damit ich Entfernungsänderungen angezeigt bekomme.

    Wer kann mir weiter helfen ?

    Gruss Michael

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    29
    Beiträge
    235
    Ich weis nicht ob es daran liegt aber du hast in der Main-Schleife ja noch einen Sub drinnen

    Code:
    Main:
    Do
    .
    .
    .
    Sub Set_dac(da As Word)
    .
    .
    End Sub
    Goto Main
    Loop
    Würde die einzelnen Subs vllt trennen und dann aufrufen
    Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •