-         

Ergebnis 1 bis 4 von 4

Thema: Vu meter

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    04.08.2007
    Ort
    Bregenz
    Alter
    41
    Beiträge
    72

    Vu meter

    Anzeige

    Guten tag:
    Ich hab ein kleines project für die weihnachtsfeier von meine firma es ist ein applausometer mit 16 stufen , also brauche 16 pins von mein atmega 16, ich verwende port c und d, ich hab der code vom Bascom beispiel Bg30db led ein bischen modifiziert , ich benutze ein analogeingang (ADC 0), an dieser eingang hab ich ein microfon mit ein transistor als verstärker angeschlossen.
    es funktioniert alles , aber ich täte mir wünschen das der spitzenwert erhalten bleibt für ein paar sekunden , und das die leds ein bischen ruhiger werden , hatt vielleicht jemand von euch schon so was gebaut ?
    Zum project , es sind 48 reihen und 11 spalten mit 10 mm leds bestückt , also 528 ultrahelle leds .
    Möchte es ansteuern mit 3 led reihen pro pin , dazu will ich verwenden ein uln 2803.
    Wenn jemand ideen oder vorschläge hatt bitte her damit




    Code:
    '--------------------------------------------------------------------------------
    'name                     : BG30dB_LED.bas
    'copyright                : (c) 1995-2005, MCS Electronics
    'purpose                  : create a logarithmic LED bar graph dB (VU) meter
    'micro                    : AT90S2313-10
    'suited for demo          : yes
    'commercial addon needed  : no
    'use in simulator         : possible
    '
    ' Author     : Ger langezaal
    '
    '---[ Small program description ]-----------------------------------------------
    '
    ' This program is written to create a logarithmic LED bar graph dB (VU) meter
    ' with peak-hold and drop-down. Scale range is 30dB in 3dB steps.
    ' Log conversion is done with the analog comparator on a RC discharge curve.
    ' C1 is charged each 4mS with PB0 as output on a Timer0 Interrupt.
    ' Then PB0 is set to AIN0 (analog comparator +input) Timer1 is reset
    ' and start counting, C1 will be discharged by R1.
    ' Timer1 is counting until AIN0 < AIN1.
    ' Analog Comparator Output = ACSR bit 5.
    ' Timer1 value is in T1 stored for calculation.
    '
    ' Display mode is set with PD6 (pin 11).
    '   1 = bar mode
    '   0 = dot mode  (for low current applications)
    
    '---[ LED to AVR connections ]--------------------------------------------------
    '
    '     AVR      Resistor   Cathode   dB
    '  Port pin      Ohm      LED nr   Scale
    '  PD5   9   >--[680]-->   11       +6
    '  PD4   8   >--[680]-->   10       +3
    '  PD3   7   >--[680]-->    9        0
    '  PD2   6   >--[680]-->    8       -3
    '  PD1   3   >--[680]-->    7       -6
    '  PD0   2   >--[680]-->    6       -9
    '  PB7  19   >--[680]-->    5      -12
    '  PB6  18   >--[680]-->    4      -15
    '  PB5  17   >--[680]-->    3      -18
    '  PB4  16   >--[680]-->    2      -21
    '  PB3  15   >--[680]-->    1      -24
    '  PB2  14   >--[680]-->    0     infinit
    '
    ' All LED Anodes to +5 Volt
    '
    '---[ Analog comparator inputs ]------------------------------------------------
    '
    '
    '  Meter DC input >-------[ R2 ]-------> PB1 (AIN1 pin 13)
    '                                 |
    '             GND <---------||-----
    '                           C2
    '
    '                      ---[ R1 ]---
    '             GND <----|          |----> PB0 (AIN0 pin 12)
    '                      -----||-----
    '                           C1
    ' R1 = 10k 5%
    ' R2 = 10k
    ' C1 = 47nF 5%
    ' C2 = 47nF
    '
    '---[ DC input versus Timer1 and Led position ]---------------------------------
    '
    ' Measured Timer1 values for calculation:
    ' DC input = 3500mV  Timer1 =  192   ( +6dB)
    ' DC input =  312mV  Timer1 = 1544   (-15dB)   21dB = factor 11.22
    ' 21dB = 1543 - 192 = 1351 Timer1 counts
    '  3dB = 1351 / 7 = 193 Timer1 counts
    '
    '  Input mv    Timer1   LED pos  dB scale
    '    3500        192      11       +6
    '    2477        385      10       +3
    '    1753        578       9        0
    '    1241        771       8       -3
    '     879        965       7       -6
    '     622       1158       6       -9
    '     440       1351       5      -12
    '     312       1544       4      -15
    '     220       1737       3      -18
    '     156       1930       2      -21
    '     110       2123       1      -24
    '    <110      >2123       0     infinit
    '
    '---[ Compiler and hardware related statements ]--------------------------------
    
    $regfile = "m32def.dat"                                     'register file for AT90S2313
    $crystal = 16000000                                         '10MHz crystal
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 10                                               'default use 10 for the SW stack
    $framesize = 40                                             'default use 40 for the frame space
    
    Config Portc = Output
    Config Portd = Output
    config portb = output
    Config Porta.0 = Input                                      'output high and enable input pullup
     $sim
                                                   'enable analog comparator ACSR bit 7 = 0
    
    '---[ Variables ]---------------------------------------------------------------
    
    Dim Peak_pos As Byte
    Dim Peak_hold As Byte
    Dim Drop_hold As Byte
    Dim Led_pos As Word
    Dim Bar_pattern As Word
    Dim T1 As Word
    
    '---[ Constants ]---------------------------------------------------------------
    
    Const Peak_hold_time = 200
    Const Drop_down_time = 40
    Const Led_max = 16                                          'Led 0 - 11
    Const T1_fs = 325
                                              'full scale Timer1 value
    Const T1_step = 12                                          '3dB step Timer1 value
                      'Calculate Timer1 range
    
    
    '---[ Timer Configuration ]-----------------------------------------------------
     Config Adc = Single , Prescaler = Auto , Reference = Internal
                          'R/C Timer
                                          'reset after 1 Sec no reset watchdog
    
     Start Adc
    '---[ Main program loop ]-------------------------------------------------------
    
    Do
                                            'set all bits
    
                                           'bar display mode
        Bar_pattern = Lookup(led_pos , Bar_mode)
    
                                         'reset peak bit
      Portd.7 = Bar_pattern.15
      Portd.6 = Bar_pattern.14                                  'led 11 = bit 11
      Portd.5 = Bar_pattern.13                                  'reset peak bit
      Portd.4 = Bar_pattern.12
      Portd.3 = Bar_pattern.11                                  'led 11 = bit 11
      Portd.2 = Bar_pattern.10
    
    
      Portc.0 = Bar_pattern.7
      Portc.1 = Bar_pattern.6
      Portc.2 = Bar_pattern.5
      Portc.3 = Bar_pattern.4
      Portc.4 = Bar_pattern.3
      Portc.5 = Bar_pattern.2
      Portc.6 = Bar_pattern.1
      Portc.7 = Bar_pattern.0
    
                                                    'led 0 = bit 0
    
        Print T1
    '-------------------------------------------------------------------------------
    
    '-------------------------------------------------------------------------------
    
    '---[ Interrupt Service Routine on Timer0 overflow  ]---------------------------
    
                                                'read Timer1 value
      T1 = Getadc(0)
    
    
      Led_pos = T1_fs - T1                                      'calculate led position
      Led_pos = Led_pos \ T1_step                               'led_pos = 0 - 11
    
    
           Loop
    Return
    
    '---[ Led Bar pattern lookup data ]---------------------------------------------
    
    '      Led 11......... 0
    Bar_mode:
    Data &B1111111111111111%                                    'Word constants must end with the %-sign
    Data &B1111111111111110%
    Data &B1111111111111100%
    Data &B1111111111111000%
    Data &B1111111111110000%
    Data &B1111111111100000%
    Data &B1111111111000000%
    Data &B1111111110000000%
    Data &B1111111100000000%
    Data &B1111111000000000%
    Data &B1111110000000000%
    Data &B1111100000000000%
    Data &B1111000000000000%
    Data &B1110000000000000%
    Data &B1100000000000000%
    Data &B1000000000000000%

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    Um die LEDs ruhiger zu bekommen mußt du integrieren. Entweder mit einem Kondensator am ADC oder sofwareseitig mit einer Mittelwertbildung. Dadurch gehen aber evtl. Spitzenwerte verloren.
    Die Denkweise der meisten Menschen ist vergleichbar mit einer Sicht durch ein Strohhalm.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    @Carlos31:
    ... ich täte mir wünschen das der spitzenwert erhalten bleibt für ein paar sekunden , und das die leds ein bischen ruhiger werden ...
    Ruhiger wird die Anzeige schon einmal durch eine Pause in der DO-LOOP Schleife.

    Gruß Dirk

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    04.08.2007
    Ort
    Bregenz
    Alter
    41
    Beiträge
    72
    vielen dank für eure hilfe ,
    Mir fehlt es nur , wie ich das anstelle damit das maximal wert gespeichert bleibt für ein paar sekunden , ich benutze ein atmega 32 und kein 16 hatte mich vertippt.
    Bin von beruf Betriebselektriker also kein profiprogramierer,ich mache hobbiemässig meine erste versuche mit Bascom
    bin für jeden tip dankbar

    hab der code ein bischen aufgeräumt
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    
    Config Portc = Output
    Config Portd = Output
    Config Portb = Output
    Config Porta.0 = Input
    
    Dim Led_pos As Word
    Dim Bar_pattern As Word
    Dim T1 As Word
    Const Led_max = 16
    Const T1_fs = 325
    Const T1_step = 16
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Start Adc
    Do
    If Led_pos >= 15 Then
        Led_pos = 15
        End If
        If Led_pos <= 0 Then
        Led_pos = 0
        End If
         Bar_pattern = Lookup(led_pos , Bar_mode)
    
      Portd.7 = Bar_pattern.15
      Portd.6 = Bar_pattern.14
      Portd.5 = Bar_pattern.13
      Portd.4 = Bar_pattern.12
      Portd.3 = Bar_pattern.11
      Portd.2 = Bar_pattern.10
      Portd.1 = Bar_pattern.9
      Portd.0 = Bar_pattern.8
      Portc.0 = Bar_pattern.7
      Portc.1 = Bar_pattern.6
      Portc.2 = Bar_pattern.5
      Portc.3 = Bar_pattern.4
      Portc.4 = Bar_pattern.3
      Portc.5 = Bar_pattern.2
      Portc.6 = Bar_pattern.1
      Portc.7 = Bar_pattern.0
    T1 = Getadc(0) - 90
    Led_pos = T1_fs - T1
    Led_pos = Led_pos \ T1_step
    
    
           Loop
    Return
    
    
    Bar_mode:
    Data &B1111111111111111%
    Data &B1111111111111110%
    Data &B1111111111111100%
    Data &B1111111111111000%
    Data &B1111111111110000%
    Data &B1111111111100000%
    Data &B1111111111000000%
    Data &B1111111110000000%
    Data &B1111111100000000%
    Data &B1111111000000000%
    Data &B1111110000000000%
    Data &B1111100000000000%
    Data &B1111000000000000%
    Data &B1110000000000000%
    Data &B1100000000000000%
    Data &B0000000000000000%

Berechtigungen

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