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



Teraz jest 28 mar 2024, o 19:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
Autor Wiadomość
PostNapisane: 11 maja 2017, o 11:35 
Offline
Użytkownik

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

Witam wszystkich.

Zwracam się z prośbą o pomoc, podpowiedź, nakierowanie mnie na właściwy tor. Otóż mam dwa niezależne programy, gdzie jeden
wyświetla sobie jakieś tam komunikaty na lcd, a drugi natomiast mierzy napięcie i wyświetla je w postaci linijki, taki bargraf.
Chciałem poeksperymentować i zrobić np. wskaźnik wysterowania, gdzie w momencie pojawienia się muzyki stałe napisy znikną i pojawi się
linijka świetlna (jeśli adc > od jakiejś zadanej wartości, to zacznij wykonywać program nr2)
Jeśli natomiast napięcie na wejściu adc zaniknie (po upływie np. 2s), to powróć do wykonywania programu nr1.

Wiadomo, że są dwie pętle while(1), definicje pinów do lcd można dopasować(ujednolicić), tylko jak się prawidłowo do tego zabrać. Z jakich
instrukcji najlepiej skorzystać (switch, break, continue, ......).

Będę bardzo wdzięczny za wszelką pomoc. Dziękuję.

Robert_1967

Przykładowe dwa programy w dużym skrucie:


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: 11 maja 2017, o 12:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Nie wiem czy dobrze rozumiem.
Można by w jednej while dać dwa ify.
Wyższe napięcie ustawia flagę niższe pi czasie zeruje.
if(flaga){
{
else {
}
Dalej cześć wspolna programu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2017, o 12:26 
Offline
Użytkownik

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

Witaj Daro69
Dzięki za podpowiedź. Jak zawsze czujny :) . Co prawda jestem w pracy i nie mam dostępu do atb, ale postanowiłem ruszyć temat.
Już od jakiegoś czasu zabieram się do tego pomysłu. W wolnej chwili spróbuję coś napisać. Dzięki. Może jeszcze ktoś podzieli się
ewentualnym pomysłem, jak by to zrobił.
Dzięki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2017, o 12:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

hejka , :)
Możesz dodatkowo w pierwszym ifie niskiego napięcia robić pomiar ADC częściej,
A w drugim co 2 sęk dla uzyskania planowanego opóźnienia powrotu do pierwszego.
Oczywiście timerem nie delay'em.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2017, o 13:08 
Offline
Użytkownik

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

Dzięki Daro69
Przez weekend zmierzę się z tym tematem. Ciekawe, jak to pogodzę z obsługą wyświetlacza (cls....), ale jak nie spróbuję, to się nie przekonam
:) .
Na razie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2017, o 15:43 
Offline
Moderator
Avatar użytkownika

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

Robert_1967 napisał(a):
Dzięki Daro69
Przez weekend zmierzę się z tym tematem. Ciekawe, jak to pogodzę z obsługą wyświetlacza (cls....), ale jak nie spróbuję, to się nie przekonam
:) .
Na razie.

Przecież kolega ma Bluebooka jak widzę - czy nie warto zajrzeć również do książki do rozdziału o projekcie wielozadaniowym ? Toż tam masz pokazane jak się to robi ;)

_________________
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: 11 maja 2017, o 19:59 
Offline
Użytkownik

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

Dziękuję Panie Mirku.
Tak też i robię. Przeczytam kilka razy i zobaczę , co z tego wyniosę.
Pozdrawiam wszystkich forumowiczów.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 maja 2017, o 21:49 
Offline
Użytkownik

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

Witam Daro69
Udało mi się połączyć dwa programy w całość i na tym etapie wszystko działa. Nie są to programy "oryginalne", ponieważ są dość mocno okrojone. Chodziło o
samo zrozumienie i czy się uda. Nie ma jeszcze opóźnienia przy przełączaniu się pomiędzy programami, ale to potem.
Programik do wyświetlania linijki nie jest mojego autorstwa i napisałem do właściciela, czy mogę zamieścić go w moim poście do celów edukacyjnych.
Program jest również z tego forum. Jak dostanę zgodę, to zaraz zamieszczę. Nie chcę po prostu dostać po uszach i wolę się zapytać.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 maja 2017, o 21:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

witam,
jako takiej biblioteki np: '"LCD/lcd44780.h"' nie pokazuj. ;)
ale wpisy w stylu lcd_str("...."); lcd_int(...); i t. p. mogą być. te z main.c. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2017, o 09:30 
Offline
Użytkownik

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

Na ten moment kiedy adc jest mniejsze od 100, to wyświetla się stały napis na lcd. Natomiast kiedy adc z potencjometru
przekroczy wartość 100, to stały napis znika i pojawia się słupek i wyświetla wartość lcd. Od 100 do 1023 słupek oczywiście
zmienia swoją długość.



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


Na razie nie otrzymałem odpowiedzi na pw, a więc zamieszczam kawałek kodu w takiej postaci. Myślę, że nie naruszam praw
autorskich i wszystko jest ok.

if(wynik>100) ----> tu jest warunek, gdzie jeśli adc jest większe od...., to wykona się wszystko do else. Natomiast jeśli adc
jest o, lub poniżej jakiejś wartości, to wykonają się instrukcje tylko po else.
Program dotyczący wyświetlania linijki jest wykonany z użyciem przerwania, a więc użyłem go, jako pierwszy. Przy tej konfiguracji
jeszcze nie wiem, jak wykonać to przeczekanie, tzn. jak zaniknie napięcie na wejściu adc, to poczekaj i po zadanym czasie
wyświetl "projekt wielozadaniowy".
Zdaję sobie sprawę, że to, co tu napisałem jest banalnie proste i oczywiste, ale ja się uczę i dla mnie każda linijka
napisana samemu z sensem i dobrze, to duża frajda i osiągnięcie. Po prostu mam mało czasu na to hobby i nie często
ćwiczę, a przez to i zapominam, co wcześniej załapałem. Może jakieś sugestie.

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2017, o 10:04 
Offline
Użytkownik

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

Witam.
Mam prośbę o wytłumaczenie mi jednej kwestii. Pracując nad miernikiem chciałem zrobić woltomierz trzy zakresowy.
Zrobiłem sobie tablicę:

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


utworzyłem zmienną:

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


Przyciskiem zmieniam zakres i wtedy na ekranie lcd zmienia mi się napis zawarty w tablicy.

Robię 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.


Niby wszystko działa. Program się kompiluję i zakresy wyświetlane się zmieniają. Nie widzę żadnych złych zachowań, ale
jest jedno ale.
Kompilator zgłasza problem i podkresla:

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


Czytałem, czytałem i natrafiłem na informacje, że jest to niezgodność typów, czyli zakres i np. l_volty. Pan Mirek w postach
wspomina o jawnym rzutowaniu. Doczytałem o jawnej konwersji. Pan Mirek pisał, że to, że program działa wcale nie oznacza, że
działa prawidłowo i tego się trzymam.
Problem w tym, że do końca nie rozumiem zagadnienia. Jest opis w Wikibooks i nie tylko, ale nie mogę zaskoczyć. Co robię źle.
Proszę o pomoc, jak to ogarnąć, ponieważ stoję w miejscu, a szkoda mi czasu. Jest jeszcze tyle do nauki :(
Wiem, gdzie dzwonią, ale .....Dziękuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2017, o 10:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1146
Lokalizacja: Kraków
Pomógł: 93

Kolego, zmienna zakres jest typu uint8_t, natomiast napisy są tekstem. Więc masz niezgodność typów.
Szkoda, że nie pokazałeś, jaki problem zgłasza eclipse.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2017, o 10:55 
Offline
Użytkownik

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

Dziękuję za zainteresowanie.
Jestem aktualnie w pracy i nie mogę wkleić błędu, ale po 16-ej zrobię to. Z tego, co pamiętam, to alert był związany z niezgodnością typów.
Tak doczytałem w necie. Tak czy inaczej wieczorem zamieszczę, co mówi kompilator.Jeśli jest tak, jak piszę, to jak to naprawić ?
Dziękuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2017, o 11:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1146
Lokalizacja: Kraków
Pomógł: 93

Wydaje mi się, że zmienna zakres powinna być zadeklarowana jako:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A n to maksymalna długość wyświetlanego tekstu +1 (czyli u Ciebie 15 znaków, plus jeden dodatkowy).
Znaczy, tego +1 nie jestem pewien, ale jest wymagane dla znaku '\0'. Proszę, żeby ktoś to zweryfikował i napisał, czy mam rację.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2017, o 12:51 
Offline
Użytkownik

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

Dziękuję Koledze Marhef za pomoc.
Sprawdzę wieczorem i podzielę się efektami. Przy okazji pomyślałem, czy nie zrobić tego inaczej i wymyśliłem coś takiego:


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


Czy coś w tym stylu ???. Tak czy inaczej Twój sposób sprawdzę, ponieważ nie chodzi tylko o działanie kodu, ale i naukę i zrozumienie
problemu. Tak na poważnie, to oczywiście posiadam dobry multimetr METEX zakupiony ze 30 lat temu i do dzisiaj mi służy, ale robię ten projekt w celach edukacyjnych i z czystej ciekawości, co wymodzę :)
Dziękuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2017, o 13:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1146
Lokalizacja: Kraków
Pomógł: 93

Rozumiem, że chcesz po prostu wyświetlać napis z pamięci, bez przypisywania do zmiennej?
Jak to masz rozwiązane? Przyciskając przycisk zmieniasz wartość zmiennej? Czy zmieniasz f1, f2 i f3?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2017, o 13:17 
Offline
Użytkownik

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

Na tą chwilę wygląda to tak, że przy wciśnięciu przycisku następuję przejście do drugiego zakresu miernika (np. 50 volt) i jednocześnie
wyświetla się napis "zakres 50 volt" i kolejne przyciśnięcie zmienia zakres i wyświetla kolejny zakres, w jakim się znajduję.
Wszystko działa prawidłowo, ale kompilator zgłasza alerty, a więc nie czuję się do końca zadowolony z takiego działania programu i staram
się to naprawić.
Zmieniając zakres miernika jednocześnie przypisuję zmiennej "zakres" kolejną linijkę z tablicy i w ten sposób tekst się zmienia.
Ale pomyślałem, czy by nie zrezygnować z takiej metody i zastosować proste instrukcje w rodzaju:


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


Flagi są mi potrzebne do pamiętania zadanych wartości na danym zakresie. Oczywiście metod pewnie jest kilka do osiągnięcia tego
co chcę, ale ja jestem powiedzmy na starcie w C :) .



Ostatnio edytowano 22 maja 2017, o 14:15 przez Robert_1967, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2017, o 14:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1146
Lokalizacja: Kraków
Pomógł: 93

Ale to można w jednej funkcji zrobić. Np. po wciśnięciu przycisku zwiększasz jakąś zmienną, a w funkcji pomiar(zmienna) wywołujesz pomiar, a parametry masz uzależnione (np. funkcjami if()) od zmiennej zmienna ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2017, o 14:16 
Offline
Użytkownik

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

Ok. Pokombinuję. Dzięki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2017, o 16:49 
Offline
Użytkownik

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

Witam ponownie.
A więc tak. Błąd, jaki zgłaszał kompilator, co opisałem na początku tego tematu wygląda następująco:

warning: assignment makes integer from pointer without a cast [enabled by default]

Natomiast przy zastosowaniu linijki kodu w rodzaju "char zakres[n];", gdzie [n], to liczba znaków +1 występuje następujący błąd:

error: incompatible types when assigning to type 'char[16]' from type 'const char *'

Wieczorem p



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 4 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