Witam
Próbuję sobie zrobić wyświetlanie grafiki z zewnętrznego EPROM 24C64 ale za chiny nie wychodzi tz tworzy się plik eep ale niestety nie wczytuje z zewnętrznego sprawdziłem czy działa na wewnętrznym EPROM - działa bez problemu tylko ogranicza mnie rozmiar ów EPROM.Ogólnie mam to złożone na płytce testowej z Atmega 16 na pokładzie KS0108 i 24C64
może by ktoś mógł powiedzieć jak zrobić taka procedure może ktoś robił i się podzieli doświadczeniem i wiedza
Dodaje projekt w archiwum
Podstawowe pytanie to dlaczego akurat eeprom na I2C ? Do mnie jakoś nie przemawia ani ks108 ani eeprom i2c. Nie dość że sam wyświetlacz jest wolny w obsłudze bo posiada magistralę 6800 którą trzeba emulować programowo ,to jeszcze sama pamięć z wolnym i2c . Jak już musi być ten wyświetlacz to przynajmniej zrób przesiadkę na pamięć z spi np. 25128 25256 lub data-flash . Jeśli myślisz o jakiś animacjach wsadzonych w I2C to raczej nic sensownego z tego nie będzie . Pytanie podstawowe po co przechowywać grafikę w zewnętrznym eep jak można to zrobić w pamięci flash mikrokontrolera czy też jego wewnętrznym eep choć ta ostatnie jest stosunkowo mała i do tego wolna w odczycie i zapisie . Każdy obrazek to 1k pakując m2561 mamy tych obrazków sporo i w zasadzie tak samo możemy je kasować i zapisywać tyle że mniejszą ilość razy niż na eep . Zysk umieszczenia obrazków we flash jest prosty: czas odczytu dla wewnętrznej pamięci flash jest krótki w stosunku do zewnętrznej pamięci spi ,że już nie wspomnę o odczycie I2C bo z flash odczytasz pewnie obrazek zanim z 24c64 odczytasz jeden bajt . Moim zdaniem najlepiej jest stworzyć procedurę wyświetlania bufora z pamięci ram na wyświetlacz i taką samą procedurą zapisu z z flash do ram obrazków a jak musisz to z eep do ram . Wtedy łatwo jest nakładać na obraz komunikaty , zegar , czy dodatkowe grafiki , ikony itp. Wybór należy do ciebie w każdym razie ja bym się nie pokusił ani na ks108 ani na i2c .
Witam
Próbuję sobie zrobić wyświetlanie grafiki z zewnętrznego EPROM 24C64 ale za chiny nie wychodzi tz tworzy się plik eep ale niestety nie wczytuje z zewnętrznego
W jaki sposób umieściłeś plik eep w eeprom?
Dodano po 7 [minuty]:
kamyczek napisał:
bo posiada magistralę 6800
Nie 6800 (Motorolai) tylko badziewiarską Intelowską 8080.
kamyczek napisał:
którą trzeba emulować programowo
To kwestja wyboru mikrokontrolera. Np Mega162 i wiele innych ma tą magistralę. Ponadto emulacja programowa na AVR 16MHz zadziała szybciej niż sprzętowa na Z-80 6MHz. Nawet gdyby chodziło o magistralę 6800 (np popularne LCD znakowe z HD44780) to skonwertowanie z Intel na Motorollę to w najprostszym rozwiązaniu jedna bramka NAND, w bardziej zaawansowanym przerzutnik RS (dwie bramki NAND).
Nie 6800 (Motorola) tylko badziewiarską Intelowską 8080.
Jak taki z kolegi orzeł to proszę pokazać wyższość magistrali 6800 nad 8080 skoro 90% układów posiada 8080. Może kolega wytłumaczy swoje zdanie co jest "badziewnego" w 8080 ?
Poza tym może kolega uzupełnić wiedzę na temat sterownika KS0108 bo jest on wyposażony w 6800 a nie 8080 . Poza tym człowiek poprosił o opinie a nie cwaniaczenie ...
Nie 6800 (Motorola) tylko badziewiarską Intelowską 8080.
Jak taki z kolegi orzeł to proszę pokazać wyższość magistrali 6800 nad 8080
1 - Intel jest asynchroniczny
2 - Latwość buforowanie magistrali (W Intelu problem z odłączeniem bufora od magistrali, na dobrą sprawę trzeba dawać opóźnienia).
3 - Mniej linii sterujących
Znam budowę pierwszych popularnych Motorolowskich i Intelowskich procesorów i układów peryferyjnych (6800, 6821, 8080, 8255, 8251, 8253). Wniosek jest jeden. Intel ma beznadzejną konstrukcję, jezyk maszynowy, itp, itd.
kamyczek napisał:
skoro 90% układów posiada 8080.
Najpopularniejszym samochodem był Fiat126p. Czy to oznacza, że był najlepszy w tamtych czasach?
Najpopularniejszy system to Windows. Najlepszy? Jeśli tak to dlaczego nie poleciał w kosmos?
A biorąc taką argumentację. 99,9% sterowników LCD znakowych ma magistral e Motorolowską.
kamyczek napisał:
Poza tym może kolega uzupełnić wiedzę na temat sterownika KS0108 bo jest on wyposażony w 6800
Fakt. Pomyliłem z innym sterownikiem, akurat kolorowego LCD, z magistralą Intelopodobną. Co do KS0108 to interfejs do niego na 8051 zrobiłem w 2002roku (załącznik). Nawet jest schemat prostego (niekoniecznie najlepszego) przejścia z Intela na Motorollę.
Dodano po 8 [minuty]:
kamyczek napisał:
Poza tym człowiek poprosił o opinie a nie cwaniaczenie ...
Jeśli pan podpina wyświetlacz do at89c2051 ,który nie ma wyjścia magistrali 8080 i emuluje pan jedną żeby przerobić na drugą dodając jeszcze zewnętrzne bramki to nie wiem do końca czemu ma to służyć profesjonalizmu to tu jakoś nie mogę się doszukać . U dobrego programisty to jest stabilizator kilka kondensatorów rezonator kwarcowy o ile jest taka potrzeba i wyświetlacz . Mnie kolega asemblerem 51 nie zaskoczy różnić z asemblerem avr jest niewiele no może poza cyklem rozkazowym w 12 cyklach zegara , akumulatorem zamiast 32 rejestrów ogólnego przeznaczenia i w efekcie pracy przy 24MHz porównywalnej z 2MHz na AVR . i czasem te 2MHz dla wolnej magistrali upraszcza znacząco generację potrzebnych opóźnień . Tak czy inaczej wygodniej jest korzystać że sprzętowych interfejsów które posiada mikrokontroler i w przypadku AVR to 8080 lub szeregowe spi czy i2c . Poza tym czas odczytu pamięci i2c jest niezbyt sensowny dla odczytu i zapisu bloków danych typu 1kB . Dlatego autorowi napisałem że lepiej jest użyć wewnętrznej pamięci flash i większego mikrokontrolera , dodatkowo bufora w ram z aktualną grafiką bo pozwala to w łatwy sposób realizować dynamiczne menu z zegarem i kontrolkami itp. <ciach>
Moderowany przez dondu:
Zbędne wyciąłem ... proszę nie podgrzewać dyskusji i nie prowokować.
3.1.9. Nie ironizuj i nie bądź złośliwy w stosunku do drugiej strony dyskusji. Uszanuj odmienne zdanie oraz inne opinie na forum.
Z tymi bibliotekami to jest spory bałagan i o ile do niektórych środowisk jest jedna biblioteka i z opisu można wywnioskować co w niej jest a czego brakuje np. ukochany przez wielu bascom , to już w przypadku C bibliotek obsługujących na różnym poziomie to samo urządzenie czy sterownik może być wiele poczynając od tych które niby działają przez takie które jakoś działają do takich które nie są darmowe , ale przy tym działają też tak jak powinny . Ja wolę pisać biblioteki do obsługi takich rzeczy sam ze względu na to że wiem czego potrzebuję co jest mi zbędne co znacząco skraca nie tylko objętość samego kodu ale również szybkość jego wykonywania , oczywiście wiąże się to też z większą pracochłonnością tworzenia kodu ale równocześnie jego większą niezawodnością w działaniu . Do każdego wyświetlacza można napisać program na wiele sposobów i osiągając takie czy inne wady i zalety . Ja wychodzę z założenia że jak chcesz coś mieć zrobione po swojej myśli najlepiej od początku do końca napisać to samemu .
Myślałem ze biblioteka od obsługi KS108 jest przystosowana do tego i automatycznie wie z kad ma czytać dany plik
BASCOM to nie "Wróżbita Maciej". Weź na logikę. Masz do procka podłączona zewnęrzna eeprom, kartę DS, CompactFlash, PenDrive na USB, Twardy Dysk po ATA. Jak biblioteka ma sie domyśleć, gdzie są zapisane obrazki, pod jakim adresem/pod jakę nazwą?
Czy ty domyśliłbyś się?
Przypuśćmy jednak, że jest to BascomMaciej. Nie inicjalizujesz IIC. BascomMaciej ma to zrobic za ciebie?
Pisałeś, że obrazki do eeprom zapisałeś przy użyciu programatora. Jaki to programator? Czy zrobiłeś weryfikację?
A po co mi w C ?ja C nie znam
poza tym w C można sobie znaleźć dużo przykładów w Google a i w arduino tez jest sporo
Nie będę ukrywał ze liczyłem na pomoc w bascom a nie w innych językach
Przeportować z C na Bascom nie duży problem.
A ASM na Bascom tez nie.
Z Bascom na C tak.
Nie chodzi tu o typowe rozkazy, jak pętle itp, to banał. C jest "blisko" sprzętu, taki bardziej assembler, Jeśli w C jest odwołanie do rejestrów np TWI bez problemu przeniesiesz to na Bascom, coś w rodzaju tłumaczenia np z angielskiego na polski. Gdy np użyje w C:
Kod: C / C++
Zaloguj się, aby zobaczyć kod
Łatwo przeniesiesz to na Bascom. Dosłownie linikjka po linijce używając instrukcji POKE i PEEK. Np:
Kod: C / C++
Zaloguj się, aby zobaczyć kod
to:
Kod: VB.net
Zaloguj się, aby zobaczyć kod
Dawno nie używałem Bascom (w sumie dwa razy w życiu) i nie pamiętam czy adresy IO podaje sie tylko wielkimi literami, czy trzeba dodać podkreślenie a może jeszcze inaczej.
Gdy natomiast użyjesz w Bascom:
Kod: VB.net
Zaloguj się, aby zobaczyć kod
W C będzie wyglądać to (w dużym uproszczeniu) tak:
Kod: C / C++
Zaloguj się, aby zobaczyć kod
Dodano po 7 [minuty]:
kulamario napisał:
Nie będę ukrywał ze liczyłem na pomoc w bascom a nie w innych językach
C jest standardem, Bascom nie. Nie licz na to, że cały świat przestawi się na Bascom. Jest on bardzo ograniczony a kompilator nieprzewidywalny.
Dodano po 11 [godziny] 47 [minuty]:
kulamario napisał:
poza tym w C można sobie znaleźć dużo przykładów w Google a i w arduino tez jest sporo
A w Bascom nie. Jak myślisz dlaczego?
Bez większych problemów, przenosiłem kod w C przeznaczony dla PC (konkretnie search rom w trybie 128 bit dla DS2480) na AVR. Aby zadziałało zmieniłem kilka deklaracji!!! Aby zoptymalizować (głównie zastąpić int przez unsigned char) poświęciłem kilka minut. Bascom obsługuje DS2480 w trybie 128bit? A DS2482/4 w trybie 3-bit? Taki kod z C możesz przenieść do Bascom ale zajmie ci to kilka dni, tak samo jak przenieść kod ASM wygenerowany przez Bascom na inny język.
Wróćmy jednak do twojego problemu. Bascom ma kilka prostych instrukcji obsługujących IIC. Skopiuj obrazek z eeprom do ram i wyświetl go. Jak już to będzie działać to napisz procedurę przenoszącą dane z eeprom bezpośrednio do LCD.
Zanim to jednak zrobisz. Czy jesteś pewien, że w eeprom są zapisane pliki obrazu? Nie napisałeś jakim programatorem wgrałeś obrazki do eeprom i czy zweryfikowałeś jego zawartość.
Czy jesteś pewien, że w eeprom są zapisane pliki obrazu? Nie napisałeś jakim programatorem wgrałeś obrazki do eeprom i czy zweryfikowałeś jego zawartość.
Mam pytanie czym się różnii obrazek w pamięci od danych co by tam nie było wygląda tak samo dużo zer i jedynek ....
C jest nieco inne od bascoma bo w bascomie jest jedna biblioteka do ks108 a w c można dokleić każdą z sieci . Tu potrzeba raczej kogoś kto bawi się bascomem da taki przykład i zna bibliotekę z bascoma .
Czy jesteś pewien, że w eeprom są zapisane pliki obrazu? Nie napisałeś jakim programatorem wgrałeś obrazki do eeprom i czy zweryfikowałeś jego zawartość.
Mam pytanie czym się różnii obrazek w pamięci od danych co by tam nie było wygląda tak samo dużo zer i jedynek ....
Czym różni sie plik, MP3, tekst, program. Dużo zer i jedynek.
Zobacz jak wygląda plik obrazka w np wewnętrznym eeprom gdy jest podświetlany poprawnie. Zrób to samo w zewnętrzym eeprom. Jaki problem?
Powiedzmy, że chodzi o tekst, zapisujesz w eeprom. To ciąg zer i jedynek, np "Ala" to ciąg bajtów (hex) 41, 69, 61. Sprawdzasz więc czy w eeprom też masz taki ciąg danych.
Dodano po 2 [minuty]:
kamyczek napisał:
C jest nieco inne od bascoma bo w bascomie jest jedna biblioteka
Jedynie słuszna
kamyczek napisał:
do ks108 a w c można dokleić każdą z sieci . Tu potrzeba raczej kogoś kto bawi się bascomem da taki przykład i zna bibliotekę z bascoma .
Biblioteka w Bascom do wyświetlacza wyświetla dane np z RAM, FLASH, wewnętrznego EEPROM. Nie ma szans, a na pewno sa bardo małe, aby wyświetlał bezpośrednio z SD, HD, PenDrive, WiFi i coś tam jeszcze. Ty musisz dane z zewnętrznego nośnika skopiować do ram i wyświetlić. Na cuda nie licz.
JHak widzisz Bascom jest bardzo ale to bardzo ograniczony. Jeśli autor czegoś nie przewidział/obsłużył musisz zrobic to "na piechotę" jak w C czy asm, tyle, ze w C znajdziesz mnóstwo rozwiązań w sieci, a Bascom ze świecą szukać.
Zacznij ot tego: - wyświetlenie obrazka z ram
Natępnie:
- czy obrazek na pewno jest w eeprom. Nadal nie odpowiedziałeś jakim programatorem wgrałeś tam obrazek!
- skpiuj dane z eeprom do ram. Można to zrobic zwykłą pętla for, next czy inna
- w ostatnim kroku kopiuj dane z eeprom bezpośrednio do LCD. To juz "poważniejsza" robota jak na Bascom, w C to norma.
PS
Mogę sie założyć, że obrazków nie masz w zewnętrznym eeprom.
Bascom ma jedną podstawową zaletę dla początkujących przy małych wymaganiach wobec programisty amatora daje satysfakcję ze zrobienia czegoś co działa miga wyświetla i cieszy oko bez konieczności zagłębiania się w rejestry budowę i sposób konfiguracji wyświetlacza i mikrokontrolera . To są pewne kompromisy rezygnujemy z uniwersalności i nieograniczonych możliwości na rzecz łatwości napisania programu a tak poza tym patrząc na to jak długo na rynku jest c a jak długo bascom to są to te same ideologie tylko w różnym stopniu zaawansowane . A tak poza tym jak już kolega wszystko wie co może biblioteka z bascoma to może trzeba po prosu napisać kawałek kodu z obsługą wyświetlacza .
Bascom ma jedną podstawową zaletę dla początkujących przy małych wymaganiach wobec programisty amatora daje satysfakcję ze zrobienia czegoś co działa
I kolega jest usatysfakcjonowany działaniem Bascoma? Wnioskuję, że nie bo nie ma on ochoty wyświetlać obrazków z zewnętrznej eeprom.
kamyczek napisał:
A tak poza tym jak już kolega wszystko wie co może biblioteka z bascoma to może trzeba po prosu napisać kawałek kodu z obsługą wyświetlacza .
Nie ma problemu. Jaka kwotę kolega proponuje za "poprawienie błędów" Bascoma?
PS
No to jak, są te obrazki w eeprom czy nie? Nadal nie usłyszałem jakim programatorem zostały tam umieszczone, a pytaj już chyba trzeci raz. A co by nie robić, jakiej magii używać, jakiego języka, bibliotek itd to nic na świecie nie wyświetli obrazków jeśli ich nie będzie.
Nie ustawiłem adresow po prostu wgrałem plik epp przez program do programatora
Pod jakimi adresami znajdują się kolejne obrazki nie wiesz.
Jak używasz eeprom także do innych celów, tym bardziej nie wiesz gdzie sa obrazki.
- umiesz wyświetlić obrazek z pamięci ram?
- jeśli nie to musisz sie tego nauczyć
- jeśli tak to musisz poznać strukrurę pliku z grafiką
- poszukaj pocżatkowych adresów obrazków w eeprom
- dalej to juz pisałem, odczyt z eeprom do ram a następnie do LCD
Starczy ci Ramu na odczytanie obrazka z eeprom?
PS
Wgrałeś eep. Powiedzmy, ze umieściłeś obrazki w pamięci flash. A we flash masz program inne dane. Wgrywasz zawartość flash gdzie popadnie. Musisz więc wskazać gdzie znajdują sie obrazki. W przypadku zewnętrznego eeprom jest tak samo.
Ty w ogóle przeczytałeś pierwszy post?
umiem wyświetlać obrazki i z Flash i z eprom ale tego z atmegi
Ty w ogóle przeczytałeś co napisałem? Pytałem o wyświetlenie obrazka z RAM.
Tak w ogóle to wątpliwy jest sens wyświetlania obrazków z zewnetrzej eeprom, skora pamięć ta ma 8kB. Procek na ich 16, nawet, gdyby na kod potrzeba wiecej niż 8 to jest mega32.
Temat jest ciekawy tylko pod jednym względem.
Kiedy w Bascom dołączamy jakąś bibliotekę poprzez $lib to jest ona przeszukiwana pod kątem potrzebnych w programie procedur.
Przeszukiwanie jest prowadzone po kolei tak jak dołączamy bliblioteki a też pod kątem tego które są potrzebne w programie.
Na samym końcu przeszukiwana jest mcs.lib i jeśli nic nie dołączymy wcześniej to właśnie z niej będą brane procedury.
Jednym z przykładów może być to że jeśli nie dołączymy I2c_twi.lib to sprzętowe TWI zastąpi programowe
Chcesz mieć sprzętowe TWI to musisz dołączyć bibliotekę I2c_twi.lib
Idąc dalej każda biblioteka, po prostu, zrobi to co chcesz jak Ty chcesz.
Domyślną obsługą wyświetlaczy graficznych zajmuje się biblioteka glcd.lib.
W niej są procedury obsługi poleceń Line, Box, Circle itp... ale... wyświetlacze się różnią i czasem coś trzeba napisać inaczej.
Wtedy wybrane funkcje bibliotek można modyfikować/napisać na nowo ale kilka typowych można wziąć ze standardowej.
Dołączając swoją bibliotekę najczęściej dbamy tylko o odpowiednią inicjalizację lcd i adresowanie danych. Funkcje rysujące już najcześciej pasują.
Wyświetlacz z tymi dwoma czipami KS108 jest tu złym przykładem bo trzeba dbać o to by rysować cos do granicy jednego obszaru chipa a potem kontynuować na drugim. Nie jest to nowy wyświetlacz....
Co do rysowania z eeproma to dawno dawno temu powstała nota aplikacyjna do tego. Link
Chodzi w niej właśnie o to że w bibliotece jest zawsze funkcja Getbytes_from_Rom_eeprom która po prostu czyta flash lub eeprom żeby obrazek wyświetlić.
Trick polegał na tym że zamiast czytać z wewnętrznego eeproma czytało z zewnętrznego a sposób zmiany kilku linijek biblioteki był przedstawiony w nocie.
Od tego czasu zmienił sie rejestr w którym Bascom lokuje dane pochodzące z rejestru I2C... dlatego często wielu ma kłopoty
Inna sprawa to to że można tu użyć szybkiej pamięci FRAM, ale po co?
Nota była napisana lata świetlne temu bo procesory o dużej flash były drogie.
Teraz nie ma to uzasadnienia ekonomicznego.
Należy raczej wziąć większy procesor.
Niemniej to jest nieskomplikowane a obsługiwać bez żadnej gimnastyki można pamięci o adresowaniu do 64kB czyli np. 24C512
Była to chyba jednak proteza do małych flash...
Inna sprawa że żeby coś ciągnąć z karty SD wypada mieć przynajmniej 2kB SRAM i koło się zamyka.
Co do rysowania z eeproma to dawno dawno temu powstała nota aplikacyjna do tego. Link
Chodzi w niej właśnie o to że w bibliotece jest zawsze funkcja Getbytes_from_Rom_eeprom która po prostu czyta flash lub eeprom żeby obrazek wyświetlić.
Czyli w prosty sposób można czytać tylko z flash lub tylko z zewnętrznego eeprom?