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



Teraz jest 16 kwi 2024, o 15:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 4 kwi 2018, o 19:13 
Offline
Użytkownik

Dołączył(a): 04 kwi 2015
Posty: 26
Pomógł: 0

Witam, mam taki problem że mój avr-ek nie chce wyświetlać na LCD liczb pokolei. Liczby wyświetla w takiej kolejnośći: 1,2,3,4,5,10,11,12,13,14,15,20,itd. lub wyświetla litery .


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


próbowałem też przez pętle for ale pokazuje 0

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: 4 kwi 2018, o 19:52 
Offline
Użytkownik

Dołączył(a): 04 kwi 2015
Posty: 26
Pomógł: 0

nie pomogło teraz wyświetla: 1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k i wraca do początku.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2018, o 19:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 cze 2014
Posty: 855
Lokalizacja: pod Warszawą
Pomógł: 58

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

_________________
Pomóżcie mi stanąć na nogi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2018, o 19:59 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

zubik napisał(a):
A i na koniec łańcucha wstaw zero czyli: przed wyświetleniem
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Znak końca ciągu jest dołączany przez funkcję itoa(), nie trzeba tego robić ręcznie. Poza tym, zmienna wa_da jest inkrementowana w każdym obiegu pętli. Kiedy przekroczy 4 będziesz modyfikował pamięć poza tablicą lik.

bmenot napisał(a):
nie pomogło teraz wyświetla: 1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k i wraca do początku.

Założę się, że nie zmieniłeś wywołania funkcji itoa() na:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

tak jak proponował kolega zubik



Ostatnio edytowano 4 kwi 2018, o 20:07 przez andrews, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2018, o 20:06 
Offline
Użytkownik

Dołączył(a): 04 kwi 2015
Posty: 26
Pomógł: 0

zmieniłem i nic nie dało...

funkcja LCD_WriteText() pochodzi ze strony: http://radzio.dxp.pl/

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


Pętla for nie działa pokazuje dalej 0



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2018, o 20:14 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Sprawdź jeszcze raz. Początkowo się pomyliłem. Powinno być oczywiście:
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: 4 kwi 2018, o 20:24 
Offline
Użytkownik

Dołączył(a): 04 kwi 2015
Posty: 26
Pomógł: 0

co oznacza to 10 ?? w itoa
teraz pomogło ale jest jeden mały problem nie działa warunek:

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


pętla por nie chce dalej działać



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2018, o 21:34 
Offline
Użytkownik

Dołączył(a): 04 kwi 2015
Posty: 26
Pomógł: 0

korzystając z okazji mam jeszcze jedno pytanie:
chce przekształcić wypełnienie pwm 16bit na procęty korzystając z itoa
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

gdzie wy_pwm zmienna wypełnienia OCR1A.
przy liczbach poniżej 500 pokazuje dobrze a przy wyźszych się gubi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2018, o 17:23 
Offline
Użytkownik

Dołączył(a): 04 kwi 2015
Posty: 26
Pomógł: 0

zmienna wy_pwm jest typu uint16_t.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2018, o 17:59 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Wprawdzie tutaj akurat pewnie funkcja itoa() zadziała prawidłowo, ze względu na to, że wynik obliczania procentów będzie stosunkowo małą liczbą, jednak prawidłowo do konwersji zmiennych typu unsigned int (uint16_t) należy używać funkcji utoa().

Druga sprawa, w trakcie obliczeń procentów wynik mnożenia wy_pwm*100 będzie znacznie wykraczał poza zakres liczby 16-bitowej bez znaku, więc obliczeń należy dokonywać na liczbach 32-bitowych. Taki zapis powinien zadziałać prawidłowo:
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 kwi 2018, o 18:22 
Offline
Użytkownik

Dołączył(a): 04 kwi 2015
Posty: 26
Pomógł: 0

nic nie pomogło zmiana zmiennej na uint32_t tak i ta funkcja utoa. Teraz pokazuje na lcd
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 kwi 2018, o 18:38 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

bmenot napisał(a):
nie pomogło zmiana zmiennej na uint32_t

Ja napisałem, że obliczenia mają być wykonane na liczbach 32-bitowych, a nie żeby zmienić typ zmiennej wy_pwm na uint32_t. Zostaw typ zmiennej tak jak był, tylko linijkę:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

To musi zadziałać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2018, o 18:45 
Offline
Użytkownik

Dołączył(a): 04 kwi 2015
Posty: 26
Pomógł: 0

nie działa...
utoa i itoa działają tak samo. Jak jest dopisane UL to wyświetla wH% a jak nie ma UL to pokazuje ok 3 mniej %niż powino być przy liczbach większych...
Działa przy sprinft tylko wtedy gdy jest UL, chociaż bym wolał żeby było ito a gdzyż kiedyś przeczytałem że jest pamięciożerna.

Co oznacza to UL przy 100 ??
mirekk36 coś wspominał w swoich poradnikach ale jakoś nie ogarniam tego. Jak by ktoś mógł wyjaśnić to jaśniej to by było fajnie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2018, o 19:10 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Cytuj:
utoa i itoa działają tak samo

Nie działają tak samo. Napisałem Ci, że w tym konkretnym przypadku akurat mogą działać tak samo, ale do konwersji liczb całkowitych bez znaku używa się utoa().

bmenot napisał(a):
Jak jest dopisane UL to wyświetla wH% a jak nie ma UL to pokazuje ok 3 mniej %niż powino być przy liczbach większych

No to musisz mieć namieszane gdzie indziej w kodzie, bo u mnie to działa prawidłowo. Na podstawie pojedynczych linijek kodu nie da się wywróżyć, gdzie jest błąd.

bmenot napisał(a):
Co oznacza to UL przy 100 ??

UL wymusza na kompilatorze potraktowanie wartości jako unsigned long, czyli w przypadku AVR jest to liczba 32-bitowa bez znaku. Dzięki temu obliczenia są wykonywane na liczbach o większym zakresie, niż by to wynikało z typu zmiennej użytej w obliczeniach.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2018, o 19:19 
Offline
Użytkownik

Dołączył(a): 04 kwi 2015
Posty: 26
Pomógł: 0

Cytuj:
No to musisz mieć namieszane gdzie indziej w kodzie, bo u mnie to działa prawidłowo. Na podstawie pojedynczych linijek kodu nie da się wywróżyć, gdzie jest błąd.


A to mój kod:

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


do zmienej
    uint16_t zm_pwm
przekazywane jest ze zmienej volatile uint16_t wy_pwm gdyż bespośrednio ze zmiennej wy_pwm nic nie wyświetlało przy itoa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2018, o 19:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 cze 2016
Posty: 247
Lokalizacja: Rybnik
Pomógł: 13

ja mam taki niezbyt ładny kod, używałem go na XMEGA, chodził lepiej jak itoa ale na atmega, attiny tez powinien chodzić
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Situs != Situs



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2018, o 19:49 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

bmenot napisał(a):
A to mój kod:
Napisz jeszcze, czy dołączyłeś dyrektywą #include plik nagłówkowy <stdlib.h> na początku pliku *.c.
Można oczywiście użyć sprintf(), ale utoa() też musi działać.

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

i napisz, jaki będzie efekt.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 kwi 2018, o 20:38 
Offline
Użytkownik

Dołączył(a): 04 kwi 2015
Posty: 26
Pomógł: 0

Cytuj:
Napisz jeszcze, czy dołączyłeś dyrektywą #include plik nagłówkowy <stdlib.h> na początku pliku *.c


Pomogło, teraz działa, nie miałem tego.

Dzięki Wielkie za pomoc

itoa() też działa...



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

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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO