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



Teraz jest 17 sty 2026, o 04:33


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 
Autor Wiadomość
PostNapisane: 19 cze 2015, o 21:35 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 398
Lokalizacja: Głogów
Pomógł: 11

Witam, bawię się przerabianiem biblioteki do wyświetlaczy LED z BB. Chcę zrezygnować z timera sprzętowego a wyświetlanie wywoływać funkcją z pętli w main.c. i dane do wyświetlenia przekazywać jako argument w postaci wskaźnika do tablicy.
Nie mogę załapać jak do funkcji multi_led_refresh przekazać tablice która jest zdefiniowana w main.c

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



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

Przy kompilacji wywala mi taki warning:
../main.c:28:3: warning: passing argument 1 of 'multi_led_refresh' from incompatible pointer type [enabled by default]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 cze 2015, o 21:44 
Offline
Moderator
Avatar użytkownika

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

Tak tylko na marginesie - nie ma gorszego pomysłu niż próba w ogóle realizacji multipleksowania w pętli głównej a szczególnie na timerach programowych ;) .... no to jest na prawdę absolutnie pomysł z kosmosu - i sam się o tym przekonasz ;) ... tzn widać, że musisz się sam o tym przekonać.

A co do wskaźnika i błędu, to PRZEDE wszystkim spróbuj wyjaśnić dokładnie i nam ale przede wszystkim sobie tutaj na głos, co to jest?

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


chodzi o to co w nawiasach okrągłych - pytam bo być może sam w trakcie wyjaśniania - zrozumiesz jakiego babola tu robisz

_________________
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: 19 cze 2015, o 21:53 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 398
Lokalizacja: Głogów
Pomógł: 11

Pierwszy raz przymierzam się do wskaźników, zwykłe zmienne potrafię przekazać przez wskaźnik a teraz chce ogarnąć jak to zrobić z tablicą. Widocznie muszę jeszcze raz doczytać.
Chciałem do funkcji pobrać adres z tablicy i przekazać do funkcji gdzie operuje już na wartościach tej tablicy.
Wiem że powinno być (&cyf[0]) ale tak czy inaczej wyskakuje warning.

Co do tego wyświetlania w pętli głównej myślałem aby nie używać żadnych opóźnień, pętla główna będzie wykonywać się całą prędkością bez żadnych zakłóceń. Docelowo chce obsługiwać kody pilota podczerwieni zegar na pcf8583 i dawce czasu z wifi i klawisze i sprzętowy pwm więc myślałem aby oszczędzać sprzętowe timery na następne rzeczy. Czyli jednak powinienem zrezygnować z tego szalonego pomysłu?



Ostatnio edytowano 19 cze 2015, o 21:57 przez Arek1111111111, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 cze 2015, o 21:56 
Offline
Moderator
Avatar użytkownika

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

Arek1111111111 napisał(a):
Czyli jednak powinienem zrezygnować z tego szalonego pomysłu?


Powiem tak - I tak i tak zrezygnujesz ;) bo na timerach programowych nigdy nie uzyskasz:

a.) stabilnej częstotliwości odświeżania więc będzie migało
b.) każde opóźnienie w pętli głównej a będą takie (i nie mówię o delayach) spowoduje, że po prostu będziesz miał istny CYRK na takim wyświetlaczu i nie za bardzo nawet będziesz w stanie stwierdzić co się dzieje, tym bardziej, że sytuacja będzie się zmieniała dynamicznie w zależności od tego co tam sobie w programie będziesz robił albo co się będzie robiło

_________________
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: 19 cze 2015, o 22:01 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 398
Lokalizacja: Głogów
Pomógł: 11

O jak dobrze wiedzieć to za wczasu :) A jeśli chodzi o obsługę pilota podczerwieni czy enkodera czy jeszcze innych bibliotek które używają timer sprzętowy to również jest tak że lepiej nic nie wyrzucać z przerwania do pętli głównej?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 cze 2015, o 22:02 
Offline
Moderator
Avatar użytkownika

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

Arek1111111111 napisał(a):
zwykłe zmienne potrafię przekazać przez wskaźnik a teraz chce ogarnąć jak to zrobić z tablicą.


nie przekazujemy tablic w postaci argumentów tylko właśnie za pomocą wskaźników, np adres jakiegoś elementu. No i przede wszystkim musimy określić typ wskaźnikowy, a ty tu jeszcze wstrzeliłeś jakiś int - dlaczego?

Zobacz jeśli chcesz przekazać do funkcji wskaźnik na tablicę cyfr to jej nagłówek może wyglądać tak:

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


a w kodzie przekazujemy albo tak:

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


albo tak

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: 19 cze 2015, o 22:03 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Tylko w przerwaniu. Chyba, że "migotki" ci nie przeszkadzają. W miarę rozbudowy projektu to wylezie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 cze 2015, o 22:05 
Offline
Moderator
Avatar użytkownika

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

Arek1111111111 napisał(a):
A jeśli chodzi o obsługę pilota podczerwieni


Pilot podczerwieni zwykle (jeśli chodzi o BB albo GB) używa Timera1

Enkoder można w ogóle bez timera obsłużyć tylko na przerwaniach zewn typu INT0 , INT1

więc te założenia które opisałeś spokojnie się da zrealizować ... powiem więcej sprzętowy timer napędzający multipleksowanie można jeszcze zaprząc do roboty aby napędzał nam kilka timerów programowych później do wykorzystania gdzieś w programie ;)

_________________
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: 19 cze 2015, o 22:12 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 398
Lokalizacja: Głogów
Pomógł: 11

Tylko jeśli użyje np Timer1 do pilota podczerwieni, Timer2 do sprzętowego pwm, Timer0 do wyświetlaczy led to ten Timer0 przez np jakąś flagę będzie sterował opóźnieniami w reszcie programu? np klawiszami itp.

------------------------ [ Dodano po: 4 minutach ]

:idea: A już kumam mogę zrobić na wskaźniku zdarzenie wywoływane w przerwaniu multipleksowania a obsługiwane gdzieś jako osobna funkcja jak to było w dawcy czasu :lol:
I dawca czasu może też być sterowany tym samym Timerem0 z przerwania do multipleksowania. Chyba że znów zabujałem w wyobraźni



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 cze 2015, o 22:21 
Offline
Moderator
Avatar użytkownika

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

no możesz sporo kombinować tym bardziej, że na samych timerach programowych zrobisz różnorakie potrzebne opóźnienia nie wymagające mega precyzji


Autor postu otrzymał pochwałę

_________________
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: 19 cze 2015, o 22:34 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 398
Lokalizacja: Głogów
Pomógł: 11

No kurcze ale to jest rewelacyjne jak ktoś naprowadzi na właściwy trop to potem wszystko samo zaczyna się układać w całość:)
Dziękuje za bardzo cenne wskazówki ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 cze 2015, o 21:17 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 398
Lokalizacja: Głogów
Pomógł: 11

Da się użyć jednego kanału sprzętowego Timer1 w atmega32 do sprawdzania kodów pilota a drugiego kanału tego samego Timera1 do sterowania sprzętowego pwm?



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

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

Może sprecyzuj o jakie dwa kanały ci chodzi?

Bo coś czuje "przez skórę", że ma to związek z rejestrami TCCR1A i TCCR1B. Wielu początkujących błędnie wyobraża sobie, że jeden rejestr jest od Timera1A a drugi od Timera1B.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 cze 2015, o 19:05 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 398
Lokalizacja: Głogów
Pomógł: 11

Pytanie czysto teoretyczne bo brakuje mi jednego Timera. a Timer0 zajęty na wyświetlacz a Timer2 do sterowania PWM. Timer1 chce użyć do obsługi kodów podczerwieni z BB, ale wiem że ma dwa kanały i stąd moje pytanie czy na drugi kanał może sterować pwm. Wtedy Timer2 miałbym wolny do wykorzystania w programie np na Timery programowe itp.



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

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

Timer1 ma dwa kanały ale sprzętowego PWM czyli może generować dwa różne przebiegi PWM. O żadnych innych dwóch kanałach mi nie wiadomo.

Piszesz, że Timer0 obsługuje multipleksowanie. To co za problem w obsługę tego przerwania wpleść kilka timerów programowych. Przerwanie nie wiele się wydłuży. Multipleksowanie i timery programowe będziesz miał obsłużone przez Timer0, a do pilota IR i PWM zostanie ci Timer1 i Timer2.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 cze 2015, o 16:43 
Offline
Użytkownik

Dołączył(a): 08 mar 2014
Posty: 398
Lokalizacja: Głogów
Pomógł: 11

I problem rozwiązany, myślałem o tym tylko nie wiedziałem jak rozwiązać to aby taki timer programowy który znajduje się w bibliotece w innym pliku przekazać jako wskaźnik do funkcji dawcy czasu. w pliku main.c lub jeszcze innym. Ale już pomysł jest żeby w main.c sprawdzać flagę ustawianą w przerwaniu Timera obsługującego wyświetlacz led i z tej flagi wywoływać dawce czasu. Dziękuje za podpowiedzi ;)



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO