logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega 16-16 Matrix wyświetla napis, ale nie generuje dźwięku - fusebity?

majk2000 13 Maj 2020 17:09 666 16
  • #1 18690426
    majk2000
    Poziom 11  
    Witam
    Post kieruję do znawców AVR. Jestem w trakcie wykonania wersji próbnej pewnego urządzenia wg dokumentacji otrzymanej od innej osoby.
    Klient dostarczył płytki drukowane oraz dokumentacje w tym plik ....hex do sterowania wyświetlaczem typu Matrix opartego na Atmega 16-16. Układ ma wyświetlać napis i generować co jakiś czas proste dźwięki. Znajomy dostarczył także działający prototyp oraz plik .hex. Wszystko miało działać. Niestety po wgraniu pliku .hex urządzenie nam nie wystartowało - świeca się 3 kolumny wyświetlacza i nic więcej. Spróbowaliśmy zgrać program z prototypu i tutaj niespodzianka gdyż układ chyba nie był zabezpieczony. To co otrzymaliśmy różni się nieco zawartością od .hex z dokumentacji pomimo podobnej wielkości pliku. Po wgraniu zgranego programu na nowe płytki okazało się że wszystko działa oprócz dźwięków. Na wyjściu PD0 procesora jest cisza. Tak samo jest na kilku płytkach.
    Tutaj rodzi się pytanie, czy można coś włączyć, wyłączyć poprzez poprzez fusebity ? Co może być odpowiedzialne za generowanie dźwięku na tym wyjściu? Może plik z dokumentacji wgrywam nie tak (wgrałam już tysiące programów, ale nie na ATMEGE 16).
    Proszę nie pisać że kopiuję urządzenie bez zgody producenta, właśnie producent zlecił mi wykonanie kilku płytek. Dodam do tego wszystkiego iż udało mi sie nawiązac kontakt z twórca oprogramowania ale tu też temat siadł - twierdzi że nie ma dostępu do dokumentacji z przed kilku lat a wg niego nie jest włączony PCM i więcej nie pomoże bo nie pamięta.
    Mile widzane jakieś sugestie, pomysły. Jest dla mnie zagadka jak zgrany i działający program może działac po wgraniu tylko częściowo. Nie chcę wgrywac zgranego programu ponownie do prototypowej płytki - możliwe że stracę jakikolwiek poprawnie działający egzemplarz. Sprawdzone na różnych programatorach, różnych programach.
  • #3 18691238
    majk2000
    Poziom 11  
    Tak Fusebity są te same, przekopiowane do nowych układów. No i nie ma chyba żadnego odpowiedzialnego za różne działanie wyjścia PD0. Płytki sa dokładnie te same, sprawdzone - te same piny.

    Dodano po 1 [minuty]:

    Tak prototyp działa prawidłowo.
  • #5 18691364
    majk2000
    Poziom 11  
    Eeprom pusty
  • #6 18691453
    JarekC
    Poziom 32  
    Jeżeli masz taką możliwość to zaprogramuj nową ATMEG16 i wlutuj w działająca prototypową płytkę i sprawdź czy działa.

    Mamy trochę mało informacji o całości układu aby jeszcze coś podpowiadać.
    Kiedy są generowane dźwięki, czy są inicjowane jakimiś sygnałami z zewnątrz?
  • #7 18692317
    majk2000
    Poziom 11  
    Procesory zamienione miejscami. Procesor z prototypu w nowej płytce działa poprawnie więc można wykluczyć błąd elektroniki. Urządzenie sterowane jest z kilkoma przyciskami , przyciśnięcie jednego z przyciskow powoduje że zmienia się tekst na wyświetlaczu i generuje krótki dźwięk. Tu wszystko działa prawidłowo, nie ma tylko tego dźwięku. Wyzwalanie dźwięku nie jest generowane z zewnętrznego przerwania itp.
  • #9 18692703
    dondu
    Moderator na urlopie...
    JarekC napisał:
    Czy ATMEGA ma podłączony kwarc czy korzysta z wew. generatora?

    Napisał, że:
    majk2000 napisał:
    Tak Fusebity są te same, przekopiowane do nowych układów.

    oraz że układ działa tylko nie ma dźwięku.

    Podaj jak masz ustawione fusebity.

    Zerknąłem do erraty, ale nie ma tam nic co mogłoby być przyczyną.

    Dziwna sytuacja, tym bardziej po ostatnim poście autora tematu.

    Gdzie zostały zakupione te nowe mikrokontrolery?

    Dodano po 40 [minuty]:

    Rozwiń proszę jeszcze ten wątek:

    majk2000 napisał:
    ... twierdzi że ... nie jest włączony PCM
  • #10 18693418
    majk2000
    Poziom 11  
    Atmegi mam z dwóch różnych źródeł. Oba to krajowe duże hurtownie. Oczywiście nowe. Układ pracuje z rezonatorem kwarcowym , na wewnętrznych zegarach zachowuje się identycznie. PD0 podłączone jest do układu dwóch tranzystorów. Elektronicznie tu wszystko działa. W fusebitach nie ma nic co bym moglobodpowiadać za taki stan rzeczy. Przeprowadzone próby na różnych ustawieniach. Czy jest możliwość aby z działającego układu zgrywala się tylko część programu ? Zgrany plik jest mniejszy od tego niedziałającego z dokumentacji niespełna jedną linijka kodu. może tu tkwi problem że nie wszystko się zgrywa a to co jest wystarcza do prawidłowego działania wyświetlacza.

    Odnośnie PCM, to była sugestia twórcy kodu do ktorego mam tylko kontakt mailowy. Twierdzi że nie będzie miał dostępu do dokumentacji a konstrukcji programu nie pamięta i nie pomoże. Zobowiązałam się do zmontowania tych płytek więc temat drąże aczkolwiek nie mam już pomysłów.
  • #12 18693800
    majk2000
    Poziom 11  
    Programatory to Kamami , USBasp oraz USB ISP . Schemat jest tak samo jak Gerbery do płytek. Nie trzeba rozrysowywać. Druga ostateczność to mały przyklejony Attiny generujący samodzielnie te dzwięki ale tutaj dojdzie mi troszke przewodów i przestanie to ładnie wyglądac. 5 sztuk sie zrobi ale jak będzie trzeba 100 czy wiecej to już gorzej. Kolejna to napisane tego od nowa. W sumie program mega skomplikowany nie jest, można to napisac choćby w Bascomie którego znam, zaletą samodzielna możliwość wprowadzenia zmian w oprogramowaniu ale to już ostateczność i na chwilę obecnę proponowanie takiego zlecenia także nie wchodzi w grę.

    Kod zgrany , dwie pierwsze i dwie ostatnie linijki
    :100000000C9447000C9464000C9464000C946400FD
    :100010000C94F0080C9464000C9464000C9464003C
    .
    .
    .
    :1023B000005E54504B5E544B4B6A54545E5E5E5EFE
    :1023C0000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF1B


    Kod z dokumentacji, nie działający , dwie pierwsze ,dwie ostatnie i trzy ze środka -
    proszę zwróć uwagę na te trzy linijki, czy tam czegoś w środkowej nie brakuje ?
    :100000000C9460000C947D000C947D000C947D0099
    :100010000C94E7080C947D000C947D000C947D00FA.
    .
    .
    .
    .:1020D000A61BB70B881F991F5A95A9F78095909555
    :0A20E000BC01CD010895F894FFCF74
    :1020EA0020202020204649524D412043524F51552D
    .
    .
    .

    :10224A00110A0420202020200020202020202020E5
    :04225A002020200020
    :00000001FF
  • #13 18693890
    JarekC
    Poziom 32  
    Ze zgranego Hexa widać że odczytane zostało około 9168 bajtów kodu (z 16kB dostępnych) ale można przypuszczać że pozostałe bajty to 0xFF i nie zostały zapisane do pliku.

    Oryginalny HEX to 8798 bajtów czyli zbliżona wielkość choć pewnie inne wersja kodu.
    W środkowej części raczej niczego nie brakuje , tylko przy generowaniu HEXa z kodu źródłowego mogą być
    selektywnie pominięte obszary zawierające 0xFF (wartość w czystym FLASHu).

    Pomysły mi się już skończyły.
    Nie widzę przyczyny dlaczego poprawnie skopiowany uP miałby nie działać.
  • #14 18693975
    szelus
    Poziom 34  
    Od razu widać, że program z dokumentacji i prototypu to inne wersje, ale może to być tylko inny poziom optymalizacji...
    Zgrywałeś też EEPROM, cz tylko FLASH?
  • #16 18694291
    Kuniarz
    Moderator Projektowanie
    Wyłącz JTAG w Fusebitach.
    Pomogłem? Kup mi kawę.
  • #17 18694312
    dondu
    Moderator na urlopie...
    Kuniarz napisał:
    Wyłącz JTAG w Fusebitach.


    Niestety koleżanka nie chce podać fusebitów. JTAG jast na pinach PC.. a nie PD.
    Czy JTAG może przeszkadzać też nie możemy więc sprawdzić, bo nie otrzymaliśmy schematu.

    Dlatego prosiłem o fusebity, ale koleżanka nie chce ich podać :)
    Ale twierdzi, że fusebity ustawiła tak samo jak w oryginale.

    @majk2000
    Ponieważ sytuacja jest co najmniej dziwna więc dziwne mogą Ci się wydawać nasze pytania :)
    Dlatego gdy prosimy o coś, to nie pisz że:

    majk2000 napisał:
    W fusebitach nie ma nic co bym moglobodpowiadać za taki stan rzeczy.

    tylko podaj to o co prosimy.

    Ponieważ nie ma punktu zaczepienia musimy sprawdzić, to co opisujesz. Napisz więc prosty program zmieniający w pętli stan pinu generując np. 1kHz i zaprogramuj jeden kupiony mikrokontroler umieszczony na płytce, którą zrobiłaś i sprawdź, czy dźwięk będzie generowany.

    Dodano po 25 [minuty]:

    majk2000 napisał:
    Odnośnie PCM, to była sugestia twórcy kodu do ktorego mam tylko kontakt mailowy.

    Poproś go, by wyjaśnił o co mu chodzi gdy pisze o niewłączonym PCM, bo ten mikrokontroler nie ma PCM.
    Jedynie USART ma Mulit-processor mode (MPCM), ale pin PD0 z funkcją RXD jest wejściem więc nie ma możliwości generowania sygnału na zewnątrz.

Podsumowanie tematu

Użytkownik pracuje nad urządzeniem opartym na mikrokontrolerze Atmega 16-16, które ma wyświetlać tekst na matrycy LED oraz generować dźwięki. Po wgraniu pliku .hex z dokumentacji, urządzenie nie działa poprawnie - wyświetlacz świeci, ale nie generuje dźwięków. Użytkownik sprawdził fusebity, które są zgodne z prototypem, oraz potwierdził, że płytki są identyczne. Dźwięk nie jest generowany na pinie PD0, który jest podłączony do tranzystorów. Użytkownicy sugerują sprawdzenie ustawień fusebitów, podłączenia kwarcu oraz ewentualne problemy z odczytem programu. Wskazano również na możliwość, że zgrany plik .hex może być niekompletny, co może wpływać na działanie dźwięku. Użytkownik rozważa napisanie programu od nowa jako ostateczność.
Podsumowanie wygenerowane przez model językowy.
REKLAMA