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

ATmega8 - pamięć i wspólpraca z przetw. C/A

kris669 14 Gru 2009 13:42 2897 8
REKLAMA
  • #1 7387506
    kris669
    Poziom 20  
    Witam, będę wykonywał programator USBasp, wszystko do niego posiadam, ale pojawiła się (dla mnie) zagadka, jak to jest, że firmware (plik HEX) zajmuje 9,3 kB, a ATmega8 ma poj. 8kB pamięci (wiem, że głupia sprawa, ale mnie po prostu zainteresowała).
    Kolejną sprawą jest współpraca tego mikrokontrolera z przetwornikiem C/A. Czytałem o podłączeiu przetwornika przez I2C, ale zaciekawiło mnie podłączenie "zwykłego", czyli jedna nóżka-jeden bit. I się zastanawiam, czy powinien być on 8 czy 10-cio bitowy (jak przetwornik A/C wewnętrzny). Jeśli 8-mio, to nie ma problemu, tyle wyjść mają porty, a jeśli 10-cio? Bardzo ciekawi mnie rozwiązanie tych teoretycznych "problemów". Notę katalogową próbuję czytać, ale po angielsku niestety (więc nie jestem pewny niekórych tam zawartych wiadomości).
    A tak przy okazji, to zauważyłem, że np. Bascom tworzy wiele różnych plików podczs kompilacji, więc dla pewności zapytam, czy ważny jest tylko ten HEX?
  • REKLAMA
  • #2 7387627
    mirekk36
    Poziom 42  
    kris669 napisał:
    Witam, będę wykonywał programator USBasp, wszystko do niego posiadam, ale pojawiła się (dla mnie) zagadka, jak to jest, że firmware (plik HEX) zajmuje 9,3 kB, a ATmega8 ma poj. 8kB pamięci (wiem, że głupia sprawa, ale mnie po prostu zainteresowała).


    rzeczywiście głupia sprawa i polecam ci zapoznać się z budową/formatem pliku HEX i skąd się biorą jego rozmiary. To nie jest plik binarny. Wystarczy napisać do wujka googla ;) "Intel HEX" a on od razu podpowie ci na milion sposobów, proszę bardzo to jeden z nich

    http://en.wikipedia.org/wiki/Intel_HEX

    po tej lekturze sam sobie odpowiesz na to pytanie dlaczego rozmiar tego pliku jest większy niż pamięć procesora ;)


    kris669 napisał:

    Kolejną sprawą jest współpraca tego mikrokontrolera z przetwornikiem C/A. Czytałem o podłączeiu przetwornika przez I2C, ale zaciekawiło mnie podłączenie "zwykłego", czyli jedna nóżka-jeden bit. I się zastanawiam, czy powinien być on 8 czy 10-cio bitowy (jak przetwornik A/C wewnętrzny). Jeśli 8-mio, to nie ma problemu, tyle wyjść mają porty, a jeśli 10-cio? Bardzo ciekawi mnie rozwiązanie tych teoretycznych "problemów". Notę katalogową próbuję czytać, ale po angielsku niestety (więc nie jestem pewny niekórych tam zawartych wiadomości).
    A tak przy okazji, to zauważyłem, że np. Bascom tworzy wiele różnych plików podczs kompilacji, więc dla pewności zapytam, czy ważny jest tylko ten HEX?


    Odnośnie przetworników A/C i ich rozdzielczości podawanej w bitach to musisz też jeszcze poczytać. Przecież tu także google ci pomoże. A ilość nóżek w przetworniku czy w procesorze nie ma NIC WSPÓLNEGO z tym ilo bitowy jest przetwornik. Bo widzę, że ty zrobiłeś sobie maksymalny możliwy skrót myślowy i wg niego jeśli np Procesor ATmega ma 8 nóżek przetwornika A/C to oznacza, że jest 8bitowy tak??? A jeśli ma 6 nóżek od części analogowej A/C - to co? wtedy ma być 6bitowy????

    OOOj tu się grubo mylisz. Każda z 8 czy 6 nóżek może być oddzielnym wejściem dla jednego przetwornika w takich prockach, który może pracować w trybach 8 bitowym lub np 10 bitowym. A programowo można jeszcze z niego wyciągnąć ze 2 bity rozdzielczości więcej przez tzw OverSampling. No ale o tym to później już poczytasz - jak załapiesz podstawy.

    Polecam ci jakąś dobrą książkę np wydawnictwa BTC "Mikrokontrolery Atmega w praktyce" - i po tej lepkturze w języku ojczystem będziesz dużo więcej wiedział - zadając kolejne już bardziej precyzyjne pytania ;)
  • Pomocny post
    #3 7387637
    zbychmg
    Poziom 31  
    Hex zajmuje więcej, bo format HEX zawiera numery linii i każdy bajt jest zapisywany 2-ma znakami ASCII. Plik binarny jest ok 0.4 raza pliku HEX.
    Przetwornik prawdopodobnie jest podłaczony magistalą 1-wire, transmisja jest szeregowa i wynik może być przesyłąny na dowolnej ilości bitów podzielonych w paczkizależnie od używanego protokołu. Wpisz hasło 1-wire i będziesz wiedział więcej.
    Do zaprogramowania kostki potrzebny jest HEX lub bin, reszta to pliki pomocnicze
  • REKLAMA
  • #4 7388011
    kris669
    Poziom 20  
    "Odnośnie przetworników A/C i ich rozdzielczości podawanej w bitach to musisz też jeszcze poczytać. Przecież tu także google ci pomoże. A ilość nóżek w przetworniku czy w procesorze nie ma NIC WSPÓLNEGO z tym ilo bitowy jest przetwornik. Bo widzę, że ty zrobiłeś sobie maksymalny możliwy skrót myślowy i wg niego jeśli np Procesor ATmega ma 8 nóżek przetwornika A/C to oznacza, że jest 8bitowy tak??? A jeśli ma 6 nóżek od części analogowej A/C - to co? wtedy ma być 6bitowy????"

    Troszkę się nie zrozumieliśmy. Odnośnie wbudowanego przetwornika A/C to wiem, że jest on 10 bitowy. Tu wszystko jest jasne, oraz to że wejścia są multipleksowane i może być ich np. 6 lub 8. Ważne jest dla mnie jednak to, że jak np. mam już podany sygnał analogowy i przetworzony na cyfrowy (zakładam że 10 bitów) w procesorze i ten cyfrowy podaję na zewnętrzny przetwornik cyfrowo-analogowy (podłączony do portu procesora), to jaka powinna być jego rozdzielczość? Jeden port ma 8 wyprowadzeń, no więc podłączając przetwornik C/A 10b musiałbym wykorzystać dodatkowo dwa wyprowadzenia innego portu, chyba, że wykorzystam jedynie 8 bitów (rozważam na razie jedynie zwykły przetwornik w którym jedno wejście-jeden bit, nie transmisję szeregową, bo wtedy sprawa też jest zrozumiała).
    Co do pliku HEX to oczywiście się wyjaśniło, a więc jeśli się nie mylę, to program obsługujący programator konwertuje ten format do postaci binarnej.
  • Pomocny post
    #5 7388590
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #6 7388750
    tmf
    VIP Zasłużony dla elektroda
    Kris, po kolei. HEX zawiera pewien opis - adresy i bajty, ktore programator pod te adresy ma zaladowac. Stad zwykle program programatora interpretuje HEX, czyta, ze np. pod adres 0x0010 ma zapisac ciag kolejnych 16 bajtow, potem czyta, ze kolejne 16 bajtow maja wywedrowac pod adres np. 0x0030 itd. Dzieki temu HEX nie musi zawierac "dziur" - ktore powstaja np. jesli masz program i jednoczesnie bootloader. W pliku binarnym pomiedzy programem i bootloaderem bylaby "dziura" wypelnonia najczesniej 0xff, natomiast w pliku HEX po prostu nie ma instrukcji dla programatora zapisu w tym obszarze. Dlatego pliki binarne zwykle maja dlugosc identyczna jak ilosc pamieci w danym kontrolerze, pliki HEX niekoniecznie (nie zawieraja opisu nieuzywanych obszarow pamieci).
    Co do DAC - sposob polaczenia DAC z mikrokontrolerem nie implikuje jego rozdzielczosci. Stosujac np. 16-bitowy DAC mozesz go polaczyc zarowno poprzez 8-bitowa szyne (port IO) i wysylac dwa bajty po kolei stanowiace cala 16-bitowa dana dla DAC, a mozesz go podlaczyc po SPI i wysylac calosc szeregowo za pomoca tylko 2 pinow, albo po I2C. Ja np. korzystam z DAC 6-bitowego, I2C i mam tylko dwa piny zajete.
    To o czym myslisz jak sadze wynika z implementacji prostego DAC opartego na drabince rezystorowej R2R. Wtedy istotnie potrzebujesze tyle portow IO ile bitow rozdzielczosci chcesz osiagnac, ale to specyficzna sytuacja, w ktorej po prostu w pewnym sensie zamieniasz port IO kontrolera w DAC.
    Zeby jeszcze bardziej zamieszac (a byc moze rozjasnic) - jako DAC mozesz wykorzystac wyjscie PWM timera, podlaczajac do niego filtr RC. Rozdzielczosc tak uzyskanego DAC bedzie determinowana rozdzielczoscia generatora PWM, a zajmie to tylko jeden pin i jest dostepne w kazdym procesorze AVR.
  • REKLAMA
  • #7 7391455
    kris669
    Poziom 20  
    Dzięki za wyczerpujące temat odpowiedzi. Właśnie o to mi chodziło, teraz się wszystko wyjaśniło.
  • REKLAMA
  • #8 8020123
    Adrian_sekowski
    Warunkowo odblokowany
    Właśnie co do DAC mam pytanie.

    Gdyż atmega8 sama w sobie ma tylko ADC a czy działa to w odwrotną stronę. Chcę aby atmega mi podawała poziom napięcia na wyjściu np aby sterować tranzystor ale nie Zatkany Nasycony tylko płynnie.

    Muszę mieć zewnętrzny przetowornik cyfrowo analogwy? Ja jestem na niskim poziomie dopiero poznałem dość znacznie timery i teraz zabieram sie za przetworniki.
  • #9 8020372
    tmf
    VIP Zasłużony dla elektroda
    Nie, w tym celu możesz wykorzystać timer w trybie PWM + filtr RC, który z przebiegu o zmiennym wypełnieniu zrobi ci przebieg o zmiennej amplitudzie.
REKLAMA