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



Teraz jest 20 kwi 2024, o 07:02


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 15 sie 2014, o 20:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 57
Lokalizacja: Warszawa
Pomógł: 1

dzień dobry wieczór.
Złożyłem układ na m88pa, który ma 4cyfrowy wyświetlacz 7 segmentów. Oddzielne vcc, D1-D4 to też katody. Napisałem też taki kod, który ma liczyć, a wyświetla 0. Dlaczego tak się dzieje - gdzie popełniłem błąd?

definicje:

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


plik 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.


Z góry dziękuję ;)

_________________
Bluebook + ATB rev 1.04

wziąść - braść



Ostatnio edytowano 16 sie 2014, o 17:12 przez Kerniak, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sie 2014, o 20:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 317
Pomógł: 19

Hmm.. Tak na szybko: czy przypadkiem gdzieś przed zmienną nie brakuje przedrostka "static"?
Pozdrawiam! Jarek

_________________
"O sygnałach bez całek" Czesław Frąc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sie 2014, o 21:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 57
Lokalizacja: Warszawa
Pomógł: 1

Jak to? W jakim sensie? Ja jestem 0x00ff00, :P więc nie wiem :(

_________________
Bluebook + ATB rev 1.04

wziąść - braść



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sie 2014, o 21:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 mar 2014
Posty: 580
Lokalizacja: Jastrzębie-Zdrój
Pomógł: 71

Witam,

Ja celowałbym w konfigurację rejestrów timera:
TIMSKx i ustawienie bitów OCIEx
zamiast TIFRx

z Niebieskim pozdRowieniem,
Doman89



Teraz spoglądam na notę katalogową:
TIMSK0 |= ( 1 << OCIE0A);



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sie 2014, o 17:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 57
Lokalizacja: Warszawa
Pomógł: 1

Dobra, podzieliłem ale nadal coś nie działa :(

wstawiam kody:

#define-y:

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



ustawianie timerów i led-a:

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


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


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.

_________________
Bluebook + ATB rev 1.04

wziąść - braść



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sie 2014, o 18:45 
Offline
Użytkownik
Avatar użytkownika

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

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

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


OCF0A to jest flaga, która jest ustawiana po zrównaniu się rejestru OCR0A z TCNT0. Ale żeby procesor zobaczył tą flagę to musi być ustawiony m.in. bit OCIE0A w rejestrze TIMSK0.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sie 2014, o 19:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 57
Lokalizacja: Warszawa
Pomógł: 1

Jest TIMSK0.

W przerwaniu chciałem sprawdzić czy to w ogóle działa.

_________________
Bluebook + ATB rev 1.04

wziąść - braść



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sie 2014, o 12:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 57
Lokalizacja: Warszawa
Pomógł: 1

Kod zmieniłem, może jest czytelniejszy -


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



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


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


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



A wyświetlacz coś dziwnego odwala - wyświetla kompletnie losowe znaki - o co chodzi, ciemna śrubka!? :)

_________________
Bluebook + ATB rev 1.04

wziąść - braść



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2014, o 01:29 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

Ech... a mokrowski podarował Ci taki fajny kawałek kodu... No, ale rozumiem, chcesz sam - ja też jestem uparty. Z tego, co zrozumiałem, to ma działać tak, że w przerwaniu ma się inkrementować licznik, który wyświetlasz w pętli głównej, w której jest samo multipleksowanie. Trochę ;-) to bez sensu, no ale jeśli chcesz koniecznie, to w sumie też można, nikt przecież nie zabroni. Spróbuj uruchomić swój program fragmentami. Zrób może tak:
1. Wyłącz w diabły przerwania.
2. Do zmiennych cyfra1... cyfra4 podstaw stałe. Ja dałem po kolei 1...4. Jeśli ten fragment zacznie działać, umożliwi Ci to zidentyfikowanie, który wyświetlacz jest który. A... i jeszcze wyłącz to co w linii 35 na listingu poniżej - uruchamiasz wszystkie wyświetlacze na raz, nie wiem po co. Oto moja propozycja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I teraz, jeśli wszystko zrobisz poprawnie, na wyświetlaczu powinieneś zobaczyć "bełkot". Wracamy do eksperymentów. Teraz zrób tak:
3. Pomiędzy funkcje scr.... wstaw delay'e - tak gdzieś około 1-do 3 milisekund. Poniżej fragment kodu po modyfikacji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Teraz powinieneś zobaczyć na wyświetlaczu "1234", czy w jakiej tam masz kolejności te wyświetlacze. Pytanie: dlaczego teraz jest ok???? Podpowiedź: nie chodzi tu o żadne czasy przełączania tranzystorów, wyświetlaczy itp.
To tyle na razie ode mnie. Jeśli dalej chcesz drążyć temat, jutro możemy wrócić do przerwania i tego licznika w przerwaniu.
Pozdrawiam serdecznie, QuadMan.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2014, o 10:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 57
Lokalizacja: Warszawa
Pomógł: 1

No to sytuacja prezentuje się tak:

Drugi kod podany przez kolegę QuadMan-a działa, ale dopiero przy dużych delayach, gdy już widać migotanie. Do 7ms wyświetlacz działa tak (jasnoczerwone pola są ledwo zapalone, a białe wygaszone - rysunek bardzo fachowy :D, ale nie mam kamery).


Obrazek

Takie pytanie- kod przerwania jest zły? Za długi? Bo ja tutaj nowy jestem i to w sumie mój pierwszy kod z wykorzystaniem timerów i przerwań i tematu trochę nie ogarniam (mimo poradników Pana Mirka :()

_________________
Bluebook + ATB rev 1.04

wziąść - braść



Ostatnio edytowano 19 sie 2014, o 10:28 przez Kerniak, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2014, o 10:24 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

mokrowski napisał(a):
QuadMan napisał(a):
...
Ech... a mokrowski podarował Ci taki fajny kawałek kodu...

Ale mokrowski podarował go do analizy a nie do ,,przepisz i nie wnikaj" :-) Widzę że kod kolegi nie tyle ma błędy składni co błędy logiki programu. Myślę że mając kod z BlueBook'a i mój kawałek inaczej niż w BlueBook'u napisany, można bardzo łatwo wyciągnąć wnioski o zasadach i celu działania przerwania, funkcji czy pętli w main... Mi tego baardzo brakowało jak się uczyłem języków programowania :-) Różnorodnych rozwiązań tego samego problemu nad którym pracuję. A jak 1 czy 2 przeanalizujesz cudzy kod, to jakoś tak... sam zaczynasz go pisać .. czytelnie i logicznie bo nie chcesz by nad Twoim leciała łacina jaką Ty stosowałeś :-)

No ale może lepiej będzie na piechotę? :-)


To właśnie miałem na myśli, nie wyobrażałem sobie, że kolega Kerniak go po prostu przepisze. Wiesz mokrowski, może po prostu to jeszcze nie ten czas... Zobaczymy, czy kolega Kerniak się odezwie w wątku i zrobi ( i przemyśli) to, o co Go poprosiłem.

Pozdrawiam serdecznie, QuadMan.
P.S. A... i żeby było jasne, Jeśli chodzi o C jestem całkowicie początkującym.

Dopisane: O widzę, że kolega Kerniak się odezwał. Kerniak, czy zastanowiłeś się, dlaczego wersja z delay-ami działa poprawnie??? Pomijam tu migotanie. Teraz nie mogę za wiele pisać, odezwę się później.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2014, o 10:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 57
Lokalizacja: Warszawa
Pomógł: 1

Procek nie daje rady ich tak szybko załączać?
Teraz strzelam, bo nie jestem w stanie znaleźć innego powodu :(

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

Zaraz! Wiem! Chodzi o to, że włączany jest następny wyświetlacz, a poprzedni jeszcze nie wygasa i wtedy nakładają się na siebie liczby! O to chodzi?

_________________
Bluebook + ATB rev 1.04

wziąść - braść



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2014, o 11:57 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam ponownie.

Kerniak napisał(a):
......Zaraz! Wiem! Chodzi o to, że włączany jest następny wyświetlacz, a poprzedni jeszcze nie wygasa i wtedy nakładają się na siebie liczby! O to chodzi?


Jeśli dobrze Cię zrozumiałem, to tak - o to chodzi z tym, że, żeby już wszystko było dla Ciebie na 100% jasne - ten poprzedni nie wygasa, bo Ty go nie wyłączasz. Przyjrzyj się co robisz w jednej z funkcji od wyświetlania: scr1_display(cyfra4).... scr4_display(cyfra1). Najpierw załączasz kolejną anodę, instrukcją:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
, a dopiero następną:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
. Tak można robić jedynie wtedy, gdy czas jaki upłynie do momentu załączenia kolejnej anody jest wielokrotnie większy od czasu w jakim występuje to zjawisko, co powyżej. Teraz kolejna sprawa z tym związana: nie ma sensu robić multipleksowania w pętli głównej programu, bo wtedy muszą być delay-e między wywołaniem tych Twoich funkcji. Pomijam już fakt, że przecież w rzeczywistej pętli głównej będziesz miał jeszcze inne instrukcje - więc jak zapewnisz jednakowy czas załączania poszczególnych anod ? Spróbuj może jeszcze raz przeczytać ten rozdział z Bluebooka, Mirek naprawdę fajnie tam opisał sposób wyświetlania na wyświetlaczu multipleksowanym. Teraz jeszcze jedno moje pytanie: czy wyłączyłeś do testów przerwanie ? Zastanawiam się, dlaczego musiałeś mieć tak długie te delay-e.
Co do samego przerwania, to po pierwsze:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
WTF????? Jaką masz częstotliwość zegara procka? Wykonaj
to obliczenie na kalkulatorze i zwróć uwagę na to, jak liczba Ci wyjdzie.
Po drugie: Jak często ma się inkrementować ten Twój licznik, który chcesz wyświetlać ?

Pozdrawiam, QuadMan.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2014, o 12:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 57
Lokalizacja: Warszawa
Pomógł: 1

Częstotliwośc specjalnie pod projekt ustawiłem na 128kHz :). Czy do przerwań do multipleksowania nie będę musiał użyć drugiego timera?

Cyfra1 to sekundy
cyfra2 to sekundy x 10
cyfra3 to sekundy x 100
cyfra4 to sekundy x 1000

_________________
Bluebook + ATB rev 1.04

wziąść - braść



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2014, o 12:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 57
Lokalizacja: Warszawa
Pomógł: 1

OK. Mogę zrobić tak, że stworzę zmienną uint16_t czas i co 1000 przerwań będę ją inkrementował?

_________________
Bluebook + ATB rev 1.04

wziąść - braść



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2014, o 12:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 57
Lokalizacja: Warszawa
Pomógł: 1

Nie trybię... Jak mam to zrobić? Wskaźników jeszcze nie przerabiałem...

------------------------ [ Dodano po: 5 minutach ]

sekundę... Czyli np.

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


tak?

_________________
Bluebook + ATB rev 1.04

wziąść - braść



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2014, o 13:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 57
Lokalizacja: Warszawa
Pomógł: 1

JEJ!!! Działa! Nawet nie wiecie jaki jestem szczęśliwy! Dziękuję Wam bardzo, bardzo, bardzo! :D

_________________
Bluebook + ATB rev 1.04

wziąść - braść



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2014, o 13:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 57
Lokalizacja: Warszawa
Pomógł: 1

Dobra :) Jak tylko minie okres ekscytacji to kod poprawię :lol: :lol: :lol:

_________________
Bluebook + ATB rev 1.04

wziąść - braść



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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