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



Teraz jest 26 kwi 2026, o 11:43


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 20 wrz 2015, o 11:04 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 13
Pomógł: 0

Witam i pozdrawiam
Po pewnej przerwie wróciłem do programowania AVRów, potrzebowałem zmultipleksować kilka wyświetlaczy siedmiosegmentowych, opierając się na książce napisałem poniższy kod :

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.


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.


oraz krótki 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.


Dodaję też oczywiście schemat w załączniku, wybaczcie format pdf.
DIG1A-F to katody diod
Natomiast DIG2-C1-4 oraz DIG1A/B-com to sterowowanie przełączaniem wspólnych anod.
Czyli wyświetlaczy mam ogólnie 6, oscylator 16MHz.
Jednak po wgraniu programu nic się nie wyświetla, sugeruje mi to dwie opcje; złą inicjalizację timera bądź źle skonfigurowane porty. Fizyczny błąd połączeń wykluczam.

Widzi ktoś może błąd ? Będę wdzięczny za wszystkie wskazówki.


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Ostatnio edytowano 20 wrz 2015, o 12:45 przez Kocon, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2015, o 11:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lip 2013
Posty: 208
Lokalizacja: Kielce
Pomógł: 15

A dlaczego kolega nie wstawił kodu prawidłowo w znaczniki syntax c, tak jak jest w tej instrukcji: topic7402.html ?
Wszystkim by się znacznie wygodniej to czytało i szybciej otrzymałbyś pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2015, o 20:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

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

Kocon napisał(a):

                TCCR2 |=(1<<WGM21); //CTC mode
                TCCR2 |=(1<CS22)|(1<CS21)|(1<CS20); //prescaler 1024
                OCR2=50; //50Hz for 1 segment
                TIMSK |=OCIE2; // permission for compare match interrupt


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

Kocon napisał(a):
}else if(num==10){ ////////Show F
                PORTD &=~DIG1_G;
                PORTC &=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);
                PORTD |=DIG1_G;
                PORTC |=(DIG1_A|DIG1_E|DIG1_F);
        }else if(num==10){ ////////Show A
                PORTD &=~DIG1_G;
                PORTC &=~(DIG1_A|DIG1_B|DIG1_C|DIG1_D|DIG1_E|DIG1_F);
                PORTD |=DIG1_G;
                PORTC |=(DIG1_A|DIG1_B|DIG1_C|DIG1_E|DIG1_F);

Ja jak coś okomentuję to staram się pisać tak abym przynajmniej sam wiedział o co chodzi a u Ciebie to "takie se" :)
N.p nie czytelniej byłoby napisać:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozdr.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 wrz 2015, o 23:01 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 13
Pomógł: 0

Takiej rzeczowej pomocy nawet się nie spodziewałem. Dziękuję za rozwiązanie problemu oraz cenne sugestie :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2015, o 22:13 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 13
Pomógł: 0

I niestety dalej problem, przy próbie manipulacji zmiennymi seg w programie głównym na wyświetlaczach jest 8, do tego w sposób niekontrolowany migoczące, natomiast gdy nie ustawiam nic świeci się ładne zero.
Przepraszam znów za kłopot ale spędziłem już zbyt dużo czasu nad szukaniem błędu.
Poniżej przerobiony 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.



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


Obrazek

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

To widok mam już mniej atrakcyjny, widać że segment G świeci z mniejszą intensywnością :
Obrazek


Nie mam pomysłu jak z tym walczyć :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2015, o 23:24 
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

SW przerwaniu sterowanie powinno składać się z kolejnych kroków:
1. Wyłączenie wszystkich wyświetlaczy
2. Ustawienie cyfry na jednym wyświetlaczu
3. Włączenie tego wyświetlacza dla którego cyfra została ustawiona
Inaczej zawsze poprzednia cyfra będzie przez chwilę nie na tym wyświetlaczu co powinna.

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

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2015, o 23:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Kocon napisał(a):
widać że segment G świeci z mniejszą intensywnością :

...on chyba nie świeci wcale ;)
Jest:
Kocon 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.

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

Bez złośliwości: mści się bałagan w "#define" co sugerowałem wcześniej.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 wrz 2015, o 09:56 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 13
Pomógł: 0

Nie mam nic do złośliwości jeżeli tylko pozwoli mi się czegokolwiek nauczyć. Nie ukrywam faktu że nie spotkałem się z taką życzliwością na innych forach jak tutaj.
Poprawiłem jak koledzy sugerowali, działanie niestety się nie poprawiło :
https://www.youtube.com/embed/OjIbQrc2fDw
W pętli głównej dodałem :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 wrz 2015, o 22:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

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

? - w void d_led_init(void) miałeś DIG1_D.
2 -zastosowałeś się do rady kol.Krauser?
Wstaw jeszcze raz wszystkie pliki Twojego kodu, bo u mnie działa normalnie ( tylko podłączenia uC/LED mam mniej egzotyczne :) katody przez tranzystory, segmenty przez rezystory).

... a no właśnie ja mam wspólną katodę i działa a Ty masz anodę; musisz (chyba że nie anoda ) odwrócić sterowanie poszczególnych wyświetlaczy - zapalasz je stanem niskim
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Mogę się mylić, ale chyba to jest to.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 wrz 2015, o 22:42 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 13
Pomógł: 0

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.


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.


main.c ciągle bez zmian


Napisałem też program drugi raz, trochę bardziej minimalistycznie w oparciu o program wyżej :
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.

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.

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


Program działa względnie poprawnie, liczby się dekrementują od F do 0.
Problem jest jedynie że na obu wyświetlaczach jednocześnie...
A co do egzotycznego podłączenia DIG1A oraz DIG1B to duże wyświetlacze pracujące z napięciem ok 10V i prądem 30mA, już wiem jak mogłem zrobić to lepiej ale skoro już polutowałem płytkę to nie będę walczył z nią drugi raz dla złotówki czy dwóch oszczędności.
Wszystkie wyświetlacze są z wspólną anodą, stąd przełączanie wyświetlaczy Pmos'ami. Specjalnie stosowałem w ich obwodach tranzystory npn żeby wszystko było załączane stanem wysokim.
Jestem dozgonnie wdzięczny za zainteresowanie



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

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
kicajek napisał(a):
musisz odwrócić sterowanie poszczególnych wyświetlaczy - zapalasz je stanem niskim

...czyli Ty masz włączonych kilka na raz.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2015, o 00:40 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 13
Pomógł: 0

Nie mogę się zgodzić ale chyba znalazłem błąd :

Obrazek

To fragment mojego schematu, fragment sterujący wspólną anodą jednego wyświetlacza.

Podając napięcie 5V na bramkę (tranzystor npn zatkany, podajemy stan niski na bazę) pozostaje różnica napięć Vcc-5V,docelowo Vcc to 12V więc pozostaje 7V Ugs, a to z pewnością nie pozwoli się tranzystorowi zamknąć. Jutro przecinam ścieżki i spróbuję podać napięcie Vcc.

Jeżeli źle rozumiem to proszę mnie poprawić ale nawet symulacje potwierdziły moje domysły.

------------------------ [ Dodano po: 24 minutach ]

Jest tak jak pisałem w poście wyżej.
Cytuj:
Fizyczny błąd połączeń wykluczam.

Ale wstyd, wszystko już pięknie działa.
Dziękuję raz jeszcze za rady, są nieocenione. Kolejny krok w ramach nauki...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2015, o 06:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Kocon napisał(a):
Ale wstyd, wszystko już pięknie działa.

...no nie żaden wstyd ( nawiasem mówiąc specyficzny rodzaj okazywania radości z działającego układu :lol: ), tylko powiedz/napisz po jakim zabiegu ;)

P.S. Co do sterowania ANODAMI - ja patrzyłem na ten poczwórny, bo nie wiedziałem na czym testujesz.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2015, o 09:54 
Offline
Nowy

Dołączył(a): 20 lut 2014
Posty: 13
Pomógł: 0

Obrazek

W miejscu zaznaczonym czerwoną kreską przeciąłem ścieżkę i na rezystor R10 podałem 12V zamiast 5, to samo oczywiście dla drugiego wyświetlacza.
W oryginalnej konfiguracji tranzystor nigdy by się nie zamknął co skutkowało że oba wyświetlacze nigdy nie były wyłączane.

Poczwórnego jeszcze nawet nie podpiąłem skoro nie potrafiłem przebrnąć przez podwójny :(
Teraz sukcesywnie piszę resztę programu.

Dzięki jeszcze raz za wskazówki (gdyby nie wskazówka że załączam wyświetlacze stanem niskim to nie popatrzyłbym do schematu).



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

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