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



Teraz jest 18 lut 2018, o 00:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 29 ] 
Autor Wiadomość
PostNapisane: 11 sty 2018, o 07:56 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Witam szanowne forum.
Postanowiłem przetestować projekt Mirka z GB pod nazwą LCD hd44780 + projekt wielozadaniowy.
Projekt kompiluje się bez problemu i działa zgodnie z założeniem, Postanowiłem poćwiczyć obsługę Timer0 z tego projektu i natknałem
się na mały problem, którego nie rozumiem.
Miedzy innymi na stronie 350, 353, 354 itd... pokazane są zmienne do prawidłowego działania programu. Nie będę przytaczał tutaj
kodu, ponieważ nie wiem, co na to autor, ale chodzi o:

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


Napisałem szablon ze strony 349 i 350 i otrzymałem taki oto komunikat:

make all
'Building file: ../main.c'
'Invoking: AVR Compiler'
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega16 -DF_CPU=16000000UL -MMD -MP -MF"main.d" -MT"main.o" -c -o "main.o" "../main.c"
../main.c: In function 'main':
../main.c:25:10: error: invalid suffix "ms10" on integer constant
uint8_t 1ms10 = 255;
^
../main.c:25:10: error: expected identifier or '(' before numeric constant
../main.c:26:10: error: invalid suffix "s1" on integer constant
uint8_t 1s1 = 255;
^
../main.c:26:10: error: expected identifier or '(' before numeric constant
../main.c:30:6: error: invalid suffix "ms10" on integer constant
if(1ms10 != ms10_cnt)
^
../main.c:33:4: error: invalid suffix "ms10" on integer constant
1ms10 = ms10_cnt;
^
../main.c:36:6: error: invalid suffix "s1" on integer constant
if(1s1 != s1_cnt)
^
../main.c:39:4: error: invalid suffix "s1" on integer constant
1s1 = s1_cnt;
^
make: *** [main.o] Błąd 1

Jeśli zmienię nazwę zmiennych np. na Ims10, Is1, to wszystko kompiluje się prawidłowo:

----------------
Device: atmega16

Program: 240 bytes (1.5% Full)
(.text + .data + .bootloader)

Data: 2 bytes (0.2% Full)
(.data + .bss + .noinit)


'Finished building: sizedummy'
' '

Pominąłem tutaj wcześniejsze linijki.

Niby jest ok i po co pytać, ale pozostaje luka w głowie. Chciałem sobie stworzyć taki szablon do innych zastosowań i przećwiczyć
działanie na diodach przy różnych konfiguracjach modulo, a tu taki zonk.
Proszę o wytłumaczenie, czemu tak się dzieje. Dzięki za wszelką pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2018, o 08:20 
Offline
Tech-support
Avatar użytkownika

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

Standard języka C nie pozwala na używanie zmiennych zaczynających się od cyfr



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2018, o 08:39 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Dziękuję koledze za odpowiedź.
Widzę teraz, jakiego babola popełniłem tym pytaniem. Fakt, że wzrok mam już nie najlepszy i używam okularów. Teraz widzę, że to
małe l z klawiatury, a nie cyfra 1. No ale temat się przyda, ponieważ pewnie będę miał jeszcze jakieś zapytania, co do przerwań.
Dzięki i pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2018, o 09:31 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Mam pytanie do szanownych kolegów.
Czytałem w BB i GB odnośnie timerów. Pan Mirek ładnie to wszystko opisał i omawiał
sposób postrzegania czasu, co to jest czas, jak rozumieć w tym samym czasie itd. Niby wszystko jest zrozumiałe, ale chciałem
doprecyzować, czy taki kod jest prawidłowy. Wiadomo, że każdy kolejny if jest, jakby po czasie poprzedniego, ale operacje na
mikro kontrolerze odbywają się tak szybko i nie wiem, czy w każdym ifie nie powinienem zastosować innej wartości czasowej,
ponieważ, program może działać źle. Zdaję sobie sprawę, że moje pytanie jest związane z niepełnym, jak na razie zrozumieniem
zagadnienia, dla tego dopytuję. Robiłem do ćwiczeń proste programiki z użyciem timerów, ale do końca nie wiem, czy dobrze to
robię.

Oto przykładowy kod:

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: 24 sty 2018, o 09:51 
Offline
Nowy

Dołączył(a): 08 gru 2017
Posty: 21
Pomógł: 1

Taki mały "pro-tips". Ustaw czcionkę która nadaje się do pracy z kodem. Sprawdź w której widać różnicę między: el a jeden, przecinkiem i kropką, zero i Oooo. Ja z wolnych czcionek polecam Inconsolata . W MS Win. jest Lucida Console. Ew. Monaco.. zesztą sam dopasujesz :-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2018, o 09:57 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Witaj.
A co jest nie tak z moją czcionką ?. Ja wszystko widzę prawidłowo i jak do tej pory nikt nic nie zgłaszał.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2018, o 10:00 
Offline
Nowy

Dołączył(a): 08 gru 2017
Posty: 21
Pomógł: 1

Sam napisałeś...
Robert_1967 napisał(a):
Fakt, że wzrok mam już nie najlepszy i używam okularów. Teraz widzę, że to
małe l z klawiatury, a nie cyfra 1.

Sam się przekonasz że wbrew pozorom to istotne. Szczególnie jak zdarzy się szukać 1h. błędu "kropka<->przecinek" :-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2018, o 10:04 
Offline
Moderator
Avatar użytkownika

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

robespierre napisał(a):
Taki mały "pro-tips". Ustaw czcionkę która nadaje się do pracy z kodem. Sprawdź w której widać różnicę między: el a jeden, przecinkiem i kropką, zero i Oooo. Ja z wolnych czcionek polecam Inconsolata . W MS Win. jest Lucida Console. Ew. Monaco.. zesztą sam dopasujesz :-)

Qurczę a ja ostatnio piszę kod - mam sporo zmiennych typu a1, n1 itp ... w Delphi i się wkurzam bo ciągle wygląda to jak al nl itp ;) i tak zapomniałem w ogóle o tym, żeby sobie w końcu czcionkę zmienić ... dobrze, że trafiłem na ten post ... dzięki, zaraz pozmieniam sobie czcionki ... Lucida Console fajnie wygląda pod tym względem. Dzięki!

------------------------ [ Dodano po: kilkunastu sekundach ]

a wracając do wątku to oczywiście, że nie można rozpoczynać nazw zmiennych od cyfr i to są te błędy na górze

_________________
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: 24 sty 2018, o 10:15 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Dziękuję koledze.
Widzę, że jednak muszę zmienić te czcionki. Pytałem, co jest nie tak, ponieważ to był pierwszy taki przypadek. Gdyby kolega mógł
podpowiedzieć, jak i gdzie te czcionki zmienić w małym skrócie, ponieważ na co dzień tego nie robię.
No i jakby ktoś odniósł się do mojego pytania odnoście kodu zamieszczonego, to będę wdzięczny.

Ps.
Czy chodzi o zmianę czcionki w Windows konkretnie ?. Poszukam w google.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2018, o 10:27 
Offline
Nowy

Dołączył(a): 08 gru 2017
Posty: 21
Pomógł: 1

Co do kodu...
Pętle nieskończone mają dwie szkoły:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

Kiedyś używałem obudwu. Pozostałem przy 1. IMHO lepiej pokazuje co się dzieje i jak wiem w większości projektów (z mi znanych) tak przyjęto.... Zrobisz jak chcesz...

Konwencja nazwywania zmiennych, raczej od małej litery. Stale WYŁĄCZNIE_WIELKIE. No ale to konwencja...

Co do sedna... Zakładam (bo nie widzę całego kodu), że TimerX jest dekrementowany w przerwaniu. Jeśli tak jest, powinien być typu 8-bitowego (dla AVR). Inaczej zmiany nie będą atomowe (niepodzielne).
Rozważ taką sytuację:
1. TimerA jest typu uint16_t i przechowuje w danym momencie wartość 256 (0x0100)
2. Kod programu chce przeczytać wartość tej zmiennej. Zaczyna czytać i przeczytał 1 najstarszy bajt. Wynosi on 0x01. Chce teraz przeczytać młodszy i.... przerwanie.....
3. W kodzie przerwania nastąpi dekrementacja czyli zmiana z 256 na 255 (0x0100 -> 0x00FF).
4. Wracamy do wykonania programu. Czytamy młodszy bajt a wynosi on... 0xFF ! Tak więc TimerA ma wartość 0x01FF !!!

Właśnie pacjent dostał taką dawkę insuliny, a prawnicy przygotowują pozew... :-/

To samo stanie się w przypadku inkrementacji. Obojętne także czy czytasz od najmłodszego bajtu czy od najstarszego. Stąd jeśli chcesz mieć timery 16-bitowe (lub większe) na AVR, odczyt wykonaj bez aktywnych przerwań.

Temat jest oczywiście jeszcze bradziej skomplikowany ale i tak wyszło za długie...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2018, o 12:08 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Dzięki robespierre.
Co do czcionki, to zmieniłem na bodajże Lucida Console w Winie. Jeszcze popróbuję inne w wolnej chwili. To, co napisałeś o timerach
muszę sobie przetrawić i może jeszcze gdzieś doczytać. Może jeszcze ktoś się wypowie. Jeśli chodzi o ścisłość, to czy jeśli kod
jest napisany tak, jak zamieściłem (pomijam już sam fakt, czy to jest uint8_t timer1; czy też uint16_t timer1;), to czy jest prawidłowo
z punktu widzenia logiki. Pytam, ponieważ na tym etapie mojej skromnej wiedzy nie mam pewności.
Ponad to używam innego sposobu z użyciem timerów z BB i GB, gdzie-tak mi się wydaje
mam większą możliwość wpływania na wykonujący się program, to znaczy, kiedy, w którym momencie, czy po jakim czasie ma się
wykonać kolejne przerwanie, cz instrukcja w przerwaniu. Chociażby taki przykład:

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


Czy inny przykład:

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


W poprzednim przykładzie mogłem tylko zmienić wartość np. timer1 = 100; na inną wartość, a tutaj możliwości jest więcej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2018, o 18:33 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

No więc wykonałem małe ćwiczenie w związku z tym tematem.
Utworzyłem kilka timerów z pierwszego postu, tzn.

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


Ponieważ na dany moment nie miałem przygotowanych ledów, to wykorzystałem wyświetlacz lcd.Wyświetlałem teksty w czterech linijkach, migotałem na
różne sposoby tymi tekstami. Wiem, że w przerwaniach nie należy wyświetlać tekstów na lcd ze względu na spowolnienie całości, ale ja zastosowałem
sterowanie buforowe i funkcje Mirka z projektu warstw na lcd. Jednym słowem kosmos do tradycyjnego sterowania :D . Teraz nie wstawię kodu, ponieważ
jestem na innym kompie, ale wyglądało to tak, że migałem dwoma tekstami w dwóch linijkach. Dwa teksty migały około 2 razy na sekundę. Pozostałe wyświetlały
się statycznie. Miganie zrobiłem tak, że jeden timer zapalał napis, a drugi timer gasił (czyścił).
Dla drugiego napisu tak samo. Jeden timer zapalał napis, a drugi gasił. Czyli razem cztery timery dla dwóch mrugających napisów. I teraz najważniejsze.
W obu przypadkach ustawiłem takie same czasy dla dwóch linijek (czas świecenia i czas nieświecenia). I co zauważyłem:
Oba napisy zapalają się dokładnie i gaszą w tych samych momentach (pomijam bezwładność wzroku i co tam jeszcze). I teraz na pierwszy rzut oka doszedłem
do wniosku, że dwa (czy może 4) niezależne timery robią zupełnie niezależne , choć takie same procesy i być może dokładnie, a może prawie dokładnie w tym
samym czasie (nie wiem, jak Mirek by to nazwał) i właśnie o to mi chodzi. Jeżeli program jest napisany liniowo, to czy tak utworzone timery ich czasy są
prawidłowo ustawione (wpisane w programie, np timerX=100;). Może się ktoś śmiać, że tak rozkładam takie rzeczy na czynniki pierwsze, tak drobiazgowo, ale
mi naprawdę zależy na zrozumieniu tematu. Tu jest tylko miganie napisami, a jak będą jakieś szybkie instrukcje w kilku przerwaniach i źle to zrobię, to pozamiatane :cry: . Można to jeszcze powtórzyć z kilkoma diodami i mruganiem co sekundę, czy nawet dwie i wtedy widać dokładnie co się dzieje. Mi się wydaje, że przy liniowym programowaniu może się wykonać tylko jedno zadanie i jeśli wykonuje się w danym momencie obsługa przerwania i kod związany z
tą obsługą, to nie może w tym samym czasie wykonywać się obsługa drugiego przerwania, no chyba, ze nie mam racji, albo pomimo, że są wpisane takie same liczby, to ten czas tak na prawdę jest różny z perspektywy procesora, bo oczy mogą kłamać. A żeby dalej nie zamęczać tym tematem proszę o konkretną
odpowiedź kolegów, którzy znają tą materię. Z góry dzięki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2018, o 07:22 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Witam ponownie.
Jakoś nie ma nikogo, kto mógłby się wypowiedzieć i ew. wyjaśnić, jak to jest w tym przypadku. Wklejam kod do przemyśleń.
Używam kwarcu 16MHz i atmega16.

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: 31 sty 2018, o 12:26 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Chciałem poprosić o pomoc.
Otóż zrobiłem migający kursor w pozycji, gdzie akurat chcę edytować znak na ekranie lcd. Niestety jest to najgorsza chyba z
możliwych opcji i proszę o jakieś pomysły. To działa z punktu widzenia samej idei, ale niestety wprowadza spowolnienie, które
przeszkadza chociażby przy obsłudze przycisków, czy innych funkcji w programie. Kod wygląda następująco:

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: 31 sty 2018, o 13:20 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 197
Pomógł: 14

