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



Teraz jest 25 kwi 2024, o 18:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 25 ] 
Autor Wiadomość
PostNapisane: 23 lip 2012, o 20:51 
Offline
Użytkownik

Dołączył(a): 08 sty 2012
Posty: 151
Pomógł: 0

Witam
Abym potem nie "błądził " zapytam...
...czy można zmieniać wartości w OCRO podczas działania programu? Czy OCRO jest inicjowany tylko na etapie kompilacji?
Z góry dzięki



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2012, o 20:54 
Offline
Moderator
Avatar użytkownika

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

rejestry porównania OCRx są po to aby z nich korzystać w programie, nie byłoby wręcz sensu ustalać ich wartości tylko na etapie kompilacji.

_________________
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: 23 lip 2012, o 21:00 
Offline
Użytkownik

Dołączył(a): 08 sty 2012
Posty: 151
Pomógł: 0

Też tak myślę..
dzięki ;)
Jeszcze jedno małe pytanie odnośnie biblioteki LCD z twojej książki. Czy można skonfigurować wejścia danych oraz wejścia sterujące na jednym porcie -np PORTB bez "kolizji" (oczywiście po ich ustawieniu w programie)? Bo wg mnie użycie dwóch portów np w attinach2313 to marnotrawienie...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2012, o 21:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Przecież biblioteki Mirka są tak zrobione, że możesz używać dowolnych pinów do sterowania LCD-ka. I nic nie stoi na przeszkodzie aby były to piny Portu B.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2012, o 21:21 
Offline
Użytkownik

Dołączył(a): 08 sty 2012
Posty: 151
Pomógł: 0

jacekk232 napisał(a):
używać dowolnych pinów do sterowania LCD-ka..

zgadzam się ale chciałem się upewnić co do tego szczegółu. bo domyślnie napisane były dla dwóch różnych portów i to trochę dawało do myślenia-problem maskowanie itd - dopiero analizuję kod i trochę przerabiam.
Wg mnie w większym projekcie najlepiej używać jednego portu dla LCD - dla ergonomii i czytelności kodu.
Ale biblioteka pomyślana ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2012, o 22:00 
Offline
Moderator
Avatar użytkownika

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

20rafalo napisał(a):
bo domyślnie napisane były dla dwóch różnych portów


Tu kolega opowiada NIESTWORZONE historie i jakąś własną interpretację tego "co poeta miał na myśli". Ale to nie jest żadna powieść ;)

Domyślnie biblioteka została napisana bardzo uniwersalnie co pozwala, jak napisał kolega wyżej, podłączenie LCD na "DOWOLNYCH PINACH PROCKA". I to jest dopiero ogromna zaleta w porównaniu do wielu innych bibliotek a szczególnie tych, które umożliwiają dokonanie tego TYLKO na jednym porcie.

20rafalo napisał(a):

Wg mnie w większym projekcie najlepiej używać jednego portu dla LCD - dla ergonomii i czytelności kodu.


Dlatego tu nie chodziło o to jak jest wg ciebie akurat, ale o możliwości dla każdego i dla każdej sytuacji.

Ja najczęściej - co widać zresztą po praktycznie każdym przykładzie na DVD w książce stosuję przecież podłączenie LCD na jednym porcie. Nie zauważyłeś tego ? dziwne ;)

Natomiast czasem bywa taka potrzeba, mówiąc np o małym procku jak ATtiny aby była możliwość podpięcia się pod piny różnych portów z uwagi na potrzebę wykorzystania niektórych sygnałów jak np przerwania zewn INT0, czy wyjścia PWM itp ... a przecież jeśli się nie używa zewn kwarca to są do dyspozycji dwa nie wykorzystane piny PORTA .... więc aż się prosi mieć taką uniwersalną bibliotekę na każdą okazję.

Ja tak chciałem kiedyś a nie tam korzystać z cudzych na siłę przywiązujących mnie do jednego portu.

Mam nadzieję, że teraz masz większą jasność co do powstania i narodzin tej biblioteki ;)

_________________
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: 23 lip 2012, o 22:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

Wystarczy przecież kilka zmian w pliku nagłówkowym lcd44780.h i można podpiąć LCD do takich pinów jakie zapragniesz. Biblioteka jest świetna, brakuje mi tylko w niej funkcji do wypisywania wartości floata na LCD. Ale floaty to zło. :D

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2012, o 22:59 
Offline
Moderator
Avatar użytkownika

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

Ledes napisał(a):
...., brakuje mi tylko w niej funkcji do wypisywania wartości floata na LCD. Ale floaty to zło. :D


O nie nie ;) co to to nie ;) .... to tak samo jak kilka osób pisało że przydałaby się w tej bibliotece np funkcja do wyświetlania dużych liczb całkowitych i nieujemnych, bo obecna wersja pokazuje tylko liczby od -32768 do +32767 ;)

A kysz ;) powiadam - pozostałe takie proste funkcje to już proszę we własnym zakresie sobie napisać ;) toż wyświetlanie większych liczb nieujemnych to tylko zamiana funckji itoa() na np ltoa() albo utoa() .... a na podobnej zasadzie można sobie dopisać funkcję do liczb HEX nie wspominając o float ;) ....

Jeszcze raz powtórzę - to co w pierwszej książce to nie gotowe i zoptymalizowane pod każdym względem biblioteki a tylko materiał dydaktyczny. Chociaż niechcący akurat do LCD wyszła prawie gotowa biblioteka ;)

_________________
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 lip 2012, o 09:47 
Offline
Użytkownik

Dołączył(a): 08 sty 2012
Posty: 151
Pomógł: 0

mirekk36 napisał(a):
Chociaż niechcący akurat do LCD wyszła prawie gotowa biblioteka ;)

he... i w związku z tym analiza kodu zajmuje więcej czasu, gdyż ie wszystko jest wyjaśnione ;P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2012, o 14:50 
Offline
Użytkownik

Dołączył(a): 08 sty 2012
Posty: 151
Pomógł: 0

No ale wrócę do tematu...
Nie mogę zmienić wartości OCROA za pomocą zmiennej a; Załączam kod, zawiera się w kilku plikach. Błędów nie zgłasza. Przerwanie działa w praktyce,

ISR(INT0_vect)
{
_delay_ms(100);
freq=30;
}

ale nie dokonuje zmiany częstotliwości za pomocą "freq" w pliku "butt2.c". Dodam, że w "main.c" jest linia "freq=8;" która działa poprawnie- tylko, że jest inicjalizowana podczas kompilacji..


Kod sklada się z kilku plików:

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


po raz kolejny zwrócę uwagę, że dłuższe kody umieszczamy w znacznikach [ syntax = c ] a nie [ code ] - mirekk36



Ostatnio edytowano 24 lip 2012, o 16:10 przez 20rafalo, łącznie edytowano 4 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2012, o 15:06 
Offline
Moderator
Avatar użytkownika

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

Zanim cokolwiek jednak dalej przeanalizuję to powiem tak:

w procedurze obsługi przerwania dałeś _delay_ms ??????????????

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

_________________
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 lip 2012, o 16:05 
Offline
Użytkownik

Dołączył(a): 08 sty 2012
Posty: 151
Pomógł: 0

w led.c jeszcze jest(edytowałem):
Kod:
static uint16_t licznik=0;
licznik++;            

   if((licznik<(12*freq+1))&(licznik>(2*freq)))//12-1=10sek
   {
      PORTB ^= (R|G|B);   

   }
//...........
//...........
licznik =0;



mirekk36 napisał(a):
w procedurze obsługi przerwania dałeś _delay_ms ??????????????

jak najbardziej ;>
I się tym nie przerażam jak Ty, z jednego prostego powodu: jak na razie tylko taki sposób znam na uniknięcie efektu drgań przycisku. Jeszcze nie znalazłem innego sposobu u Ciebie w książce ;P Powinienem dać drugie _delay_ms, żeby było w pełni zabezpieczone, ale odpuściłem z uwagi na przerwanie. Poznam inny sposób to przestanę używać tego nieszczęsnego "delay" w przerwaniach, bo tak się nie powinno...
Ale wszystko w swoim czasie, na razie mam problem w/w ;P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2012, o 16:15 
Offline
Moderator
Avatar użytkownika

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

20rafalo napisał(a):
I się tym nie przerażam jak Ty, z jednego prostego powodu: jak na razie tylko taki sposób znam na uniknięcie efektu drgan przycisku. Powinienem dać drugie _delay_ms, żeby było w pełni zabezpieczone, ale odpuściłem z uwagi na przerwanie. Poznam inny sposób to przestanę używać tego nieszczęsnego "delay" w przerwaniach, bo tak się nie powinno...
Ale wszystko w swoim czasie, na razie mam problem w/w ;P


To ja proponuję zacząć od tego innego sposobu. Z tego co mi wiadomo (ale może się mylę, popraw mnie ok? proszę) ... to masz moją pierwszą książkę. Jeśli więc, masz ją i tak chcesz pisać programy to przecież to twoja sprawa. Ja jednak nie umiem pomóc - bo jak ? Skoro wg mnie to jest podstawowym problemem. To co? mam cię teraz przekonywać ???? Ależ nie .... skądże.

No nie umiem pomóc bo musiałbym zaczynać od wytłumaczenia dlaczego nie stosuje się takich i to jeszcze tak długich delayów w przerwaniach ;) .... a ty twierdzisz że mamy zostawić ten temat. No to ja wymiękam niestety :( przykro mi...

Chyba że nie masz mojej pierwszej książki, to wtedy bym mógł zrozumieć takie błędne podejście. W przeciwnym wypadku znaczy, że śpieszy ci się za bardzo i albo nie miałeś ochoty jej poczytać albo nie miałeś czasu.

_________________
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 lip 2012, o 17:53 
Offline
Użytkownik

Dołączył(a): 08 sty 2012
Posty: 151
Pomógł: 0

mirekk36 napisał(a):
.... a ty twierdzisz że mamy zostawić ten temat. No to ja wymiękam niestety :( przykro mi...

Rozumiem, nie zawsze jest się w stanie pomóc ;)
Mam Twoją książkę - jestem gdzieś po środku i jak na razie podpowiedzi nie znalazłem....
A w miarę postępów robię fizyczne układy -nie czytam książek "na sucho". A jak wiesz zaprojektowanie układu trochę zajmuje- to nie tylko napisanie programu..

Nie twierdzę, że mamy zostawić ten temat- mówię, że wszystkiego na raz nie rozwiążę. Kolejność miała być taka- najpierw poradziło by się ze zmienna "freq", następnie można coś zrobić z "delay" bo i tak chcę to umieć zrobić bez 'delay'.
PS "delay" nie jest tu winnym za złe działanie- bez delay też było sprawdzane i nic.
Pzdr



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2012, o 18:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

Jak w przerwaniu dasz duży delay to spowalniasz mocno główny program. Tak samo, jak dasz w procedurze obsługi przerwania dużo instrukcji, a przerwanie wykonuje się często.

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2012, o 22:41 
Offline
Użytkownik

Dołączył(a): 08 sty 2012
Posty: 151
Pomógł: 0

to przerwanie jest aktywowane raz przy włączaniu uC i tyle.

Chyba muszę szybciej czytać te książki ;P
A jeszcze czeka mnie druga część - do końca miesiąca aktywny kod ;P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lip 2012, o 20:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Hmmmmm , http://www.elektroda.pl/rtvforum/topic2344673.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lip 2012, o 21:51 
Offline
Użytkownik

Dołączył(a): 08 sty 2012
Posty: 151
Pomógł: 0

Malutki_27 napisał(a):
Hmmmmm ,

czemu hmmmm.. ;)
Niczym złym jest założyć ten sam temat na innym forum, tym bardziej, że tutaj jak na razie problem nie został rozwiązany. A tego nie mogę wymagać ;P
Na elektrodzie coś w tym temacie się dzieje ;P
pzdr



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lip 2012, o 23:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Ponieważ, "nie słuchasz" oferowanej ci pomocy :P
A wbrew pozorom dostajesz więcej niż oczekujesz ale małymi kroczkami ;)
kol.Mirek napisał ci co powinieneś zrobić na początek, gdybyś się zastosował, dowiedział byś się że w przerwaniu z timera masz dwa kolejne błędy :-P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lip 2012, o 00:48 
Offline
Moderator
Avatar użytkownika

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

Ale nawet na elektrodzie podpowiadają wszyscy że tak się nie robi i od tego trzeba zacząć w ogóle. Nic z tego ;) kolega autor lepiej wie i się twardo broni. Obserwuję tamten wątek i jestem pełen "podziwu" dla takiego podejścia. Jak by mi 100 osób podpowiadało, że coś źle robię, to przynajmniej zacząłbym o tym myśleć .... a kolega wybija to wszystkim dookoła z głowy ;) dlatego mi pozostaje się tylko patrzeć. Zresztą inni chyba też przyjęli podobne podejście - bo ciężko tak dyskutować :(

_________________
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: 27 lip 2012, o 13:29 
Offline
Użytkownik

Dołączył(a): 08 sty 2012
Posty: 151
Pomógł: 0

mirekk36 napisał(a):
...tak się nie robi i od tego trzeba zacząć w ogóle. Nic z tego ;)

Mirku jak czytasz temat to wyraźnie napisałem, że usunąłem _delay_ms z przerwania, ale i tak nic to nie pomogło. Dlatego też nie ma co wmawiać, że się nie stosuję do podpowiedzi.. ;P
Jak na razie to nie to... ;P
Na elektrodzie zaznaczyli tylko, że delay_ms nie powinno być w tym miejscu. Jednak nie jest to błędem, który by nie pozwalał na zadziałanie zmiennej "freq" - sprawdzałem w praktyce ;P
PS czytam cały czas książkę i jest na "PLUS" ;) ale jak na razie nie znalazłem w niej podpowiedzi..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lip 2012, o 13:37 
Offline
Moderator
Avatar użytkownika

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

Więc jeśli chcesz iść tokiem rozumowania i pomocy jaką świadczymy na tym forum ;) to zastosuj się do kolejnych porad, jeśli więc poprawiłeś coś w kodzie to nie pisz nam , że to nie było to - bo ja na takiej podstawie (już mówiłem nie będę dalej podpowiadał) .... tylko wklej swój nowy poprawiony kod

wtedy popatrzymy - a jak widzisz jest tu sporo par oczu, które potrafią wypatrzyć błędy i pomóc - więc pójdziemy dalej.

To jest dobra droga a nie zapieranie się przy swoim ok? ;)

_________________
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: 27 lip 2012, o 16:41 
Offline
Użytkownik

Dołączył(a): 08 sty 2012
Posty: 151
Pomógł: 0

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


Wow-już.
Jest kilka zmiennych nie używanych - proszę je ignorować- jednak w końcowym projekcie mają znaczenie ;P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lip 2012, o 22:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Ok. , no to teraz taka mala aluzja ..... podpowiedz,a w którym miejscu przpisujesz wartość zmiennej freq do rejestru OCRx ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lip 2012, o 10:36 
Offline
Użytkownik

Dołączył(a): 08 sty 2012
Posty: 151
Pomógł: 0

Czyli trzeba po prostu tak:
Kod:
ISR(INT0_vect)
   {

      //OCR0A=22; taka opcja działa, ale chcę zmieniać częstotliwość za pomocą 'freq'!
         freq=12;
                         a = 434/freq;
         OCR0A = a;
         
   }

Prościej i szybciej sie chyba nie da.....



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 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