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



Teraz jest 23 lut 2025, o 15:39


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 5 paź 2015, o 19:25 
Offline
Nowy

Dołączył(a): 11 cze 2015
Posty: 11
Pomógł: 0

Witam.
Program ma wyświetlać zawartość tablicy tab_wys(tablica wyświetlania) na wyświetlaczu hd44780 2x16(dla testów mają to być same literki A). Niestety wyświetlają się jakieś bzdury:(. Problem leży prawdopodobnie przy przesyle tablicy do funkcji ale nie wiem jaki.
Jeśli by ktoś był na tyle miły i zwrócił mi uwagę jak bardzo banalny błąd robię był bym wdzięczny:)
Mile widziana również krytyczne opinie z sugestiami co do reszty kodu.

Program pisany na atmege8pu.


No to kodzik.

main.c

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


klaw.h

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


klaw.c

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 19:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

zle spojrzalem na Twoj kod :) ale zeby dobrze zaczac - to czy udalo Ci sie wyswietlic chociaz pojedynczy znak na wyswietlaczu ?

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 19:46 
Offline
Użytkownik

Dołączył(a): 29 mar 2012
Posty: 595
Lokalizacja: Jaworzno
Pomógł: 39

Umieszczenie funkcji czyszczenia i wyświetlania danych na LCD w procedurze obsługi przerwania to raczej słaby pomysł :o . Zdefiniuj sobie jakąś flagę dla przerwania od Twojego Timera i sprawdzaj ją w pętli głównej. Jeżeli flaga ustawiona to wykonaj funkcje związane z LCD, a następnie wyzeruj flagę;

_________________
Pozdrawiam
PP



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 19:49 
Offline
Nowy

Dołączył(a): 11 cze 2015
Posty: 11
Pomógł: 0

Na wyświetlaczu wyświetlają się różne przypadkowe znaki.

------------------------ [ Dodano po: 6 minutach ]

Mógł byś podać jakiś przykład w kodzie z opisem, bo nie za bardzo rozumiem jak miał bym to zrobić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 20:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 maja 2014
Posty: 1089
Pomógł: 34

@Pito86 : wiesz zeby Cie nie znechecac - czy ten kod to Twoje dzielo ? Bo jesli nie kojarzysz hasel jak przerwania i timery to moze byc problem zeby Cie naprowadzic na rozwiazanie

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 20:17 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Operacje na wyświetlaczu są strasznie długie i umieszczenie ich w przerwaniu spowoduje jakieś jajca na pewno.
Nie opanowałem jeszcze definicji tablic dwuwymiarowych, ale deklarujesz 16 elementów, a definiujesz 15. Jako argument funkcji używasz 16-go elementu i może to też jest efektem tego, że program działa inaczej niż oczekujesz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 20:23 
Offline
Nowy

Dołączył(a): 11 cze 2015
Posty: 11
Pomógł: 0

Tak to moje dzieło, biblioteka klawiaturki też. W mojej dotychczasowej nauce musiałem przegapić flagi i jak je stosować. Właśnie próbuję uzupełnić wiedzę.
Jak byś mógł jeszcze napisać czemu umieszczenie czyszczenia i wyświetlania to kiepski pomysł. Na tej samej zasadzie napisałem chodzącego ludzika omijającego przeszkody i jak do tond to najlepszy system wyświetlania jaki wymyśliłem(mimo to zdaje sobie sprawę z tego jak bardo jestem początkujący).

------------------------ [ Dodano po: 5 minutach ]

Rafał555 napisał(a):
Operacje na wyświetlaczu są strasznie długie i umieszczenie ich w przerwaniu spowoduje jakieś jajca na pewno.
Nie opanowałem jeszcze definicji tablic dwuwymiarowych, ale deklarujesz 16 elementów, a definiujesz 15. Jako argument funkcji używasz 16-go elementu i może to też jest efektem tego, że program działa inaczej niż oczekujesz.

Wielkie dzięki :) poprawiłem już i niestety to nie jest przyczyną.
To jak najlepiej wyświetlać jeśli nie w przerwaniach?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 20:50 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Do funkcji nie da się przekazać całej tablicy. Zawsze przekazywany jest adres/wskaźnik tablicy. Rozmiaru nie da się przekazać. Ja robię to w ten sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wywołanie funkcji w ten sposób jak to robisz jest błędne, bo należy do funkcji przekazać wskaźnik do tablicy lub adres elementu [0][0], a ty przekazujesz wartość elementu z poza tablicy bo ostatni element to [1][15].
Należy to zrobić tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


lcd_cls nie używaj, bo będziesz miał migotanie wyświetlacza, a skoro tablicę zmieniasz w programie i całą wyświetlasz to nowa zawartość zastąpi starą.

Jak chcesz używać kodów ascii to możesz pisać wprost używając 'literka':
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Teraz masz i 0x41 i 41 a to dwie rożne wartości.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 paź 2015, o 20:52 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

No normalnie w pętli wyświetlać i jeszcze oflagować, żeby odciążyć procesor (chociaż w tym konkretnym przypadku to raczej bez różnicy). I jeszcze zauważyłem, że ten argument funkcji to wogle nie tak (albo mi się tak wydaje). Może wogle zrób funkcję bez argumentu skoro tablica jest globalna.



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 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