skoro korzystasz z takiego dobrodziejstwa jak timer programowy to po co stosujesz jeszcze dylaje?
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: 31 sty 2018, o 13:42 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Dzięki tonygryps.
Nie obraź się proszę na początku mojej odpowiedzi, ale gdybym wiedział jak prawidłowo napisać, to tego postu i innych przeze mnie
napisanych by tu nie było. No chyba że za wyjątkiem tych pomocnych dla innych początkujących :lol: .
Ja rozumiem dobrodziejstwa timerów i nieudolność _ms_delay(x); przy pewnych zastosowaniach, tylko po prostu jestem jeszcze na
takim etapie, że nie potrafię za wiele sam wymyślić. Kiedy spoglądam na inne kody i je analizuję, to nieraz sobie myślę, jak to fajnie
i prosto ktoś napisał, ale sam ciężko wpadam na coś nowego, ot i tak. Mam nadzieje, że się to z czasem zmieni, a na razie jest
pod górkę. Poprzedni mój post jest niepełny. Coś się pomyliłem przy wysyłaniu, ale ja wiem, że to głupota, co spłodziłem. Napisałem, że
to funkcjonuje, tylko źle, nieudolnie, bo przy okazji spowalnia cały program i poprosiłem o jakieś sugestie.Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2018, o 13:48 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 197
Pomógł: 14

no dałem ci sugestię korzystasz z delayów i dlatego ci to źle chodzi .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2018, o 13:59 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Chodzi o to, że muszę jakoś zamrozić ten marker na powiedzmy 300-500ms, co teraz robi delay_ms. Mogę zastosować np. Timer2
(no nie wiem-głośno myślę), ale nie mam pomysłu, jak to ugryźć. W innym programiku, gdzie testowałem sobie sterowanie buforowe,
to rozwiązałem to tak:

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


Nie wiem, czy to też nie zawiera baboli z punktu poprawności kodu, ale chciałem sobie pomrugać w przerwaniach powiedzmy
nieblokująco i pomrugałem, ale tu jest trochę inny przypadek i nie mam pomysła :oops:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2018, o 14:03 
Offline
Tech-support
Avatar użytkownika

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

Robert_1967 napisał(a):
Im dłużej siedzę, tym gorzej :shock: Muszę w jakiś sposób przytrzymać chwilę kreskę w kolumnie wiersza i doskonale robi to delay, no ale potem kaszana, jak chcę szybko
edytować znak w kolumnie przyciskiem, no bo przecież cały program czeka te nieszczęsne 150ms. proszę o jakieś pomysły.
A może po prostu dodaj sobie dodatkową zmienną (Timer2?), która będzie dekrementowana w funkcji obsługi przerwania i co 150 ms będzie zmieniało wyświetlanie z "_" na znak, który ma być wyświetlany.
Co jaki czas masz Timer1 = 0? Bo może nawet tylko na tej zmiennej się uda.

EDIT:
Widzę, że coś dopisałeś. Przecież tu też możesz zrobić w ten sam sposób.

Albo (teraz mi przyszło do głowy) timerem odmierzasz 150 ms i toglujesz flagę. I później, jeśli flaga jest równa 0, to wyświetlasz "_", a jeśli 1, to wyświetlasz znak, jaki potrzebujesz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2018, o 14:28 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Witaj Matchef
ja próbowałem, ale nie idzie. Przy tym sposobie z mruganiem napisu ALARM było ok, ale kod był w main.c i tylko wyświetlałem i mrugałem
różnymi tekstami na lcd w związku z testami na buforze. Tutaj ten kawałek kodu jest umieszczony w czymś w rodzaju prostego menu
na case, break....i do wyświetlacza z różnych plików źródłowych są wysyłane dane, które, nie wiem, może przysłaniają ten kursor.
Z delay jest ok, ponieważ zatrzymuję wszystko na moment, a w przerwaniach nie widzę kursora. Tak np. pisałem i nie chodzi:

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


Ja rozumiem. Pętla idzie tysiące, czy miliony razy na sekundę i być może kursor jest, ale oko nie widzi, a delay zatrzymywał i było
widać, ale dla innych rzeczy psuje sprawę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2018, o 14:37 
Offline
Tech-support
Avatar użytkownika

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

No cóż, z takich fragmentów ciężko coś wywnioskować. Bardzo możliwe, że problem jest w tym, że wyświetla się coś innego. Jak często zmieniasz dane wysyłane do wyświetlacza?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2018, o 14:55 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Mam kwarc 16MHz. Nigdzie więcej nie używam przerwań, poza próbą uzyskania migającego kursora programowego. Samo przerwanie
jest co około 10ms. Wszystko wyświetla się statycznie, do momentu kiedy wejdę do menu i chcę pozmieniać trochę teksty. Do tego
chciałem zrobić sobie taki kursor. Ja myślę, aczkolwiek mogę być w błędzie, że tak, jak napisałem wcześniej, to te ify się wykonują
prawidłowo i oba przerwania się wykonują, kursor jest wysłany i wyświetlony, ale pętla nie czeka, tylko idzie dalej, a więc nie widzę
nic. Ale z drugiej strony przy wyświetlaniu napisów ALARM w innym projekcie jest ok, a więc chyba sam sobie przeczę :lol: .
Może trzeba trochę odpocząć, porzucić temat na jakiś czas.... Dzięki mimo wszystko.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2018, o 17:13 
Offline
Tech-support
Avatar użytkownika

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

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

może spróbuj coś w tym kierunku - może w tym teście się sprawdzi.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

może nie najlepsze, ale zawsze jakieś rozwiązanie ;).
pozdrawiam

_________________
_pomóżmy_naszemu_koledze: KRS 0000135921



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2018, o 20:52 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Witam Daro69
Dziękuję bardzo za włączenie się do tematu. Jutro rano będę miał dostęp do kompa z atb, to przetestuję.
"Zmiana". to jest pozycja w wierszu, gdzie edytuję i zmieniam znak w kolumnie. Chcę ją jakoś podkreślić
i po to chcę zastosować czy to mruganie, czy też kursor na tej pozycji.
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2018, o 22:23 
Offline
Tech-support
Avatar użytkownika

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

hejka,
jeszcze jedna istotna sprawa,
odświeżanie ekranu z bufora(jeżeli korzystasz),
musi być po każdej aktualizacji zmian. np. jeżeli do bufora wpisujesz zmianę co 1sek,
to i odświeżanie ekranu z bufora też co 1sek. nie rzadziej.
żeby nie było takiej sytuacji że w buforze się zmienia,
a na ekranie nie widać zmian bo wyświetla co drugą - czyli ciągle tę samą.

_________________
_pomóżmy_naszemu_koledze: KRS 0000135921



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2018, o 07:18 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Witaj Daro69
Same zmiany na lcd wykonuje od czasu do czasu, a potem jest tylko wyświetlanie zapisanych wcześniej danych. Co do
odświeżania, to robię to w main.c w pętli głównej cały czas, kiedy jest włączone urządzenie. korzystam z Mirkowej funkcji
z lekcji L19 GB, gdzie mam tak (tylko fragment, wiadomo, czemu):

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


W main mam buf_refresh();

Działa dobrze. No ale przetestuję, co wczoraj napisałeś no i pomęczę się trochę :) .
Pozdrawiam.

Dodane po czasie

Nie chce to niestety działać. Myślę Daro69, że to chyba koncepcja jest zła od samego początku. Tzn. do momentu, kiedy nie
postanowiłem wykombinować ten kursor, to program robił, co miał robić i było ok, ale akurat teraz w tym zastosowaniu chyba lipa.

Chodzi o to, że zaraz po użyciu tych instrukcji do wyświetlenia kursora następuje nadpisywanie tekstem tej linijki i być może
przykrycie kursora. Jeśli było po staremu:

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


to kiedy kursor poszedł na wyświetlacz, to następowało zatrzymanie programu na chwilę i mokłem zauważyć migotanie kursora i
przy okazji znaku, jeśli takowy był wcześniej wpisany. No niestety metoda ta ma zasadniczą wadę opóźniania całej reszty. To znaczy
potem,kiedy dokonam zmian i tylko wyświetlam tekst, to nie ma to żadnego znaczenia, ale właśnie w momencie kiedy przyciskiem
zmieniam dane, to ten delay mi przeszkadza. Oczywiście mogę zmieniać tekst naciskając powoli, no ale nie tak ma być i nie tak miałem się uczyć z babolami.
Może dziwić, że podałem kod z lcd_locate; , a nie buf_locate;, ale ja mam ten programik w dwóch wersjach z buforowaniem i bez.
Testuję i tu i tu, dlatego taki kod.....
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2018, o 09:05 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Temat ogarnąłem.
To znaczy pozostałem przy kodzie z _ms_delay(X); , ale w funkcji obsługi przycisków zmieniłem zmienną odpowiedzialną za
eliminację drgań styków z uint16_t na uint8_t i teraz zmiany literek następują bardzo szybko jakby nie zależnie od częstotliwości
migotania i odświeżania kursora. Trochę mnie to dziwi, że jest ok, no ale wreszcie koniec.
Mimo wszystko pozostaje niesmak, ponieważ nadal nie pozbyłem się delaya.....Dziękuję kolego za chęć pomocy. Może jeszcze ktoś
ma jednak jakiś bardziej poprawny sposób. Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2018, o 09:49 
Offline
Tech-support
Avatar użytkownika

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

hejo,
Robert_1967 napisał(a):
...następuje nadpisywanie tekstem tej linijki i być może
przykrycie kursora.

chyba bym kombinował umieścić podmianę znaku
wewnątrz funkcji, na końcu po zapełnieniu buf.
Co określony czas nadpisywać znak swoim "_".

void buf_refresh(void){
if( !.......){


.<.......o tu.
}
}
przyznam się że biblioteki nie przestudiowałem. :(
możliwe że błądzę we mgle. ;)

Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka

_________________
_pomóżmy_naszemu_koledze: KRS 0000135921



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2018, o 10:33 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 160
Ostrzeżenia: 1
Pomógł: 0

Dzięki Daro69.
Pomyślę. Problem tkwi w tym, ze umiem sam tworzyć jakieś podstawowe funkcje, gdzie są 2-3 argumenty, ale kiedy widzę coś
bardziej skomplikowanego, gdzie jest kilka zmiennych, kilka nawiasów okrągłych, a w nich jeszcze kwadratowe i tam jeszcze argumenty,
to po prostu nie potrafię na tym etapie rozklinić takiej linijki kodu, a wiec dokonywać modyfikacji również.
Owszem, wiem co robi cała funkcja i potrafię ja użyć, ale jak działa, co się w niej dzieje itd...to już nie pojmuję (no powiedzmy jakieś
części tej funkcji, czy innej, bo trochę rozumiem).
Ja wiem, że trzeba się uczyć i samo nie przyjdzie, a więc to czynię pomału.
Pozdrawiam



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Bing [Bot], mpo 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