Ogłoszenie

Collapse
No announcement yet.

Preamp DIY PGA2311

Collapse
X
 
  • Filtr
  • Czas
  • Pokaż
Clear All
new posts

    Preamp DIY PGA2311

    Witam wszystkich mam problem z napisaniem kodu w Bascom.
    Chodzi o przed wzmacniacz stereofoniczny na układzie PGA2311 z zegarem i data na PCF8583 oraz sterowaniem chłodzenia końcówek mocy na DS18b20.
    Całe sterowanie menu i wybieranie danej funkcji chce zrobić na enkoderze obrotowym.
    Menu chciałem tylko do ustawienia zegarka i daty,wartość przy jakiej uruchamia się wiatrak na końcówce mocy jest ustawiona na stale czyli powyżej 30 stopni jest na ON a gaśnie przy 20 stopniach.
    Podczas działania przedwzmacniacza na wyświetlaczu chciał bym ze by była wyświetlana godzina+data w monecie zwiększenia lub zmniejszenia głośności stan potencjometru przez ok 3-5sek
    Programy mam napisane do wszystkich urządzeń podłączonych do Atmegi8 ale nie wiem jak je połączyć w całość niestety moja wiedza w programowaniu jest niewystarczająca do ogarnięcia tego tematu może ktoś z forumowiczów bardziej doświadczony i zorientowany w temacie będzie mógł mi pomoc w napisaniu programu do mojego preampa.
    Napisałem taki wstępny kod w Bascomie ale nie działa tak jak powinien
    to znaczy nie mogę zrobić termostatu ze by działał cały czas w moim programie działa on tak ze dopiero po wejściu do programu TERMOMETR zaczyna on działać ale po przejściu do innego programu z menu przestaje
    Co do zegarka na PCF8583 dodałem jeszcze 5 przycisków do ustawień daty i godziny nie wiem jak przerobić to ustawianie godziny i daty abym mógł sterować enkoderem i switchem z enkodera
    Do PGA2311 jeszcze nie doszedłem ponieważ mam problem z pierwsza częścią kodu może ktoś z bardziej doświadczonych forumowiczów może coś mi pomoc
    Dodaje kod
    ENKODER_WERSJA_NA_INT0_INT1+MENU_NA_SELECT_CASE.rar

    #2
    Na tym forum jest malo programistow bascom-a, popytaj na elektrodzie. Choc tam strasznie wywalaja posty wiec lepiej poszukac po starzu kogos kto ma doswiadczenie w mikroprocesorach i probowac zagadac na PW.


    Zamieszczone przez kulamario Zobacz posta
    na stale czyli powyżej 30 stopni jest na ON a gaśnie przy 20 stopniach.
    Idiotyczne zalozenie!! Widze ze i z podstawami masz problemy. Typowo w dom,u jest wiecej niz 20 stopni a wiec wentylator nigdy ci sie nie wylaczy. A 30 stopni to coz za grozna temeratura zeby od razu uruchamiac wentylator? Ja bym zrobil gorna >60 stopni a moze nawet 80 a dolna ok 50. Zreszta wszystko zalezy od wielkosci radiatora i sily wentylatora. W domowych wzmacniaczach o mocy do ok 2x100W nie ma sensu stosowac wentylatorow.

    Skomentuj


      #3
      Witam
      Na elektrodzie tez dałem temat w związku z tym projektem jak narzazie bez odzewu
      Co do zaczepek na PW to ja tak nie robię ale chyba zacznę
      Co do termostatu to nie jest powiedziane ze tak będzie na stale jak bym ustawił np załącz przy 70 wyłącz przy 40 to jak bym miał to sprawdzić?
      co zapalniczka lub papierosem DS-a bym rozgrzewał bo nie wiem jak ty byś poradził sobie z uzyskaniem 70 czy 80 stopni
      A tak na marginesie to chłodzenie ma być w formie bajeru
      Nie wierze ze na takim forum jak to nikt nie zajmuje się programowaniem lub nie miał do czynienia z cyfrowymi potencjometrami
      Czekam na jakieś rady jak napisać poprawnie program do mojego preampa

      Skomentuj


        #4
        Odpuść sobie to aktywne chłodzenie. Jak budowałem pierwszy wzmacniacz to też sie na to napaliłem a w praktyce sie okazło zupełnie zbędne.. Jak sie wzmacnaicz za abrdzo grzeje to lepiej dać większe radiatory.

        Skomentuj


          #5
          Zamieszczone przez kulamario Zobacz posta
          zekam na jakieś rady jak napisać poprawnie program do mojego preampa
          Prosto.
          Uruchamiasz timer na przepełnienie np 1s (temp przecież nie musi być mierzona cały czas.)
          W przerwaniu od timera szczytujesz temperaturę z ds-a do globalnej zmiennej "temp".
          W pętli głównej spr. czy temp jest mniejsza /większa od ustalonego progu i włączasz/ wyłączasz wentylator czy co tam chcesz.

          Wentylator sobie odpuść no chyba że to jakiś kloc z kilowatami mocy
          Ale zab. termiczne wyłączające wzmacniacz po osiągnięciu zadanej temp. się przydaje

          U mnie zrobiłem tak że po przekroczeniu 75 stopni moc jest ograniczana do 25W a jak to nie pomoże i dalej temp. wzrasta wzmacniacza jest wyłączany.

          Skomentuj


            #6
            Zamieszczone przez kulamario Zobacz posta
            Co do termostatu to nie jest powiedziane ze tak będzie na stale jak bym ustawił np załącz przy 70 wyłącz przy 40 to jak bym miał to sprawdzić?
            co zapalniczka lub papierosem DS-a bym rozgrzewał bo nie wiem jak ty byś poradził sobie z uzyskaniem 70 czy 80 stopni
            No jak to jak?? Przeciez wzmacniacz sie nagrzewa a skoro ci sie nie nagrzewa do takiej temperatury to po co ci aktywne chlodzenie?

            Skomentuj


              #7
              Teoretycznie PGA2311 jest proste do sterowania - podajesz stan wysoki na odpowiedni pin i masz głośniej/ciszej. Problem leży w tym, żeby go odpowiednio zaaplikować. Potrzeba stabilizowanego źródła, jak podepniesz do zwykłego to go możesz usmażyć - zresztą ja też tak prawie usmażyłem. Enkoder musisz odfiltrować kondensatorami 100nf, żeby nie pojawiały się fałszywe stany. Poza tym nie wiem czy ci się to zmieści w bascomie i 8kb pamięci. Coś mi się wydaje, że będziesz zmuszony zastosować przerwania w programie.

              Skomentuj


                #8
                Zmuszony? Przecież przerwania to najlepsze co może być w procesorach...

                PGA2311 jest sterowany poprzez I2C więc tłumaczenie tego "dajesz na pin stan wysoki i masz głośniej/ciszej" to co najmniej niepoważne, wszystko jest w nocie układu dokładnie opisane.

                I co ma znaczyć wg. ciebie stabilizowane źródło a zwykłe w którym niby ten układ się usmaży?

                Skomentuj


                  #9
                  Zamieszczone przez .3lite Zobacz posta
                  PGA2311 jest sterowany poprzez I2C więc tłumaczenie tego "dajesz na pin stan wysoki i masz głośniej/ciszej" to co najmniej niepoważne, wszystko jest w nocie układu dokładnie opisane.
                  PGA2311, PGA2310, PGA4311 i wszystkie pochodne są sterowane przez coś podobnego do SPI, choć oni nazywają to: 3-wire serial control interface.
                  W zasadzie sterowanie można zrobić na jednej pętli FOR.
                  Asustor AS-5002T z MPD + konwerter USB .3lite + DAC PCM1704 by olog + autorskie PRE z PVC + Monobloki Ravlus Amplifilo + kolumny Tatami Audio Hudba

                  Skomentuj


                    #10
                    Skojarzyłem z innym układem ale to jest praktycznie to samo, SPI tutaj będzie minimalnie prostsze do implementacji.

                    Jak na razie gdybać można ale kolega kulamario tego nie zrobi tylko oczekuje aż ktoś za niego to wykona.

                    Skomentuj


                      #11
                      Panowie chyba zbaczamy troszkę z tematu
                      Co do kodu do PGA2311 mam napisany
                      Nie oczekuje az ktos napisze licze na wzkazowki jak to wszystko polaczyc w calosc
                      co do kodu prosze

                      Set Portd.7


                      Dim Vol As Long , Mute_stat As Long , A As Bit , I As Integer , Db As Single
                      Vol = 0
                      Mute_stat = 0
                      A = 0
                      I = 100

                      Cls
                      Vol = 257 * I
                      Db = 255 - I
                      Db = Db * 0.5
                      Db = 31.5 - Db
                      Lcd "Volume: " ; Db ; " dB"

                      Do
                      If Pinc.5 = 1 Then Gosub Mute
                      If Pinc.4 = 1 Then Gosub Vol_up
                      If Pinc.3 = 1 Then Gosub Vol_dn
                      Loop


                      Mute:
                      If A = 0 Then
                      Do
                      Cls
                      Lcd " MUTE ON "
                      Mute_stat = 0
                      Reset Portd.7
                      Shiftout Portd.6 , Portd.5 , Mute_stat , 1
                      Waitms 500
                      Set Portd.7
                      Cls
                      Waitms 500
                      Loop Until Pinc.5 = 1
                      A = 1
                      Else
                      Cls
                      Lcd " MUTE OFF "
                      Mute_stat = I * 257
                      Reset Portd.7
                      Shiftout Portd.6 , Portd.5 , Mute_stat , 1
                      Wait 1
                      Set Portd.7

                      Cls
                      Db = 255 - I
                      Db = Db * 0.5
                      Db = 31.5 - Db
                      Lcd "Volume: " ; Db ; " dB"
                      A = 0
                      End If
                      Return

                      Vol_up:
                      Cls
                      If I < 255 Then
                      I = I + 1
                      Vol = 257 * I
                      Db = 255 - I
                      Db = Db * 0.5
                      Db = 31.5 - Db
                      Lcd "Volume: " ; Db ; " dB"
                      Reset Portd.7
                      Shiftout Portd.6 , Portd.5 , Vol , 1
                      Waitms 100
                      Set Portd.7

                      Else
                      Lcd " Max. Volume "
                      Wait 1
                      Cls
                      Lcd "Volume: " ; Db ; " dB"
                      End If
                      Return

                      Vol_dn:
                      Cls
                      If I > 0 Then
                      I = I - 1
                      Vol = 257 * I
                      Db = 255 - I
                      Db = Db * 0.5
                      Db = 31.5 - Db
                      Lcd "Volume: " ; Db ; " dB"
                      Reset Portd.7
                      Shiftout Portd.6 , Portd.5 , Vol , 1
                      Waitms 100
                      Set Portd.7

                      Else
                      Lcd " Min. Volume "
                      Wait 1
                      Cls
                      Lcd "Volume: " ; Db ; " dB"
                      End If

                      Return


                      End

                      Skomentuj


                        #12
                        Skorzystaj z mojego kodu, co prawda jest to do sterownika PGA2310 na ATMega8, ale to nie ma znaczenia. Kod pisałem dobre kilka lat temu, więc żeby się nikt nie czepiał, że coś jest źle .

                        [code]
                        $regfile = "m8def.dat"
                        $crystal = 16000000

                        '##########Konfiguracja

                        Config Pind.1 = Input 'enkoder
                        Set Portd.1
                        Config Pind.2 = Input 'enkoder
                        Set Portd.2
                        Config Portd.7 = Output 'podswietlenie
                        Reset Portd.7
                        Config Portc.1 = Output 'wystawia stan "mute" dla pga
                        Set Portc.1
                        Config Pinc.0 = Input 'uswitch mute
                        Set Portc.0
                        Config Pind.3 = Input 'gniazdo sluchawkowe
                        Set Portd.3

                        Enable Interrupts

                        Config Int0 = Falling 'konfiguracja przerwan
                        On Int0 Enkoder
                        Enable Int0
                        Config Int1 = Falling
                        On Int1 Gniazdo
                        Enable Int1
                        Config Timer1 = Timer , Prescale = 1024 'konfiguracja timera
                        On Timer1 Podsw
                        Enable Timer1
                        Load Timer1 , 62500
                        Stop Timer1

                        Deflcdchar 0 , 00 , 14 , 31 , 31 , 31 , 14 , 00 , 00
                        Deflcdchar 1 , 2 , 6 , 14 , 30 , 14 , 6 , 2 , 00

                        Dim Vol As Single 'zmienne
                        Dim L As Byte
                        Dim R As Byte
                        Dim C As Byte
                        Dim Flaga As Bit
                        Dim Flaga2 As Bit
                        Flaga = 1
                        Flaga2 = 1
                        L = 7
                        R = 7
                        Gosub Spio
                        Gosub Podsw : Portd.7 = 1 'podswietlenie lcd na starcie
                        Cls

                        '##########Petla glowna

                        Do
                        If Pind.3 = 1 Then
                        Portc.1 = 0
                        Flaga2 = 0
                        End If
                        If Flaga = 1 Then
                        Vol = 255 - L 'obliczanie poziomu glosnosci w "dB"
                        Vol = Vol / 2
                        Vol = 31.5 - Vol
                        Debounce Pinc.0 , 0 , Muteon , Sub
                        Cursor Off : Upperline : Lcd "Volume: " ; Vol ; " dB " 'wyswietlanie info
                        C = L / 16
                        Locate 2 , C
                        Lcd Chr(0) ; " "
                        Locate 2 , 16
                        Lcd Chr(1)
                        End If
                        If Flaga = 0 Then
                        If Pind.2 = 0 Then
                        Gosub Podsw : Portd.7 = 1
                        End If
                        Debounce Pinc.0 , 0 , Muteoff , Sub
                        Cursor Off : Upperline : Lcd "Volume: Mute "
                        End If
                        Loop

                        '#############Podprogramy

                        Enkoder: 'podprogram dla enkodera
                        Gosub Podsw : Portd.7 = 1
                        If Pind.1 = 0 Then
                        Incr L
                        Incr R
                        Gosub Spio
                        If L = 0 Then : L = 255 : End If
                        If R = 0 Then : R = 255 : End If
                        Else
                        Decr L
                        Decr R
                        Gosub Spio
                        If L = 0 Then : L = 1 : End If
                        If R = 0 Then : R = 1 : End If
                        End If
                        Return
                        Spio: 'podprogram wysylajacy zmienna do pga
                        Spiinit
                        Spiout L , 1
                        Spiout R , 1
                        Return
                        Podsw: 'podprogram odliczajacy ~4s do wygasniecia podswietlenia lcd
                        Load Timer1 , 62500
                        Start Timer1
                        Portd.7 = 0
                        Return
                        Gniazdo:
                        Flaga2 = 1
                        If Flaga = 0 Then
                        Portc.1 = 0
                        Else
                        Portc.1 = 1
                        End If
                        L = 7
                        R = 7
                        Gosub Spio
                        Return
                        Muteon:
                        Disable Int0
                        Flaga = 0
                        Portc.1 = 0
                        Gosub Podsw : Portd.7 = 1
                        Return
                        Muteoff:
                        If Flaga2 = 0 Then
                        Portc.1 = 0
                        Else
                        Portc.1 = 1
                        End If
                        Enable Int0
                        Flaga = 1
                        Gosub Podsw : Portd.7 = 1
                        Return
                        [/code]

                        Skomentuj


                          #13
                          Dziękuje wszystkim za pomoc preamp już skończony
                          http://www.youtube.com/watch?v=x3vw07xWtek

                          Skomentuj

                          Czaruję...
                          X