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



Teraz jest 28 mar 2024, o 14:16


Strefa czasowa: UTC + 1





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

Dołączył(a): 29 gru 2011
Posty: 82
Lokalizacja: Gdańsk
Pomógł: 0

Witam,

Chciałbym się o coś zapytać. Otóż jako, że program na multi LED jest bodajże na ATmega 32, a ja mam ATmega644p, zoptymalizowałem go na ten właśnie drugi procek, lecz nie wiem czy poprawine.
Dlatego zamieszczam program, abyście mogli sprawdzić czy wszystko jest ok. Po wganiu programu, jest coś nie tak, czyli jak wgrywam program i naciskam RESET(wspomnę, że korzystam z wewnętrznego programatora z układu uruchomieniowego, eclipse i procek jest taktowany na 16Mhz) to przy kliknięciu raz migną dwie środkowe cyfry i nic więcej się nie dzieje.

Przerwanie chyba działa, bo dioda LED miga. Jak dobrzę myślę to ta część kodu odpowiada za sprawdzenie czy przerwanie działa? Jeśli nie to poprawcie mnie :-):

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


Sprawdziłem kilka razy program, lecz nie widzę w nim nic niepokojącego( może ktoś inny spojrzy na to innym kątem) :-)
Próbowałem też pozamieniać połączenia anod wyświetlacza z pinami portu C( w moim przypadku ), tak jak Pan Mirek pisał w podobnych postach, lecz bez skutku.

Oraz chciałbym poprosić o wytłumaczenie fragmentu kodu programu, którego nie do końca rozumiem( jeśli nie byłby to oczywiście problem :-)):

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


Tak jak obiecałem zamieszczam program:

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


2. d_led.c

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


3. d_led.h

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


Pozdrawiam,
Patryk :-)

P.S. Jeśli czegoś nie napisałem co by mogło się przydać to piście.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 12:19 
Offline
Moderator
Avatar użytkownika

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

A ja bym polecał jednak przejrzeć czasem forum ;) bo mowa o tym była już nie raz

post38.html?hilit=multipleksowanie%20led#p38

co do programu o którego działanie pytasz - to po prostu wyświetlanie licznika, robijanie liczby na poszczególne cyfry i wyświetlanie ich na takim multipleksowanym wyświetlaczu. Napisz dokładniej czego w tym kodzie nie rozumiesz - to łatwiej będzie wytłumaczyć 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: 20 lis 2012, o 12:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 gru 2011
Posty: 450
Pomógł: 4

Tak na szybko wypatrzyłem dwa błędy:
1. plik 2. d_led.c - linia 37 powinno być:
ANODY_PORT |= ca1 | ca2 | ca3 | ca4; // wygaszenie wszystkich wyświetlaczy(anody)

2. Program 1. main.c
Program wykonuje non stop tą pętlę
while(1)
{
PORTC ^= (1<<PC4);
_delay_ms(1000);
}

i nie przechodzi dalej. Musisz to wywalić (zakomentuj na razie cały ten blok.)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 12:31 
Offline
Użytkownik

Dołączył(a): 29 gru 2011
Posty: 82
Lokalizacja: Gdańsk
Pomógł: 0

To mi wystarczy co do zasady działania tego fragmentu kodu. :-)

A ten post co Pan mi pokazał, to widziałem, tylko w tym problem, że te dwa obrazki co pan zamieścił poniżej to w moim przypadku nie chcą "działać"( poprostu nie chcą się otworzyć).

Przepraszam, że nie będę do wieczora odpisywał, ale mam autobus za 5 min. :-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 12:42 
Offline
Moderator
Avatar użytkownika

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

Patryk55 napisał(a):
A ten post co Pan mi pokazał, to widziałem, tylko w tym problem, że te dwa obrazki co pan zamieścił poniżej to w moim przypadku nie chcą "działać"( poprostu nie chcą się otworzyć).


to zmień przeglądarkę internetową na jakąś porządną np Chrome albo Firefox i wszystko będzie ci się otwierać. Ale ok zajrzyj do tego linku jeszcze raz - wgrałem te obrazki jeszcze inaczej ;)

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

a poza tym to o jakich ty dwóch obrazkach mówisz - w tym wątku z linku jest tylko jeden obrazek.

_________________
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: 20 lis 2012, o 17:57 
Offline
Użytkownik

Dołączył(a): 29 gru 2011
Posty: 82
Lokalizacja: Gdańsk
Pomógł: 0

Ok, obrazek już działa. A co do dwóch obrazków, to po prostu był jeden tylko zbugowany. ;)
Błędy sprawdzilem i znalazłem jeszcze jeden w pliku .h tam gdzie bity portu c( też poprawiłem).
Lecz dalej gdy wgram program i nacisnę reset migną 4 cyfry i nic więcej się nie dzieje.
Nie wiem co robię nie tak i to mnie nurtuje, albo czegoś nie widze co razi w oczy :?: :?:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 18:42 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

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

Masz >> zamiast >

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2012, o 18:04 
Offline
Użytkownik

Dołączył(a): 29 gru 2011
Posty: 82
Lokalizacja: Gdańsk
Pomógł: 0

Dzięki, za zauważenie błedu. ;)
Czyli jak dobrze rozumię to program ma działać tak, że odlicza na wyświetlaczu 60s w dół? Tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2012, o 22:01 
Offline
Moderator
Avatar użytkownika

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

Patryk55 napisał(a):
Czyli jak dobrze rozumię to program ma działać tak, że odlicza na wyświetlaczu 60s w dół? Tak?


dlaczego akurat 60s i to w dół ?

ot po prostu no wyobraź sobie - chciałem żeby jakiś byle koci licznik się kręcił na wszystkich cyfrach wyświetlacza

dlatego jest wyświetlana liczba zwiększająca się od 0 do 5999, przy czym jak widzisz z kodu, zera nieznaczące są wygaszane - tzn nie zapala się NIC

więc chodzi o to aby po kolei na wyświetlaczu pokazać cyfry np

5 9 9 8 itd

_________________
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: 22 lis 2012, o 15:40 
Offline
Użytkownik

Dołączył(a): 29 gru 2011
Posty: 82
Lokalizacja: Gdańsk
Pomógł: 0

Acha, rozumiem. ;)
Dzięki za pomoc, problem rozwiązany. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2014, o 14:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 kwi 2013
Posty: 105
Lokalizacja: Warszawa
Pomógł: 0

Witam,

Próbuję skonfigurować multipleksowanie na ATmega16. Anody chcę podłączyć pod port C, konkretnie piny PC2, PC3, PC4, PC5 lub PC4, PC5, PC6, PC7. Używam taśmy ATNEL więc muszę mieć te anody podłączone tylko do jednego portu i po kolei jeżeli chodzi o piny. Stąd dwie powyższe konfiguracje. Na PC1 i PC2 używam I2C więc odpadają. Do portu B mam podłączone katody, natomiast do portu A wyświetlacz LCD. Na porcie D używam UART. Nie wiem, czy jeżeli używam przerwania CTC Timer0 w bibliotece Pana Mirka do multipleksowania to pozostałe piny portu D też może odpadają. W każdym razie podłączając anody do portu C jak wyżej w dwóch konfiguracjach nie świecą prawidłowo wszystkie wyświetlacze. Jeżeli podłączę anody do PC7, Pc6, PC5, PC4, to żaden nie świeci. Jeżeli podłączę do PC2, PC3, PC4, PC5 to świecą tylko dwa. Sprawdziłem w nocie, że na porcie C jest JTAG. Jednak jest on wyłączony w moim uC - sprawdziłem w MkAVR kalkulatorze. Dla sprawdzenia poprawności kodu podłączyłem anody do portu D - piny PD0, PD1, PD2, PD3, wyłączając wcześniej UART. Świecą wszystkie wyświetlacze. O co chodzi z tymi pinami na porcie C?

_________________
Mój Serwer AVR - http://msavr.besaba.com



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

Dołączył(a): 30 kwi 2013
Posty: 105
Lokalizacja: Warszawa
Pomógł: 0

Problem rozwiązany. Maskowanie bitów w przerwaniu + zmiana wartości zmiennej licznik.

Pozdrawiam

_________________
Mój Serwer AVR - http://msavr.besaba.com



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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