Enkoder Obrotowy Mirley'a - wersja rozbudowana do emulacji naciśnięcia klawisza głośności na klawiaturze PC - drobny problem


Witam Wszystkich,

jako że buduję do samochodu carPC i potrzebuję jakiegoś układu z enkoderem do regulacji głośności w komputerze wpinanego do złącza USB, postanowiłem zrobić to następująco:

1.kupiłem za kilkanaście złoty klawiaturę USB z dodatkowymi klawiszami z góry (m. in. do regulacji głośności)
2. zaprojektowałem PCB do enkodera który zbudował kiedyś mirley lecz dodatkowo wyposażyłem go w układ CMOS 4066 który ma w swej strukturze 4 przekaźniki scalone. Schemat zamieściłem poniżej
3. układ ten podpiąłem do elektroniki kupionej klawiatury tak by kręcenie enkoderem zwierało poprzez układ 4066 klawisze głośności

Postanowiłem opisać krótko układ na forum, gdyż może ktoś mi coś podpowie jak ten układ ulepszyć. Kod jaki użyłem do mikrokontrolera nie jest oryginalnym kodem mirleya, lecz tym który w komentarzach jego układu wkleił kolega "Piotr_94" jako że podobno jest on czulszy na szybkie kręcenie enkoderem.

Problemy jakie mam:

1. Przy bardzo szybkim zakręceniu enkoderem procesor się zawiesza podając stan wysoki na oba wyjścia (Vol+ i vol-). Pomaga jedynie restart.
2. Impulsy wyjściowe z układu są zbyt krótkie - klawiatura załapie może 1 na 10 impulsów. Jak zwiększyć czas pojedynczego impulsu w tym kodzie? Zmieniając wartość timera czy zmiennej "Impuls"?

Schemat układu:

Kod mikrokontrolera tiny13:

$regfile = "attiny13.dat"
$crystal = 9600000
 
$hwstack = 20
$swstack = 10
$framesize = 30
 
Config Pinb.3 = Input
Set Portb.3
Config Pinb.4 = Input
Set Portb.4
Config Pinb.0 = Output
Config Pinb.1 = Output
 
I1 Alias Pinb.3
I2 Alias Pinb.4
O1 Alias Portb.0
O2 Alias Portb.1
O1 = 0
O2 = 0
 
Config Timer0 = Timer , Prescale = 8
Enable Timer0 : On Timer0 Prztimer0
Enable Interrupts
 
 
Dim Impuls As Byte
 
Do
 
If I1 = 0 Then
 
   Bitwait I1 , Set
   If I2 = 0 Then
      O1 = 1
   End If
 
End If
 
If I2 = 0 Then
 
   Bitwait I2 , Set
   If I1 = 0 Then
      O2 = 1
   End If
 
End If
 
Loop
 
 
Prztimer0:
  Timer0 = 55
 
  If O1 = 0 Or O2 = 0 Then
    Incr Impuls
    If Impuls = 15 Then
      Impuls = 0
      O1 = 0
      O2 = 0
    End If
  Else
    Impuls = 0
  End If
Return




Portret użytkownika EDC

Odp. Emulacja naciśnięcia przycisku głośności

Witam. Kiedy to pierwszy raz zobaczyłem to pomyślałem, że to przekombinowane i wszystko może spokojnie zrobić jeden mikrokontroler.
Chwile mi to zajęło, ale po krótkim rozpoznaniu sam zbudowałem podobny układ bo potrzebne mi były tylko przyciski Volume+ i Volume-
Pod tym linkiem jednak możesz zobaczyć gotowy projekt który wykorzystuje enkoder.

Ja zrobiłem coś takiego. Nie ma potrzeby instalacji sterowników bo to urządzenie HID.

-

BARTek
Moja strona

Portret użytkownika mareks6

układ ciekawy, ale nie

układ ciekawy, ale nie chciałem podłączać kolejnego urządzenia USB, bo musiałbym już HUBa instalować w carPC (wykorzystałem wszystkie 9 USB na płycie).

Chciałem wykorzystać gotową elektronikę klawiatury gdyż prócz głośności potrzebuję jeszcze innych klawiszy, jak: MUTE, ENTER, ESCAPE, a w przyszłości może strzałki kierunkowe itp.

Poskładałem też układ z tego linku:

http://obruboff.ru/english-pages/usb-volume-control/

wersję na atmega 16 która ma dodatkowo 16 klawiszy multimedialnych do dyspozycji. Niestety całość nie ruszyła. Jako że osobiście nie znam się na programowaniu w C, układ dałem koledze który jest programistą C. Niestety on też tego nie uruchomił. Zaprogramował, wstępnie przeglądnął wszystko, ale na dokładne przeanalizowanie kodu nie miał czasu. Autor projektu twierdzi że wszystko powinno działać...

W chwili obecnej mam wgrany w układzie ze schematu wsad od mirleya i "jako tako" działa, lecz każdy impuls to 2% głośności, i żeby zjechać ze 100% do minimum, trzeba się nakręcić.

Sam program jest dobry, ale moim zdaniem powinien być tak zrobiony, że gdy impulsator poda np 4 impulsy, to sam układ powinien już dawać na wyjściu ilość przychodzących impulsów x2, a np po przyjściu z impulsatora 8 impulsów, na wyjściu mamy x3.

Myślę że jest to do ogarnięcia, ale chyba musiałbym znaleźć pojemniejszy zamiennik do tiny 13, tak by zastosować go w tej samej PCB