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



Teraz jest 25 lut 2025, o 05:08


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 25 ] 
Autor Wiadomość
PostNapisane: 15 paź 2016, o 20:28 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

Cześc.
Bawię się multipleksowaniem, przerobiłem ze zrozumieniem temat bibliotek z BB i stanąłem w miejscu.
Patrząc na kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


zatrzymałem się w miejscu. Chciałbym zrobić prosty licznik cyfr. Tak aby cyfry się zmieniały co sekundę od 1-5. Czy mogę użyć pętli for?

Kod:
for(i=0;  i<10; i = i+1)


Wydaje mi się,że musiałbym przerobić ten kod tak, aby i<6.
Ale nie wiem jak to ugryźć.

_________________
Nikt nie mówił,że będzie łatwo...



Ostatnio edytowano 16 paź 2016, o 11:38 przez wojciechgorzolka, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2016, o 20:34 
Offline
Użytkownik
Avatar użytkownika

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

zacznij od ustawienia timera tak by wystawiał flagę co 1sek.

------------------------ [ Dodano po: 1 minucie ]

znacznie lepszą komendą do dalszej zabawy będzie w pętli gł.
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 15 paź 2016, o 20:46 przez Daro69, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2016, o 20:39 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

oo Cześć Darku. a Czy jest na ten temat coś w BB? Przejrzałem spis treści, jednak nie zauważyłem nic na temat flag. a owe flagi są dla mnie jeszcze wielką zagadką.

------------------------ [ Dodano po: 1 minucie ]

i jeszcze mam jedno pytanie, dlaczego wpisując do while(1)

//zmiennektóre są wpisywane z tego pola do przerwania
cy1 = 1;
cy2 = 9;
cy3 = 8;
cy4 = 2;
[/syntax]


to nie zaświecają mi się cyfry na wyświetlaczu?

_________________
Nikt nie mówił,że będzie łatwo...



Ostatnio edytowano 16 paź 2016, o 11:39 przez wojciechgorzolka, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2016, o 20:45 
Offline
Użytkownik
Avatar użytkownika

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

wbrew pozorom to proste:
flaga to zmienna którą ustawiasz na 1 w przerwaniu co określony czas, a w funkcji która wykonuje się b. szybko ciągle jest sprawdzana wartość tej tzw flagi.
Jeżeli za którymś obiegiem pętli okaże siuę że jest 1,
To funkcja sie wykonuje i musi ustawić tę flagę spowrotem na 0, i czeka aż znowu ta zmienna będzie miała wartość 1. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2016, o 20:49 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

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


, a nie w pętli głównej muszę dokonać zmian? tutaj program będzie mi zliczał sekundy? Wiem,że kiedyś mi podsyłałeś kawał programu, ale nie mogę sobie tego odszukać, zbyt dużo razy mi pomagałeś;););)

_________________
Nikt nie mówił,że będzie łatwo...



Ostatnio edytowano 16 paź 2016, o 11:40 przez wojciechgorzolka, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2016, o 20:54 
Offline
Użytkownik
Avatar użytkownika

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

tak tutaj w przerwaniu musisz skonstruować liczniczek który zliczy tyle razy ile masz częstotliwość przerwania.
jeżeli masz np. 200 Hz to musi zliczyć do 200 i wykonać flag_sek = 1;
wtedy wykona tę operację co 1 sekundę. :)

------------------------ [ Dodano po: 7 minutach ]

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 15 paź 2016, o 21:19 przez Daro69, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2016, o 21:06 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

chyba muszę nad tym pomyśleć jutro, bo już jest późno i nic mi nie przychodzi do głowy. Jeszcze raz prześledzę temat w książce, bo tak na prawdę nie wiem co mogę zmienić,w tym miejscu kodu, a czego nie zmieniać :(

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

czy muszę zmienić w kodzie LED_DATA na coś innego? na ten licznik,które muszę skonstruować?

------------------------ [ Dodano po: 3 minutach ]

oooo teraz chwilka zastanowienia. Muszę to Darku przeanalizować. :)

_________________
Nikt nie mówił,że będzie łatwo...



Ostatnio edytowano 16 paź 2016, o 11:41 przez wojciechgorzolka, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2016, o 21:11 
Offline
Użytkownik
Avatar użytkownika

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

nie.
to nie tak.
musisz dołożyć jeszcze jeden. patrz na to co masz dwa posty wyżej . wstawiłem ten licznik.
On wystawia flagę a potem trzeba tę flagę sprawdzać w pętli gł.
...........................................
od 6 do 10 linii. ;)
...........................................
jeżeli przerwanie masz częściej niż 255 Hz to musisz zastosować uint16_t. i zliczać do odpowiednio większej wartości.

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

a dobra dopisuję flagę do tego licznika.:) momento.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2016, o 21:17 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

czyli teraz w pętli głównej będziemy sprawdzać, jeśli flaga ma jedynkę, to musi nam wyświetlić jakąś cyfrę, jeśli znów w przerwaniu będzie jeden, to kolejną musi nam wyświetlić w pętli głównej? itd?

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 paź 2016, o 21:26 
Offline
Użytkownik
Avatar użytkownika

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

dopisałem flagę do przerwania.
teraz w pętli gł. musumy:
sprawdzać tę flagę, jeżeli jest na 1 to :
jeżeli sekundy są mniej niż 59 to sek++ jeżeli nie to wyzerować i dodać minutę itd, a na kńcu wyzerować flagę żeby za kilka mikrosekund nie powtórzyć operacji tylko czekać aż za sekundę flaga będzie znowu równa 1.
I w petli także wpisać że cy1=sek/10; a cy2=sek%10;
............................
Gdzieś już to pisałem :idea:

------------------------ [ Dodano po: 6 minutach ]

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


------------------------ [ Dodano po: 7 minutach ]

zerknij tutaj :) http://forum.atnel.pl/topic16164.html na drugiej stronie. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 paź 2016, o 09:31 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

Czy możecie mi podpowiedzieć dlaczego moje zmienne są wyświetlane tylko wtedy, gry są wpisane przed pętlą główną, a gdy je wpisze w pętlę, to wyświetlają mi się same zera? :(

Daro69 podpowiada mi ,że to może być problem z widocznością plików, a może nagłówków?

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


tutaj działają, a w pętli while(1) już nie :(

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 paź 2016, o 14:50 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

A czy w przerwaniu nie piszesz kodu w stylu cy1=sek/10 (zmienna sek jest zmienną wewnętrzną z przerwania)?
Jeśli tak, to musisz również zadeklarować tą zmienną w głównych deklaracjach.
Bo inaczej dostajesz w while coś w stylu cy1=(coś, ale niewiem co)/10, rozumiesz o co chodzi?

hmm, teraz dopiero zauważyłem że masz deklaracje, najlepiej wstaw cały kod, to coś wymyślimy.

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 paź 2016, o 20:40 
Offline
Użytkownik
Avatar użytkownika

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

kolega nie bardzo może wstawić cały kod bo pracuje na ATNEL_kodach ;)
problem dotyczył niewłaściwego zaznaczenia uc. zamiast ATmega8 było ATmega32.
Przed chwilą sobie z tym poradził.
Tak to czasem jest że szuka się na dole a błąd na górze. :)
.....
muszę dodać że to po skopiowaniu programu do gotowego 03_MultiLED. "ZADZIAŁAŁO"
.......................................................
wcześniej po utworzeniu własnego projektu i plików d_led.c oraz d_led.h ,
wpisując ten sam kod, zmienne się nie słuchały. :|
Być może niewłaściwie powstały pliki nagłówkowe. ? /*będziemy to jeszcze męczyć*/

------------------------ [ Dodano po: 58 minutach ]

Wojtek,
w pętli gł. jest teraz liczenie czasu.
przenieś to jako funkcję do
.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

potem deklaracje tych funkcji w .h
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 main.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 paź 2016, o 07:25 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

https://web.facebook.com/wojtek.gorzol/videos/535883023275886/wygląda na to,że działa mój wyświetlacz:)

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 paź 2016, o 22:11 
Offline
Użytkownik
Avatar użytkownika

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

no i sobie tyka. :)
ciut za szybko ale żyje. :)
To był Twój 100-ny post :D - pamiętny.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2016, o 21:39 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

cześć.
Mam do Was pytanie, ponieważ nie mogę sobie poradzić z moim Timerem TCCR2.
Mam atmege8, częstotliwość taktowania procesora 8 000 000 Hz.
Mam takie ustawienia Timera:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jak widać z kodu ustawiłem sobie timer numer 2.
Wpisując preskaler według książki czyli 1024 i podział przez 38, ekran strasznie miga. Czy taki efekt powinien wystąpić, czy jednak przy takich ustawieniach timera wyświetlacz powinien być jednolity bez drgań i migotania?



dopiero jak w OCR2 wpisze wartość równą 3, to wyświetlacz pięknie świeci.

Czy robię coś źle?

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2016, o 21:51 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

No a jaką częstotliwość multipleksowania potrzebujesz uzyskać?

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2016, o 21:57 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

oj przepraszam, nie podałem. Mam cztery cyfry do wyświetlenia, czyli 200Hz

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2016, o 21:58 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

według wyliczeń AVR Timer Kalkulator'a do OCR powinieneś wpisać 38
Dla czterech cyfr to da przerwanie co 200 Hz czyli 50Hz na jedną cyfrę
i to powinno być stabilne.

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2016, o 22:00 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

Problem z tym,że nie jest. A czy rodzaj tranzystora ma znaczenie, nie chodzi mi czy NPN czy PNP, tylko sam symbol.

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 paź 2016, o 07:53 
Offline
Użytkownik
Avatar użytkownika

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

Czesc, sprawdź czy w przerwaniu masz licznik katod zliczający tylko od 1 do 4 ? lub od 0-3.
Za parę godzin zaczynam weekend to coś pomogę:)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 paź 2016, o 08:55 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

aaa czyli to ma znaczenie? :)

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 paź 2016, o 10:59 
Offline
Użytkownik
Avatar użytkownika

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

:)
A ma. Przerwanie - czyli to w ISR...
Jest sprawdzane co ~5ms.(200Hz).
Dlatego za każdym razem powinno zmieniać
1 następne przerwanie 2 następne 3 ...4 i znowu 1. itd.
Ale też zadziała licząc 1-2-3-4-5-6-7-8
Z tym za w pozycjach 5--8 Twoje cyferblaty będą wygaszone,
Czyli przez 4x5 ms.
...................
Sprawdź jeszcze czy zmiana nie jest
Wstawiona w dodatkowy licznik,
bo i takie coś pisaliśmy by zliczać przerwania do pełnej sekundy .(flag_sęk.) :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 paź 2016, o 11:23 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

ok, będę w domu , to sprawdzę to

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 paź 2016, o 22:39 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

Problem rozwiązany dzięki pomocy Darka. okazało się,że w mkAVR kalkulatorze nie zmieniłem taktowania. taktowanie było ustawione na 1 000 000 Hz i dlatego nie mogłem zgrać mojego układu i programu z tym z książki.
Dziękuję za pomoc.

_________________
Nikt nie mówił,że będzie łatwo...



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 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO