Skocz do zawartości
ethanak

ATtiny85 i zasilanie joysticka - czy tak można?

Pomocna odpowiedź

Cześć!

Bawię się ostatnio w projektowanie małej gry na ATtiny85 (coś mnie ugryzło i nie chce puścić dopóki czegoś nie zrobię). Projekt przeznaczony do szuflady, najprawdopodobniej skończy swój żywot na płytce stykowej - mimo to chciałbym wiedzieć czy to co robię jest w miarę przynajmniej poprawne. Od razu na wstępie: układ działa bez problemu, program poprawnie odczytuje pozycję joysticka, pobór prądu w stanie uśpienia 8 µa razem z wyświetlaczem (po odłączeniu wyświetlacza miernik pokazuje 0,2 µa, co prawda to ostatnia cyfra na najmniejszym zakresie mojego wspaniałego miernika ale chyba tyle powinno być przy 3 V).

Program działa w ten sposób, że jeśli nie jest generowany dźwięk, na pinie PB1 jest jedynka. Założenie jest takie, że generowanie dźwięku i odczyt pozycji joysticka są niezależne.

Na schemacie pominąłem podłączenie wyświetlacza (do PB0/PB2) i klawisza fire (do ADC0, jeszcze nie wiem czy będzie jeden klawisz czy dwa).

stick.thumb.png.4f00f4d262e3571b9af9f18dcfbe75af.png

Pytanie: czy sposób zasilania joysticka jest prawidłowy, czy czegoś zapomniałem? Joystick to po prostu dwa potencjometry, niestety po podłączeniu bezpośrednio do Vcc pobór prądu to 0.6mA, czyli trochę za dużo jak na ustrojstwo bez wyłącznika zasilane z bateryjki 2032... a zależy mi na jak najmniejszej ilości elementów (być może jakąś obudowę zaprojektuję i fajnie by było to wszystko w środku zmieścić).

 

 

Udostępnij ten post


Link to post
Share on other sites

Nie ma to jak minimalizm do kwadratu, ale niech będzie - to też jakaś sztuka. Mam tylko nadzieję że napaliłeś się na coś naprawdę kultowego, co najmniej klasy Space Invaders lub Tempest. Oczywiście zobaczymy efekt?

No, ale do rzeczy. Rozumiem, że joystick zasilasz z linii audio. Wystawiając tam 1 przetwornikowi piezo to nie przeszkadza a joy ma napięcie na potencjometrach. I dobrze, tylko zastanów się co się dzieje w chwili gdy tę jedynkę wystawiasz po jakiejś przerwie, np. po 5ms. Musisz naładować kondensator 2.2uF z własnego zasilania. A jeśli pochodzi ono z pastylki o rezystancji wyjściowej 100Ω i więcej, to dostaniesz dropik napięcia Vcc zależny od wydajności portu i jakości kondensatora. A jeśli ten spadek wykryje BOD w procku - leżysz. Sytuacja będzie się potęgować w miarę zużywania baterii, bo jej Rw rośnie nieubłaganie. Dlatego proponuję, byś wywalił ten kondensator i diodę. A jeśli bardzo chcesz pomóc swojemu ADC to daj po 100nF na wejściach analogowych i tyle. Te kondensatory będą zasilane (podczas wzrostu napięcia VCC joysticka) przez rezystancje potencjometrów, więc widmo szpilki na głównym zasilaniu procka oddala się za horyzont.

W sumie nie dziwię Ci się. Jakiś czas temu (także?) dostałem małpiego rozumu gdy wyciągnąłem z szuflady wyświetlacz na FT800, podłączyłem go przez SPI do Nano PRO i zrobiłem bitwę czołgów. Udało się wydusić stabilne 20FPS na ekranie RGB 480x272 z detekcją kolizji (czołgi z przeszkodami, czołgi ze sobą, pociski ze wszystkim), obracaniem i "czołgowym" ruchem czołgów, wieloma różnymi zniszczalnymi obiektami (domy, murki, stogi siana), liczeniem punktów/trafień itp. Każdy czołg dostał dwa potencjometry (prawa i lewa gąsienica osobno więc możliwe były obroty w miejscu itp) i Fire. Ludzie to jednak są porąbani niektórzy..

Kilka przycisków (a dwa to już na pewno) możesz podłączyć do jednego pinu ADC robiąc dzielniki z rezystorów. Mierząc napięcie kwalifikujesz je do jednego z wcześniej policzonych przedziałów i wiesz jaka kombinacja oporników została dołączona a więc które przyciski są zwarte. W przypadku gdy wszystkiego masz kilka pinów to może być znaczna oszczędność.

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites
18 godzin temu, marek1707 napisał:

Mam tylko nadzieję że napaliłeś się na coś naprawdę kultowego, co najmniej klasy Space Invaders lub Tempest. Oczywiście zobaczymy efekt?

Myślałem o uproszczonej (z wiadomych przyczyn) wersji Tappera - ewentualnie (jeśli nie wyjdzie) odtworzeniu mojego Kazika (ale to już staje się nudne) 🙂 Jeśli będzie jakiś efekt to się pochwalę.

W sumie zrobiłem inaczej - najpierw myślałem o jakimś oporniku połączonym szeregowo z diodą (pewnie by to zadziałało, bo ograniczyłoby prąd ładowania kondensatora, a najdłuższa przerwa jaka się może zdarzyć to ok. milisekundy) ale poszedłem za poradą wywalenia całego tego kondensatorowo-diodowego wynalazku i podłączyłem joystick bezpośrednio do pinu. Procedura odczytu wygląda teraz mniej więcej tak:

   for (;;) {
        while (!(PINB & _BV(PB1)));
        b=readADC(2);
        c=readADC(3);
        if (PINB & _BV(PB1)) break;
    }

gdzie readADC to typowa funkcja odczytu.

 

18 godzin temu, marek1707 napisał:

Kilka przycisków (a dwa to już na pewno) możesz podłączyć do jednego pinu ADC robiąc dzielniki z rezystorów

A wiem, znam to - robiłem ostatnio takie jeździdełko (nie skończyłem bo chińskie podwozie nadaje się do wszystkiego tylko nie do jeżdżenia) , cztery zderzaki i przycisk podłączone do jednego pinu ADC w Pro Mini, rezystory wzięte po prostu z szuflady bez żadnego dobierania. Gdybym chciał coś takiego zrobić sytuacja byłaby jeszcze prostsza, bo mógłbym skorzystać z faktu że nie wszystkie kombinacje klawiszy są dopuszczalne (nie da się wcisnąć jednocześnie lewo-prawo na czymś joystickopodobnym). W sumie nawet nie musiałbym się bawić w ADC0, dwa piny wystarczyłyby za całą klawiaturę. Chciałem jednak wykorzystać leżący sobie w szufladzie joystick, bo jest mały, płaski, sprawdził się już w jednej konstrukcji i drugi egzemplarz jest mi w tej chwili do niczego niepotrzebny.

18 godzin temu, marek1707 napisał:

Udało się wydusić stabilne 20FPS na ekranie RGB 480x272

No to chylę czoła 🙂

Niestety, mam wyświetlacz podłączony po i2c więc specjalnie nie zaszaleję - ale ani Tapper, ani Kazik nie wymagają jakichś wysokich FPS-ów 🙂

Dzięki za informacje!

Udostępnij ten post


Link to post
Share on other sites

Hm, Kazika nie znam, ale w Tappera lub jakąś jego emanację na pewno grałem. Może na GameBoy'u? Do dzisiaj mam kilkanaście kultowych kartridży z produkcjami ATARI, NAMCO czy CAPCOMa i oczywiście samą konsolkę w wersji Advance SP. Wyciągam ją na urlopie i pogrywam w oryginalne Battlezone (polecam - kiedyś sam to wreszcie zrobię), Missile Command (na GB brakuje mi szybkiego manipulatora kulowego z wersji arkadowej), Centipede albo F14 Tomcat. Ech, żadnych sejwów co chwila, 8-bitowa muzyczka, permaśmierć, czysty hardcore..

Jeśli I2C to pewnie coś niedużego, typu 96x48 mono albo (o zgrozo) 4 linie po 20 znaków? Kluczowe będzie zrobienie fajnych ikonek barmana, piwa i klientów. Przy takiej rozdzielczości trzeba się napracować by wyszło czytelnie i wbrew prozorom to chyba trudniejsze niż robienie tego na VGA 800x600. Chyba że zdecydujesz się na jakieś symbole typu kwadracik, kółko itp, ale wtedy wczuwka mniejsza. To napisz jeszcze jak planujesz zrobić grafikę. Czy całość za każdym razem będziesz rysować w RAMie od nowa a potem szybki (he, he) transfer całej ramki na ekran, czy raczej rysowanie poszczególnych ikonek wprost na wyświetlaczu i to tylko tych przesuniętych względem poprzedniego obrazka? Jakaś biblioteka graficzna czy autorski silnik?

2 godziny temu, ethanak napisał:

stabilne 20FPS na ekranie RGB 480x272

Wiesz, kontroler FT800 to jednak maszyneria. Raz ładujesz mu wszystkie niezbędne tekstury 2D a potem co ramkę tylko zaktualizowaną listę obiektów do wyświetlenia. Masz rozdzielczość 1/16 pixela ekranowego (z bilinearnym wygładzaniem krawędzi), sprzętowe obroty tekstur co ułamek stopnia, RGB plus przezroczystość itd. Najbardziej czego mi tam brakuje to sprzętowa detekcja kolizji i na to szło 80% mocy "procesora" (cudzysłów bo to jednak AVR jest..). Widać, że kontroler od FTDI nie jest do gier a bardziej do ekranów sterowania (wbudowana bilbioteka jakichś megabajtów interaktywnych suwaczków, pokręteł, pasków postępu, wyświetlaczy, fontów itd), ale i tak polecam choć jedną przejażdżkę z takim wyświetlaczem. Okazuje się, że nie potrzeba PC ani nawet Maliny by zrobić coś zaskakująco dobrze wyglądającego i działającego. Oczywiście dopóki po tej stronie 2K RAMu starcza...

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
1 godzinę temu, marek1707 napisał:

Jeśli I2C to pewnie coś niedużego, typu 96x48 mono albo (o zgrozo) 4 linie po 20 znaków?

OLED 128 x 64 (0.96 cala). Ikonki postaram się zrobić - w razie czego mam kumpla który specjalizuje się w tego typu rzeczach i jak się z dobrym piwem uśmiechnę to może mi coś fajnego machnie 🙂

1 godzinę temu, marek1707 napisał:

To napisz jeszcze jak planujesz zrobić grafikę. Czy całość za każdym razem będziesz rysować w RAMie od nowa a potem szybki (he, he) transfer całej ramki na ekran, czy raczej rysowanie poszczególnych ikonek wprost na wyświetlaczu i to tylko tych przesuniętych względem poprzedniego obrazka? Jakaś biblioteka graficzna czy autorski silnik?

No nie - na rysowanie wszystkiego w RAM-ie to mi tego ramu nie wystarczy. Czyli mniej więcej rysowanie ikonek tam gdzie coś się zmieniło. Na szczęście nie muszę pamiętać całego obrazu, w przypadku stołu wystarczą pozycje i numerki obrazków klientów (dwie fazy ruchu, klient trzyma kufel, klient pije piwo) i pozycje kufli + pusty pełny. Nie wiem tylko, czy mi się oprócz rysowania coś jeszcze w attiny zmieści 🙂 No i autorski silnik (o ile to można nazwać silnikiem - rysowanie bitmap z wyrównaniem w pionie do 8).

24 minuty temu, Elvis napisał:

Ja zgaduję że tapper będzie wyglądał mniej więcej tak

To w ogóle nie powinno ujrzeć światła dziennego - niestety były to czasy absolutnej dziczy i wystarczyło, że gdzieś człowiek położył kasetę z grą to zaraz była przegrana w 100 egzemplarzach 😞 Poza tym owszem, mniej więcej (tzn. więcej mniej jak więcej) 🙂

 

Udostępnij ten post


Link to post
Share on other sites

Trochę słabo to wygląda, mimo ekranu o "normalnej" rozdzielczości. Tu jest przegląd kilku Tapperów:

Wersja na Spectrum jest żałosna, choć nie pamiętam bym tak ją odbierał wtedy. Atari już jako tako, Commodore nadrabia dźwiękiem, ale i tak moim zdaniem wymiata zwykły automat z salonu (nr. 1). Ciekaw jestem co zobaczymy w wersji DIY 🙂 

Udostępnij ten post


Link to post
Share on other sites

Ale to jest wersja ethanaka, inne już niekoniecznie

Udostępnij ten post


Link to post
Share on other sites

No to jeszcze o tym Kaziku może coś?

Udostępnij ten post


Link to post
Share on other sites

masz na tej samej stronie, wystarczy kliknąć. A jak nie to poszukaj po autorze.

  • Nie zgadzam się! 1

Udostępnij ten post


Link to post
Share on other sites

Wersja Kazika oficjalna z możliwością zagrania online (publikowana pod tytułem "Zamek" lub "Kazik i Tatarzy", nie wiem skąd im się tam wziął "atak tatarów"): http://plus4world.powweb.com/software/Zamek

Wersja na Arduino i wyświetlacz od Nokii: https://majsterkowo.pl/kazik-czyli-prosta-platforma-do-prostych-gier-na-arduino/

Zresztą tych przygód Kazika było więcej (z grywalnych "Kazik poluje na duchy"), ale "Zamek" jest chyba najlepszy.

A "Tapper" na C16 wygląda słabo bo to niedokończona wersja.

 

Udostępnij ten post


Link to post
Share on other sites
1 godzinę temu, ethanak napisał:

No nie - na rysowanie wszystkiego w RAM-ie to mi tego ramu nie wystarczy

128*64/8 = 1024, spokojnie starczy

Udostępnij ten post


Link to post
Share on other sites

Problem w tym, że ATtiny85 ma 512...

Udostępnij ten post


Link to post
Share on other sites

Argh, pomyliło mi się z atmegą. No ale większość się nie zmienia, więc może siedzieć we flashu, więc odświeżanie całego ekranu jest możliwe (choć zupełnie niepotrzebne).

Udostępnij ten post


Link to post
Share on other sites

Robiłem odświeżanie ekranu w wersji na Arduino i wyświetlacz Nokii - tyle że tam i tak musiałem ograniczyć się do 10 FPS ze względu na bezwładność wyświetlacza. Tutaj odświeżenie całości nawet gdybym miał odpowiednią ilość pamięci trwałoby zbyt długo (Nokia to jednak SPI a nie I2C).

Zresztą dopóki nie zrobię przynajmniej jednego stolika z klientami (niech sobie po prostu łażą i wołają nieobecnego barmana) nie ma co teoretyzować, może się okazać że mogę odświeżyć cały obraz stołu (teoretycznie pamięci powinno wystarczyć), chodzi raczej o to aby nie było widać jak biedny mikrokontrolerek usilnie rysuje piksele 🙂

 

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...