Marooned Napisano Grudzień 19, 2012 Udostępnij Napisano Grudzień 19, 2012 Uszanowanko Piszę w "zielonych" bo jakoś ciężko było dobrać dział. Mam gotowy i nieco zamknięty układ oparty o atmegę8 (ESC) i na czas pisania na niego softu przydałby się jakiś feedback. Mam do dyspozycji złącze SPI. Złącze to ma 6 pinów z czego 2 to zasilanie. Pozostają więc 4 do ewentualnego wykorzystania. Wyświetlacze LCD oparte o hd44780 używają 7 pinów z 4 od danych i 3 od sterowania. Wydaje mi się, że 2 z tych 3 mógłbym podpiąć na sztywno do zasilania/masy (Enable -> 1. R/W -> 0)? RS Register select: low = instruction, high = data R/W low = write, high = read E Enable (active high) Pozostaje RS. Czy ktoś z Was próbował takiego podłączenia i są jakieś proste sztuczki, które da się wykorzystać by móc z tej atmegi8 coś wyświetlić? Cytuj Link do komentarza Share on other sites More sharing options...
maciek199815 Grudzień 19, 2012 Udostępnij Grudzień 19, 2012 Nie lepiej zastosować mały mikro kontroler który by wyświetlał informacje a atmega komunikowała by się z nim przez te złącze? Cytuj Link do komentarza Share on other sites More sharing options...
Marooned Grudzień 19, 2012 Autor tematu Udostępnij Grudzień 19, 2012 Do tego trzeba zaprząc kolejny uC. Jeśli nie będzie innego wyjścia to jest to jakiś pomysł. Cytuj Link do komentarza Share on other sites More sharing options...
BlackJack Grudzień 19, 2012 Udostępnij Grudzień 19, 2012 Metody są ogólnie 2. Pierwsza - typowo podręcznikowa to podłączenie ekspandera 8-bitowego I/O na SPI, i dopiero przez niego wyświetlacza. Zaleta to stosunkowo duża prostota sprzętowa. Wada to to że komunikacja jest nieco powolna jak nie masz sprzętowego SPI, no i oprogramowanie nieco skomplikowańsze. No i trzeba dorabiać płytkę z ekspanderem. druga - jak pisał wyżej kolega, mały mikroprocesor np. ATTiny 24, jako ekspander I/O, Zaleta, mozna go oprogramować, i zrobić z niego akcelerator grafiki 2D, a jak kto zastosuje wyświetlacz OLED z trybem graficznym (np. TAKI ). Opcja 3 chyba najprostsza, bo nie wiem czy najtańsza ?. Zakupić wyświetlacz z interfejsem SPI, jest taki zgodny z HD44780, wyświetla 3 linie (2x16 też są) po 16 znaków, i ma oznaczenie DOGM163. Plus nie trzeba nic kombinować tylko podłączyć do interfejsu SPI ATMegi 8. Trochę więcej informacji http://www.lcd.elementy.pl/dog/dog.htm Tylko czytać uważnie bo na początku są graficzne wersje, dopiero potem alfanumeryczne. Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Marooned Grudzień 19, 2012 Autor tematu Udostępnij Grudzień 19, 2012 Dzięki za info. Czyli tak czy siak bez dodatkowego sprzętu się nie obędzie. Skorzystam zatem z atmegi32 na płytce testowej (nie chcę nic dokupować, korzystam z tego co mam). Nie łączyłem nigdy wcześniej dwóch uC - ale to już sobie poczytam. Spasiba. Cytuj Link do komentarza Share on other sites More sharing options...
MatManiak Grudzień 19, 2012 Udostępnij Grudzień 19, 2012 Możesz też użyć rejestru przesuwnego 74HC595, praktycznie na pająka można to podłączyć do LCD, schematy masz w necie. Są gotowe biblioteki do arduino, programować umiesz, to sobie dostosujesz do swojego kodu, zresztą pewnie dla atmegi też będzie (lub kod arduino będzie działać bez przeróbek). Sterowanie masz poprzez 3 piny, więc idealnie 😉 Pierwszy lepszy link z google: http://code.google.com/p/arduinoshiftreglcd/ Cytuj Link do komentarza Share on other sites More sharing options...
riddyk Grudzień 19, 2012 Udostępnij Grudzień 19, 2012 A może by użyć rs232 <-> USB. Albo nawet tylko jeden pin wykorzystać. Cytuj Link do komentarza Share on other sites More sharing options...
Bobby Grudzień 19, 2012 Udostępnij Grudzień 19, 2012 To może przejściówka USB-SPI? http://www.recursion.jp/avrcdc/cdc-spi.html Cytuj Link do komentarza Share on other sites More sharing options...
BlackJack Grudzień 19, 2012 Udostępnij Grudzień 19, 2012 A nie ponosi was za daleko ? On chce tylko podpiąć wyświetlacz 2x16 znaków, i brakuje mu 2 pinów w procesorze, a wy już macie prawie gotowy projekt Sondy Marsjańskiej, z AI na pokładzie. 🤣😉😃 Cytuj Link do komentarza Share on other sites More sharing options...
Mars Grudzień 19, 2012 Udostępnij Grudzień 19, 2012 Od Marsa z daleka proszę. Cieszcie się, że tego waszego 'kjurjositi' nie rozpiździłem 😋 A tak odnośnie sprawy to tak jak MatManiak sugerowałbym użycie 74HC595 😉 Cytuj Link do komentarza Share on other sites More sharing options...
Marooned Grudzień 19, 2012 Autor tematu Udostępnij Grudzień 19, 2012 Hehe 🙂 Zdecydowałem się póki co, tak jak wspomniałem, na użycie płytki testowej czyli wykorzystanie osobnego procka. Główny powód to po prostu fakt, że to mam pod ręką i nie muszę latać do sklepu, a rozwiązanie ma być chwilowe na czas pisania kodu i testowania. Ale fajnie, że padają inne rozwiązania, bo przecież wiedza zostaje i może za jakiś czas ktoś tu zajrzy i skorzysta z innej opcji. Gdybym nie miał nic pod ręką, to pewnie skusiłbym się na opcję z rejestrem przesuwnym 74HC595. Brzmi najsensowniej dla mnie. Cytuj Link do komentarza Share on other sites More sharing options...
Bobby Grudzień 19, 2012 Udostępnij Grudzień 19, 2012 BlackJack, jak na razie to Ty podałeś najbardziej kosmiczne (btw sONda, nie sĄda) rozwiązanie - LCD graficzny z interfejsem SPI. Jeśli ktoś ma avr-cdc usb-rs232 to przy moim rozwiązaniu jest to tylko kwestia zmiany wsadu. Od biedy nawet usbaspa by można przeflashować, wystarczy zmiana pinów w configu AVR-CDC. EOT, jak widać temat zakończony. Cytuj Link do komentarza Share on other sites More sharing options...
BlackJack Grudzień 19, 2012 Udostępnij Grudzień 19, 2012 Mam gotowy i nieco zamknięty układ oparty o atmegę8 (ESC) i na czas pisania na niego softu przydałby się jakiś feedback. Chyba że skrót ESC w nawiasie oznacza programator ? To wtedy nasza sprzeczka jest zwykłym nieporozumieniem. EDIT. Faktycznie jest to nieporozumienie, nie doczytałem dokładnie tematu ISP, czyli kolega chce to obsłużyć programatorem. A konkretnie zmyliło mnie to zdanie: Mam do dyspozycji złącze SPI Cytuj Link do komentarza Share on other sites More sharing options...
Marooned Grudzień 19, 2012 Autor tematu Udostępnij Grudzień 19, 2012 ESC to kontroler silnika bezszczotkowego. Konkretnie taki. Poprawiłem temat. Mój błąd, napisałem "ISP" mając na myśli "SPI"... mea culpa. Podpiąłem MISO, MOSI, SCK i masę na obu megach, skorzystałem z przykładowego kodu w C w datasheet od procków, ale niestety, póki co nie udało mi się połączyć. Wygląda na to, że kod wisi na tym: while(!(SPSR & (1<<SPIF))); W medze odbiorczej podpiąłem SS do masy, w masterze nie mam dostępu do tego pinu. [edited] Ech, masę miałem źle podpiętą. Po poprawnym podpięciu coś tam przesłało, choć błędnie i ESC się zawiesił. Ale jakaś komunikacja nastąpiła, jutro będę walczył dalej. Cytuj Link do komentarza Share on other sites More sharing options...
Marooned Grudzień 20, 2012 Autor tematu Udostępnij Grudzień 20, 2012 Podłączyłem oba układy przez SPI, ale dziwne rzeczy się dzieją. Mimo wysyłania stałej wartości, oba układy się przywieszają dość losowo (tzn. czekają na zakończenie transmisji). Co ciekawsze, zbliżenie dłoni do przewodów je odblokowuje (transmisja przechodzi, choć dane się nie zgadzają). Tak to wygląda: Po tym filmiku podłączyłem też zasilanie przez SPI by oba układy miały wspólne zasilanie. Skręciłem też wszystkie kable jako amatorski ekran. Nic się generalnie nie zmieniło, efekt nadal dość losowy.. raz działa po zbliżeniu dłoni, raz cały czas, raz w ogóle.. Mowa cały czas o transmisji (którą w ESC potwierdza pikanie silnikiem, a w układzie odbiorczym sekundowe wypisywanie licznika z RTC). Ani razu nie udało się przesłać poprawnej wartości. Kod wziąłem z datasheet, ale wkleję dla pewności. ESC - master: void SPI_MasterInit(void) { /* Set MOSI and SCK output, all others input */ DDRB = (1<<PB3)|(1<<PB5); /* Enable SPI, Master, set clock rate fck/16 */ SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); } void SPI_MasterTransmit(char cData) { /* Start transmission */ SPDR = cData; /* Wait for transmission complete */ while(!(SPSR & (1<<SPIF))); } //fragment pętli głównej: while(1) { SPI_MasterTransmit(0x1); SPI_MasterTransmit(0x2); //i tu beepanie motorem jeśli sygnał wejściowy jest odpowiedni - sygnał pochodzi z radia 2.4GHz } płytka - slave: void SPI_SlaveInit(void) { /* Set MISO output, all others input */ DDRB = (1<<PB6); /* Enable SPI */ SPCR = (1<<SPE); } char SPI_SlaveReceive(void) { /* Wait for reception complete */ while(!(SPSR & (1<<SPIF))); /* Return data register */ return SPDR; } //pętla główna while(1) { LCD_GoTo(0, 1); sprintf(text, "RTC:%u ", rtcInterruptCounter); LCD_WriteText(text); rx_t = SPI_SlaveReceive(); rx = rx_t<<8; rx_t = SPI_SlaveReceive(); rx |= rx_t; LCD_GoTo(0, 0); sprintf(text, "rx:%u ", rx); LCD_WriteText(text); } Wszelkie sugestie mile widziane. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!