Kurde, no jak ok? Nie jest wcale ok, bo mi dałeś do myślenia, więc teraz rozważam różne przypadki, i próbuję wymyślić taki, w którym może coś pójść nie tak. Dlatego mam prostą prośbę, żebyś ewentualnie też się nad tematem teoretycznie pochylił w głowie i napisał czy po przemyśleniu moja metoda będzie dobra, czy nie, albo wskazał coś co mogę przetestować bo budzi niepewność.
Przez Twoje wątpliwości od przeszło godziny robię różne testy, ale niestety urządzenie działa cały czas poprawnie.
Jedyne co mi przyszło do głowy, to gdyby sformatować dyskietkę na inną ilość ścieżek i wymienić ją na inną... Wszystkie dyskietki mam z ilością 80 ścieżek, ale sformatowałem przed chwilą jedną dyskietkę na 40 ścieżek. Byłem ciekaw czy jak głowica stanie na ścieżce powiedzmy 67 a ja zmienię dyskietkę na taką, która ma 40 ścieżek, to teoretycznie cofanie do zera powinno cofnąć mój licznik do 27 zamiast do 0. Jednak tak się nie dzieje, a to dlatego, że głowica na dyskietce 40 ścieżek robi po prostu podwójne kroki i również cofa się do zera. Z drugiej strony zastanawiające jest to, że jak dyskietka formatuje się na 40 tracków, to mój licznik nie pokazuje podwójnie tych ścieżek, tylko liczy je od 0 do 39 i też żadnych błędów nie robi. Wniosek mi się nasuwa taki, że może stacja dla 40 ścieżek nie robi po dwa kroki, tylko impuls Step trwa dłużej i silnik przesuwa się jakby jednym ruchem o dwa kroki. Po zmianie dyskietki natomiast stacja porusza głowicą z powrotem o swoją maksymalną ilość pojedynczych kroków aż do wykrycia dyskietki o innej ilości ścieżek. Jakoś tak to musi działać "na oko" (nie oglądałem tego przyrządami, tylko widzę jak pracuje stacja, stąd nieprecyzyjne wnioski).
Tak czy owak wszystko działa poprawnie jak należy, przynajmniej z moją stacją, z tym że to jest XF551 z flopem 3,5" DD, jest teoretycznie możliwość (nie wykluczam), że na innej stacji zachowanie mogło by być inne.
Ewentualna modyfikacja całości tak, żeby używać sygnału Track0 dla większej pewności niedowiarków, to bardzo prosta przeróbka. Na schemacie wystarczy dołożyć jeden pin wejściowy i podpiąć do niego sygnał Track0 (np. do PD0 - tak miałem ją początkowo podpiętą). Konfiguracja pinu w programie na attiny musi być identyczna jak pinów Step i Dir, czyli ustawione jako wejście i podciągnięte wewnętrznie pull-up. Linia ta w stacji jest normalnie w stanie wysokim, a kiedy głowica znajdzie się na zerowej ścieżce, to linia przechodzi w stan niski. Wystarczy zatem w głównej pętli programu (obecnie pętla jest pusta, bo wszystko robione jest na przerwaniach), (edit: lub np. wewnątrz procedury obsługi przerwania timera multipleksującego wyświetlacze/edit) zrobić warunek if, który sprawdzi stan pinu PD0 i jeśli stan jest niski, to wyzeruje naszą zmienną licznika ścieżek. Jedna linijka kodu - jak wcześniej zauważył Candle. Tak sobie myślę po tym wszystkim co tu napisałem, że szybciej bym to chyba zaaplikował i przetestował niż to wszystko napisałem:-)