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

[AVR][C] Cyfrowe echo na ATmega32

rav1989 16 Lis 2010 22:36 5149 28
  • #1 8753209
    rav1989
    Poziom 11  
    Witam

    Mam do zrealizowania projekt kompetencyjny "Cyfrowe echo" cały projekt ma opierać się na ATmega32, a program ma być napisany w C (AVR Studio). Schemat nie był problemem gdyż częścią analogową (podłączenie mikrofonu i głośnika) wzorowałem na tym: Link, wprowadziłem tylko 2 modyfikacje, podłączyłem mikrofon do ADC, a głośnik do OC2 z myślą wykorzystania PWM. Niestety problem pojawił się gdy nadszedł czas pisania programu :/ wstępne założenie było takie, że do generowania opóźnień użyje buforu kołowego, ale obawiam się, że ten pomysł nie jest do końca dobry gdyż uzyskane opóźnienie będzie małe (ATmega będzie taktowana kwarcem 16MHz), a jeszcze trzeba tym opóźnieniem sterować... dochodzą też dwa problemy związane z odbiorem i generacją dźwięku mianowicie czy sygnał z mikrofonu nie będzie za słaby dla ADC i czy to PWM nie będzie mi przypadkiem charczało.
    Dlatego też chciałbym się poradzić i zapytać jak ten problem ugryźć tak, żeby sobie zębów nie wybić... i nie nabawić się nerwicy...

    Schemat (prosiłbym też o jego sprawdzenie) wartości takie jak w pierwowzorze :D
    [AVR][C] Cyfrowe echo na ATmega32

    Tak na szybko mogę napisać, że sterowanie opóźnieniem ma się obywać przy pomocy przycisków (S1, S2) lub po rs232 z komputera (przez specjalny program) natomiast wartość opóźnienia będzie wyświetlana na LCD.

    P.S.
    I tak sobie myślę, że maksymalne opóźnienie powinno wynosić 1 sek. a minimalne 0 sek. (dźwięk z wejścia jest od razu przekazywany na wyjście).

    Pozdrawiam
    Rafał
  • #2 8753949
    jarekz_2
    Poziom 16  
    rav1989 napisał:
    Witam
    Mam do zrealizowania projekt kompetencyjny "Cyfrowe echo" cały projekt ma opierać się na ATmega32 (...)

    Moim zdaniem w urządzeniu tej klasy realizowanie opóźnienia 1s jest niecelowe.
    Obliczmy: przy zegarze 16MHz przetwornik A/C będzie taktowany ze 125kHz. Daje to częstotliwość próbkowania zaledwie 125kHz/13 = 9,6kHz. Uwzględniając jeszcze 8-bitową rozdzielczość możemy powiedzieć, że system nada się co najwyżej do sygnału mowy. Wykorzystując wewnętrzny RAM osiągniemy maksymalne opóźnienie ok. 2000/(9,6kHz) = 0,2s. Można rozważać dołączenie zewnętrznego RAM-u w celu wydłużenia tego opóźnienia, uważam jednak, że nie warto. Niech to będzie małe urządzonko dające maksymalne efekty przy minimalnej ilości użytych elementów. Można by co najwyżej opcjonalnie przełączać częstotliwość próbkowania na np. 4,8kHz i uzyskać ok. 0,4s opóźnienia, lub dodatkowo obciąć rozdzielczość do 4 bitów, uzyskując ok. 0,8s.
    Inny pomysł, jaki mi się zrodził, to uproszczenie wzmacniacza do 2 tranzystorów (skoro masz wyjście PWM) i cyfrowa regulacja głośności przez S1/S2.
    Projekt wygląda na ciekawy. Rób go etapami; najpierw uruchom przetwarzanie C/A (wyjście PWM), wypuść na głośnik jakiś sygnał testowy; potem wejście mikrofonowe i przetwarzanie A/C; sygnał poprowadź (bez opóźnienia) do C/A; sprawdź czy jakość dźwięku cię satysfakcjonuje; poeksperymentuj z częstotliwością próbkowania i rozdzielczością; potem zrealizuj linię opóźniającą i jej sterowanie. Życzę powodzenia!
  • #3 8754268
    kubus_puchatek
    Poziom 18  
    dodaj za mikrofonem tranzystor NPN ze sprzężeniem baza-kolektor. jak dobrze dobierzesz sprzężenie to choć z mikrofony dostaniesz sygnał z sensem a to dużo poprawi
  • #4 8754453
    rav1989
    Poziom 11  
    jarekz_2 napisał:

    Moim zdaniem w urządzeniu tej klasy realizowanie opóźnienia 1s jest niecelowe.
    Obliczmy: przy zegarze 16MHz przetwornik A/C będzie taktowany ze 125kHz. Daje to częstotliwość próbkowania zaledwie 125kHz/13 = 9,6kHz. Uwzględniając jeszcze 8-bitową rozdzielczość możemy powiedzieć, że system nada się co najwyżej do sygnału mowy. Wykorzystując wewnętrzny RAM osiągniemy maksymalne opóźnienie ok. 2000/(9,6kHz) = 0,2s. Można rozważać dołączenie zewnętrznego RAM-u w celu wydłużenia tego opóźnienia, uważam jednak, że nie warto. Niech to będzie małe urządzonko dające maksymalne efekty przy minimalnej ilości użytych elementów. Można by co najwyżej opcjonalnie przełączać częstotliwość próbkowania na np. 4,8kHz i uzyskać ok. 0,4s opóźnienia, lub dodatkowo obciąć rozdzielczość do 4 bitów, uzyskując ok. 0,8s.
    Inny pomysł, jaki mi się zrodził, to uproszczenie wzmacniacza do 2 tranzystorów (skoro masz wyjście PWM) i cyfrowa regulacja głośności przez S1/S2.
    Projekt wygląda na ciekawy. Rób go etapami; najpierw uruchom przetwarzanie C/A (wyjście PWM), wypuść na głośnik jakiś sygnał testowy; potem wejście mikrofonowe i przetwarzanie A/C; sygnał poprowadź (bez opóźnienia) do C/A; sprawdź czy jakość dźwięku cię satysfakcjonuje; poeksperymentuj z częstotliwością próbkowania i rozdzielczością; potem zrealizuj linię opóźniającą i jej sterowanie. Życzę powodzenia!

    Domyślam się, że ATmega32 nie nadaje się kompletnie do tego celu bo ma za mało RAMu... no chyba, że się ją wykorzysta tylko do sterowania jakimś układem dedykowanym do tych celów... wtedy to jak najbardziej ma sens... i to chyba nie byłoby takie głupie... tylko bym musiał z prowadzącym pogadać na ten temat... bo jak na razie wersja jest taka, że ma być na AVR ew. można wykorzystać, zew. przetworniki A/C oraz C/A...

    Zapomniałem dodać, że parametry próbkowania mają być dostosowane tylko do częstotliwości mowy :D (jak się da oczywiście to trochę lepsze).

    Przy pomocy S1 i S2 ma być regulowane opóźnienie, głośność już będzie przy pomocy potencjometru, no chyba, że dodam jakiś potencjometr cyfrowy...

    Co do tego PWM to nie jest to finalna wersja bo jest też opcja, żeby dać zewnętrzny przetwornik C/A :) natomiast to PWM wybrałem tylko dlatego, że było to wygodne i nie trzeba się babrać z dodatkową obsługą, jeżeli jednak dodanie tego zewnętrznego przetwornika C/A coś poprawi to mogę go dodać :D tylko, że wtedy będę musiał dowiedzieć się jak go obsłużyć :)
    To samo dotyczy przetwornika A/C istnieje możliwość dodania zewnętrznego przetwornika, zamiast tego wbudowanego.

    Co do robienia etapami mam za sobą etap testowania PWM jako generatora głosu i muszę powiedzieć, że ciemno to widzę... PWM charczy i to strasznie przy wokalu natomiast basy są ok :F metoda testowania była prosta po RS232 wysyłałem znak po znaku plik RAW (stworzony w Audacity, Unsigned 8-bit 1000Hz przy 9600 baud).
  • #5 8754714
    szelus
    Poziom 34  
    rav1989 napisał:
    PWM charczy i to strasznie przy wokalu natomiast basy są ok :F metoda testowania była prosta po RS232 wysyłałem znak po znaku plik RAW (stworzony w Audacity, Unsigned 8-bit 1000Hz przy 9600 baud).

    Ten projekt kompetencyjny to właściwie z czego? Bo z tego, co napisałeś powyżej wynika, że nie rozumiesz tego, co robisz. O częstotliwości Nyquista słyszałeś? Poczytaj może o próbkowaniu i przetwarzaniu cyfrowym dźwięku w ogólności.
    I po RS-ie nie da się wysłać 1000 bajtów na sekundę przy prędkości 9600, tylko 960.
  • #6 8757582
    rav1989
    Poziom 11  
    szelus napisał:
    rav1989 napisał:
    PWM charczy i to strasznie przy wokalu natomiast basy są ok :F metoda testowania była prosta po RS232 wysyłałem znak po znaku plik RAW (stworzony w Audacity, Unsigned 8-bit 1000Hz przy 9600 baud).

    Ten projekt kompetencyjny to właściwie z czego? Bo z tego, co napisałeś powyżej wynika, że nie rozumiesz tego, co robisz. O częstotliwości Nyquista słyszałeś? Poczytaj może o próbkowaniu i przetwarzaniu cyfrowym dźwięku w ogólności.
    I po RS-ie nie da się wysłać 1000 bajtów na sekundę przy prędkości 9600, tylko 960.

    Projekt jest z Systemów Mikroprocesorowych bo tak nazywa się blok na którym jestem i tak nie mam bladego pojęcia co robię bo to 1000Hz było dobierane na ucho dopóki dało się coś usłyszeć coś co przypominało pierwowzór i jak widać byłem blisko :D o częstotliwości Niquista nie mieliśmy, natomiast mieliśmy twierdzenie Kotielnikowa-Shannona co jak widzę wiąże się z tym :D tylko jak to wszystko teraz ze sobą powiązać i zrobić coś co będzie działało :D w miarę dobrze... ja znam się tylko na programowaniu :D wiec jak macie jakieś wzory czy coś co by było pomocne to ja sobie to wszystko powyliczam i może uda mi się to zaprogramować tak aby to działało w miarę sensownie :) oczywiście jak się wszystko powiedzie, pochwalę się gotowym projektem :D oraz oceną...
  • #7 8760434
    _Robak_
    Poziom 33  
    Problem jaki ja w tym wszystkim upatruje to to że echo operacją splotu, co jest niewykonalne na AVrze w czasie rzeczywistym.
  • #8 8762099
    jarekz_2
    Poziom 16  
    _Robak_ napisał:
    Problem jaki ja w tym wszystkim upatruje to to że echo operacją splotu, co jest niewykonalne na AVrze w czasie rzeczywistym.

    Nie, nie, tu chodzi o proste echo jako efekt dźwiękowy; rodzaj filtru cyfrowego:
    wyjście[i] = wejście + W*pamięć[i-N]
    pamięć[i] = wejście + F*pamięć[i-N]
    Oczywiście w praktyce arytmetyka będzie bardziej skomplikowana ze względu na konieczność upychania danych w pamięci w postaci 8-bitowej.
  • #9 8765555
    rav1989
    Poziom 11  
    jarekz_2 napisał:
    _Robak_ napisał:
    Problem jaki ja w tym wszystkim upatruje to to że echo operacją splotu, co jest niewykonalne na AVrze w czasie rzeczywistym.

    Nie, nie, tu chodzi o proste echo jako efekt dźwiękowy; rodzaj filtru cyfrowego:
    wyjście[i] = wejście + W*pamięć[i-N]
    pamięć[i] = wejście + F*pamięć[i-N]
    Oczywiście w praktyce arytmetyka będzie bardziej skomplikowana ze względu na konieczność upychania danych w pamięci w postaci 8-bitowej.


    a co to jest to W i F ?? po za tym echo można zrealizować przez sprzężenie zwrotne wyjścia z wejściem a na AVR wykonać tylko przesunięcie o jakiś zadany czas :D no i oczywiście dać coś co będzie stopniowo wyciszało jakiś kondensator albo coś...
  • #10 8782550
    jarekz_2
    Poziom 16  
    rav1989 napisał:
    a co to jest to W i F ?? po za tym echo można zrealizować przez sprzężenie zwrotne wyjścia z wejściem a na AVR wykonać tylko przesunięcie o jakiś zadany czas (...)

    W i F to współczynniki; parametry uzyskiwanego efektu:
    W = „natężenie echa“: od 0,0 (brak) do 1,0 (maksymalne)
    F = „ilość odbić“: od 0,0 (jedno) do 1,0 (nieskończenie wiele)
    Oczywiście można zrobić sprzężenie analogowe poza AVR-em. Ale moim zdaniem nie warto w tym projekcie rozbudowywać hardware’u. Ja bym sprzężenie zrobił jednak cyfrowo i tylko dodał 2 przyciski do nastawiania F.
  • #11 8784531
    _Robak_
    Poziom 33  
    No ok, ale w zależności od tego jak długą przyjmiesz odpowiedź impulsową filtru będziesz musiał zrobić tyle mnożeń i dodawań. Czyli dla odpowiedzi impulsowej o długości 100 próbek na każdy punkt wyjściowy musisz wziąć 100 poprzednich próbek pomnożyć je i dodać do siebie.
  • #12 8787243
    jarekz_2
    Poziom 16  
    _Robak_ napisał:
    (...) w zależności od tego jak długą przyjmiesz odpowiedź impulsową filtru będziesz musiał zrobić tyle mnożeń i dodawań. Czyli dla odpowiedzi impulsowej o długości 100 próbek na każdy punkt wyjściowy musisz wziąć 100 poprzednich próbek pomnożyć je i dodać do siebie.

    Ależ nie jest tak źle :D, bo przecież echo w tym wydaniu to filtr IIR i wymaga na próbkę tylko paru obliczeń. Przedstawiłem je w jednym z postów. Dwa mnożenia, dwa dodawania, odczyt i zapis pamięci, może jeszcze jakieś przesunięcia. Zajmie to raptem z 50 cykli CPU, czyli 3µs.
  • #13 8789188
    rav1989
    Poziom 11  
    hmm... czemu tam jest i-N nie powinno być przypadkiem N-i ?? zakładam, że N to stała wielkość tablicy a i to zmienna która będzie się zwiększać czyli gdzieś w programie będzie i++;
  • #14 8789250
    _Robak_
    Poziom 33  
    jarekz_2 napisał:
    _Robak_ napisał:
    (...) w zależności od tego jak długą przyjmiesz odpowiedź impulsową filtru będziesz musiał zrobić tyle mnożeń i dodawań. Czyli dla odpowiedzi impulsowej o długości 100 próbek na każdy punkt wyjściowy musisz wziąć 100 poprzednich próbek pomnożyć je i dodać do siebie.

    Ależ nie jest tak źle :D, bo przecież echo w tym wydaniu to filtr IIR i wymaga na próbkę tylko paru obliczeń. Przedstawiłem je w jednym z postów. Dwa mnożenia, dwa dodawania, odczyt i zapis pamięci, może jeszcze jakieś przesunięcia. Zajmie to raptem z 50 cykli CPU, czyli 3µs.

    Dokładnie, na jedną próbkę, dodaj do tego przerwania z ADC, no i odpowiednią długość filtru, bo chyba nie chcesz filtrować to filtrem o długości jednej próbki?
  • #15 8791034
    jarekz_2
    Poziom 16  
    (...) czemu tam jest i-N nie powinno być przypadkiem N-i ?? zakładam, że N to stała wielkość tablicy a i to zmienna która będzie się zwiększać czyli gdzieś w programie będzie i++;
    Wzór jest dobry. Układ realizuje linię opóźniającą. „i“ jest numerem próbki odpowiadającym chwili bieżącej, natomiast „i-N“ jest numerem próbki opóźnionej.
    Opóźnienie wynosi N okresów próbkowania, jest nastawialne przez użytkownika i może wynosić minimalnie 1 a maksymalnie tyle ile rozmiar pamięci RAM przeznaczonej na linię opóźniającą (powiedzmy 2000).
    Dokładnie, na jedną próbkę, dodaj do tego przerwania z ADC, no i odpowiednią długość filtru, bo chyba nie chcesz filtrować to filtrem o długości jednej próbki?
    Chyba co innego rozumiemy mówiąc o filtrze. Ja „filtrem“ nazywam samą linię opóźniającą ze sprzężeniem zwrotnym, realizującą efekt, o który chodzi, czyli „sztuczne echo“. Bo de facto jest to filtr cyfrowy, tyle że zwykle nie służy do filtrowania częstotliwości.
    Poza linią opóźniającą nie ma w układzie żadnych innych filtrów cyfrowych; potrzebna jest mała moc obliczeniowa, bo przetwarzanie sygnału będzie pochłaniać tylko kilka µs w odstępach czasu 104µs.
  • #16 8832281
    rav1989
    Poziom 11  
    Byłem na konsultacjach u profesora i powiedziałem mu o tym, że na Atmedze32 się nie da tego zrobić bo jest za mało ramu więc on mi odpowiedział, że mam pełną dowolność co do tworzenia :P bylebym to ładnie opisał w sprawozdaniu... także liczę na jakieś podpowiedzi :D jedyny wymóg to minimum jakość telefoniczna :D oraz wykorzystanie uC AVR jako sterownik bądź element wykonawczy...
  • #17 8833003
    jarekz_2
    Poziom 16  
    rav1989 napisał:
    Byłem na konsultacjach u profesora i powiedziałem mu o tym, że na Atmedze32 się nie da tego zrobić bo jest za mało ramu więc on mi odpowiedział, że mam pełną dowolność co do tworzenia(...)

    Są pamięci RAM o dostępie szeregowym, np. 23K256-I/P firmy Microchip (32Kx8, dostępna w TME). Do Twojego systemu jak znalazł. Dołączasz ją do nóg MOSI, MISO, SCK i jeszcze do jednej linii „wyboru“. Tylko uważaj, bo ta pamięć jest zasilana z 3,3V.
  • #18 8874469
    rav1989
    Poziom 11  
    OK, stanęło na tym, że w projekcie zostanie użyta ATmega162 + 32k SRAM do tego przetwornik dac0832 oraz adc0808 oczywiście do tego jakieś wzmacniacze na wejściu i wyjściu :) no i mikrofon elektretowy (nie wiem czy dobrze to napisałem) jak na razie głowię się jak połączyć przetworniki i ram pod jedną magistralę tak aby można było odwołać się po adresie za ramem do przetwornika... kolega mi podpowiedział, że się tak da i teraz nad tym myślę... jestem też w poszukiwaniu SRAMU bo na razie się natknąłem na 64k i więcej i jakoś nigdzie nie widzę 32k... (chodzi mi o taką kostkę z magistralą odpowiednią na 5V)
  • #19 8876362
    LordBlick
    VIP Zasłużony dla elektroda
    Moja propozycja - olej XMEM, steruj programowo dostęp do zewnętrznej pamięci - będziesz miał możliwość podłączenia ile MB/GB dusza zapragnie, to tylko kwestia dodatkowych zatrzasków na linie adresowe. Co do dostępności pamięci :
    http://www.sklep.propox.com/index.php?d=katalog&k_id=402
    http://sklep.seguro.pl/sklep/?podkat=34
  • #20 8884844
    rav1989
    Poziom 11  
    Light-I napisał:
    Moja propozycja - olej XMEM, steruj programowo dostęp do zewnętrznej pamięci - będziesz miał możliwość podłączenia ile MB/GB dusza zapragnie, to tylko kwestia dodatkowych zatrzasków na linie adresowe. Co do dostępności pamięci :
    http://www.sklep.propox.com/index.php?d=katalog&k_id=402
    http://sklep.seguro.pl/sklep/?podkat=34


    Ja Cie rozumiem ale mi w zupełności starczy 32K SRAMu :D to ma być jakość telefoniczna a nie jakieś super HQ... :D
    Nastąpiła też mała zmiana mianowicie zamiast adc0808 zostanie użyty adc0804 :D
  • #21 8885759
    LordBlick
    VIP Zasłużony dla elektroda
    rav1989 napisał:
    Ja Cie rozumiem ale mi w zupełności starczy 32K SRAMu
    W seguro widziałem odpowiednią pamięć, zarówno DIP, jak i SMD...
  • #22 8889359
    rav1989
    Poziom 11  
    Light-I napisał:
    rav1989 napisał:
    Ja Cie rozumiem ale mi w zupełności starczy 32K SRAMu
    W seguro widziałem odpowiednią pamięć, zarówno DIP, jak i SMD...


    Cóż kolega znalazł u siebie kości oznaczone numerami n341256p-20 oraz n341256p-15 myślę, że wykorzystamy jedną z nich :D
  • #23 8891138
    jarekz_2
    Poziom 16  
    rav1989 napisał:
    (...)to ma być jakość telefoniczna(...)

    Skoro tak to zupełnie nie widzę powodu używania dodatkowych zewnętrznych układów - ani pamięci, ani przetworników. W latach 80. mój znajomy zbudował syntezator/odtwarzacz mowy, w którym, dzięki kompresji, na zapamiętanie 1 sekundy próbek głosu zużywał ok. 2KB pamięci. Jakość dźwięku była całkiem niezła.
    No chyba że użycie zewnętrznych układów jest jednym z celów ćwiczenia... Ale w takim razie może by użyć przetworników 12-bitowych? Cenowo powinny być zbliżone do ośmiobitowych.
  • #24 8891456
    rav1989
    Poziom 11  
    Tak właśnie celem projektu jest obsługa zew. pamięci i przetworników :D jakość minimalna podana przez prowadzącego to 8-bit 8000Hz... głównym celem jest właśnie obsługa peryferiów :D dodatkowym zadaniem ma być mapowanie przetworników ADC i DAC jako pamięć SRAM (ma to być na jednej magistrali z pamięcią) nie za bardzo orientuję się jak mam to zrobić więc jakbym mógł prosić o rysunek poglądowy :D byłbym wdzięczny
  • #25 8895710
    jarekz_2
    Poziom 16  
    rav1989 napisał:
    (...) nie za bardzo orientuję się jak mam to zrobić więc jakbym mógł prosić o rysunek poglądowy :D byłbym wdzięczny

    To są podstawy techniki mikroprocesorowej! Najpierw SAM pokombinuj i napisz jak sobie wyobrażasz taką magistralę. Potem można podyskutować...
  • #26 8944239
    rav1989
    Poziom 11  
    jarekz_2 napisał:
    rav1989 napisał:
    (...) nie za bardzo orientuję się jak mam to zrobić więc jakbym mógł prosić o rysunek poglądowy :D byłbym wdzięczny

    To są podstawy techniki mikroprocesorowej! Najpierw SAM pokombinuj i napisz jak sobie wyobrażasz taką magistralę. Potem można podyskutować...


    Pokombinowałem i mi wyszło takie coś:

    Obrazek:
    [AVR][C] Cyfrowe echo na ATmega32

    Schemat w Altium w załączniku... nie wiem czy to dobrze wyszło... jest to sam schemat połączeń "mapowania" przetworników adc i dac z przerzutnikiem i kostką pamięci zasilanie i masa i wszystko inne zostało pominięte... wywnioskowałem, że 16 bit adresu (A15) jest nie używany gdyż pamięć kończy się na adresie 0x7FFF czyli 0x8000 jest już poza zakresem :F i tak oto udało mi się za mapować pod adresem 0x8001 i 0x8002 przetworniki...

    Proszę o ew. poprawki/sugestie :D
  • #27 8945034
    jarekz_2
    Poziom 16  
    rav1989 napisał:
    (...)Pokombinowałem i mi wyszło takie coś(...)

    Koncepcja jest bez zarzutu ;) W realizacji zauważyłem trzy błędy. Pierwszy: wejścia RAM-u OE\ i CS\ są zamienione miejscami; A15 procesora powinno dochodzić do CS\. Drugi: wejścia 1 i 4 układu 7400 powinny iść nie do linii AD0 i AD1, ale do A0 i A1 (wyjścia Q1 i Q2 układu 74573). Trzeci: wejście OE\ układu 74573 powinno być dołączone do masy, a nie do OE\ procesora, bo wyjścia adresowe A0...A7 muszą być aktywne zawsze, a nie tylko podczas operacji odczytu.
    Poza tym należy pamiętać, by wejścia dwóch nieużywanych bramek układu 7400 dołączyć do masy lub +5V. Zakładam że układ będzie z rodziny HC lub HCT, a więc w technologii CMOS.
  • #28 8948104
    rav1989
    Poziom 11  
    Naniosłem poprawki :D

    [AVR][C] Cyfrowe echo na ATmega32

    Mam nadzieję, że teraz jest dobrze :D (w załączniku poprawiony schemat w Altium)

    Ponadto w C sposób komunikacji będzie chyba wyglądał następująco (o ile się nie mylę)

    
    #define ADC_Output           *((volatile u08*)0x8001)
    #define DAC_Input            *((volatile u08*)0x8002)
    


    czyli trzeba wskazać (zrobić wskaźnik) na dany adres :D tylko nie wiem czy to automatycznie wybierze kierunek przepływu informacji (Odczyt/Zapis)... Czy trzeba w programie jeszcze jakąś flagę ustawić...
  • Pomocny post
    #29 8953852
    jarekz_2
    Poziom 16  
    rav1989 napisał:
    (...)Mam nadzieję, że teraz jest dobrze(...)

    Wygląda dobrze. Tylko wyjścia 8 i 11 układu 7400 są niepotrzebnie dołączone do masy. A pin 20 układu 74573 musi być dołączony do VCC.

    rav1989 napisał:
    Ponadto w C sposób komunikacji będzie chyba wyglądał następująco (o ile się nie mylę)
    
    #define ADC_Output           *((volatile u08*)0x8001)
    #define DAC_Input            *((volatile u08*)0x8002)
    

    czyli trzeba wskazać (zrobić wskaźnik) na dany adres :D tylko nie wiem czy to automatycznie wybierze kierunek przepływu informacji (Odczyt/Zapis)... Czy trzeba w programie jeszcze jakąś flagę ustawić...

    Jest OK. Kierunek będzie określony przez operacje:
    u08 adc;
    adc = ADC_Output;
    DAC_Input = 123;
REKLAMA