- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 14

Thema: kapazitätzmessgerät, 2*27 Anzeige

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    16.10.2005
    Ort
    Adendorf
    Alter
    42
    Beiträge
    46

    kapazitätzmessgerät, 2*27 Anzeige

    ich arbeite gerade an einem Kapazitätsmessgerät mit eigener kalibrierung. Es funktioniert auch soweit ganz gut, es hat nur einen kleinen schönheitsfehler, den ich nicht finde.

    Ich verwende ein 4 * 27 Zeiliges Display von pollin und einen Mega 8.

    Beim Start steht, wie es auch soll :
    " Das kapazitaetsmessgeraet "
    " ***** MEGA 8 ***** "
    " (c) Boris Eskin "
    " (c) Olaf Petersen "

    Dann soll die Zweite Zeile verschwinden und an der Stelle die gemessenen Werte anzeigen. Doch leider sind sie immer in der unteren Displayhälfte.

    " Das kapazitaetsmessgeraet "
    " ***** MEGA 8 ***** " <-- hier soll es hin
    " (c) Boris Eskin "
    " 123.00 nF " <-- hier ist es

    nun der Code:
    Code:
     $regfile = "m8def.dat"                 'Atmel MEGA 8 controller
     $crystal = 16000000                    'Quarz auf 16MHz
    
    
     '-- Portbelegung -------------------------------------------------------------
     Ddrd.3 = 0                             'PD3/INT0 als Eingang deklarieren
     Portd.3 = 1                            'Pullup Widerstand aktiveren
     Taste Alias Pind.3                     'Taste zu Kalibrierung
    
     Ddrd.6 = 1                             'PD6/INT0 als Ausgang deklarieren
     Relais Alias Portd.6                   'Ralais zu Kalibrierung
     Relais = 0                             'Relais ausschalten
    
     '27 x 4 LCD Display angeschlossen
     'Festlegen der Verwendeten Ports
     'Wenn es nur einen Kontroler gibt das sollte Port E2 der Gleiche wie E sein
     Ddrc = &B00111111
     Portc.1 = 0                            'R/W auf masse
     Ddrd.0 = 1
     Ddrd.1 = 1
    
     Dim ___lcdno As Bit                    'zwischen den LCD kontroler wechseln
     Config Lcdpin = Pin , E = Portc.2 , E2 = Portc.3 , Rs = Portc.0 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portd.1 , Db7 = Portd.0
     Config Lcd = 40 * 4
    
    
    '--Variablen ------------------------------------------------------------------
     Dim Counter_ueberlauf As Integer       'anzahl der Überlaufe von timer 1
     Dim Timerprescale As Long              'um timer auf 1 sec zu stellen
    
     Dim Frequenz As Single                 'momentahne Frequenz
     Dim Freq1 As Single                    'leerlauf
     Dim Freq2 As Single                    'mit Relais
     Dim Freqx As Single                    'kapazität
    
     Dim C1 As Single                       'aus der kalibrierung ergebener Wert
     Dim Cx As Single                       'gemessene kapazität
     Dim L1 As Single                       'aus der Kalibrierung
    
     Dim Tmp As Single                      'variable für Formeln und rechnungen
     Dim Tmp2 As Single                     'variable für Formeln und rechnungen
    
     Dim Kalibrierung As Bit                'kalibrierung aktiv
     Dim K_i As Bit                         'so für die kalibrierung
     Dim K_r As Bit
    
     Dim S As String * 27                   ' String der Angezeigt wird
    
    
    '--Interrupts------------------------------------------------------------------
     On Timer1 Oncounter                    'Interrupt anzahl der Impulse
     On Timer0 Ontimer                      'Interrupt eine Sekunde ermitteln
     On Int1 Ontaste                        'Interrupt Taste Kalibrierung
    
     Config Timer0 = Timer , Prescale = 1   ' eine Sekunde ermitteln
     Const Timervorgabe = 62500             ' 62500 * 265 ergibt 16Mhz
     Config Timer1 = Counter , Edge = Rising , Noise Cancel = 1       'Timer als Timer Festlegen
    
     Enable Timer0                          'Timer0 Aktivieren
     Enable Timer1                          'Timer1 aktivieren
     Enable Int1                            'Taste aktivieren
    
    
    
    
     '--Hauptprogramm--------------------------------------------------------------
    
    
     Stop Timer1                            'erstmal stop damit nicht schon
     Stop Timer0                            'jetzt interrupts kommen
    
     ___lcdno = 0                           'Ober Displayhälfte initialisieren, wenn
     Initlcd                                'das Display 2 Lcd-Controller besitzt
     Cursor Off
     Cls
     ___lcdno = 1                           'untere Displayhälfte initialisieren,
     Initlcd                                'das Display 2 LCD-Controller besitzt
     Cursor Off
     Cls
    
     ___lcdno = 0                           ' auf obere hälfte den Titel schreiben
     Home
     Locate 1 , 2
     Lcd "Das Kapatitaetsmessgeraet"
     Locate 2 , 5
     Lcd "***** MEGA 8 *****"
    
     ___lcdno = 1                           ' auf untere hälfte die Namen
     Home
     Locate 1 , 5
     Lcd "(c) Boris Eskin"
     Locate 2 , 5
     Lcd "(c) Olaf Petersen"
    
     Wait 2
    
    
    '-- Alle werte auf Startwerte setzen ------------------------------------------
     ___lcdno = 0                           'Obere displayhälfte  auswählen
     Home
    
     Counter_ueberlauf = 0                  'startwert festlegen
     Timerprescale = 0                      'startwert festlegen
     Freq1 = 0                              'leerlauffrequenz
     Freq2 = 0
     Freqx = 0
     C1 = 0                                 '~700 nF
     Cx = 0
     Kalibrierung = 1                       'mit der Kalibrierung beginnen
    
     Start Timer1
     Start Timer0
     Enable Interrupts                      'Allgemein Interrupts erlauben
    
    
    
    '--jetzt kann es losgehen -----------------------------------------------------
     Do
    
       If Kalibrierung = 0 Then
          Tmp = Freq1 * Freq1               'Berechnung der Kapazität
          Tmp2 = Frequenz * Frequenz
          Tmp = Tmp / Tmp2
          Tmp = Tmp - 1
          Cx = Tmp * C1                     'in nF
          S = Fusing(cx , "#.####")         'unbekannte Kapazität anzeigen
          S = S + " nF"
       Else
          If K_i = 0 Then                   'warten auf den zweiten messwert
             K_i = 1
             S = "Kalibrierung "
          Else
             If K_r = 0 Then                'ermitteln der leerlauffrequenz
                Freq1 = Frequenz
                K_r = 1
                Relais = 1
                S = "Relais an"
             Else
                Freq2 = Frequenz            'kalibrierfrequenz
                Tmp = Freq2 * Freq2
                Tmp2 = Freq1 * Freq1
                Tmp2 = Tmp2 - Tmp
                Tmp = Tmp / Tmp2
                C1 = Tmp * 0.1              'ermittelter wert für C1
    
                Relais = 0                  'relais aus
                Kalibrierung = 0            'Kalibrierung beenden
                Tmp = C1 * 1000
                S = Fusing(tmp , "#.##")    'ermittelten wert anzeigen
                S = S + " pF   "
             End If
          End If
       End If
    
    ' anzeige auf dem LCD
       ___lcdno = 0                     'obere Displayhälfte
       Locate 2 , 0
       Lcd "                           "    'LCD Zeile löschen
       Locate 2 , 8
       Lcd S                                'Ausgabe am LCD
    
       Wait 1
    
     Loop
    End
    
    
    '-- Interrupthändler für Überlauf an Timer 1 ----------------------------------
     Oncounter:
       Incr Counter_ueberlauf               'Überlaufe Zählen
     Return
    
    '-- Interrupthändler für Überlauf an Timer 0 ----------------------------------
     Ontimer:
      Incr Timerprescale                    'Überlaufzähler um eins erhöhen#
    
      If Timerprescale = Timervorgabe Then  'nach einer Sekunde
         Timer0 = Timervorgabe
         Frequenz = Counter_ueberlauf * 65536
         Frequenz = Timer1 + Frequenz
         Frequenz = Frequenz / 1000         'in kHz
         Timerprescale = 0
         Counter_ueberlauf = 0
         Timer1 = 0
      End If
     Return
    
    '-- Interrupthändler für Taste Kalibrierung -----------------------------------
    Ontaste:
       Kalibrierung = 1
       K_i = 0
       K_r = 0
    Return
    An irgeneiner stelle muss er auf die idee kommen die untere hälfte zu nehmen.
    Angehängte Dateien Angehängte Dateien

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress