Wpis z mikrobloga

Kilka dni temu prosiłem o pomoc z programowaniem ATmegi, a dzisiaj prezentuję wam napisaną od zera bibliotekę do PCD8544 czyli do popularnych wyświetlaczy z Nokii 5110 :) Cechy:

- Bufor który można łatwo modyfikować, a potem wysłać go do ekranu
- Obsługa ASCII, 6 wielkości czcionek
- Kursor, kolejne znaki są automatycznie ustawiane obok siebie/w nowej lini
- Włączenie/wyłączenie wyświetlacza
- Bezpośrednie nadpisywanie bufora, czyli możliwość wyświetlania bitmap :)
- Cała biblioteka to jedyne 124 linijki, licząc komentarze.
- Czcionka w osobnym pliku, zapisana w pamięci Flash (PROGMEM)

Do teraz nie rozwiązałem problemu z wpisywaniem stringów, trzeba podawać ilość znaków do wpisania bo nie potrafię policzyć wielkości tablicy "char *" :P Jakieś pomysły? Jest jeszcze parę poprawek do wprowadzenia, i jak to zrobię to wrzucę ją na Githuba.

#avr #atmega #elektronika #elektronikadiy #mikrokontrolery
skew - Kilka dni temu prosiłem o pomoc z programowaniem ATmegi, a dzisiaj prezentuję ...
  • 11
@skew: można poczytać tutaj ale niestety:

The sizeof way is the right way if you are dealing with arrays not received as parameters. An array sent as a parameter to a function is treated as a pointer, so sizeof will return the pointer's size, instead of the array's.

Thus, inside functions this method does not work. Instead, always pass an additional parameter size_t size indicating the number of elements in the
@skew: tablica ma index, czyli np costam(0), costam(1), costam(2), czyli masz juz 3 wartosci w tablicy, jest troche na arduino.cc :) Dobrze Ci idzie.
ja jestem na etapie pisania w windowsie programu do komunikacji przez serialport z ardu nano i kurde działa komunikacja wymienna, mam nadzieje ze uda sie podpiac radiomodemy i zastapic kabel powietrzem :)
@EssePL: wskaźnik ma jeden rozmiar, bez względu na to na co wskazuje.
@skew: możesz albo wyświetlać tak długo aż nie natrafisz na null albo zrobić funkcję typu:

uint16_t sizeofstring(char *str)
{
uint16_t i = 0;
while(str[i])
++i;

return i;
}

nie wiem czy to zadziała, tak na biegu wymyślone, chodzi o to, że cstringi są zakończone zerem.

//edit: nie wiem czy i nie będzie o 1 za duże, weź to
@skew: Profesjonalnie napisana biblioteka, tak elegancko...
Ja dopiero uczę się pisać w c, potrafię napisać sobie to co potrzebuję ...ale moje programy nie wyglądają tak elegancko i te clasy i w ogóle...
Jestem pod wielkim wrażeniem.

Jak i z czego się uczyłeś? Jak doszedłeś do takiego poziomu?
@Pan_krecik: Dzięki, miło mi :D Zwyczajnie gdy piszę kod to myślę że oprócz tego że ma to działać, to też ma być łatwe w użyciu oraz w razie gdyby ktoś musiał ten kod przeanalizować to żeby nie miał z tym problemu.
W C piszę naprawdę niewiele, jedynie tyle co na arduino lub avr. Na desktopy i raspberry pi zdecydowaną większość piszę w Javie, Pythonie, do tego często też webowe w HTML+PHP+JavaScript.
@skew: Dzięki za odpowiedź, piszę dopiero teraz bo troszkę zarobiony jestem.

- właśnie ap-ropo tego co napisałeś (bazowanie na czytelnym kodzie i ambitne wyzwania) to właśnie zamierzam (na podstawie Twojej biblioteki i internetu) napisać podobną bibliotekę, do obsługi wyświetlacza nokii 6100.

To dobrze udokumentowany wyświetlacz więc nie powinno być problemu..

Skąd brałeś kod do analizowania / uczenia się? Ktoś także musiał rozwiewać wątpliwości..
Może masz i mógłbyś udostępnić więcej swoich programów
@Pan_krecik: Z google :D Akurat tutaj miałem do dyspozycji inną bibliotekę (Ale ktoś niekompetentny ją napisał, mnóstwo niepotrzebnych udziwnień, zajmowała 3x tyle co moja a robiła mniej i wolniej) i analizując co w niej po kolei się dzieje, porównując z datasheetem stworzyłem nową, zoptymalizowaną wersję.