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



Teraz jest 4 gru 2024, o 11:46


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 16 gru 2018, o 17:37 
Offline
Nowy

Dołączył(a): 20 sie 2014
Posty: 6
Lokalizacja: Bydgoszcz
Pomógł: 0

Witam.

Mam problem z wyświetlaniem na wyświetlaczach 14-segmentowych.
Posiadam 3x płytki (nie skończone jakieś dawne projekty z pracy) Pomyślałem ze wykorzystam je w przyszłości do zegara który będzie uruchamiał na zaprogramowany czas Analogowy piec Webasto (do ogrzewania garażu)
Płytka posiada:
Miktokontroler Atmega 64, kwarc zewnętrzny 12Mhz, 3 podwójne Wyświetlacze PDA54-11GWA, miejsce na DS1307 i baterie dla RTC, 3 przyciski i kilka We/Wy, dioda sygnalizacyjna.
Wyświetlacze ze wspólną Anodą, Sterowane "0" poprzez P-mosfety
Katody sterowane "1" poprzez ULN2803.
Problem (jak dla mnie) jest w tym ze anody mają różne porty (PE, PC) i katody też mają różne porty (PA, PC, PG, PF)
na początek wysterowałem na sztywno po kolei katody i anody żeby mieć pewność ze wszystko się zgadza i jest ok,
wykorzystując na początek tylko te 4 segmenty co w 7-segmentowym (segmenty abcdef+ połączony segment g) i wyświetlić licznik z ćwiczenia Multi_Led
Timer 0 ustawiony na 200hz no i niestety nic nie wyświetla, przygotowuje tablice wzorcową 16 bitową liczb i cyfr ale nie wiem czy dobrze to zapisuję chyba powinno być od prawej do lewej?
Wyświetlałem wcześniej na wyświetlaczach 7-segmentowych ustawionych na całych portach na "stykówce" i nie było problemu.
Proszę o uwagi krytykę i wskazówkę, pomoc. To jest mój pierwszy Post..


dodam ze JTAG wyłączony na porcie F
i ATmega103 Compatibility mode też wyłączone.


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.


czy tablica zapisana w ten sposób może być?

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


ObrazekObrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2018, o 21:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 164
Pomógł: 3

Sprawdź najpierw czy timer w ogóle działa - tzn. zrób taki podział żeby albo tylko migał diodą albo cokolwiek robił abyś miał pewność że timer żyje.

Wyświetlaczy masz jak widzę 6, więc 200Hz będzie zdecydowanie za mało. 6x50Hz = 300 Hz. Proponuję zmienić na wyższe.

W kodzie jest wysterowanie tylko czterech katod - nie będę się domyślał o co tam chodzi. W każdym bądź razie wygląda to jak żywcem skopiowane z książki i poddaję pod dużą wątpliwość działanie tego w tym przypadku.

Także najpierw sprawdź czy timer działa a potem skup się na załączeniu i wyświetleniu jednej liczby na jednym wyświetlaczu. Ja rozgryziesz jeden to reszta pójdzie łatwiej.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 gru 2018, o 14:28 
Offline
Nowy

Dołączył(a): 20 sie 2014
Posty: 6
Lokalizacja: Bydgoszcz
Pomógł: 0

Uruchamiałem timer na wyrywkowo wybranych pinach każdego portu i działa, stan wyjścia zmieniał się na wysoki co 1 sekundę.

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: 17 gru 2018, o 16:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 164
Pomógł: 3

Dużo tu roboty, trzeba wziąć kartkę i długopis, rozpisać wszystko co do czego jest i jak kolejno ma się wyświetlać tak żeby potem z kodem było łatwiej. Przerabiałem podobny temat, trzeba mu poświęcić trochę czasu.
Skoro na sztywno działało to w timerze też powinno, widocznie źle jest coś napisane. W tym przypadku metoda drobnych kroczków - napisz obsługę dla jednego - jeżeli jest gotowa to wtedy zrób dla kolejnego tak aby działały obydwa itd.

Ja pisałem obsługę dla sześciu wyświetlaczy 7-segmentowych które były multipleksowane. Wkleję Ci kod, który może Ci trochę w jakiś sposób pomoże:

definuję sobie nazwy dla katod aby móc się swobodnie posługiwać:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Kolejność wynikała z układu połączeń - jest to teraz nieistotne. Chodziło o ułatwienie sobie sprawy.
Natomiast samo multipleksowanie w przerwaniu zakończyło się na czymś takim:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wyjaśnienie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
- oznacza załączenie tej katody, reszta musi być wyłączona i dalej
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
- teraz włącz tą katodę, reszta wyłączona
i tak aż do ostatniej katody.

Także tutaj spora praca domowa do odrobienia dla Ciebie. Napisz sobie to dla jednej katody a potem sukcesywnie dodawaj następne i sprawdzaj.

Co do tablicy wzorców, sam bym to zrobił raczej w taki 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.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2018, o 17:55 
Offline
Nowy

Dołączył(a): 20 sie 2014
Posty: 6
Lokalizacja: Bydgoszcz
Pomógł: 0

Powoli do przodu. Przemiatanie już działa (na razie na 4 Anody)
ale jak wyświetlam cyfry z tablicy to zapalają się niepotrzebne segmenty katod dlatego ze 4 różne porty odwołują się do tego samego argumentu, więc jak to zapisać?

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


Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2018, o 18:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

Tak się wtrącę! Problem jest w segmencie "j", który nie jest zadeklarowany w tablicy znaków i jest sterowany z portu PF(po resecie ma wartość 0 - dlatego jest wyświetlany).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2018, o 19:10 
Offline
Nowy

Dołączył(a): 20 sie 2014
Posty: 6
Lokalizacja: Bydgoszcz
Pomógł: 0

To nie jest segment "j" tylko "k"
Środkowe segmenty "g, h, j, l ,m ,n" są na razie rezystory wy lutowane jak będzie poprawnie wyświetlało to wlutuje
każda cyfra się wyświetla + jeszcze coś np. "DP", cyfra 4 z segmentem "D"

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2018, o 19:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

To moja pomyłka. Ale p i k jest nie deklarowane w tablicy jeśli chcesz wyświetlać cyfry.



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

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