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



Teraz jest 5 mar 2026, o 05:28


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 9 cze 2015, o 22:52 
Offline
Nowy

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

Potrzebuje wyświetlić wynik pomiaru z zewnętrznego przetwornika analogowo/cyfrowegona. Urządzenie pracuje na ATmega16 do którego podłączony jest przetwornik a/c, wyświetlacz hd44780, urządzenie działa i wskazuje pomiary napięcia poprawnie, potrzebuje jednak dalej przekształcić ten wynik, a to już nie wychodzi.

Programu do "wyni" działa, natomiast reszta obliczeń która potrzebna jest do wyświetlenia napięcia nie działa poprawnie.


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



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



Ostatnio edytowano 11 cze 2015, o 22:46 przez chiefp, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 cze 2015, o 23:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2014
Posty: 37
Pomógł: 2

Cytuj:
wynin = wyni*1*625ul;

"lejek jestem" ale po co mnożyć 'wyni' przez 1? I czy '625ul' to zmienna?

...i umieść kod prawidłowo ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 cze 2015, o 23:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
I rozwiń może określenie:
chiefp napisał(a):
reszta obliczeń ... ... nie działa poprawnie

Co masz, a co chcesz mieć wyświetlone.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2015, o 22:54 
Offline
Nowy

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

wynin = wyni*1*625ul;

To jeden to nie potrzebne, mnożę przez 625 aby otrzymać wartość napięcia odczytaną przez przetwornik a/c z czujnika ciśnienia,
a napięcie następnie poprzez wzór chce to przekształcić na wyświetlenie ciśnienia,na wyświetlaczu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 cze 2015, o 11:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2014
Posty: 37
Pomógł: 2

...ale "625ul" to raczej nazwa zmiennej - czy nie powinno być "wyni*1*625*ul" o ile "ul" to zmienna?
I jeżeli nie zadeklarowałeś, że np. uint16_t 625ul=625; to 625ul przyjmuje wartości przypadkowe.
Po za tym masz dwie zmienne 625ul i 625UL - a mam wrażenie, że w C to nie to samo...
Kompilator nie zgłasza Ci żadnych błędów?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 cze 2015, o 12:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Panowie!
Poczytajcie tutaj! :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 cze 2015, o 13:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 158
Lokalizacja: KTT
Pomógł: 1

wzagra napisał(a):
...ale "625ul" to raczej nazwa zmiennej

Kolego to NIE jest zmienna - to "ul" dodaje się na końcu liczby, żeby kompilator potraktował ją jako Unsigned Long.

_________________
Gordon



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 cze 2015, o 23:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2014
Posty: 37
Pomógł: 2

i dlatego w moim poście było
Cytuj:
"lejek jestem"

- dzięki za wskazanie Kol. Antystatycznemu i anshar'owi - chyba zostałem gdzieś na poziomie pierwszych kursów Pascala ;))

a dlaczego 'ul' w jednym miejscu jest małymi literkami, a w innym dużymi? Czy dla kompilatora to wszystko jedno?
wyn = mcpadc*(-1)*625UL; i wynin = wyni*1*625ul;



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2015, o 10:49 
Offline
Nowy

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

Wie ktoś może jak prawidłowo dodać dodać w języku c wartość (np: 40000 +(mcpadc*625)). Dlaczego np gdy mcpadc jest ujemne mnożenie (mcpadc *625) daje wartość
dodatnią a nie ujemną.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2015, o 11:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Jeśli zmienna mcpadc jest typu uint32_t tak jak w pierwszym listingu to jest to zmienna bez znaku
czyli tylko dodatnia , zień typ zmiennej na int32_t , tylko nie wiem czy nie zmieni to założeń proramu.
Pamiętaj że w zmiennych ze znakiem znaku decyduje najstarszy bit i tak w typie
int8_t masz liczby od -128 do +127
uint8_t masz liczby do 255

Oczywiście zmienna do której podstawiasz wynik też musi być odpowiedniego typu
czyli ze znakiem i o odpowiedniej "pojemności" żeby wynik operacji się w niej zmieścił.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2015, o 19:48 
Offline
Nowy

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

Po wielu próbach udało mi się poprawnie zapisać wyrażenie aby poprawnie wyświetlić wynik np (25500000 - (mcpadc*625)) (np:2,55-0,655)

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


Potrzebuje jeszcze zrobić coś takiego mcpadc=<0 wyświetlaj np 2,55-mcpadc*625, mcpadc>0 wyświetlaj np 2,55+mcpadc*625.



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

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