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



Teraz jest 9 sty 2025, o 17:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 18 maja 2013, o 19:56 
Offline
Nowy

Dołączył(a): 18 maja 2013
Posty: 4
Pomógł: 0

Witam,
napisałem program do wyświetlania napisów na wyświetlaczu widmowym w Bascomie. Wyświetlacz wykonałem na wąskiej płytce uniwersalnej i posiada 12 diod. Cztery górne to młodsze piny portu D, a reszta to piny portu B. Chciałem przerobić kod na C tak, by móc zapisać większą ilość napisów. (W Bascomie zająłem już całą dostępną w wersji demo pamięć programu). Niestety okazało się że już jeden napis w C, zajął prawie całą pamięć Atmegi8. Zacząłem naukę mikrokontrolerów od Bascoma i pewnie program w C wygląda pokracznie. Proszę o podpowiedź co jest źle i czemu tak napisany program w C zajmuje znacznie więcej miejsca. Poniżej zamieszczam fragmenty z kodu w C i Bascom dla wyświetlenia jednej pionowej linii na wyświetlaczu.

Kod z Bascoma:
Kod:
PORTB = &B00110011
PORTD = &B00001010
Waitus 50
PORTB = 0
PORTD = 0
Waitus 250


Kod z C:
Kod:
PORTB = 0B00110011;
PORTD = 0B00001010;
_delay_us(50);
PORTB = 0;
PORTD = 0;
_delay_us(250);



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2013, o 20:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Ja jestem słaby w programowaniu, ale jeśli chcesz aby koledzy " po fachu " Ci pomogli to chyba coś
mało tego kodu do analizy. ATmega8 to nie takie bydle ale już cała pamięć?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2013, o 20:18 
Offline
Moderator
Avatar użytkownika

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

jeśli to jest cały kod w C to nie dziwię się że nie działa

pokaż cały kod - gdzie masz main() ? itp

------------------------ [ Dodano po: kilkunastu sekundach ]

jeśli to jest cały kod w C to nie dziwię się że nie działa

pokaż cały kod - gdzie masz main() ? itp

_________________
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: 20 maja 2013, o 14:44 
Offline
Nowy

Dołączył(a): 18 maja 2013
Posty: 4
Pomógł: 0

Cały kod jest bardzo długi, a jak pisałem, fragment kodu jest na wyświetlenie tylko jednej kolumny. Więc jak mam do wyświetlenia obrazek 100x12, to piszę sto razy taki fragment tylko z innymi wartościami portów B i D. Wcześniej w programie są wszystkie biblioteki, deklaracje wejść/wyjść i też funkcja main() oraz nieskończona pętla sprawdzająca warunek zerowania jednego z wejść (magnes zwiera kontaktron do masy i wtedy rozpoczyna się wyświetlanie). Jeśli na port podane jest 0, to wykonuje się wyświetlenie obrazka np. takiego 100x12 gdzie w funkcji następuje po sobie 100 wyżej wymienionych fragmentów kodu i znów czekamy na pojawienie się zera. Nie wiem w jaki sposób zapisać te sto razy po sześć linijek, aby zajmowały mniej miejsca w pamięci. Podejrzewam, że trzeba to rozbić na funkcje, tylko pytanie na jakie aby program był optymalny?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2013, o 14:50 
Offline
Moderator
Avatar użytkownika

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

sadek napisał(a):
to piszę sto razy taki fragment tylko z innymi wartościami portów B i D


To znaczy że nie piszesz programu :( ....

takie rzeczy robi się w pętlach i wtedy to co zajmuje ci dużo kodu (linii kodu) oraz wsadu - zmniejszy się do kilkudziesięciu bajtów i linii kodu ....

na prawdę zacznij od książki:

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

to szybko zaskoczysz o co chodzi

_________________
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: 20 maja 2013, o 15:38 
Offline
Użytkownik

Dołączył(a): 31 paź 2012
Posty: 99
Pomógł: 4

Może umieść dane w tablicy i w pętli odczytuj kolejne indeksy z tablicy . Jak rozwiązałeś problem synchronizacji czasów wyświetlania ? czy sprawdzasz tylko początek wyświetlania ? wtedy przy różnych prędkościach obracania się koła będzie różna długość napisów . Powinieneś przedstawić cały kod jeżeli chcesz aby Ci podpowiedzieć co jest nie tak .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2013, o 15:47 
Offline
Nowy

Dołączył(a): 18 maja 2013
Posty: 4
Pomógł: 0

Ok, zrobiłem tak, że na wyświetlenie jednej kolumny na wyświetlaczu mam funkcję do której przekazuję dwa argumenty. Wartość portu B i D jakie chcę wyświetlić w kolumnie, ale to i tak muszę przepisać ręcznie to co sobie wcześniej narysowałem na kartce. Przerobię program i zobaczę czy zwolniło się trochę miejsca.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2013, o 15:49 
Offline
Moderator
Avatar użytkownika

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

sadek napisał(a):
ale to i tak muszę przepisać ręcznie to co sobie wcześniej narysowałem na kartce.


No i dlatego kolega wyżej bardzo dobrze podpowiedział o tablicy - wrzuć to co masz na kartce w tablicę, i wyświetlaj w pętli. Wtedy będziesz miał OGROMNĄ oszczędność linii kodu i zajętości 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: 20 maja 2013, o 16:44 
Offline
Nowy

Dołączył(a): 18 maja 2013
Posty: 4
Pomógł: 0

Teraz działa. Sam pusty program nic niewyświetlający zajmuje około 50% pamięci, ale za to dodanie długich napisów nie powoduje już dużych przyrostów zajętości pamięci. Dzięki.



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: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Bing [Bot] 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO