Попытка модификации кода для ATTiny13 в схеме управления цифровым потенциометром
#1
Коллеги, некоторое время назад на сайте была опубликована статья по теме управления цифровым потенциометром DS1267 при помощи двух кнопок и проца ATTiny13:
http://2shemi.ru/tsifrovoj-knopochnyj-po...-gromkosti 

Пытаюсь повторить с тем, чтобы перед этим изменить частоту внутреннего генератора, влияющую на скорость изменения громкости звука. Автор публикации дал ссылку на прошивку, исходник и данные для изготовления платы (спасибо ему), но мне, как чайнику пока что, не понятно, каким образом и в каком месте возможно менять исходный код, приведенный в файле формата BAS:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "attiny13.dat"
$crystal = 9600000
Config Portb = &B11111010 : Portb = &B11100101

Rst Alias Portb.3
Dq Alias Portb.1
Clk Alias Portb.4
Splus Alias Pinb.0
Sminus Alias Pinb.2

$hwstack = 20
$swstack = 10
$framesize = 40
'********** Konfiguracja uC Koniec  ************

'******************  Zmienne *******************
'***********************************************
Dim N As Byte , Dane As Word
Dim Licz_sw(2) As Byte
Dim Glos As Byte
Dim Autosave As Byte
'*************  Zmienne Koniec  ****************

'************ Warunki Poczatkowe ***************
'***********************************************
N = 15
Readeeprom Glos , 1

Glos = Glos / 2                                            'te dwie linijki robi№ zawsze parzyst№ wartsc
Glos = Glos * 2                                            'na wypadek bledu odczytu

Clk = 0
Dane = 256 * Glos
Dane = Dane + Glos
Rst = 1

'*******  Warunki Poczatkowe Koniec  ***********

'**************  Petla glowna ******************
'***********************************************
Do
  If Rst = 1 Then                                          'wysylanie
    If Clk = 1 Then
      If N <> 255 Then
        Dq = Dane.n
        Decr N
      Else
        Rst = 0
        Dq = 0
        N = 15
      End If
    End If
    Toggle Clk
  Else
    Waitms 5
    '******************************** przyciski
    If Splus = 0 Then
      Incr Licz_sw(1)
      If Licz_sw(1) = 10 Then
        Licz_sw(1) = 0
        If Glos <= 253 Then
          Autosave = 250
          Glos = Glos + 2
          Clk = 0
          Dane = 256 * Glos
          Dane = Dane + Glos
          Rst = 1
          Waitms 50
        End If
      End If
    Else
      Licz_sw(1) = 0
    End If

    If Sminus = 0 Then
      Incr Licz_sw(2)
      If Licz_sw(2) = 10 Then
        Licz_sw(2) = 0
        If Glos >= 2 Then
          Autosave = 250
          Glos = Glos - 2
          Clk = 0
          Dane = 256 * Glos
          Dane = Dane + Glos
          Rst = 1
          Waitms 50
        End If
      End If
    Else
      Licz_sw(2) = 0
    End If
    '******************************** przyciski koniec

    If Autosave > 0 Then
      Decr Autosave
      If Autosave = 0 Then
        Writeeeprom Glos , 1
      End If
    End If

  End If
Loop
End
'************ Petla glowna Koniec ************** 


Если я изменю цифру в строке: $crystal = 9600000 на более низкую, не возникнет ли проблем? 

И второй вопрос: если попытаться применить вместо DS1267 потенциометр PGA2310, у которого изменения градаций громкости происходят при проходе сигнала через "0", что избавляет от щелчков, нужны ли будут корректировки в коде?

Примечание: язык исходника - польский
#2
вот нет пока)) хоть начал понимать, что это не машинный код) Вижу, что не похоже на исходник в формате c++, а насчет программы создания дампа в пособиях учебных еще не наткнулся к сожалению, и тем более - как из нее откомпилировать или оттранслировать, какими инструментами, код для прошивки) Вот только начал из аналоговой электросферы и рассыпухи постигать эти изумительные штуки, заменяющие сотни отдельных элементов.. Спасибо, что подсказали. Значит надо ковырять насчет программы создания дампа, ибо обратного декомпилирования из HEX- файла (который тоже есть) не может быть и речи)
#3
оооо-о! как у вас тут всё запущено, товарищ ефрейтор - сказал бы генерал, увидевший окурок, лежащий прямо рядом с тумбочкой.. - чей окурок!!? - ни чей, товарищ генерал! Можете курить!!

короче, нашел энное кличество инфы по дампам: "Вы можете использовать WinDbg.exe" и т.д.. и ессно жизни-то без дампов нет конечно, но если кто что-то подскажет дополнительное талантливое, благодаря чему можно оптимально поразруливать задачку, пред которой стою, склонив голову, то благодать с моих чайницких таинств и закромов снизойдет пренепременно)

и тут вопрос простой: что ж делать-то с этим файлом конкретно таким образом, чтобы можно было перепрошивать в последствии микропроц под разные скорости изменения громкости. Вот по шагам! Шаг первый! (кружка мм.. рекламы не допустим), шаг второй! и т.д. мм.. три моих разнокалиберных паяльника ржут на меня, но показываю им кулак помаленьку))
#4
Эта программа написана на языке BASIC. Используйте BASCOM-AVR для работы.

А ещё лучше разобрать алгоритм описанный в данном коде и перевести его на Си 1
#5
Вот так рассеивается туман!) Спасибо огромное за пояснение и возможность понять направление, в сторону которого предпринимать усилия! Если еще поможете каким-то действием победить эту историю, готов возместить дарами, имеющимися у металлообработчика, цифроаналогового электронщика и прочего химика-затейника) Ну и конечно же будет не плохо выложить сюда на форум этот результат, чтобы многие, кому тема интересна, могли воплощать в жизнь свои придумки)
#6
(13-08-2023, 15:33)Spring777 : Если я изменю цифру в строке: $crystal = 9600000 на более низкую, не возникнет ли проблем? 
- это частота работы мк, сменить без проблем можно, если рабочая частота мк в коде будет соответствовать заложенной в железе.
(13-08-2023, 15:33)Spring777 : DS1267 потенциометр PGA2310
- тут надо брать даташиты обоих и сверять протоколы управления.
(13-08-2023, 15:33)Spring777 : Пытаюсь повторить с тем, чтобы перед этим изменить частоту внутреннего генератора, влияющую на скорость изменения громкости звука.
- это зря, лучше изменить скорость обработки нажатой кнопки, попробуйте поиграть с задержками например с этими "Waitms 50". Но перед всем, перед этим вот, неплохо бы установить BASCOM-AVR и попробовать скомпилировать тот код, что уже есть, да и прошить баскомом можно, вроде как 1.
#7
Nolpofaze, спасибище за комменты и инструкции! Погружаюсь в процесс. Ставлю BASCOM-AVR и далее к светлому будущему!)
#8
Ну что ж, отчитываюсь за проделанную работу) Установил прогу BASCOM-AVR, поизучал всё это дело, но оказалось достаточно имеющихся файлов HEX и BIN, чтобы прошить ATtiny13 и всё заработало, как и положено, причем с вполне подходящей скоростью изменения громкости. Но!
Слышны легкие щелчки в моменты переключения внутренних резисторов DS1267.
Что только я не делал, чтобы подавить эти щелчки: и манипуляции с землями, и запитывал потенциометр с процессором с полной гальванической развязкой от усилителя и плеера, источника звука и т.д. Ничего не помогло. На всякий случай я даже второй раз заново собрал эту схему регулятора - всё то же самое.

https://yandex.ru/images/search?img_url=...0громкости

Отсюда вывод: нужно применять в качестве регулятора громкости электронный потенциометр, имеющий двуполярное питание и функцию переключения внутренних резисторов в моменты перехода звуковых колебаний через ноль. Таким требованиям удовлетворяют микросхемы PGA2310 и PGA2311. Но вот управление для них осуществляется по другому протоколу, а именно последовательного интерфейса SPI. Схема управления приводится в дата-шите этих 16-ногих жуков. К счастью пара штук PGA2310 мне недавно пришли из китая, так как заказывал вместе с DS1267. Но вот к несчастью программированием пока не настолько владею, чтобы написать корректный код для этого дела. То есть нужно при помощи двух кнопок управлять громкостью - одна на увеличение, другая на уменьшение громкости. Ну и проц повидимому нужен с бОльшим количеством ног, например ATtiny2313.

В связи с этим, буду премного благодарен, ежли кто сможет подсобить в этом созидательном процессе.