Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 22 gru 2024, o 09:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 27 gru 2017, o 15:14 
Offline
Nowy

Dołączył(a): 20 lis 2017
Posty: 4
Pomógł: 0

Witam szanowne grono
Na wstępie zaznaczę, że programuję w C od niedawna, głównie dla Arduino. Moje doświadczenia wcześniejsze to bardziej Pascal i Object Pascal (wszystko w ramach hobby), co teraz niestety przeszkadza mi w C (...) ale do brzegu...

Robię prosty komputer pokładowy dla swojego motocykla (...). Nie jest to jakiś projekt nie wiadomo jaki, po prostu Atmega328p która zbiera dane sygnałowe z wtrysków, do tego dane dla prędkości, napięcia w kilku miejscach instalacji elektrycznej (...), wyświetlacz GLCD 128x64 i elementy drobne, nie istotne dla tego problemu.

Problem mam następujący:
W czasie uruchamiania urządzenia chcę aby na sekundę lub dwie pojawiła się grafika z logo Honda (bo taki akurat mam motocykl). Konwersję grafiki z logo Hondy do formatu XBM przeprowadziłem w programie GIMP.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nie ma żadnego problemu aby zawartość pliku XBM umieścić w kodzie programu - logo wyświetla się bez żadnego problemu. Problemem dla mnie jest straszliwe marnotrawstwo pamięci... napisałem raptem nieco ponad 500 linii kodu (wraz z tą grafiką) a przy kompilacji mam informację, że pamięć mikrokontrolera jest już zapełniona w ponad 90% co może odbić się na stabilności działania (...), co czyni projekt słabo rozwojowy. Jak wywalam z kodu programu tę grafikę to użycie pamięci spada do "zaledwie" siedemdziesięciu kilku procent, więc co nieco można dołożyć a nie ukrywam że chciałbym ten projekt uczynić jeszcze troszeczkę rozwojowym.

Pomyślałem sobie, że dołożę do projektu czytnik kart SD, wrzucę tam plik np honda.xbm w pętli setup załaduję sobie na ekran zawartość tego pliku... niestety, nie mam na tyle wiedzy aby takie coś napisać. Szukam po internetach podobnego rozwiązania ale z marnym skutkiem. Mógłby się ktoś zlitować nade mną i podesłać kawałek kodu w C, który odczyta plik honda.xbm i wrzuci jego zawartość na wyświetlacz glcd? Domyślam się, że nie jest to jakieś bardzo skomplikowane dla zawodowca, mnie niestety przerosło... :/

PS.
Jeśli rozwiązanie problemu jest bardziej banalne niż mi się wydaje to bardzo proszę się nade mną nie znęcać, jestem jedynie skromnym hobbystą, który postanowił zrobić sobie pewne urządzonko na własny użytek... ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 17:31 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27319
Lokalizacja: Szczecin
Pomógł: 1041

Jeśli męczyłeś się wcześniej z andruino to raczej nie dziwne, że piszesz zapewne kod mega mało opytmalnie i nie wiesz nawet na co zwrócić uwagę w normalnym C. Zdecydowanie polecam ci zacząć od książki:

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

dzięki której spokojnie przejdziesz na czysty C (ja też kiedyś byłem Pascalowcem więc wiem co mówię ;) )... ale jest w niej opisany również i dostęp do karty SD itp itd itp ... z tym że sama prostsza, chudsza biblioteka PetitFS też swoje miejsce zajmuje we Flash ...

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 20:46 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27319
Lokalizacja: Szczecin
Pomógł: 1041

roske napisał(a):
Karty są upierdliwe i zawodne

Sorry ale bardziej niedorzecznego sformułowania to już dawno nie słyszałem ;) ... fakt są upierdliwe i zawodne, gdy ktoś popełnia podstawowe błędy w ich obsłudze zarówno od strony sprzętu jak i programowania ... no ale to są tzw choroby wieku dziecinnego, gdy ktoś zaczyna swoją przygodę z kartami ;) ...

Wystarczy spojrzeć, na wszelkiej maści smartfony, tablety, kamery, aparaty fotograficzne i miliony innych urządzeń, które korzystają w coraz większym zakresie z kart pamięci a na dodatek z coraz szybszych

Owszem do takich prostych prostych procków 8-bitowych - pewnie, że pamięci zewnętrzne na SPI czy I2C są pewną alternatywą - no ale tylko alternatywą

Więc czasem warto przemyśleć co się pisze

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 21:11 
Offline
Nowy

Dołączył(a): 20 lis 2017
Posty: 4
Pomógł: 0

