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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 10 kwi 2025, o 12:41


    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: 27372
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27372
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27372
    Lokalizacja: Szczecin
    Pomógł: 1043

    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ł: Brak zidentyfikowanych użytkowników i 0 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