logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[atmega8][bascom] Pomiar sygnału audio i VU meter

SQ9MYX 21 Wrz 2010 22:31 3976 5
  • #1 8536413
    SQ9MYX
    Poziom 23  
    Witam,
    Znalazłem w sieci program do prezentacji wartości napięcia na wejściach ADC uC,
    Podłączyłem sygnał audio przez LM358 o wzmocnieniu około 30 razy i niestety pomiar nie jest zbyt dobry... już nie chodzi mi o pomiar dokładnego napięcia tylko że linijka z LCD wcale nie działa w rytm muzyki tylko jakoś tak dziwnie...
    załączam program w bascomie
    domyślam się że trzeba jakiś filtr dolnoprzepustowy zastosować albo coś.. nie wiem
    
    Do
      W = Getadc(1)
      Volt = W * 5
      Cols = Volt / 15
      Locate 1 , 1
      Lcd "poziom sygnalu"
      Locate 2 , 1
      For I = 1 To Cols
       Select Case I
       Case 1 : Lcd Chr(3)
    
       Case 16 : Lcd Chr(4)
       Case Else : Lcd Chr(0)
      End Select
      Next I
    
      Cols_d = Cols Mod 9999
      If Cols_d > 0 Then
      Lcd Chr(5)
      Cols = Cols + 2
      Else
      Cols = Cols + 1
     End If
    
      For I = Cols To 16
      Select Case I
       Case 1 : Lcd Chr(2)
    
    
       Case Else : Lcd Chr(32)
       End Select
       Next I
       Waitms 20
    loop
  • #2 8539046
    arktik1
    Poziom 27  
    Jeśli to jest twój cały kod ,to nic dziwnego że nie działa.
    Gdzie deklaracje zmiennych i inne??
  • #3 8540568
    SQ9MYX
    Poziom 23  
    Oczywiście że nie cały... Przepraszam zapomniałem dodać deklaracji zmiennych i przetwornika ADC a to przez to że jest to część większego programu...

    deklaracje mam takie.
    Dim W As Word , Perc As Word , Volt As Word ,
     Channel As Byte , I As Byte , Cols As Byte , Cols_d As Byte 


    Myślę czy nie zastosować kondensatora do masy na wejściu przetwornika, powinno to troszkę "wygładzić" napięcie wejściowe
  • #4 8543013
    arktik1
    Poziom 27  
    Oczywiście że musisz dać kondensator do wejścia adc, słupek wtedy będzie ładnie pływał.
    Ja przy takim projekcie między LM358 a ADC dałem kondensator 0,3uF i diodę.
    Podaj jeszcze Deflcdchar, wrzucę do symulatora i zobaczę jak to działa.
  • #5 8544251
    SQ9MYX
    Poziom 23  
    Gdzieś na necie widziałem układ zbudowany tylko z diody prostującej sygnał audio plus równolegle do adc kondensator 1uf i rezystor 330k jak będe miał chwilkę to zbuduje taki układ bez LM'a, chociaż sygnał na wejsciu liniowym na pewno nie osiągnie około 5V tak więc chyba LM będzie niezbędny.
    konfiguracja znaków
    
    Deflcdchar 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1                
    Deflcdchar 2 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16        
    Deflcdchar 3 , 16 , 16 , 31 , 31 , 31 , 31 , 16 , 16        
    Deflcdchar 4 , 1 , 1 , 31 , 31 , 31 , 31 , 1 , 1            
    Deflcdchar 5 , 32 , 32 , 28 , 28 , 28 , 28 , 32 , 32 

    def1 i def5 chyba nie są używane i zostały ze starej wersji programu
  • #6 8546900
    arktik1
    Poziom 27  
    Przede wszystkim zrób tak:
    
    Volt = Getadc(1)
    Cols = Volt / 64
    

    Potem wyświetl sobie maksymalne napięcie jakie dostajesz z LM na ADC, czyli:
    
    Locate 1 , 1
      Lcd Volt
    

    Max ADC to 1024.
    Jeśli chcesz by wskaźnik był w pozycji max przy wartości ADC 1024 to musisz podzielić Volt przez 64.
    To proste:
    MAX ADC = 1024
    MAX pozycja na wyświetlaczu = 16
    Czyli 1024 dzielisz na 16 i to równa się 64
    Jeśli wpiszesz
    
    Cols = Volt / 64
    

    to wskaźnik wypełni się do końca dopiero przy wartości ADC 1024.
REKLAMA