Poleciałem na drugi koniec miasta do kolegi który ma tę książkę... pożyczyłem, znalazłem... przy okazji świetna książka. Na razie tylko zdążyłem rzucić okiem ale już widzę że trzeba będzie koniecznie zakupić! Oczywiście zgadzam się w 100% że piszę w sposób "mało optymalny i coś muszę z tym zrobić. Książka zdecydowanie mi się przyda. W platformie Arduino już nie piszę bo bardzo szybko zauważyłem, że to mnie ogranicza, składnia samego kodu jest jakaś inna (choćby deklarowanie nóżek mikrokontrolera)... więc od kilku tygodni rozpracowuję Atmel Studio. I teraz to ma sens, chociaż przyzwyczajenia z bycia pascalowcem są okrutne...

Wracając do tematu. Na stronie 353 "blue booka" zwróciłem uwagę na polecenie pf_read, bo chyba o to chodzi. Nie bardzo rozumiem składnię tego polecenia, tzn. jak pierwszy argument jest tam zmienna bufor, która ma określoną wielkość tablicy, druga zmienna wyłuskuje z "bufora" właśnie jego wielkość. A trzeci argument: &s1? W jaki sposób "ustawić kursor" we właściwym miejscu w czwartym wierszu aby polecenie pf_read prawidłowo zaczytało dane?
Porównuję ten przykład z książki z tym co już napisałem i gdyby z pliku na karcie SD udało mi się odczytać taki "bufor" to już właściwie nic więcej do szczęścia nie potrzebuję...

Rozumiem, że to polecenie ma za zadanie sczytać bajt po bajcie zawartość pliku. Jednak jak otwieram plik w notatniku to mam u góry trzy wiersze... nie piszę że nie potrzebne ale nie mam pomysłu na to jak programowo wyłuskać z tego pliku wysokość i szerokość grafiki, później jak zbudować pętlę (?), która sczyta mi wszystkie bajty tej grafiki aż do znaku średnika (tak na razie tylko kombinuję)... ewentualnie upośledzę ten plik wywalając te trzy pierwsze linie skoro wysokość i szerokość mogę sobie na sztywno wpisać w program, po prostu. Z drugiej strony wolałbym nie, wtedy rozwiązanie można by uznać za uniwersalne i wykorzystać w innym miejscu, w innym projekcie... dzisiaj już daję sobie spokój, muszę się z tym przespać.

Dlaczego uparłem się na kartę SD:
W zasadzie to się nie uparłem ale na chwilę obecną wydaje mi się to rozwiązanie najbardziej wygodne ze względu na charakter projektu: to będzie komputer(ek) pokładowy pojazdu i między innymi będę chciał tam gromadzić informacje o czasach otwarcia wtrysków w ciągu danej godziny, przy jakiej prędkości i inne tego typu rzeczy... może się okazać że wyjdzie tego dużo. Taką kartę łatwo włożyć w komputer, dane z plików można wrzucić w plik excel i analizować. Z pamięciami w postaci kości chyba nie będzie tak łatwo i wygodnie ale może mi się tylko wydaje...?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 21:30 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27319
Lokalizacja: Szczecin
Pomógł: 1041

Cytuj:
Wracając do tematu. Na stronie 353 "blue booka" zwróciłem uwagę na polecenie pf_read, bo chyba o to chodzi. Nie bardzo rozumiem składnię tego polecenia, tzn. jak pierwszy argument jest tam zmienna bufor, która ma określoną wielkość tablicy, druga zmienna wyłuskuje z "bufora" właśnie jego wielkość. A trzeci argument: &s1? W jaki sposób "ustawić kursor" we właściwym miejscu w czwartym wierszu aby polecenie pf_read prawidłowo zaczytało dane?

To nie ma nic wspólnego z kursorem. Troszkę pewnie nie rozumiesz - bo właśnie - na razie jeszcze nie jesteś obeznany ze wskaźnikami w C, czyli mechanizmem który szczególnie dla Pascalowców jest trudny na początku ;) tu jeszcze raz odwołam się do siebie - bo właśnie wskaźniki kiedyś w języku C najbardziej mnie od niego odrzucały ;)

ale jak się je zaskoczy - .... baaaa Panie! miodzio ... dzisiaj na PC wciąż piszę w Pascalu i powiem, ci że brakuje mi takich wskaźników jak w C

ale wracając do tematu ...

trzeci argument tej funkcji oznacza ILE BAJTÓW zostało w rzeczywistości odczytane z pliku. Bo we wcześniejszym argumencie podajesz bufor i funkcja ma zapisać cały bufor ale jeśli będzie to koniec pliku i pozostanie w nim połowa albo 1/3 to co ? ;)

a więc gdy jest duży plik to za każdym wywołaniem poza tym końcowym - wartość trzeciego argumentu (jako argumentu zwrotnego) będzie miała zwykle rozmiar bufora - a za ostatnim razem może być mniejsza ;)

tyle że trzeci argument - to hmmm jakby ci powiedzieć - to jest WSKAŹNIK do WSKAŹNIKA (stąd operator &) i bardzo dobrze rozumiem, że na tym etapie może być ciężko ci to zrozumieć - dlatego polecałem książkę

chcąc jednak nieco wyjaśnić a żeby nie przepisywać książki to tak w skrócie


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 gru 2017, o 21:56 
Offline
Nowy

Dołączył(a): 20 lis 2017
Posty: 4
Pomógł: 0

No to książka w dłoń, na dobranoc jak znalazł... póki co dziękuję serdecznie. W najbliższych dniach będę męczył i masakrował różne opcje odczytu tych danych a za jakiś czas, jak projekt już będzie w fazie "oblatywania prototypu" to może się nim pochwalę tu na forum... może bo mam świadomość, że na podobnych projektach ludzie zarabiają grube pieniądze a ja nie chciałbym komuś przypadkiem zmasakrować rodzinnego biznesu... ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2017, o 09:23 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2590
Pomógł: 128

A może byłoby lepiej zmienić procek na ciut większy, bo po pierwsze logo by sie zmieściło we flash a po drugie obsługa karty sd też będzie ciut zajmować i de facto znów nie będziesz miał miejsca na rozwój swojego programu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2017, o 12:21 
Offline
Nowy

Dołączył(a): 20 lis 2017
Posty: 4
Pomógł: 0

Wiem że najprościej kupić kilka mikroprocesorów 2560 i (na ten moment) problem z głowy. Niestety nie chcę już inwestować w elektronikę bo po Arduino mam tego chyba z kilogram i już wystarczy. Chcę się tym projektem pozbyć troszkę atmeg8 i atmeg328 nie dlatego że jestem uparty i głupi ale dlatego że muszę się tego jakoś sensownie pozbyć a do tego celu komputer dla motocykla jest jak znalazł. Poza tym lutowanie kości DIP w porównaniu do SMD (?) kości np. 2560 to dla mnie bardzo duża różnica. Mogę sobie np użyć podstawki DIP28 a przy atmedze2560 zdaje się jest to problematyczne. Do tego napięcia: w tych moich atmegach mam 5V, większość komponentów również działa na 5V więc omijam dopasowywanie napięć. Jedyne różnice w napięciach jakie na razie mijam z sukcesem to 12-15V instalacji motocykla poprzez dzielniki napięć do 5V (a dla pewności gdzieś między 4 a 4,5V), co mi wystarczy aby zbierać informacje z instalacji pojazdu (...). Wiem wiem: filtry, izolacje galwaniczne... zasilanie tego mojego układu i tak będzie docelowo z akumulatora 12V pojazdu poprzez przetworniczkę napięcia (przy ładowaniu napięcie wzrasta do około 14,4V, co oczywiście przewidziałem) więc jak coś ma się popsuć to raczej tam i na moje oko izolacja galwaniczna na wejściach atmegi na niewiele pomoże w takiej sytuacji. Przypominam że jestem totalnym amatorem i jakieś bardziej skomplikowane układy nie wchodzą w grę. Na razie musi to wystarczyć. Może w przyszłości jak doczytam, douczę się, to dołożę jakieś układy separujące, jakieś filtry. Na razie układ zbiera informacje z instalacji bez tego wszystkiego i dla mnie na ten moment wystarczy.

Niestety, projekt ma być rozwojowy. Kolejne ekrany również mają niewielkie grafiki w postaci ikon... ekranów już jest 5 a będzie więcej. Nawet bez tej "Hondy" na początku i tak dobijam powoli do 90%. Obsługa karty SD i tak jest konieczna ze względu na konieczność gromadzenia na niej pewnych informacji z pojazdu w czasie jazdy - potrzebne to jest aby wyliczyć dla swojego pojazdu wydajność wtrysków np. w ciągu minuty, co jest konieczne do obliczeń spalania chwilowego, w ciągu jakiegoś innego czasu, na 100km itd. Niestety takich danych producent pojazdu nie udostępnia a komputer pokładowy nie podaje sygnału CAN, jest tylko sterowanie wtryskami na podstawie kilku czujników i to wszystko. Muszę więc wszystko po kolei sobie "rozgryzać". Na szczęście to motocykl z 1998 roku i to prosta elektrycznie konstrukcja ;) Tak więc karta SD i tak musi być a obsługa plików graficznych nie jest mi jakoś super potrzebna ale na pewno pozwoli zdecydowanie poprawić estetykę projektu i będzie realizowana "przy okazji".
Poza tym kto wie co w przyszłości wpadnie mi do głowy, może inteligentny dom lub coś podobnego... a do takich pomysłów takie "wodotryski" na ekranie to podstawa. W związku z tym pomęczę się z odczytem plików graficznych z karty SD bo taka wiedza z pewnością przyda się na przyszłość.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO