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



Teraz jest 4 gru 2024, o 19:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 18 lis 2015, o 20:22 
Offline
Nowy

Dołączył(a): 18 lis 2015
Posty: 21
Pomógł: 0

Witam,

mam strasznie "dziwny" problem, którego od dłuższego czasu nie mogę rozwiązać sam. Mianowicie posiadam napisaną takową funkcję do wyświetlania tekstu na LCD (2 x 40 HD44780)

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


wszystko działa ładnie jak w głównym programie wywołuję takie cudo:

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


a gdy zamiast łańcucha znaków chce wyświetlić wartość zmiennej to wyświetlacz "milczy" a po jakimś czasie wyświetla "dziwy"

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


mógłby ktoś mi powiedzieć dlaczego? i co trzeba by było zmienić aby to zaczęło działać?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2015, o 20:55 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Nie wiem, ale int nie możesz przekazać. Możesz tylko jako argument przekazać adres litery łańcucha, a więc zamiast zmiennej int stwórz funkcję która przekonwertuje int na string i w tedy przekaż adres tego łańcucha. Dobra może trochę zbyt skomplikowanie zobacz:
kiedy chcesz wyświetlić tekst przy pomocy tej funkcji z zmiennej char(tyko taki typ można przekazać) to robisz 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 możesz wyświetlić zmiennej typu int rozumiesz, a więc podsumowanie musisz zmienną licznik zamienić na tablice char np: przy pomocy funkcji itoa() poczytaj o niej w internecie, i przekazać adres tablicy w której jest zapisana ta liczba w postaci tablicy char.
Czekaj czekaj, dlaczego zmienna tekst jest tablicą? Albo ja jestem zbyt początkujący aby to zrozumieć, albo coś namieszałeś. Pewnie to pierwsze :lol:


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2015, o 21:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Wywołując funkcję przekazujesz wskaźnik na ciąg znaków zakończony znakiem zero (tzw. string). Jak wpisałeś liczbę to kazałeś wyświetlić coś ze wskazanego przez ciebie miejsca. A tam była jakaś losowa informacja - czyli to co pojawiało Ci się na LCD i pewnie było tam dużo danych zanim znalazł się jakiś bajt o wartości 0.

Musisz jak napisał Bartek123 przekonwertować liczbę na stringa.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2015, o 21:58 
Offline
Nowy

Dołączył(a): 18 lis 2015
Posty: 21
Pomógł: 0

Bartek123 napisał(a):
Czekaj czekaj, dlaczego zmienna tekst jest tablicą? Albo ja jestem zbyt początkujący aby to zrozumieć, albo coś namieszałeś. Pewnie to pierwsze :lol:


przykład obsługi wyświetlacza LCD napisałem przy pomocy jakiegoś przykładu z neta. Chciałem sobie napisać "prosty" stoper ale widzę że na Timer-ze tego nie zrobię bo przy 7 min różnica w czasie jest już na poziomie 4 sek. Co prawda procka taktuje wew oscylatorem i wyczytałem gdzieś że to nie jest dokładne ale że aż tak? najdziwniejsze że procek odlicza szybciej niż normalny stoper a wydawało by się że powinien wolniej bo zanim odświeży np. LCD to czas leci.

Tak czy inaczej dziękuje za podpowiedź była przydatna;) LCD wyświetla już co chce:) resztę muszę inaczej rozwiązać - chyba zakupię jakiś zegar czasu rzeczywistego i będę z niego pobierał czas.

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lis 2015, o 20:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 sty 2014
Posty: 336
Lokalizacja: Grodzisk Mazowiecki
Pomógł: 13

Może spróbuj na początek użyć kwarc zegarkowy 32.768 Hz

_________________
"Nie programuj w święta - bug się rodzi"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lis 2015, o 20:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Kwarc 32KHz nie pomoże, bo z reguły one także są mało dokładne i bardzo czułe na warunki zewnętrzne.
Można niedokładności kwarcu kompensować poprzez odpowiednie dodanie kondensatorów lub programowo modyfikować licznik w timerze. Ale i tak zmiany temperatury spowodują jego rozjazd.

Co do układu zegarka, to obejrzyj sobie poradnik Mirka:
http://forum.atnel.pl/topic4652.html

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2015, o 10:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 sty 2014
Posty: 336
Lokalizacja: Grodzisk Mazowiecki
Pomógł: 13

Kolega wspomniał o prostym stoperze. Dla mnie w tym przypadku zew. RTC to jak wół do karety. Niech najpierw sam określi co ma na myśli mówiąc "prosty"

_________________
"Nie programuj w święta - bug się rodzi"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2015, o 19:34 
Offline
Nowy

Dołączył(a): 18 lis 2015
Posty: 21
Pomógł: 0

"prosty" - nie wymagający miesięcznego tworzenia kodu oraz elektroniki - najlepiej taki który mogę na obecną chwilę stworzyć na płytce testowej w miarę możliwości "dokładny":)

owy stoper jest mi potrzebny do "nauczenia się czegoś o avr i ich programowaniu":)

a żeby nauka przynosiła jakieś rezultaty trzeba ćwiczyć czyż nie?:) i ja za ćwiczenie wymyśliłem sobie stoperek:)

obecnie próbuję odpalić ds1307 aby z niego pobierać generowany sygnał 1Hz lub czas i obliczać różnice ale mam problem z i2c (TWI) więc chwilowo mam swój niedokładny stoperek:)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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