Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Analizator widma akustycznego na LCD 128x64 znaki listing

10 Wrz 2007 16:40 2095 3
  • Poziom 24  
    Szukam dokumentacji analizatorów widma akustycznych na wyświetlaczach lcd. Dziekuje i pozdrawiam:)
  • Poziom 19  
    Witam !

    Jest nieżle opisane takie urządzenie w jednym z numerów Elektroniki praktycznej

    9/2006

    Pozdrawiam
  • Poziom 24  
    Tak właśnie ściągnąłem dokumentacje tego całego zestawu. Jedynie nie podoba mi się wyświetlacz, który został zastosowany :) Znalazłem taki LCD graficzny http://www.allegro.pl/item240982250_nowe_lcd_128x64_c_78x70mm_white_blue_tlo_led_.html ale jest inny sterownik LCD wiec musze pisać program od nowa. Czy jest ktoś mi w stanie pomóc przerobić ten program na ten właśnie LCD??
  • Poziom 24  
    Znalazłem kod źródłowy :) Więc co muszę zmienić, aby go uruchomić na LCD z allegro?
    Code:

    'Analizator widma z wyswietlaczem graficznym
    'Marcin Wiązania
    'marcin@wiazania@ep.com.pl

    $prog &HFF , &HEF , &HD9 , &H00                             ' generated. Take care that the chip supports all fuse bytes.
    $hwstack = 80                                               'ustawienie stosu
    $swstack = 80                                               'ustawienie stosu
    $framesize = 80                                             'ustawienie stosu
    $regfile = "m8def.dat"                                      'typ mikrokontrolera
    $crystal = 16000000                                         'czestotliwosc zegara

    $lib "glcd.lib"                                             'zalaczenie biblioteki obslugujacej wyswietlacz z kontrolerem wyswietlacza

    Config Graphlcd = 128 * 64 , Dataport = Portd , Controlport = Portb , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8       'konfiguracja graficznego LCD
    Config Adc = Single , Prescaler = 2 , Reference = Avcc      'konfiguracja przetwornika A/C
    Config Portc.2 = Output                                     'konfiguracja portow
    Config Portc.3 = Output
    Config Portc.4 = Output
    Config Portc.5 = Output

    Declare Sub Pomiar                                          'podprogram pomiaru

    Dim I As Byte                                               'zmienne
    Dim K As Byte
    Dim P As Byte
    Dim F(7) As Byte
    Dim Kol As Byte
    Dim Wart_ac As Word                                         'wartosc odczytana z przetwornika
    Dim Temp1 As Byte

    Res Alias Portc.2                                           'przypisanie aliasow do linii portow
    M_a Alias Portc.3
    M_b Alias Portc.4
    M_c Alias Portc.5

    Reset Res                                                   'wartosci poczatkowe zmiennych
    Cursor Off , Noblink                                        'inicjalizacja LCD
    Cls

    Start Adc                                                   'wlaczenie przetwornika
    Line(0 , 4) -(0 , 54) , 1                                   'instrukcje rysowania skali
    Line(0 , 54) -(3 , 54) , 1
    Line(0 , 44) -(3 , 44) , 1
    Line(0 , 34) -(3 , 34) , 1
    Line(0 , 24) -(3 , 24) , 1
    Line(0 , 14) -(3 , 14) , 1
    Line(0 , 4) -(3 , 4) , 1
    Line(127 , 4) -(127 , 54) , 1
    Line(127 , 54) -(124 , 54) , 1
    Line(127 , 44) -(124 , 44) , 1
    Line(127 , 34) -(124 , 34) , 1
    Line(127 , 24) -(124 , 24) , 1
    Line(127 , 14) -(124 , 14) , 1
    Line(127 , 4) -(124 , 4) , 1
    Line(4 , 63) -(124 , 63) , 1
    Line(4 , 63) -(4 , 62) , 1
    Line(24 , 63) -(24 , 62) , 1
    Line(44 , 63) -(44 , 62) , 1
    Line(64 , 63) -(64 , 62) , 1
    Line(84 , 63) -(84 , 62) , 1
    Line(104 , 63) -(104 , 62) , 1
    Line(124 , 63) -(124 , 62) , 1

    Do                                                          'program glowny
      Set Res                                                   'zerowanie detektorow
      nop                                                       'pusta instrukcja
      nop                                                       'pusta instrukcja
      Reset Res                                                 'odblokowanie zerowania
      Delay                                                     'opoznienie

      Reset M_a                                                 'obsluga kanalu 1 (000)
      Reset M_b
      Reset M_c
      K = 1                                                     'kanal 1
      Call Pomiar                                               'wywolanie pomiaru
      For I = 54 To 4 Step -1                                   'petla rysowania slupka o dlugosci zaleznej od wartosci odczytanej z A/C
        If I >= F(k) Then                                       'jesli wartosc I wieksza lub rowna, to
          Kol = 1                                               'zapis wartosci 1 do zmiennej kol (piksele beda wyswietlane)
        Else                                                    'w przeciwnym razie
          Kol = 0                                               'zapis wartosci 0 do zmiennej kol (piksele beda wymazywane)
        End If
        Line(6 , I) -(21 , I) , Kol                             'wyswietlenie lub kasowanie w zaleznosci od kol linii slupka
      Next I                                                    'zwiekszenie o 1 wartosci I

      Set M_a                                                   'obsluga kanalu 2 (001)
      Reset M_b
      Reset M_c
      K = 2                                                     'kanal 2
      Call Pomiar                                               'wywolanie pomiaru
      For I = 54 To 4 Step -1                                   'petla rysowania slupka o dlugosci zaleznej od wartosci odczytanej z A/C
        If I >= F(k) Then                                       'jesli wartosc I wieksza lub rowna, to
          Kol = 1                                               'zapis wartosci 1 do zmiennej kol (piksele beda wyswietlane)
        Else                                                    'w przeciwnym razie
          Kol = 0                                               'zapis wartosci 0 do zmiennej kol (piksele beda wymazywane)
        End If
        Line(26 , I) -(41 , I) , Kol                            'wyswietlenie linii slupka
      Next I                                                    'zwiekszenie o 1 wartosci I

      Reset M_a                                                 'obsluga kanalu 3 (010)
      Set M_b
      Reset M_c
      K = 3                                                     'kanal 3
      Call Pomiar                                               'wywolanie pomiaru
      For I = 54 To 4 Step -1                                   'petla rysowania slupka o dlugosci zaleznej od wartosci odczytanej z A/C
        If I >= F(k) Then                                       'jesli wartosc I wieksza lub rowna, to
          Kol = 1                                               'zapis wartosci 1 do zmiennej kol (piksele beda wyswietlane)
        Else                                                    'w przeciwnym razie
          Kol = 0                                               'zapis wartosci 0 do zmiennej kol (piksele beda wymazywane)
        End If
        Line(46 , I) -(61 , I) , Kol                            'wyswietlenie linii slupka
      Next I                                                    'zwiekszenie o 1 wartosci I

      Set M_a                                                   'obsluga kanalu 4 (011)
      Set M_b
      Reset M_c
      K = 4                                                     'kanal 4
      Call Pomiar                                               'wywolanie pomiaru
      For I = 54 To 4 Step -1                                   'petla rysowania slupka o dlugosci zaleznej od wartosci odczytanej z A/C
        If I >= F(k) Then                                       'jesli wartosc I wieksza lub rowna, to
          Kol = 1                                               'zapis wartosci 1 do zmiennej kol (piksele beda wyswietlane)
        Else                                                    'w przeciwnym razie
          Kol = 0                                               'zapis wartosci 0 do zmiennej kol (piksele beda wymazywane)
        End If
        Line(66 , I) -(81 , I) , Kol                            'wyswietlenie linii slupka
      Next I                                                    'zwiekszenie o 1 wartosci I

      Reset M_a                                                 'obsluga kanalu 5 (100)
      Reset M_b
      Set M_c
      K = 5                                                     'kanal 5
      Call Pomiar                                               'wywolanie pomiaru
      For I = 54 To 4 Step -1                                   'petla rysowania slupka o dlugosci zaleznej od wartosci odczytanej z A/C
        If I >= F(k) Then                                       'jesli wartosc I wieksza lub rowna, to
          Kol = 1                                               'zapis wartosci 1 do zmiennej kol (piksele beda wyswietlane)
        Else                                                    'w przeciwnym razie
          Kol = 0                                               'zapis wartosci 0 do zmiennej kol (piksele beda wymazywane)
        End If
        Line(86 , I) -(101 , I) , Kol                           'wyswietlenie linii slupka
      Next I                                                    'zwiekszenie o 1 wartosci I

      Set M_a                                                   'obsluga kanalu 6 (101)
      Reset M_b
      Set M_c
      K = 6                                                     'kanal 6
      Call Pomiar                                               'wywolanie pomiaru
      For I = 54 To 4 Step -1                                   'petla rysowania slupka o dlugosci zaleznej od wartosci odczytanej z A/C
        If I >= F(k) Then                                       'jesli wartosc I wieksza lub rowna, to
          Kol = 1                                               'zapis wartosci 1 do zmiennej kol (piksele beda wyswietlane)
        Else                                                    'w przeciwnym razie
          Kol = 0                                               'zapis wartosci 0 do zmiennej kol (piksele beda wymazywane)
        End If
        Line(106 , I) -(121 , I) , Kol                          'wyswietlenie linii slupka
      Next I                                                    'zwiekszenie o 1 wartosci I

      Reset M_a                                                 'obsluga paska nagrywania (110)
      Set M_b
      Set M_c
      K = 7                                                     'obsluga paska nagrywania
      Wart_ac = Getadc(0)                                       'odczyt wartosc z przetwornika
      Wart_ac = Wart_ac / 4                                     'przeliczenie odczytanej wartosci
      Temp1 = Low(wart_ac)                                      'przeliczenie odczytanej wartosci
      If Temp1 > 53 Then                                        'jesli wartosc wieksza od 53 to
      Temp1 = Temp1 - 50                                        'odjecie wartosci 50
      Else                                                      'w przeciwnym razie
      Temp1 = 4                                                 'przypisanie wartosci 4
      End If
      If Temp1 > 124 Then                                       'jesli wartosc > od 124
        Temp1 = 124                                             'to przypisanie wartosci 124
      End If
      Line(4 , 58) -(124 , 58) , 0                              'wymazanie poziomego paska
      Line(4 , 59) -(124 , 59) , 0                              'wymazanie poziomego paska
      Line(4 , 60) -(124 , 60) , 0                              'wymazanie poziomego paska
      Line(4 , 58) -(temp1 , 58) , 1                            'wyswietlenie poziomego paska
      Line(4 , 59) -(temp1 , 59) , 1                            'wyswietlenie poziomego paska
      Line(4 , 60) -(temp1 , 60) , 1                            'wyswietlenie poziomego paska
    Loop                                                        'koniec petli glownek
    End                                                         'koniec programu

    Sub Pomiar                                                  'procedura pomiaru
      Delay                                                     'opoznienie
      Wart_ac = Getadc(0)                                       'odczyt wartosci z A/C
      Wart_ac = Wart_ac / 10                                    'podzielenie wartosci przez 10
      Temp1 = Low(wart_ac)                                      'zapis do zmiennej Temp1 mniej znaczacego bajtu zmiennej wart_ac
      If Temp1 > 50 Then                                        'jesli wartosc wieksza od 50 to
        Temp1 = 50                                              'zapis do temp1 wartosci 50
      End If
      F(k) = 54 - Temp1                                         'obliczenie wielkosci slupka
      If F(k) < 4 Then                                          'jesli wartosc slupka mniejsza niz 4 to
        F(k) = 4                                                'zapis wartosci 4
      End If
    End Sub                                                     'koniec podprogramu