Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

atmega8 - odtwarzanie wav z karty SD pytania

Razqer 09 Lut 2013 21:19 4023 11
  • #1 09 Lut 2013 21:19
    Razqer
    Poziom 6  

    Witam,
    Zaczynam zabawę z mikro atmela i postanowiłem zmontować układzik jaki znalazłem na stronie http://elm-chan.org/works/sd8p/report.html gdyż najlepiej uczyć się w praktyce. Tam zrobione jest to na ATtiny85 natomiast ja chciałbym użyć ATmegi8 i jako że jestem świeży w temacie to mam kilka pytań:

    1) Czy skoro oba mikro są z tej samej rodziny to wystarczy kierując się notami katalogowymi podpiąć układ wg schematu do odpowiadających pinów w atmedze8, czy zmiana modelu wymaga czegoś więcej?

    2) Ponieważ karta SD wymaga zasilania 3.3V natomiast zwykła mega8 chodzi na 5V to w takim przypadku lepiej użyć atmegi8L czy bawić się w dzielniki napięć między kartą a mikro? Pytam ponieważ model 8L jest wolniejszy od zwykłej 8 a w innym temacie ktoś pisał że zbyt wolny uC może nie wyrabiać z odczytem karty.

    3) Czym jest HVSP? Gdyż na schemacie wersji stereo pisze że wymaga ona takiego programatora a google nic o tym nie znajduje.

    Z góry dziękuję za odpowiedzi

    0 11
  • #2 09 Lut 2013 22:08
    mickpr
    Poziom 39  

    Razqer napisał:
    1) Czy skoro oba układy są z tej samej rodziny to wystarczy kierując się notami katalogowymi podpiąć układ wg schematu do odpowiadających pinów w atmedze8, czy zmiana układu wymaga czegoś więcej?
    Dużo więcej. Musisz napisać cały program od nowa.
    Razqer napisał:
    2) Ponieważ karta SD wymaga zasilania 3.3V natomiast zwykła mega8 chodzi na 5V to w takim przypadku lepiej użyć atmegi8L czy bawić się w dzielniki napięć między kartą a układem? Pytam ponieważ układ 8L jest wolniejszy od zwykłej 8 a w innym temacie ktoś pisał że zbyt wolny mikro może nie wyrabiać z odczytem karty.
    Można użyć konwerterów scalonych. Dzielniki napięcia są kiepskim rozwiązaniem (choć tanim).
    Razqer napisał:
    3) Czym jest HVSP? Gdyż na schemacie wersji stereo pisze że wymaga ona takiego programatora a google nic o tym nie znajduje.
    To tzw. wysokonapięciowe programowanie szeregowe (High-Voltage Serial Programming).
    Stosowany jest przy programowaniu mikrokontrolerów AVR Tiny.
    Przykład programatora:
    https://www.elektroda.pl/rtvforum/topic1115734.html
    Przy Atmedze 8 wystarczy zwykły programator (np. USBASP).

    0
  • #3 10 Lut 2013 00:01
    piotrva
    Moderator Mikrokontrolery

    Zacznijmy od pytania 1) - oba układy są z tej samej RODZINY, ale nie SERII. rodzina to AVR, potem mamy podrodziny: TinyAVR (np. ATTiny85), MegaAVR (np. ATMega8) i XMegaAVR (to już spore układy jak ATXMega128A1), a potem rodziny (np. ATMega88, 168, 328). I o ile wewnątrz takiej rodziny np. bez problemu kod dla ATMega88 odpalę na atmedze168 i 328, o tyle nawet przeskok między np. ATMega8 a ATMega88 jest czasem problematyczny, gdyż układy te posiadają różne funkcje i nawet dokonując korekty rejestrów może się zdarzyć, że jakaś funkcja z ATMega88 używana w programie nie jest dostępna na ATMega8 (np. PCINT).
    Dodatkowo z tego co pamiętam ten projekt odtwarzacza to wykorzystuje on funkcje ATTiny85, których nie ma ATMega8.
    2) Co do prędkości pracy - układ musi pracować z taką prędkością, pod jaką przygotowano program. Szczególnie w przypadku dźwięku - nie chciałbyś przecież odtwarzać wszystkiego np. 2 razy wolniej, no nie? Co do konwersji poziomów napięć to powiem tak, że najlepszym rozwiązaniem są scalone konwertery, jak pisze przedmówca (to jest zwykle mała kosteczka w obudowie typu so16), ale osobiście w projektach niekomercyjnych z powodzeniem stosowałem dzielniki napięć, choć czasem mogą sprawiać one kłopoty.
    3) Odniosę się do stwierdzenia

    mickpr napisał:
    Stosowany jest przy programowaniu mikrokontrolerów AVR Tiny.
    Bo przedmówca użył skrótu myślowego. Otóż normalnie procesory AVR (mówię o większości popularnych) programuje się za pomocą interfejsu ISP, czyli In System Programming - innymi słowy mówiąc do gotowego układu podpinamy 6 przewodów i programujemy umieszczony w nim procesor. Programowanie w tym trybie wymaga jednak możliwości zewnętrznego zresetowania procesora, czasem jednak zachodzi w krytycznych projektach (jak ten) konieczność użycia pinu RESET jako dodatkowego wyprowadzenia używanego przez program. Wtedy jednak tracimy możliwość programowania przez ISP i musimy sięgnąć do "brutalnej metody" jaką jest HVPP/HVSP (High-Voltage Parallel/Serial Programming - wysokonapięciowe programowanie równoległe/szeregowe). Wersje HVPP stosuje się do większych procesorów (typu ATMega8), które mają wystarczającą liczbę pinów do podpięcia pełnej 8-bitowej szyny danych, zaś HVSP stosuje się w małych układach mających zbyt mało wyprowadzeń. Programowanie to polega na zmuszeniu procesora do współpracy poprzez podanie na jego pin RESET napięcia ok. 12V - wtedy niezależnie od ustawień procesora aktywowany jest tryb programowania i można z procesorem zrobić wszystko. Jak jednak zaznaczam, normalnie procesory da się programować za pomocą ISP i jest to najczęściej wykorzystywany przy procesorach AVR interfejs.

    Na koniec odniosę się do tego:
    Razqer napisał:
    Zaczynam zabawę z mikro atmela (...) gdyż najlepiej uczyć się w praktyce.

    Moim zdaniem, jeśli chcesz się czegoś nauczyć to wykonywanie projektów "na małpkę" nie jest wcale nauką w praktyce. Jak chcesz się nauczyć odstaw programowania w praktyce, jak zapewne nie zajrzysz nawet do kodu i nie będziesz umiał go zrozumieć na początku, tylko wgrasz na zasadzie "kopiuj-wklej"? Jeśli chcesz się nauczyć w PRAKTYCE to weź parę elementów, jakiś programator, procesorek (na początek polecam ATMega328p), dokumentacja procesora w dłoń, ewentualnie jakaś książka (polecam pozycję Mirosława Kardasia) i zaczynaj zabawę w TWORZENIE i naukę, a nie ODTWARZANIE I KOPIOWANIE.

    0
  • #4 10 Lut 2013 01:54
    sorex86
    Poziom 15  

    Jezeli dopiero zaczynasz zabawe z AVR daj sobie spokoj z karta SD. Ta biblioteka jest na poczatek "zbyt skomplikowana", chyba, ze masz niezla wiedze na temat C (wskazniki, tablice, struktury).

    Jezeli nie dasz rady napisac ponizej 2h np takiego projektu, ze wysylasz z terminala do AVR stringa "LED ON PIN B1" oraz "LED ON PIN B2" to znaczy, ze to jeszcze nie ten etap - karta SD musi zaczekac. Czasem lepiej zaczac od mniejszych projektow. Ctr c ctr v to kazdy potrafi, cala zabawa polega na tym aby samemu pisac biblioteki, a nie uzywac gotowcow.

    0
  • #5 10 Lut 2013 02:08
    mickpr
    Poziom 39  

    sorex86 napisał:
    cala zabawa polega na tym aby samemu pisac biblioteki, a nie uzywac gotowcow.
    Pozwolę się nie zgodzić z tym stwierdzeniem.
    Gdybym ja (przykładowo) pisząc aplikację tworzył wszystko od zera - nie zarobił bym ani centa.
    Jako przykład podam projekt, którym się obecnie zajmuję (RF/SimpleMac) z bibliotekami ST dla STM32W108.
    Po co mam tracić czas na pisanie stosu sieci bezprzewodowej opartej o RF, skoro podstawową funkcjonalność mam już gotową?
    Czy trzeba wyważać otwarte drzwi?
    W ten sposób (nie korzystając ze spadku po tych "co przed nami") stalibyśmy cywilizacyjnie w miejscu.

    Dobre biblioteki to niekoniecznie własne twory. Znajomość korzystania z nich - bezcenna.
    Powiem więcej. Dobre biblioteki sprzedaje się za duuuuuuuuuże pieniążki.

    P.S.
    Od dłuższego czasu szukam darmowej biblioteki dającej funkcjonalność systemu plików do pamięci SPI flash z tzw. "wear-leveling".

    0
  • #6 10 Lut 2013 09:13
    piotrva
    Moderator Mikrokontrolery

    Zgodzę się i nie.
    Z jednej strony owszem, sam korzystam z wielu bibliotek i czasem, jak mówisz, traciłbym sporo czasu i kasy na pisanie wszystkiego od podstaw. Nie każę nikomu pisać obsługi kart sd i systemu FAT, ale...
    No właśnie po pierwsze ja rozumiem np. jak dostosować FATFs pod swój projekt, jak działają jego funkcję, czym jest wskaźnik itp. Ale Autor jest początkujący. Czy uważasz że nauczy się czegoś wciskając ctrl-c, ctrl-v i compile oraz program? Moim zdaniem nie.
    Albo jak damy mu bibliotekę z funkcjami typu zapal_led_pb0(); czekaj_sekunde(); odczytaj_klawisz_i_zapal_led_pb5();, to czy nasz uczeń nauczy się o tym jak działa interfejs i/o procesora? Albo jak eliminować drgania stykow i co to jest skoro załatwia to funkcja? Moim zdaniem nie.

    Więc używanie bibliotek - tak, nauka na gotowcach - nie.
    Sam znam parę osób które jedyne co potrafią to ctrl-c i ctrl-v i tak sklejają toporne kody z kilku gotowców

    0
  • #7 10 Lut 2013 09:36
    tmf
    Moderator Mikrokontrolery Projektowanie

    Nie do końca się z tobą zgodzę. Wszystko zależy co jest celem programowania. Czy jest to napisanie programu realizujęcego jakieś zadanie, czy poznanie jak płyną elektrony?:) Np. pisząc w .NET nie mam zielonego pojęcia jak coś działa, ale to zaleta a nie wada (w większości zastosowań). Czy jeśli korzystam z biblioteki AVR-libc, która maskuje mi dostęp do EEPROM to dobrze, czy źle, bo nie wiem jak to działa na poziomie rejestrów? Nawet z tym FAT, co mnie obchodzi jak FAT działa, skoro chcę tylko odczytać/zapisać plik na SD?

    0
  • #8 10 Lut 2013 13:23
    piotrva
    Moderator Mikrokontrolery

    Owszem, OK, ale nadal nie rozumiesz o co mi chodzi. może powtórzę jeszcze raz: KORZYSTANIE Z BIBLIOTEK NIE JEST ZŁE, ok? Sam korzystam z wielu gotowych bibliotek (do obsługi różnych LCD, stosów TCP/IP, FatFs - też nie mam parcia na to, żeby rozgryzać bit po bicie system plików, czy całe protokoły TCP/IP na potrzeby jednego projektu, i wiele innych), ale biblioteka != gotowiec.

    Ale uważam, że NAUKA PRZEZ BEZMYŚLNE KOPIOWANIE nie ma sensu (a do tego sprowadza się zwykle wśród tej grupy uczniów ta "nauka" - poszukajcie sobie na elektrodzie tematów typu <<szczególnie w BASCOM>>: "skleiłem kod zegarka i termometru z 2 projektów i mi nie działa - dlaczego? POMOCYY!!! SZIEDĘ NAD TYM JUŻ CAŁY DZIEŃ!!!", a w kodzie takie kwiatki jak 2 osobne pętle główne, jedna od zegarka, a druga od termometru...).

    Czym innym jest zastosowanie w swoim projekcie biblioteki, na zasadzie: "Znalazłem taką a taką bibliotekę do obsługi LCD, taką do obsługi 1-wire i zrobiłem termometr", a czym innym "Znalazłem gotowy projekt termometru - wgrałem hex'a z załącznika, połączyłem kabelki według opisu i działa".

    Jeśli według kogokolwiek celem nauki programowania jest powielanie gotowych projektów (najlepiej z gotowymi plikami hex w załączniku) to pozdrawiam i życzę powodzenia. Moim zdaniem nauką może być przystosowanie czegoś gotowego do swoich celów, ale skopiowanie gotowca nie jest ani trochę dydaktyczne.

    Nawet stosując gotowe frameworki, biblioteki, też musisz mieć jakąś podstawową wiedzę o programowaniu. Sam przyznasz, że skompilowanie gotowego projektu terminala RS232 nie jest dydaktyczne, ale napisanie terminala RS232 z wykorzystaniem bibliotek do obsługi COM, różnych bibliotek do projektowania graficznego już jest dydaktyczne. Nie muszę wiedzieć jak u licha moja biblioteka radzi sobie z ustawieniem parametrów portu, ani jak zrealizowane jest rysowanie przycisków i pól tekstowych, ale muszę wiedzieć co to jest wskaźnik/uchwyt (do otwartego portu com na przykład), oraz jak w danym frameworku zapisać dane do pola tekstowego oraz np. jak przekonwertować odebrane kody ASCII znaków na stringa z całą ramką danych i jak z tej ramki wyciąć interesujące mnie dane do wyświetlenia na ekranie.

    A co do znajomości na poziomie rejestrów, no to weźmy np. tę bibliotekę FatFs, czy tuxgraphics. Uważasz, że wiedza nt. podstaw obsługi naszego AVR'ka nie jest potrzebna do ich uruchomienia? Że biblioteki same za nas się skonfigurują i wykryją gdzie podłączamy kartę SD oraz czy wykorzystujemy pin CDET oraz sterowanie zasilaniem karty? Bo moim zdaniem, nawet żeby nie wnikając w strukturę plików systemu FAT, nawet nie wiedząc jak wysłać bajt po SPI, to do konfiguracji tej biblioteki pod jakikolwiek projekt jest potrzebna znajomość absolutnych podstaw, wykraczająca jednak poza umiejętność kliknięcia przycisków "Build all" i "Program FLASH" oraz podłączenia programatora do układu. Trzeba choćby wiedzieć jak definiowane są rejestry w procesorze i jak się z grubsza nazywają, oraz jak wyrzucić elegancko niechciane i nieużywane funkcje, jak np. wykrywanie karty po pinie CDET, jeśli używamy akurat slotu MicroSD bez tego styku.

    0
  • #9 10 Lut 2013 13:48
    tmf
    Moderator Mikrokontrolery Projektowanie

    Zgodzę się, ale mamy różnice nomenklaturowe :) Jeśli mówimy, że ktoś się uczy, to się uczy. Czy uczy się na poziomie rejestrów, czy wykorzystania biblioteki to bez znaczenia. Natomiast jeśli ktoś robi bezmyślnie copy/paste to nie jest to dla mnie nauka.
    Swoją drogą większość bibliotek dostępnych do AVR jest tak fundamentalnie skopana, że istotnie trzeba się potem zagłębiać w jakieś piny, żeby to działało. A przecież można zrobić FATFS_init(&PORTA, 0) i wiadomo, że np. piny 0-3 będą wykorzystane, do łączności z SD. Czy np. FATFS_init(&Driver_SDHC); i żadna pinologia nie jest potrzebna. Ew. jest potrzebna na poziomie inicjalizacji drivera SDHC. Ok, samo c temu nie sprzyja, bo aż prosi się w takich przykładach o C++ i szablony dla optymalizacji, ale to poza tematem :)

    0
  • #10 10 Lut 2013 17:17
    piotrva
    Moderator Mikrokontrolery

    No różnice nomenklaturowe, jak to zawsze bywa, pewnie osobiście od razu znaleźlibyśmy wspólny język. Nie wiem jak teraz w przykładach FatFS dla AVR jest, ale w tej wersji z której korzystałem ostatnio przy projekcie z zapisem na SD trzeba było mocno pogrzebać w plikach "dialogu z hardware", żeby przystosować to do moich potrzeb w 100%.

    0
  • #11 11 Lut 2013 03:55
    Razqer
    Poziom 6  

    Dzięki za odpowiedzi. Widzę jednak że źle sformułowałem pytanie 1 i przez to zostałem źle zrozumiany. Jestem początkujący w mikro, ale zdaję sobie sprawę że taka zmiana będzie wymagała napisania nowego programu ;)
    W pytaniu chodziło mi o kwestię techniczną- czy moge tak samo podpiąć głośniki i gniazdo SD do atmegi8 jak na tym schemacie zostało to zrobione z attiny bez żadnych drabinek czy wzmacniaczy i czy to zadziała.
    o cos takiego
    atmega8 - odtwarzanie wav z karty SD pytania

    Co do samego uczenia się nie zamierzałem kopiować kodu. Znam język C chociaż nigdy nie stosowałem go do mikrokontrolerów, a projekt wybrałem ponieważ wydał mi się praktyczny i prosty w zmontowaniu. Co dalo by więcej czasu na eksperymenty z programowaniem.

    Nie wiem tylko jak z tym wyborem między atmegą8 a atmegą8L - skoro kwestią jest sam program to chyba lepiej będzie wybrać układ L skoro dzięki temu ominę problem konwersji napięć. Czy się mylę?

    0
  • #12 11 Lut 2013 09:37
    tmf
    Moderator Mikrokontrolery Projektowanie

    Nasza dyskusja nie dotyczyła ciebie, jak to zwykle bywa zeszło nam trochę z tematu :)
    Co do twojego problemu - zasilaj procka z 3,3V to żadne translatory poziomó nie będą potrzebne. Warto też porzucić staruszka Mega8 na rzecz co najmniej ATMega88. Jest to praktycznie to samo, tylko, że po liftingu. Kartę SD podłączasz pod port SPI mikrokontrolera i tyle.

    0