Jest tu co najmniej kilka błędów. Pierwszy to taki, że funkcja uart_getc nie jest atomowa. W ogóle kolejka jest zrealizowana źle - nie uwzględnia, że odczyty/zapisy następują asynchronicznie, w związku z tym pewne operacje (np. uaktualnienie wskaźników początku i końca) muszą być robione atomowo. Przypadkowo to działa przy zapisie, bo ISR jest wykonywane...
Po zdjęciu rezystorów i zmianach w kodzie układ działa tak samo źle. Co jakiś czas wyświetla a potem przerwa. Jakie inne sugestie ?? Dodam dla pełnej jasności schematy : Nadajnik : http://obrazki.elektroda.net/0_125275325... Odbiornik : http://obrazki.elektroda.net/49_12527533... Dodano po 1 Chyba znalazłem przyczynę takiej sytuacji...
Witam. Układy wykonawcze wykonane samodzielnie. Atmega8 + MAX485 + przekaźniki. Po uruchomieniu całości napewno przedstawię to na forum. Pozdrawiam
Schemat niekompletny - jak łączysz z µC ? Jak inicjalizujesz kierunek transmisji w MAX485 ?
Transmisja jednokierunkowa. Z opornikami eksperymentowałem - bez rezultatu. Zauważyłem jeszcze jedno. Jeżeli dotknę paluchem płytkę odbiornika to mam efekt zmniejszenia amplitudy do 1V i zanik transmisji na chwilę. Może PCB jest źle zaprojektowana ? Ale nic to prawie nie ma. Dwa scalaki. ATmega8 i MAX485 obok siebie (5mm). Zasilanie całości z zasilacza...
sprawa banalnie prosta a o to przepis : Atmega8+LCD+MAX485 ,protokół sam możesz zrobić w bascom ,tą cześć raczej trudno nazwać protokołem ,raczej atmega zajmowała by sie odbiorem stringów które by latały po RS leprzy protokół wyglądał by tak : PC->AVR string+CRC PC<-AVR OK opisy znajdziesz na elce
przeczytałem artykuły w "Elektroniki Praktycznej" nr 9 i 10/2004 i polutowałem sobie 2 płyteczki z atmega8 z max485 tak jak to jest w tym artykule jednak jak przesyłam coś to niestety drugi mikrokontroler odbiera zawsze tyko pierwszy znak :| drugiego już nie chce tylko jakieś śmieci potem lecą. W jednym mikrokontrolerze korzystam z wewnętrznego kwarca...
Przy TTL-owym RS-e powinno działać choć to już dosyć duża odległość. Spróbuj na krótszym kablu czy zadziała jeśli tak warto by było pomyśleć o dwóch MAX485 i po sprawie.
nie wiem poco ciagle na sile wpychasz ten nieszczesny rs232 - zobacz aplikacje kostki max485 albo podobnej
Albo zastosuj 2*MAX485 + skrętka.
Masa ULN jest podłączona. Eagle automatycznie łączy piny ze ścieżkami o takich samych nazwach (GND) - tak jak w przypadku Attiny i MAX485.
Ad1. Jak najbardziej. Jezeli chcesz coś tańszego od MAX485 poczytaj o SN75176. Ad2. Wszystko jest w nocie katalogowej :wink:. MAX232 i MAX485 pracują równolegle patrząc od strony Atmegi (a więc TxD i RxD idą na MAX485 i MAX232). Żeby rozdzielić sygnały (coby RS232 i RS485 nie działały jednocześnie) można wykorzystać uC z dwoma portami szeregowymi, zrobić...
Ok to czy może mogłby któryś z panów zrobić (moze byc i w paintbrushu :-) ) Schemacik tego ustrojstwa tzn, mega8 - max485 - skrętka 100m - max 485 - atmega8 Pozdrawiam
Witam, 1. Niewiele więcej miejsca zajęła by ci ATmega8 lub mega48 lup podobny w obudowie TQFP32, a one mają sprzętowy USART który przydał by się tu do RS485 2. Do czego jest ta zworka JP2? Zwiększ wartość rezystora R2 podciągającego 1Wire. Na co najmniej 1k (optymalnie 2,2-4,7k) 3. Staraj sienie rysować połączeń pod kątem 45 stopnie. Przy większych...
USART na 50m spokojnie da radę, to jest odległość zgodna ze specyfikacją. Zależy to imho nie tylko od specyfikacji, ale także od tego na jakim kablu i w jakim otoczeniu ten kabelek sobie leży ;-) Należy zapewnić aby przewodem masy nie płynął prąd, ale to już zupełnie inna kwestia. No to jest druga kwestia, bo jak w mojej sytuacji połączymy masy to...
ATmega8 3zł + rezonator 50 gr + max485 70 gr + 2 triaki 80 gr + 2 optotriaki 1,5 + stabilizator impulsowy 5V 4zł + płytka uniwersalna 5 zł + drobne elementy 2 zł + obudowa 5 zł = max 25 zł za jeden punkt którym włączysz 2 odbiorniki. dobrą skrętkę kupisz za 80 gr. a za 50-60 zł zbudujesz centralkę z wyświetlaczem graficznym. Za 200 zł wszystkim możesz...
Wiem, że odkopuję trupa z szafy ale może się to komuś przyda. w 2018 roku remontowałem 2 moje piece AEG 4kW i Dimplexa 5kW, jak w każdym piecu akumulacyjnych, remont sprowadził się do naprawy uszkodzonej izolacji na przedniej obudowie. Zastosowałem coś co się nazywa aerożel https://icmarket.pl/aerogels-mata-izolac...
zrobiłem przed chwila mały eksperyment. Mam 1 płytke z ukłądem ft232rl i podlaczone póżniej max485, wyprowadzone na złącze mam sygnały A,B, GND oraz VCC (GND i VCC z USB) i podlaczyłem z druga płytką max485 -> atmega8 tylko poprzez A,B (wczesniej podłaczałem tez gnd i vcc a teraz nie) masa i vcc były stabilizowane z transformatora 230->12 i nastepnie...
dzięki za odpowiedź. Ja śmieci odbieram na kompie od mojej At,megi przez magistralę 485 i nie moge sobie z tym poradzić...tzn zawsze te same znaki ale nie tekst ktory nadala Atmega) Mam układzik (Atmega8, kwarc 16MHz + Max485) podpięty kablem 1m do konwertera 232/485. Sam konwerter jest podpięcty do kompa przez USB (ma takie wyjście) a w kompie zainstalowany...
ok ydeczdowalem sie na RS485 ale teray mam kilka pytań: 1. Czy ten chemat jest poprawny? http://aquaticus.info/system/files/pictu... 2. Z drugiej strony czyli przed drugą Atmegą musze mieć rozumiem taki sam uklad aby odebrac dane ale czy te wyjscia X1-1 i X1-2 musze skrosowac? 3. Czy latwo wykonac taki interfejs RS485 do...
1. To w ATMega8 PORTD.2 MUSI być ustawiony na 0, inaczej MAX485 chce nadawać, a nie odbierać. 2. Wywal te oporniki 610 omów (R5 i R7). 3. Sprawdź czy masz A jednego układu z A drugiego połączone, to samo dotyczy B. 4. Jeżeli przewodu nei masz conajmniej kilkanaście/ kilkadziesiąt metrów wywal chociaż 1 z tych oporników 120 omów. 5. Połacz procesory...
Witam przesył jednej zmiennej jest prosty : Nadajnik [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 Dim B As Byte B = 248 Do Printbin B Wait 2 Loop End[/syntax] Odniornik [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 Dim B As Byte Cls Do B = Waitkey() Lcd B 'wyświetl wartość B Waitms 500 Cls 'wyczyść...
Zamiast Atmega8 możesz wziąć ATmega88 - wtedy można sobie zdaje się wygospodarować drugi sprzętowy UART. Atmega128 ma od razu 2 gotowe UART'y. A poza tym można sobie prościutko zrobić za pomocą MAX485 - magistralę RS485 zamiast RS232 no i wtedy możesz się bez problemu kontaktować z dowolnym z tych 2 procków za pomocą PC'ta. Trzeba tylko sobie ustalić...
widze ze w kodzie uzywasz funkcjonalnosci RS232 a w temacie masz RS485. Jakiego sprzetu uzywasz do konwersji? MAX485, 75176? Moze problem jest sprzetowy? Sam aktualnie mecze sie z RS485, wysylanie ok a odbieranie - smieci. Pokaz schemat moze razem cos wymyslimy.
Bardzo dziękuję! teraz jest ok Może Ty będziesz wiedział bo nadal mam problem z odebraniem czegokolwiek z kompa na mojej Atmedze i LCD Atmega8 16 MHz LCD 2*16 MAX485 (ST485CN) podłączony do konwertera 232/485 a konwerter do kompa przez USB (zainstalowany usb-to-serial bridge) To co Atmega wysyla odbieram bez problemu natomist nie wiem jak odebrac to...
Witam, Od kilku dniu próbuję uporać się z komunikacją po RS485, no i napotkałem problem z którym sobie nie radzę. Korzystam z płytki testowej ZL2AVR ( http://www.btc.pl/pdf/zl2avr.pdf ) oraz układu MAX485 ( http://ecee.colorado.edu/~mcclurel/max48... ) (pomiędzy zasilanie a masę kondensatory 47uF i 100nF, piny !RE i DE połączone razem i podłączone...
Zastanawiam się, czy nie lepszym rozwiązaniem będzie podanie SCK mastera dodatkowo na INT0 slave. Tak żeby pierwsze zbocze zegara wywoływało przerwanie. Czy wtedy transmisja przejdzie bez problemów? I bezbłędnie przy użyciu samych poleceń SPI IN/OUT? Jeżeli przełożysz SCK na pin INT0 wtedy SPI nie będzie działało. Możesz wykorzystać jakiś wolny port...
Witam. Zbudowałem 2 proste układy w celu przetestowania interface'u RS485. ATmega32 + 3 przyciski + wyświetlacz 7-segmentowy + MAX485. R0 układu MAX485 do RxD, DI do TxD, DE i /RE połączone razem do PB0. Wyjścia A połączone ze sobą, B również, między A i B po obu stronach rezystor 100ohm, z jednej strony rezystory polaryzujące 560ohm. Układ ma działać...
(at)mbulinski1977, może zamiast gotowych płytek Arduino zainteresują Cię moje moduły? https://obrazki.elektroda.pl/2185690900_... Sam zaczynam coś robić w kierunku "automatyzacji" mieszkania. Moje moduły są zbudowane na ATmega8, ale można uC podmienić na ATmega328, wgrać bootloader Arduino i już masz płytkę zgodną z Arduino. Na płytce...
Nie znam bascoma :) Jeżeli wysyłasz lub odbierasz bity po magistrali rs możesz komunikować sie z wieloma urządzeniami np za pomocą max485 napewno 32 urządzenia, jedno urządzenie pracuje jako master reszta jako slave. Master wysyła poszczególny adres do danego urządzenia (slave) i czeka na odpowiedź itd.
Najpierw miałem konwerter RS232 -> RS485 (AVT530) były z nim problemy z prędkością max 4800.Pomyślałem, że zrobię konwerter na ATtiny2313, MAX485 i NE555-konwerter działał, ale prędkość max 19200. Parę osób polecało właśnie sterować MAX485 wprost z komputera. Naczytałem się różnych opinii, opisów i wydało mi się, że nie jest to takie "hop-siup" dlatego...
Max232 pomiędzy telefonem a uC ?? Nieeee. Nie zrozumieliśmy się . A właściwie namieszałem. Mam atmegę 128 z dwoma sprzętowymi uartami. I na jednym z nich pracuje MAX485 a na drugim telefon. Max232 chciałem zastosować aby podglądać na PC dane jakie wysyła telefon do procka. Dodano po 7 Co do PDU, to najlepiej potestować z pomocą programu PDUspy. Właśnie...
Witam Projektuje płytkę pod AtMega8 - widok jak poniżej - wiem, że to na razie masakra, ale od czegoś trzeba zacząć. Początki są trudne. Są błędy i uwagi, a zaczęło się od tego, że nóżka 7 układu MAX485 powinna być podłączona do złącza śrubowego, a na płytce nie jest - na schemacie jest. Więc sprawdziłem resztę i sporo tego. Pytanie dlaczego tak się...
Witam Mama "swoją" płytkę z Atmega8 ( kwarc 4MHz, EEPROM, MAX485 ), która jest połączona z drugą na której jest wyświetlacz oraz klawiatura 5 przycisków na PCF8574. Wszystkie sygnały - do LCD, GND i VCC oraz I2C idą jedną taśmą łączącą płytki. Jednak nie byłem przewidujący i zapomniałem o pinie INT układu PCF8574, dolutowałem do wyprowadzenia układu...
Witam jestem początkujący i mam pytanie odnośnie pomiaru i sterowania wilgotnością na hali produkcyjnej przy użyciu Atmegi8. Pomyślałem, iż mógłbym umieścić w 3 miejscach 3 czujniki każdy z Atmegą8 i MAx485 połączone zwykłą skrętką do PC i odczytywać np. co 5 min wilgotność. Dodatkowo podłączyć stycznik do jednego z pinów każdej Atmegi i sterować elektrycznie...
Jak dla mnie to problem jest w wyłączeniu nadajnika jeszcze przed końcem nadawania. Po czym tak wnioskujesz? Jeżeli kolega używa Max485 to najdłuższy czas jakiegokolwiek nieprzełączania w układzie to 2000ns i jest to czas pomiędzy wyjściem ze stanu uśpienia układu w stan odbioru lub nadawania. Maksymalny czas pomiędzy przełączeniem się ze stanu nadawania...
IMHO zdecydowanie złym pomysłem jest zabudowa USBasp na płytce. Napiszesz parę programów, rozkręcisz się i zaczniesz tworzyć docelowe układy. A wtedy co? Programator nie gramotny i trzeba robić drugi. Zawsze możesz użyć np. FT232 i wgrywać firmware przez bootloader. Za to programator mieć osobno. Dorzuciłbym Ci: oprócz max232, osobno max485 (z opcjonalnym...
Witam To moje pierwsze spotkanie z RS485 więc proszę o wyrozumiałość jeśli pytam o głupoty... Panuję budowę urządzenia pracującego w sieci RS485 w standardzie czteroprzewodowym. W skład układu wchodzić będzie RaspberryPi jako master oraz maksymalnie 16 układów Atmega8 pełniących rolę slave'ów. Uart w Raspbery Pi pracuje na poziomach napięć 0-3.3V a...
Z ta funkcją Config Print nie miałem jeszcze problemów więc problemu szukałbym gdzie indziej. Łatwo o błahy błąd. Czy na pewno masz wybrane zewnętrzne taktowanie? uC programuję programem MkAvrCalculator i oczywiście wybieram zewnętrzny kwarc. Wymieniałem uC i MAX485 na inny egzemplarz. Próbowałem na ATmega8. Wywaliłem z kodu wszystko poza obsługą RS485....
Witam, Czytając to forum i wzorując się na przedstawianych przykładach kodu postanowiłem napisać swój pierwszy program - komunikacja Atmega8 -> PC przez RS485. Na początku miałem małe problemy z nawiązaniem samej komunikacji ale po paru zmianach w kodzie udało mi się z tym uporać. Poniższy kod działa ale nie do końca. Założenie jest takie żeby mikroprocesor...
Skecz wygląda tak : [syntax=c] #include <lib_dmx.h> // comment/uncomment #define USE_UARTx in lib_dmx.h as needed #define DMX512 (0) // (250 kbaud – 2 to 512 channels) Standard USITT DMX-512 #define DMX1024 (1) // (500 kbaud – 2 to 1024 channels) Completely non standard – TESTED ok #define DMX2048 (2) // (1000 kbaud – 2...
Poka schemat:> Schemat jest taki sam jezeli chodzi o czesc rs485 jak w ep 9/2004 Re i De max485 spiete razem pod pin PD2 rx pod RO tx pod DI Linia rs485 ma 1 metr - na skretce masy urzadzen sa spiete razem ze soba rezystory ograniczajce sa
https://obrazki.elektroda.pl/3089460800_... Hej, Chciałbym Wam pokazać, pochwalić się swoją płytką testową dla uC AVR ;) Płytkę zrobiłem ponieważ miałem już dość płytek stykowych-wiecznie coś się rozłącza, kabelki wyskakują, a czasami jak chcemy przetestować jakąś małą pierdołę to musimy montować wiele elementów. Płytka zaprojektowana...
http://obrazki.elektroda.pl/7267928400_1... Witam Tym razem mam do przedstawienia prosty sterownik włącz/wyłącz, który potrafi sterować dziesięcioma urządzeniami za pomocą praktycznie dowolnych układów wykonawczych. Układ modelowy pracuje na stałe wmontowany w biurko i ma za zadanie głównie sterować pracą lamp, drukarki oraz wentylatora....
http://obrazki.elektroda.pl/1223835900_1... Witam. Chciałbym przedstawić kolejną konstrukcję służącą do sterowania kamerami PTZ. Urządzenie powstało z powodu dużych cen gotowych sterowników oraz tego, że potrzebowałem bezprzewodowego sterownika, a takiego gotowego nigdzie nie znalazłem. Węc postanowiłem zbudować od samemu :) Całość...
Jeżeli chodzi o pierwszy warning w tej bibliotece dotyczy SIG_USART_TRANS w sekcji __AVR_ATmega169__ [syntax=c] /* * FreeModbus Libary: AVR Port * Copyright (C) 2006 Christian Walter <wolti(at)sil.at> * - Initial version + ATmega168 support * Modfications Copyright (C) 2006 Tran Minh Hoang: * - ATmega8, ATmega16, ATmega32 support * - RS485 support...
Mam problem z uruchomieniem prostego programu na ATMEGA8. Mega jest podpięta z SN75176 (odpowiednik MAX485) i mam podłączone dwie takie płytki. Każda płytka ma przycisk i element wykonawczy (triak). Program ma za zadanie zbierać informacje z sieci (gdy wciśniemy przycisk na płytce B, powinien się załączyć triak na płytce A i odwrotnie) i w razie potrzeby...
Mam problem z wysyłaniem i odebraniem z rs485. Jest to ATMEGA 8 + max485. [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <HD44780.c> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <avr/eeprom.h> #include <avr/wdt.h> #include <stdio.h> #include <string.h> #include <stdlib.h>...
witam.staram sie skończyć płytkę testowa dla atmegi16 ,być może i wraz z atmega8. Już prawie całość jest ukończona ale chce mieć pewność ze niczego nie pomyliłem. Mam nadzieje że usłyszę wasze opinie i propozycje co do zamieszczenia na niej dodatkowych elementów czy zmiany aktualnych. Całość schematu robiona w eagle Version 4.16r2 .a na niej: 1. rs232...
Witam ponownie. Zmieniłem oscylator w atmedze na zewnętrzny 14745600 Hz założyłem terminatory 120ohm na końcach lini miedzy A i B, wymieniłem max 485 na nowego i niestety wciąż nie mogę odczytać rejestru .ustawiania programu odczytowego pokazano na rysunku proszę o pomoc http://obrazki.elektroda.pl/3066697100_1... połączenie atmega max485...
Witam, Chciałbym wysłać dane z jednego AVR - Atmega8535 do drugiego avra Atmega128 poprzez RS485 - odległość ok. 200 metrów. Dane będą tylko wysyłane z portu TxD i RxD z Atmegi8535, a Atmega128 będzie tylko i wyłącznie je odbierał. Droga w jedną stronę. Mam układ Max232 i max485. po 2 każdego. Jak to sprzęglić by działało to tylko w jedną stronę? Dzięki...
Witam Chcę w moim mieszkaniu pociągnąć skrętkę CAT5 jako magistralę RS485. Jeden MASTER w pokoju i 5 SLAVE w pozostałych pomieszczeniach mieszkania. Każdy SLAVE to mikrokontroler ATMEGA88 i czujnik temp/wilgotności powietrza SHT21. W SLAVE procek, MAX485 będzie zasilany napięciem +5V. Najdalszy SLAVE będzie oddalony od MASTERa o 15mb skrętki. I tu moje...
Witam Atmega8 + kwarc 16MHz i LCD oraz pare przyciskow i Max485 Jak ktos nacisnie ktorys to zmienia tryb i zlicza czasy poszczegolnych trybow. Otoz czasem po paru godzinach Atmega staje (na LCD przestaja leciec sekundy). Czytajac forum zauwazylem ze nie mam podlaczonego AVCC do +5V czy to moze byc to? program $regfile = "m8def.dat" $crystal...
Zamiast trawić układ składam prototypy na płytkach stykowych i później ew. myślę o ich wykonaniu. Małe kroczki przybliżające do celu, dające szybki efekt, pozwalają w razie co zmienić kierunek. Wykonanie płytki, zlutowanie urządzenia i uruchomienie może trwać dni czy tygodnie by przekonać się, że koncepcja jest słaba. Z tego też powodu, rysunek, który...
http://obrazki.elektroda.net/74_12536950... Witam Chciałbym przedstawić swój kolejny projekt. Prezentowany układ jest uniwersalnym systemem uruchomieniowym dla procesorów AVR. Zaprojektowałem go wspólnie z kolegą (k.moron(malpa)tlen.pl) w oparciu o wspólne przemyślenia i problemy jakie napotykaliśmy przy budowaniu innych urządzeń. Płytka nie...
http://obrazki.elektroda.net/61_12660204... Witam . Jako, że nie było ostatnio tego typu urządzeń na eletroda.pl pozwolę sobie przedstawić mój najnowszy projekt. Ta nietuzinkowa konstrukcja, to uniwersalny sterownik z komunikacją przez RS-485. Inaczej można to nazwać modemem. Sterownik taki składa się z następujących sekcji: - zasilania -...
Witam, mam problem, nad którym spędziłem całą noc i im dłużej siedzę tym mniej wiem. Mam układ, w którym MAX485 jest odseparowany od ATMEGA8 przez transoptory. MAX485 ma zasilanie (na schemacie zaznaczona jako) VCC_M i GND_M, procesor VCC i GND, rezystory po 510R. Port PD2 służy do przełączania MAXa485 pomiędzy nadawaniem i odbiorem. http://obrazki.elektroda.net/26_12365086...
:) Nie Zgadza się, zrobiłem znacznik na osobnym pinie i w analizatorze wyszło że tylko raz.. ALE DLACZEGO ? Przecież w pewnych momentach bufor nadawczy jest pusty -> warunek while to gwarantuje. Czy to chodzi o to że proc po prostu nie ma chwili żeby sprawdzić pustość bufora bo nadawanie idzie ciągiem ? Naszły mnie obawy że może przypadkiem u mnie tak...
Dzień dobry, Mam za zadanie moduł do przesyłu danych z 3 inwerterów firmy Fronius, obsługujących panel solarny. Problem polega na tym, że musze informacje ze wszystkich inwerterów za pomocą jednego przewodu RS485 na odległość ok 120m. Planowałem wykorzystać 3 transmitery MAX485 do przesyłu sygnału z kabla RS422 nadawanego z Inwerterów do mikrokontrolera...
Witam chce zrobić by Atmega8 wysyłała mi pakiety dmx. Wstępnie myślałem nad timerem ale nie jest w stanie wysłać danych z prędkością 250kHZ wiec zaprogramowałem UART który ładnie wysyła mi Channel Data ...tylko ze brak mi w ramek Mark After Break (MAB),Start Code (SC),Mark Time Between Frames (MTBF) i Mark Time Between Packets (MTBP). Myślałem żeby...
Witam W głównej mierze dzięki Waszej pomocy zbudowałem urządzenie na bazie Atmegi8 do tego kwarc 16 MHz i Max485. Urzadzenie ma przyciski i wyswietlacz LCD 2x16 Kod w bascomie: $regfile = "m8def.dat" $crystal = 16000000 $baud = 9600 Dim Tryb As String * 14 Dim Trybp As String * 14 Dim Takt As Integer Dim Dane As String * 5 Dim Dane1 As String...
Witam. Zaprojektowałem układzik na powyższych procesorach i połączyłem je przez Max 485. (Niestety muszę mieć taką konfigurację ze względu na odległość pomiaru). Od strony sprzętowej jest wszystko w porządku - sprawdzone , działa. Natomiast mam problem z napisaniem procedury komunikacji pomiędzy tymi procesorami. Chodzi o wysłanie na rządanie z jednego...
max485 zasila max485 sterować konwerter max485
czujnik wzorcowy cylindra termet czyścić wymiennik ciepła amplituner instrukcja
obrotomierz skacze wskazówka amica pa4560a420
Efekt tęczy na ekranie telewizora - przyczyny i rozwiązania Schemat instalacji elektrycznej Yanmar F20D