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



Teraz jest 26 mar 2026, o 12:05


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 24 ] 
Autor Wiadomość
 Tytuł: Problem z kodem
PostNapisane: 16 paź 2014, o 15:05 
Offline
Użytkownik

Dołączył(a): 05 sie 2014
Posty: 69
Lokalizacja: Kraków
Pomógł: 11

Witam!
Od dłuższego czasu zastanawiam się nad kodem do AVR, a właściwie nad wyświetlaniem słów, które będę chciał zmieniać w czasie działania programu (po naciśnięciu jakieś przycisku itp.).
Pytanie brzmi: Jak napisać taki kod? Próbowałem tworzyć tablicę ze zmienną char, ale nie działało.
Jestem w tym zielony, więc proszę o pomoc. Działam w oparciu o bluebook, ale nie wiem jak to rozwiązać. Proszę o pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 paź 2014, o 15:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 maja 2013
Posty: 288
Ostrzeżenia: -2
Pomógł: 23

To wrzuć chociasz jakiś przykładowy swój kod. Gdzie chcesz to wyświetlać?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 paź 2014, o 15:25 
Offline
Użytkownik

Dołączył(a): 05 sie 2014
Posty: 69
Lokalizacja: Kraków
Pomógł: 11

bogdanc napisał(a):
To wrzuć chociasz jakiś przykładowy swój kod. Gdzie chcesz to wyświetlać?

Zapomniałem napisać :) . Na zwykłym wyświetlaczu LCD.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Chce, aby w "zmienna" osadzić jakiś tekst.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 paź 2014, o 16:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 maja 2013
Posty: 288
Ostrzeżenia: -2
Pomógł: 23

Skoro masz bluebooka-a. To masz też ładnie wyjaśnione na temat przesyłania do LCD tekstu etc.

Nie możesz tak zrobić.
Bo kompilator musi wiedzieć ile ma zarezerwować miejsca dla danej zmiennej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 paź 2014, o 22:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 mar 2014
Posty: 580
Lokalizacja: Jastrzębie-Zdrój
Pomógł: 71

Witam,

Ingvarusk napisał(a):
Witam!
Od dłuższego czasu zastanawiam się nad kodem do AVR, a właściwie nad wyświetlaniem słów, które będę chciał zmieniać w czasie działania programu (po naciśnięciu jakieś przycisku itp.).
Pytanie brzmi: Jak napisać taki kod? Próbowałem tworzyć tablicę ze zmienną char, ale nie działało.
Jestem w tym zielony, więc proszę o pomoc. Działam w oparciu o bluebook, ale nie wiem jak to rozwiązać. Proszę o pomoc.


Kolega skoro działasz w oparciu o bluebook to nie da się prościej jak:

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


Efektem będzie wyświetlanie w kółko napisu doman89 na wyświetlaczu.

Oczywiście pominąłem wszelkie oczywiste kwestie związane z tworzeniem projektu czyli takie jak np. #include <avr/io.h>

Jak coś niejasne pytaj :)

z Niebieskim pozdRowieniem,
Doman89



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 paź 2014, o 23:02 
Offline
Użytkownik

Dołączył(a): 05 sie 2014
Posty: 69
Lokalizacja: Kraków
Pomógł: 11

Dzięki za odpowiedzi, ale nie w tym rzecz. Bibliotekę całą rozumiem. Chodzi mi o to, żeby wyświetlić np:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i chcę, aby to imię było pobierane ze zmiennej ("imie"), która gdzieś jest zapisana



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 paź 2014, o 23:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Kod który przedstawiłeś jest w porządku.
Do zapisu łańcucha znakowego do zmiennej "imie" możesz użyć funkcji "strcpy", niezależnie czy statyczna, czy też dynamiczna (malloc/new) alokacja tablicy.

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


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 paź 2014, o 23:41 
Offline
Moderator
Avatar użytkownika

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

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


Autor postu otrzymał pochwałę

_________________
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: 16 paź 2014, o 23:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 mar 2014
Posty: 580
Lokalizacja: Jastrzębie-Zdrój
Pomógł: 71

Ingvarusk napisał(a):
Dzięki za odpowiedzi, ale nie w tym rzecz. Bibliotekę całą rozumiem. Chodzi mi o to, żeby wyświetlić np:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i chcę, aby to imię było pobierane ze zmiennej ("imie"), która gdzieś jest zapisana


Dokładnie jak już wyżej kolega napisał, dobrze masz wpisane.
Generalnie to można zajrzeć do pliku nagłówkowego i zobaczyć jakiego argumentu oczekuje funkcja, a więc:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Czyli funkcja oczekuje wskaźnika. Jak wiemy w języku C tablice nie są przesyłane do funkcji jako kopie, tylko przesyłamy adres ich początku. Tak więc przesyłając tablicę imie (tablica bo składa się z kilku elementów typu char), tak naprawdę przesyłamy tylko adres początkowy tablicy. Mam nadzieję, że w miarę to dobrze zobrazowałem :P

z Niebieskim pozdRowieniem,
Doman89


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 paź 2014, o 21:18 
Offline
Użytkownik

Dołączył(a): 05 sie 2014
Posty: 69
Lokalizacja: Kraków
Pomógł: 11

Jeszcze jedno (mam nadzieję pytanie). Jak zmienić zawartość tablicy z np. "Rupert" na "Adam". Próbowałem 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.


Ale nie działa :( .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 paź 2014, o 21:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Przecież napisałem wyżej...

Zmień:

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

Na:

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

Do działania trzeba dołączyć bibliotekę <string.h>.
Musisz też pamiętać, że masz statycznie zaalokowaną pamięć na 7 bajtów (6 znaków + NULL) i nie wolno przekraczać tej wartości (chyba, że to miejsce w pamięci zostanie realokowane)!
Poza tym zarezerwowana pamięć "się marnuje" w przypadku krótszych łańcuchów znakowych, ale myślę że to w tym momencie nie jest aż tak istotne ;)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 paź 2014, o 22:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 mar 2014
Posty: 580
Lokalizacja: Jastrzębie-Zdrój
Pomógł: 71

Ingvarusk napisał(a):
Jeszcze jedno (mam nadzieję pytanie). Jak zmienić zawartość tablicy z np. "Rupert" na "Adam". Próbowałem 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.


Ale nie działa :( .


Kolega niestety na tablicach już takich myków nie porobisz. Musiałbyś każdy jeden element przypisywać osobno czyli imie[0] = 'A', imie[1] = 'd', itd. Do tego mógłbyś napisać szybko funkcję, ale poco wyważać otwarte drzwi? Kolega wyżej Ci napisał jaka funkcja to spełnia.

Ale jak kolega również zauważył wyżej, nie możesz przekroczyć rozmiaru tablicy. Zawsze możesz podczas inicjalizacji zmiennej przypisać jej długość np. 20 elementów - zawsze wtedy możesz swobodniej się poruszać.

z Niebieskim pozdRowieniem,
Doman89



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2014, o 07:33 
Offline
Użytkownik

Dołączył(a): 30 sie 2014
Posty: 170
Pomógł: 2

doman89 - ale czy to rezerwuje jakąś pamięć uC czy nie ? Czy to nie marnotrastwo? :)

Jeśli tak to jak definiowanie long long int dla zmiennej ktora przyjmnie max wartosc np. 2 ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2014, o 08:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 maja 2013
Posty: 288
Ostrzeżenia: -2
Pomógł: 23

To zadeklaruj sobie tablice z imionami w pamieci flash.

Losuj sobie cyfre od 0 do n ktora bedzie indeksem do danego imienia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2014, o 09:07 
Offline
Użytkownik

Dołączył(a): 05 sie 2014
Posty: 69
Lokalizacja: Kraków
Pomógł: 11

atmel napisał(a):
Przecież napisałem wyżej...

Zmień:

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

Na:

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

Do działania trzeba dołączyć bibliotekę <string.h>.
Musisz też pamiętać, że masz statycznie zaalokowaną pamięć na 7 bajtów (6 znaków + NULL) i nie wolno przekraczać tej wartości (chyba, że to miejsce w pamięci zostanie realokowane)!
Poza tym zarezerwowana pamięć "się marnuje" w przypadku krótszych łańcuchów znakowych, ale myślę że to w tym momencie nie jest aż tak istotne ;)


Dzięki. Nie wiedziałem do czego w ogóle służy ta funkcja. Jak napisałeś pierwszy kod, to go nie zrozumiałem. Teraz to wyjaśniłeś i rozumiem. :D

Jeszcze jeden problem. Przy wyświetlaniu słowa "Adam" wyświetla się "Adamrt", od słowa "Rupert" Czy można jakoś to zmienić?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2014, o 09:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 maja 2013
Posty: 288
Ostrzeżenia: -2
Pomógł: 23

Tak jak wyswietlasz na lcd to w pamieci sterownika wyswietlacza pozostaja te znaki, ktore wyslales mu wczesniej.
Musisz sobie przed wyswietleniem wyczyscic caly ekran lub tylko tam gdzie wyswietlasz imie za pomocą lcd_locate i wpisanie tam spacji o okreslonej długości.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2014, o 09:30 
Offline
Użytkownik

Dołączył(a): 05 sie 2014
Posty: 69
Lokalizacja: Kraków
Pomógł: 11

bogdanc napisał(a):
Tak jak wyswietlasz na lcd to w pamieci sterownika wyswietlacza pozostaja te znaki, ktore wyslales mu wczesniej.
Musisz sobie przed wyswietleniem wyczyscic caly ekran lub tylko tam gdzie wyswietlasz imie za pomocą lcd_locate i wpisanie tam spacji o okreslonej długości.



OK, ale jak to zrobić?
Szukam po książce, ale nie mogę znaleźć.

Co trzeba napisać?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2014, o 09:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 mar 2014
Posty: 580
Lokalizacja: Jastrzębie-Zdrój
Pomógł: 71

Witam,

Kolega czyść wyświetlacz poleceniem:
lcd_cls();

A poźniej ustaw sobie kursor np. na początek:
lcd_locate (0,0);

lcd_locate ( x, y)
x - wiersz,
y - kolumna

z Niebieskim pozdRowieniem,
Doman89


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

doman napisał(a):
doman89 - ale czy to rezerwuje jakąś pamięć uC czy nie ? Czy to nie marnotrastwo? Jeśli tak to jak definiowanie long long int dla zmiennej ktora przyjmnie max wartosc np. 2 ?


Kolega sory ale bredzisz!

Wrzucanie long long żeby liczyć np. do 100 to jest błąd tego typu, że programista nie potrafi oszczędzać pamięci.

Wrzucenie tablicy 10 elementowej na imię to nie jest marnowanie.
Kolega ma np. imię: Marcel - tablica 7 elementowa (6 + null). Więc sobie deklaruję tablicę 7 elementową. Później musi na przykład do tej zmiennej przypisać Mateusz - i co wtedy? Albo Władysław - gdzie ta tablica (10 elementowa) spokojnie by te wartości przyjęła - ale wg. Ciebie to marnotrastwo pamięci. Tak więc kolega wszystko zależy od tego, do czego programista potrzebuje danej zmiennej.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2014, o 10:01 
Offline
Użytkownik

Dołączył(a): 05 sie 2014
Posty: 69
Lokalizacja: Kraków
Pomógł: 11

Jeszcze mam jeden problem z kompilacją. Gdy tworzę inny plik od 04_LCD (gdy kopiuje i robię folder np. 04_LCD_2) i kompiluje to kompilacja tego nowego folderu nie przebiega dobrze, gdy ten pierwszy jest ok.

Czy problem jest w tym?:

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


Pojawiają się błędy w void lcd_str_P , void lcd_hex , void lcd_defchar_P .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2014, o 10:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 mar 2014
Posty: 580
Lokalizacja: Jastrzębie-Zdrój
Pomógł: 71

Kolega musisz zawsze dodawać po prostu zawsze poprawne includy w main.

#include "nazwa_folderu/nazwa_pliku_naglowkowego.h"

Jak zmieniesz w porjekcie nazwę folderu, to w includzie też to rób.

Co do funkcji EEPROM to masz je uaktywnione w pliku nagłówkowym? Musisz tam odblokować nijako tą funkcję poprzez wpisanie 1 w #define USE............. wszystko pięknie i ładnie opisane w bibliotece - plik nagłówkowy .h

z Niebieskim pozdRowieniem,
Doman89


------------------------ [ Dodano po: 2 minutach ]

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


Jeżeli w pliku lcd44780.h masz w powyższej linijce 0 - to program ma wyłączoną z kompilacji tą funkcję.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 paź 2014, o 13:34 
Offline
Użytkownik

Dołączył(a): 05 sie 2014
Posty: 69
Lokalizacja: Kraków
Pomógł: 11

doman89 napisał(a):
Kolega musisz zawsze dodawać po prostu zawsze poprawne includy w main.

#include "nazwa_folderu/nazwa_pliku_naglowkowego.h"

Jak zmieniesz w porjekcie nazwę folderu, to w includzie też to rób.

Co do funkcji EEPROM to masz je uaktywnione w pliku nagłówkowym? Musisz tam odblokować nijako tą funkcję poprzez wpisanie 1 w #define USE............. wszystko pięknie i ładnie opisane w bibliotece - plik nagłówkowy .h

z Niebieskim pozdRowieniem,
Doman89


------------------------ [ Dodano po: 2 minutach ]

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


Jeżeli w pliku lcd44780.h masz w powyższej linijce 0 - to program ma wyłączoną z kompilacji tą funkcję.


Już wiem w czym problem. Nie używałem po prostu tych funkcji. trzeba zmienić na 0. Dzięki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2014, o 08:33 
Offline
Użytkownik

Dołączył(a): 05 sie 2014
Posty: 69
Lokalizacja: Kraków
Pomógł: 11

Jeszcze jeden problem. Jak wyświetlić jakąś liczbę z zmiennej?

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


Tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2014, o 09:00 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

do tego używa się funkcji lcd_int



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2014, o 09:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 mar 2014
Posty: 580
Lokalizacja: Jastrzębie-Zdrój
Pomógł: 71

Witam,

Kolega ale opór stawiasz plikowi nagłówkowemu lcd44780.h.
Wystarczy go przejrzeć, a w nim mamy wszystko ładnie po polsku - więc myślę, że nie ma problemu ze zrozumieniem.

Tu masz małą "ściągawkę":
lcd_init(); - inicjalizacja wyświetlacza
lcd_cls(); - czyszczenie całego wyświetlacza
lcd_str( str ); - wypisywanie łańcucha zankowego z pamięci RAM np. w zmiennej str
lcd_locate( y, x ); - ustawianie kurosora w pozycji x, y;
lcd_char( c ); - wyświetlenie pojedynczego znaku z pamięci RAM np. w zmiennej char c
lcd_str_P( str_P ); - wyświetlenie łańcucha znakowego z pamięci FLASH np. w zmiennej str_P (musi być ona zadeklarowana jako const i PROGMEM)
lcd_str_E( str_E ); - wyświetlenie łańcucha znakowego z pamięci EEPROM np. w zmiennej str_E (musi być ona zadeklarowana jako EEMEM)
lcd_int( zmienna ); - wyświetlenie zmiennej integer jako tekstu na wyświetlaczu (tylko zmienne int, nie może być to np. float)
lcd_hex( val ); - wyświetlenie zmiennej integer heksadecymalnej na wyświetlaczu jako tekst
lcd_defchar( nr, def_znak); - dodawanie własnego znaku do pamięci CGRAM wyświetlacza, z pamięci RAM mikrokontrolera, numer to pod jaki adres dodajemy (mamy możliwość zdefiniowania 8 znaków) a def_znak to wzór znaku - zapisany w tablicy 8 elementowej typu uint8_t.
Do tego może się przydać MkAvrCalculator - generator fontów
lcd_defchar_P( nr, def_znak ); - jak wyżej tylko z pamięci FLASH mikrokontrolera, czyli tablica jest typu const uint8_t PROGMEM
lcd_defchar_E( nr, def_znak); - równie podobnie, lecz teraz z pamięci EEPROM

lcd_home(); - powrót kursora na początek
lcd_cursor_on(); - włączenie kursora
lcd_cursor_off(); - wyłączenie kursora
lcd_blink_on(); - włączenie miganie kursora
lcd_blink_off(); - wyłączenie migania kursora

Oczywiście każdą musisz włączyć ewentualnie do kompilacji.

Mam nadzieję, że Ci się przyda i skorzystasz ze ściągawki ;)

z Niebieskim pozdRowieniem,
Doman89


Autor postu otrzymał pochwałę


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

Strefa czasowa: UTC + 1


Kto przegląda forum

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