@Mq - szkoda nerwów :)
Dzięki za projekt, ja na pewno skorzystam.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Nowa obudowa dla 800XL - zostało 36 dni Niewiele ponad miesiąc do końca kampanii.
Zmarł twórca języka BASIC Zmarł Thomas E. Kurtz twórca języka BASIC
Zmiana serwera atari.area Serwis przeszedł właśnie ważną aktualizację infrastruktury
4th Atari ASCII Compo - wyniki Dostępne są już wyniki tegorocznego ATASCII Compo.
thing neo 1.60 Olivier Landemarre wydał nową wersję desktopu Thing.
atari.area forum » Fabryka - 8bit » Wyświetlacz tracków do stacji dyskietek
Strony Poprzednia 1 2 3 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
@Mq - szkoda nerwów :)
Dzięki za projekt, ja na pewno skorzystam.
@Hrw: nie znam się na licencjach, nie ma na to żadnej licencji i nie będę się tym zajmował, bo mi się nie chce:-). Projekt jest w całości mojego autorstwa, ale daję ludziom schemat, daję plik z gotowym wsadem, udostępniłem źródło, które pozwalam używać i modyfikować sobie ludziom na własny użytek w dowolny sposób.
@lopez: sam się zastanawiam po co ja się w ogóle daję wciągać w takie dyskusje, ale to już tak jak powiedziałem odpuszczam i nic więcej nie powiem w tym temacie. Wracam do wątku: dzięki za uznanie:-) Projekt i pliki w takiej formie jak są w tej chwili umieszczone, działają w 100% dobrze z XF551. Spokojnie możesz sobie już taką wersję budować, jeśli chcesz tylko wyświetlacz tracków. Jak zainteresuje Cię coś więcej, to poczekaj, bo będzie jeszcze druga alternatywna wersja, rozszerzona o kilka rzeczy, z tym że to już stricte pod potrzeby dopasowane do XF551.
Planuję teraz jeszcze rozszerzyć układ o dodanie dwóch przycisków, wyświetlanie na tym samym wyświetlaczu numeru stacji i możliwość zmiany przyciskami numeru stacji dla XF551, oraz reset stacji. Muszę sprawdzić jak się zachowuje XF551 po zmianie numeru stacji w trakcie pracy i czy wymaga to resetu stacji, podejrzewam, że pewnie tak. Wybrany numerek będzie zapisywany w EEPROM-ie w attiny, więc po ponownym włączeniu będzie się pamiętał ten, który mieliśmy wybrany. Dodatkowo jeszcze dołożę dwie diody LED sygnalizujące aktualnie wybraną stronę dyskietki. Wszystkie te rzeczy są opcjonalne, więc nie trzeba ich montować wszystkich, każdy sobie użyje z tego co tam będzie chciał, np. programowi to obojętne czy zapala diody, czy puste piny:-) Na koniec najpewniej zaprojektuję jakieś płytki, co chyba nie będzie dla nikogo niespodzianką, z tym że będę je robił pod konkretne swoje potrzeby do mojego egzemplarza stacji - zobaczę na ile uniwersalnie uda mi się to zrobić, żeby przydały się takie płytki również innym.
To wszystko taki ogólny zarys koncepcji, ale jeszcze się to musi wyklarować, bo tak sobie liczę, że mi się piny powoli kończą w Attiny, więc muszę to jakoś sprytnie wykombinować.
To wszystko taki ogólny zarys koncepcji, ale jeszcze się to musi wyklarować, bo tak sobie liczę, że mi się piny powoli kończą w Attiny, więc muszę to jakoś sprytnie wykombinować.
" ...to bardzo dobra koncepcja..." - cytując z Misia :-) I dziwi mnie czasem, że niektórzy - poniekąd zasłużeni Atarowcy krzyczą: "....od koncepcji to ja tu jestem!" - też z Misia :-)
Nie ma co się stroszyć i czepiać, jak dla mnie - każdy - nawet najmniejszy projekcik wnosi coś dla społeczności. Czekam więc z niecierpliwością na PCB i chętnie wyposażę moje XFki w ten gadżet :-)
cena powala....
Podałem tego linka jako inspiracje dla projektu, a nie jako namowę do kupna. Na zachodzie robocizna jest przeważnie droższa niż w Polsce, stąd takie ceny.
To zrozumiałe, nie mniej jednak więcej fanu daje zrobienie tego samemu - nawet jeśli trącić to będzie amatorką (wykonanie wasne). A projekty mq są równie debeściackie co "zachodnich" kolegów, jeśli nie lepsze... no i oczywiście przyzwoicie tanie :-)
Poza tym nie można zapomnieć o edukacyjnym aspekcie projektu... kod, opis, pcb i inne hinty... tego nie znajdziesz w projektach komercyjnych!
Odniosę się jeszcze do sprawy licencji, rozumiem @mq, że głowy do tego nie masz, jednak też jestem zdania, że powinieneś przynajmniej wskazać rodzaj licencji by później nie okazało się, że ktoś klepie Twoje projekty bez opamiętania przypisując sobie zasługi. Zwykłe wspomnienie, że projekt jest na licencji GNU GPL2 czy CC pewnie rozwiązało by sprawę...
@Hrw: nie znam się na licencjach, nie ma na to żadnej licencji i nie będę się tym zajmował, bo mi się nie chce:-). Projekt jest w całości mojego autorstwa, ale daję ludziom schemat, daję plik z gotowym wsadem, udostępniłem źródło, które pozwalam używać i modyfikować sobie ludziom na własny użytek w dowolny sposób.
Może mam odchylenia ze względu na pracę ale są momenty gdy czegoś nie mogę użyć bo nie ma podanej licencji przez co nie wiadomo na ile można to wykorzystać/zmodyfikować/sprzedawać/etc.
Biorąc pod uwagę to co powiedziałeś to CC-BY-SA idealnie się nadaje:
Wolno:
Dzielenie się — kopiuj i rozpowszechniaj utwór w dowolnym medium i formacie
Adaptacje — remiksuj, zmieniaj i twórz na bazie utworu dla dowolnego celu, także komercyjnego.Licencjodawca nie może odwołać udzielonych praw, o ile są przestrzegane warunki licencji.
Na następujących warunkach:
Uznanie autorstwa — Utwór należy odpowiednio oznaczyć, podać link do licencji i wskazać jeśli zostały dokonane w nim zmiany . Możesz to zrobić w dowolny, rozsądny sposób, o ile nie sugeruje to udzielania prze licencjodawcę poparcia dla Ciebie lub sposobu, w jaki wykorzystujesz ten utwór.
Na tych samych warunkach — Remiksując utwór, przetwarzając go lub tworząc na jego podstawie, należy swoje dzieło rozpowszechniać na tej samej licencji, co oryginał.
Brak dodatkowych ograniczeń — Nie możesz korzystać ze środków prawnych lub technologicznych, które ograniczają innych w korzystaniu z utworu na warunkach określonych w licencji.
O ile mi wiadomo, nie trzeba wpisywać się w standardy, a można określać własne prawa licencyjne na swoje dzieło. A zatem licencja jest taka jak napisałem wcześniej:
Projekt jest w całości mojego autorstwa, ale daję ludziom schemat, daję plik z gotowym wsadem, udostępniłem źródło, które pozwalam używać i modyfikować sobie ludziom na własny użytek w dowolny sposób.
I tyle z mojej strony. Niech sobie prawnicy szukają dziur w tej licencji i je wykorzystują jeśli mają na to ochotę:-)
Z resztą: mówimy tu o połączeniu mikrokontrolera z wyświetlaczem siedmiosegmentowym i kodzie na licznik z interpretacją kilku pinów wejściowych. Nie może być mowy o opatentowaniu przecież czegoś takiego, bo miliony projektów na attiny działają w taki sposób i nie ma tu żadnej wynalazczości wielkiej:-) Gdyby ktoś chciał zrobić takie samo ustrojstwo komercyjnie, to przecież schemat jest standardowy i nie można by się przyczepić, że będzie taki sam. Projekt natomiast przed tym broni się sam, bo będąc udostępnionym za darmo w części dot. oprogramowania, wymaga dokupienia tylko kilku elementów o łącznej wartości kilkunastu złotych, więc zostawia niewielkie pole do popisu handlarzom. Dodam jeszcze, że będę robił płytki pod ten projekt i również te płytki w ilościach nadmiarowych przeznaczę na podzielenie się z chętnymi po kosztach.
jak po kosztach to biorę 2(5) sztuk... :-)
pozdr.
Lekko off-top ale ...
Kolega mojego syna miał napisać pracę z przedmiotu programowanie. Na ocenę. Temat banalny .. sortowanie w jakimś wariancie czy kilku nawet.
Banalny banał i wydawałoby się, że to nie ma co spartolić, a tu nagle ... wsadzili ten program do systemu antyplagiatowego i ... tadaaaaa.... nie zaliczyli zadania bo program był zbyt podobny do wersji sprzed kilkudziesięciu lat. W FORTRANIE.
Ja wiem, że to absurd bo jak algorytm sortowania bąbelkowego można napisać "inaczej" skoro on i tak ma z 12 linii łącznie. Plus komentarze.
@pancio.net: Ok, to dobrze że mówisz, więc zgaduję, że będzie dużo chętnych na dużo sztuk, więc zamówię od razu trochę więcej, ale to poczekajmy do szczęśliwego finału. Koszt płytki na pewno nie przekroczy dwudziestu zł, pewnie będzie kilkanaście zł.
W międzyczasie zrobiłem testy z przekładaniem zworek numeru stacji dyskietek w XF551 na włączonej stacji i widzę, że stacja się wtedy przestawia na inny numerek od razu bez konieczności resetu. To bardzo dobra wiadomość, bo oszczędza jeden pin w attiny, który przewidywałem na sterowanie resetem, a po drugie odchodzi konieczność programowego pilnowania momentu przełączania, kolejności startu procesorów itp, więc po prostu jest o wiele łatwiej to zrobić:-) Zaraz to zaimplementuję do prototypu i będzie prawie koniec.
@BartoszP: to obrazuje, że system antyplagiatowy to trochę lipa na takie drobiazgi. A takie rzeczy jak sortowanie bąbelkowe, to raczej metoda niż program. To prawie tak jak by kazać komuś dodać dwie liczby, a potem powiedzieć, że zrobił plagiat, bo użył do tego konstrukcji dwóch liczb z plusem po środku:-) hehehe:-)
To prawie tak jak by kazać komuś dodać dwie liczby, a potem powiedzieć, że zrobił plagiat, bo użył do tego konstrukcji dwóch liczb z plusem po środku:-) hehehe:-)
Nom. Przeca można tak (liczby przykładowe): 7 3 + (ciekawe czy odwrotną notację polska też by oplagiatował ;P )
Rozbudowałem trochę układ i funkcjonalność.
Obecnie jest tak, że po włączeniu stacji pokazuje nam się jej numer (np. d1) na dwie sekundy jako takie "powitanie". Po tym czasie wyświetlacz przechodzi do wyświetlania numerów tracków, oraz dwie diody LED pokazują aktualnie pracująca głowicę.
Numer stacji dyskietek jest zapisany w pamięci EEPROM Attiny, więc uruchamia się ona zawsze z takim numerem jaki sobie wybierzemy i zapamiętamy.
Wciśnięcie przycisku lewego powoduje przejście do trybu wyboru numeru stacji. Pierwsze wciśnięcie wyświetla aktualny numer, a kolejne wciśnięcie zmienia ten numer kolejno d1->d2->d3->d4->d1->d2... Zmiana numeru stacji następuje natychmiastowo, a więc po takiej zmianie nasza stacja jest od razu widoczna w Atari pod wskazanym numerkiem.
I teraz możliwości są dwie: albo tylko zmieniamy numerek i wówczas stacja będzie pod nim pracowała do czasu ponownej zmiany numeru na inny lub wyłączenia i ponownego włączenia stacji (stacja po włączeniu pracuje pod numerem zapisanym w EEPROM). Albo druga opcja, to po wybraniu numeru stacji możemy go zapisać w EEPROM jako domyślny naciskając drugi przycisk (prawy).
W ten sposób możemy sobie chwilowo zmieniać numery stacji, albo zapamiętywać ustawienie domyślne, z którym stacja się uruchamia.
Powrót do trybu wyświetlania numerów tracków następuje samoczynnie w momencie kiedy stacja zacznie być aktywna (zmieni track lub głowicę).
Na schemacie dołożyłem w związku z tym poniższe zmiany:
1. Dołożyłem dwie diody LED, do których wykorzystałem już istniejące multipleksowanie dwóch wyświetlaczy, dzięki czemu dwie diody podpiąłem do jednego pinu mikrokontrolera multipleksując je wraz z całymi wyświetlaczami. Diody te w swojej podstawowej funkcji pokazują która z głowic aktualnie pracuje (górna/dolna), oraz w trybie wyboru numeru stacji sygnalizują mruganiem zapis tego numeru do pamięci EEPROM.
Dioda danej głowicy zapala się przy zmianie tracku lub przy zmianie strony dyskietki, natomiast gaśnie samoczynnie po kilku sekundach nieużywania stacji. Zrobiłem tak dlatego, że zabrakło mi już pinów w mikrokontrolerze, prawidłowo należało by czytać jeszcze rzeczywistą aktywność flopa i w zależności od niej gasić diody, ale pominąłem to już jako nieistotne. Działa to wizualnie bardzo dobrze i fajnie, w praktyce wygląda to tak, że zapalanie się diod lub zmiana na przeciwną stronę dyskietki następuje dokładnie w momencie aktywności, natomiast całkowite wygaszenie diod małą chwilę po tym jak stacja się zatrzyma.
2. Dołożyłem dwa przyciski, przy czym tutaj też wykorzystałem istniejące multipleksowanie wyświetlaczy i przyciski są tak samo multipleksowane, dzięki czemu dało się je oba podłączyć do jednego pinu mikrokontrolera. Pierwszy (lewy) przycisk służy do zmiany trybu i wyboru numeru stacji, a drugi (prawy) przycisk służy do zapisu numeru stacji w EEPROM.
3. Dwa piny mikrokontrolera wykorzystałem do wyboru numeru stacji w XF551. Podłączamy je kabelkami zamiast zworek/switchy wyboru stacji w XF551. Od teraz Attiny kieruje tym wyborem.
Załączam na razie schemat aktualny oraz dwa zdjęcia pracy prototypu w trybie wyświetlenia numeru stacji i w trybie aktywności stacji - pokazywania tracków/głowic.
Zaprojektowałem i zamówiłem płytki, po zmontowaniu gotowca i ostatecznym przetestowaniu całości, wrzucę jakieś testy i udostępnię wtedy ostateczny kod źródłowy oraz gotowy wsad do Attiny w wersji tej rozbudowanej. Płytkę zaprojektowałem w taki sposób, że dodatkowe diody LED, przyciski, oraz sterowanie numerem stacji dołącza się kabelkami wpinanymi na goldpinach, więc można będzie użyć tej samej płytki do wersji uproszczonej, którą opublikowałem wcześniej oraz do wersji rozbudowanej. Różnica polega na tym, że dołączamy lub zostawiamy niepodłączone te wspomniane dodatkowe elementy.
Płytki będą dostępne w drugiej połowie lipca ponieważ na razie są w produkcji, w międzyczasie wakacje itd...
A może jeszcze dodać wyświetlanie gęstości w jakiej jest sformatowana dyskietka?
Mi nierzadko przydaje się taka funkcja w mojej CA2001 z TMD. Czasem na szybko potrzebuję sprawdzić czy jakieś przypadkowe, nieopisane dyskietki, np. z jakiejś nowej paczki, są w ogóle sformatowane w Atari i właśnie nawet bez włączania komputera, zamykam dyskietkę w stacji i na wyświetlaczu widzę czy jest (S)single, (E)nhanced, (d)ouble, czy (I)BM, czy (E)rror - czyli nie w formacie Atari, a więc odkładam do sprawdzenia np. w Commodore czy Apple II.
(E)nhanced od (E)rror jest rozróżniane tak, że pierwsze pokazuje się od razu, a drugie po cyklicznym wyświetleniu: E->D->S->E (czy jakoś tak - piszę z pamięci).
--edit--
Możliwe też że (E)nhanced or (E-)rror jest na rozróżniane wyświetleniem litery na innym segmencie wyświetlacza. Dokładnie nie pamiętam.
Pewnie w tej stacji 3.5" to zwykle będziesz formatował w Double, ale i tak mogłoby się przydać rozróżnienie czy to Atari, czy PC, albo nieznany format.
Do przemyślenia.
I tak ogólnie, bo nie doczytałem, czy ten cały układ z wyświelataczem i diodami będzie działał (tak samo?) też z napędami 5.25"? Bo wtedy wyświetlanie gęstości miałoby tym większy sens, tak jak w LDW/CA.
Układ cały będzie działał tak samo z 5,25. Ogólnie całość jest przeznaczona przede wszystkim do XF551, bo do tego to robię, ale można to podpiąć do każdego innego flopa - choć tu jak zauważył Candle jest milczące założenie, że mówimy o flopach na interfejsie shugart/ibm.
W obecnym układzie skończyły się już piny w Attiny, więc nic więcej się za bardzo nie dołoży, trzeba by już przebudowywać układ.
Nie wiem jak się rozpoznaje gęstość dyskietki. Czy ktoś może wrzucić jakieś info, albo linka? Chętnie o tym poczytam. Ale wiem, że XF551 sama w sobie ma problem z rozpoznaniem gęstości, więc nie bardzo wiem czy w ogóle się to da tak na kolanie dorobić.
Edit: poza tym podejrzewam, że w takiej CA2001/LDW, to firmware stacji sprawdza jej gęstość odczytując nagłówek z dyskietki, więc taki na boku dołożony układ do tracków nie będzie miał jak tego zrobić w ogóle.
Density indicator for Atari XF551:
http://blog.3b2.sk/igi/post/Atari-XF551 … cator.aspx
(slovak page)
Thank You Igi. Then now everyone can build simple circuit with 74LS138.
@uicr0Bee: z tego wynika że łatwo sprawdzić gęstość za pomocą dwóch pinów procesora, jednak u mnie w układzie brakuje już pinów w Attiny, więc nie będę tego robił - zwłaszcza, że z artykułu wynika że nie zadziała to z HyperXF, a głównie jego używamy w XF551 mając flopa 3,5". Jak chcesz działać na oryginalnym ROM-ie, to robisz sobie taki wskaźnik na trzech ledach i załatwione.
@Igi: As you said your density indicator don't work with HyperXF, because pin 35 is used to indicate if floppy disk is in the drive. By the way, how can we utilize it, and what is advantage in HyperXF when we connect something to the pin 35?
pin 35 = indication of a newly inserted floppy disk (Hyper XF OS) new hardware - microswitch.
(automatic indication of correct density)
Best regards, Igi.
Ok, I found an article about this modification on your website:
http://blog.3b2.sk/igi/post/Deja-vu-XF5 … losti.aspx
Is it also useful for 3,5" floppy? If yes, then is there any possibility to use standard signals from shugart interface to control pin 35? For example maybe we can use pin 2 or 34 from shugart in some way to achieve proper signal for pin 35?
hmmm, I don't know ...
Po odczekaniu na produkcję płytek i po przerwie urlopowej całość dokończyłem.
Mamy nowy wsad, który obsługuje dwa warianty pracy:
- wersję uproszczoną - czyli sam tylko wyświetlacz tracków, bez żadnych bajerów,
- wersję pełną - z dodatkową obsługą przycisków, którymi można zmieniać numer stacji d1,d2,d3,d4
W najprostszej wersji podłączamy tylko podstawową płytkę, na której jest wyświetlacz i mikrokontroler.
Wystarczy podpiąć tylko zasilanie (VCC i GND) i trzy kabelki bezpośrednio ze złacza flopa: TRACK0, STEP, DIR.
Takie podpięcie daje nam działający w pełni wyświetlacz tracków bez dodatkowych bajerów.
Dodatkowo do płytki podstawowej można dopiąć dwie diody LED, które zapalają się sygnalizując pracę górnej i dolnej głowicy.
Żeby to zadziałało, to musimy ze złącza flopa dopiąć jeszcze czwarty kabelek z sygnałem SIDE.
Do tego momentu wyżej opisane rzeczy zadziałają nam z dowolną stacją 3,5" lub 5,25" na złączu shugart/ibm. Czyli nie tylko w XF551, ale również np. w stacjach od Atari ST, Amigi, czy PC.
Idąc dalej możemy jeszcze dopiąć do płytki podstawowej dwa przyciski oznaczone jako lewy i prawy.
Przycisk lewy służy do zmiany numeru stacji d1,d2,d3,d4. Zmiana następuje natychmiastowo i stacja od razu jest przełączona na odpowiedni numerek i tak widziana przez Atari.
Prawy przycisk natomiast służy do zapisania aktualnie wybranego numeru stacji (wyświetlonego na wyświetlaczu) w pamięci EEPROM mikrokontrolera jako numeru domyślnego. Po ponownym włączeniu stacja będzie się zgłaszała nam z tym numerkiem.
Zmiana numeru stacji polega na wystawianiu odpowiedniej kombinacji 00,01,10,11 na dwóch dodatkowych wyjściach z płytki oznaczonych S1 i S2. Żeby nam to działało w XF551, to musimy tutaj podpiąć dwa dodatkowe kabelki, które trzeba doprowadzić do elektroniki XF551 w miejsce dipswitchy/zworek, które trzeba wylutować lub rozłączyć, i zabezpieczyć, żeby nie było możliwości ich zwarcia do przeciwnego stanu niż podawany przez mikrokontroler.
Jeżeli nigdy nie wybieraliśmy numeru stacji i nie zapisywaliśmy go do EEPROM, to wyświetlacz nie będzie nam pokazywał numeru przy starcie i mamy tylko czysty wyświetlacz tracków Taka jest sytuacja początkowa zaraz po zaprogramowaniu mikrokontrolera. Natomiast jeśli już numer stacji wybierzemy i zapiszemy w EEPROM, to zawsze przy włączaniu wyświetlacz pokaże nam aktualny numer stacji przez dwie sekundy na powitanie. Jeżeli nie chcemy mieć tego powitania, to należy włączyć zasilanie trzymając prawy przycisk - powoduje to wykasowanie EEPROM-u, co sygnalizowane jest wyświetleniem się na chwilę 88 i powrót do uproszczonej wersji. W przypadku gdy nie ma ustawionego żadnego numeru stacji dyskietek, to piny S1 i S2 ustawione są tak jak dla stacji d1.
Załączam szereg zdjęć jak to sobie poskładałem u siebie. Stacja NEC 720kB 3,5" z epoki, elektronika to klon XF551 z ROM-em HyperXF, całość zbudowana w obudowie od SF354. Podłużne przyciski dopasowane również z epoki ze starego magnetowidu:-) Jak ktoś chce zobaczyć całość w działaniu, to wrzucam link do filmiku: https://drive.google.com/open?id=14raEa … At2voSyeDg
I teraz tak. Są dwie możliwości zanabycia drogą kupna ode mnie tego cudeńka.
1. Samo PCB - płytka podstawowa, oraz dorzucam płytkę pod przyciski/LED-y, chociaż zaznaczam, że płytka ta była robiona pod indywidualny mój jedyny w swoim rodzaju egzemplarz z przyciskami od magnetowidu - płytka ta druga jest dorzucona gratis, można wykorzystać, nie trzeba.
Koszt samego PCB to 15zł.
2. PCB +gratisowe pcb pod przyciski/LED-y opisane powyżej +zestaw elementów (zaprogramowany Attiny2313, wyświetlacze siedmiosegmentowe, tranzystory, rezystory, kondensatory, goldpiny). Zestaw nie będzie zawierał przycisków, dwóch diod LED, oraz kabelków - są to elementy, które trzeba sobie dobrać pod indywidualnie grzebane swoje jedyne i niepowtarzalne DIY:-)
Koszt takiego zestawu to 45zł.
W obu wariantach koszt wysyłki 9zł poleconym priorytetem, jak ktoś woli, to może być kurierem za 14zł, innych opcji wysyłki nie przewiduję.
Bardzo proszę o zapisy w miarę możliwości kto chce i może to jak najszybciej, bo potrzebuję oszacować ile kupić tych wyświetlaczy, bo ich nie mam, a nie chcę za dużo przestrzelić z ilością. Komplet elementów będę miał w ciągu kilku dni, pod koniec nadchodzącego tygodnia będę mógł realizować wysyłki. Ilość płytek ograniczona, więc kto pierwszy ten lepszy.
Na koniec publikuję kod źródłowy z komentarzami w celach edukacyjnych. W załączniku wrzucam też skompilowany wsad.
/*
* trackDisplayProg.c
* rev B
* Created: 2019-05-19 18:37:50
* Author : Mq
*/
#define F_CPU 1000000L
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#define AnL (1<<PA0)
#define AnR (1<<PA1)
#define Leds (1<<PB0)
#define S1 (1<<PD4)
#define S2 (1<<PD5)
#define Btns (1<<PD6)
#define Trk00 (1<<PD0) // fdd pin 26
#define Dir (1<<PD1) // fdd pin 18
#define Step (1<<PD2) // fdd pin 20
#define Side (1<<PD3) // fdd pin 32
uint8_t Digits[] = {0x81,0xf3,0x49,0x61,0x33,0x25,0x05,0xf1,0x01,0x21,0x43};
// 0 1 2 3 4 5 6 7 8 9 d
volatile uint8_t Mode = 0; //0 track; 1 drive
uint8_t DrvNr = 0;
uint8_t DrvNrOld = 0;
volatile uint8_t TrkNr = 0;
volatile uint8_t DisplNr = 0;
uint8_t Autobit = 0;
uint8_t SideTmp = 0b1000;
volatile uint8_t BtnL = 0;
volatile uint8_t BtnR = 0;
volatile uint8_t Led1 = 0;
volatile uint8_t Led2 = 0;
volatile uint16_t LedsOff = 0;
int main(void)
{
DDRD &= ~(Trk00 | Dir | Step | Side | Btns); //Trk00,Dir,Step,Side,Btns 0 in
DDRD |= S1 | S2; //numer stacji 1 out
DDRA |= AnL | AnR; //AnL, AnR 1 out
DDRB = 0xff; //port B - wyjscia 1 out
PORTD |= Trk00 | Dir | Step | Side | Btns; //Trk00,Dir,Step,Side,Btns 1 pull-up
PORTD &= ~(S1 | S2); //numer stacji 0 D1
PORTA |= AnL | AnR; //AnL, AnR 1 off
PORTB = 0xff; //port B 1 off
DrvNr = eeprom_read_byte( (uint8_t *) 0x00);
if (DrvNr>3) { DrvNr = 0; }
else { DisplNr = 101+DrvNr; } //ustalenie powitania: nr stacji lub zero jesli nie ustawiono
DrvNrOld = DrvNr;
if (DrvNr==1) PORTD |= S2; //d2
if (DrvNr==2) PORTD |= S1; //d3
if (DrvNr==3) PORTD |= S1 | S2; //d4
//int0 - impulsy step
GIMSK |= (1 << INT0); //włącz przerwanie z INT0
MCUCR=0x02; //przerwanie z INT0 wyzwalane zboczem opadającym
//timer1 - multipleksowanie wyswietlaczy
TCCR1B |= (1 << WGM12); //ustaw timer w tryb CTC
OCR1A = 31; //ustaw do ilu liczy timer -1MHz/64=15625(1Hz) -31(500Hz)
TCCR1B |= ((1 << CS10) | (1 << CS11)); //CS10 włącza timer, CS11 ustawia preskaler na Fcpu/64
TIMSK |= (1 << OCIE1A); //zezwolenie na przerwania dla CTC timer1
sei(); //zezwolenie globalne na przerwania
_delay_ms(100); //czas na sprawdzenie przyciskow
if (BtnR==1) { //wcisniety prawy przycisk podczas startu
DrvNr = 0; //d1
DrvNrOld = 0; //d1
PORTD &= ~(S1 | S2); //d1
eeprom_write_byte( (uint8_t *) 0x00, 0xff); //kasuje eeprom
DisplNr = 88; //zapalenie wszystkich segmentow wyswietlaczy
BtnR = 0;
}
_delay_ms(2000); //wyswietlanie powitania przez 2sek.
while (1)
{
if (SideTmp!=(PIND&Side)) { LedsOff = 3500; SideTmp = (PIND&Side); } //uaktywnienie ledow przy zmianie Side
if (Mode==0) { //Mode=0 wyswietlanie tracków
DisplNr = TrkNr; //wyswietlaj tracki
if (LedsOff>0 && !(PIND&Side)) { Led1=0;Led2=1; }
if (LedsOff>0 && (PIND&Side)) { Led1=1;Led2=0; }
if (LedsOff==0) { Led1=0;Led2=0; }
}
if (Mode==1) { //Mode=1 wybór stacji
DisplNr = 101+DrvNr; //wyświetlaj nr stacji
Led1=0; Led2=0;
if (BtnL==1) { //lewy przycisk zmiana nr stacji
if (DrvNr>2) DrvNr=0; else DrvNr++;
if (DrvNr==0) PORTD &= ~(S1 | S2); //d1
if (DrvNr==1) { PORTD &= ~S1; PORTD |= S2; } //d2
if (DrvNr==2) { PORTD |= S1; PORTD &= ~S2; } //d3
if (DrvNr==3) PORTD |= S1 | S2; //d4
_delay_ms(300); BtnL=0;
}
if (BtnR==1) { //prawy przycisk zapis nr stacji w eeprom
unsigned char i;
for (i = 0; i < 20; i++)
{
Led1 ^= 1;
Led2 ^= 1;
_delay_ms(25);
}
if (DrvNr != DrvNrOld) { DrvNrOld = DrvNr; eeprom_write_byte( (uint8_t *) 0x00, DrvNr); }
BtnR = 0;
}
}
if (BtnL==1 && Mode==0) { Mode = 1; _delay_ms(300); BtnL=0; } //lewy przycisk mode:zmiana stacji
if (BtnR==1) BtnR=0; //prawy przycisk nic
}
}
ISR(INT0_vect) //obsluga przerwania z INT0
{
if (TrkNr<79 && !(PIND&Dir)) TrkNr++;
if (TrkNr>0 && (PIND&Dir)) TrkNr--;
LedsOff = 3500; //czas do wygaszenia ledow -3500(7sek)
Mode = 0;
}
ISR(TIMER1_COMPA_vect) //przerwanie compare timera1
{
if (TrkNr>0 && !(PIND&Trk00)) TrkNr = 0; //wyzeruj licznik jesli glowica na track00
if (LedsOff>0) LedsOff--; //odliczaj czas do wygaszenia ledow
Autobit ^= 1;
PORTB = 0xff; //off
if (Autobit==1)
{
PORTA &= ~AnL; //0 on
PORTA |= AnR; //1 off
PORTB = Digits[DisplNr/10]; //wyswietlenie dziesiatek
if(Led2==1) PORTB &= ~(Leds); //dolna glowica
if(!(PIND&Btns)) BtnL=1; //przycisk lewy
}
else
{
PORTA |= AnL; //1 off
PORTA &= ~AnR; //0 on
PORTB = Digits[DisplNr%10]; //wyswietlenie jednosci
if(Led1==1) PORTB &= ~(Leds); //gorna glowica
if(!(PIND&Btns)) BtnR=1; //przycisk prawy
}
}
1. perinoid - zestaw #2.
1. perinoid - zestaw #2.
2. Montezuma - zestaw #2.
3. dragmar - zestaw #2.
Strony Poprzednia 1 2 3 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
atari.area forum » Fabryka - 8bit » Wyświetlacz tracków do stacji dyskietek
Wygenerowano w 0.030 sekund, wykonano 65 zapytań