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



Teraz jest 25 kwi 2024, o 14:36


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 
Autor Wiadomość
PostNapisane: 23 lis 2016, o 20:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Możesz pokazać schemat?
Oczekujesz podpowiedzi czy gotowego rozwiązania?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lis 2016, o 20:44 
Offline
Moderator
Avatar użytkownika

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

DeTronix napisał(a):
a nie tak jak u mnie trochę tu trochę tam...

Teraz zrozumiesz dlaczego łatwiej gdy segmenty są na jednym porcie ;) ... a ty zrobiłeś sobie ARMAGEDON ... i z tego co piszesz to masz przede wszystkim problem jak mi się wydaje w ogóle z generatorem cyfr ...

Jednym słowem zrobiłeś sobie koszmarka hardcora ;) ale może i dobrze - jak to ogarniesz programowo - a na pewno kiedyś ogarniesz - TO DOPIERO nabierzesz doświadczenia ;)

_________________
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: 23 lis 2016, o 21:31 
Offline
Użytkownik
Avatar użytkownika

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

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

a #define segmentów napisać w.g Twoich portów np.: #define a_1 PORTA |= (1<< PA1) tylko to takie...

anshar napisał(a):
Możesz pokazać schemat?

Podejrzewam, że nic nad to co już jest się nie pojawi :)

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lis 2016, o 22:56 
Offline
Użytkownik

Dołączył(a): 07 gru 2013
Posty: 90
Pomógł: 6

Też tak kiedyś podłączyłem wyświetlacz. Napisz małą funkcję której argumentem jest uint8_t - to co chcesz pokazać na wyświetlaczu ( katodach ) anody sterujesz oddzielnie. funkcja ta sprawdza każdy bit uint8_t ( argumentu ) i zależnie od stanu "zapala" odpowiednią katodę na wyświetlaczu. Np bit 0 == 1 to katoda_segment_A = zapalona.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lis 2016, o 23:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2014
Posty: 330
Lokalizacja: Rybnik
Pomógł: 54

No dobra, to się trochę pobawimy. Rozwiązań jest na pewno kilka, niekonieczne te będzie najbardziej optymalne.

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

I oczywiście dało by się jeszcze uprościć, np korzystając z tego, że cały port B jest wykorzystany do wyświetlacza to na początku wpisać PORTB = 0 i potem wpisywać do niego bez OR-a, chciałem, żebyś zobaczył jak to ogólnie zrealizować przy takim pomieszaniu, gdzie powiedzmy pod PB5 i PB5 mamy podłączone coś innego niż wyświetlacz.

Z powodu później pory mogłem coś namieszać, więc przeanalizuj sobie wcześniej ten kod. ;)

_________________
Amatorska stacje meteorologiczna



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2016, o 11:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

DeTronix napisał(a):
gotowiec hmm a kto by mi chciał to napisać ...

No ja właśnie sobie napisałem dla wprawy. Masz rację nię tędy droga, by wkleić ci tutaj pliki źródłowe, bo tak to się niczego nie nauczysz.
Postaram się w takim razie napisać ci jak ja podszedłem do realizacji tego proramu.
Na początku założyłem sobie, że każdy pin wyświetlacza niezależnie czy to kadoda czy anoda może być podłączony do dowolnego pinu uC.
Napisałem więc sobie makra np dla anody pierwszego wyświetlacza:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

I w ten sam sposób dla kolejnych dwóch pozostałych anod.

Następnie w ten sam sposób dla ośmiu katod, dla przykładu katoda od segmentu A:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Następnie zdefiniowałem sobie takie makra dla cyfr od 0 do 9, od 0 do 9 z kropką i jeszcze jedno tzw NIC, czyli wszystkie segmenty wygaszone.
Dla przykładu cyfra "2":
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


Oczywiście pamiętając o ustawieniu wszystkich pinów jako wyjścia, oraz ustawieniu timera 0 w tryb CTC, przyszedł czas na procedurę obsługi przerwania Compare Match:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W ten sposób zrealizowałem to multipleksowanie w przerwaniu.
Kompilujemy, wgrywamy... i naszym oczom powinny się kolejno pojawić cyfry 1,2 oraz 3 na wyświetlaczach LED.
Teraz tylko pozostało ci wymyślić sposób na wyświetlanie cyfr na kolejnych wyświetlaczach w zależności od zmiennych globalnych przechowujących cyfry do wyświetlania: uint8_t cy1; uint8_t cy2; uint8_t cy3;
Nie będzie to skomplikowane, prawda?
Podpowiem ci, że trzeba będzie zastąpić czymś CY1; CY2; oraz CY3; w tym przerwaniu. No właśnie czym?

Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2016, o 19:50 
Offline
Użytkownik

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

No widać z tego, że działa ale... sprzęt nie odpowiada programowi.
skup się na tym jak masz zdefiniowane znaki i tam szukaj przyczyny.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2016, o 21:10 
Offline
Moderator
Avatar użytkownika

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

DeTronix napisał(a):
podświetliłem myszka wykrzyknik aby odczytać błąd...


A kilka dni temu były i to chyba ze dwa tego typu tematy

podpowiadam zawczasu - poczytaj o domyślnej promocji do int

http://atnel.pl/domyslna-promocja-do-typu-int.html

i częściej przeglądaj forum bo w tym samym czasie co twój wątek ludzie poruszają jak mówię wręcz IDENTYCZNE zagadnienia ...

_________________
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: 24 lis 2016, o 21:19 
Offline
Użytkownik
Avatar użytkownika

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

Witam
DeTronix napisał(a):
      PORTB |= (pgm_read_byte( &cyfry[CYFRA1]) & maskB);
              PORTD |= ((pgm_read_byte( &cyfry[CYFRA1]) & maskD) |
                        (pgm_read_byte( &cyfry[CYFRA1])>>3 & maskD_));
                                PORTB |= CA1;                //załączenie wyświetlacza pierwszego

Troszkę to zakręcone, ale nie wiem czy nie powinno być PORTB = (..... i PORTD = ...
ponieważ w kolejnych "if(licznik== ...)" dopisujesz poszcz. segmenty

Pozdr.



Ostatnio edytowano 24 lis 2016, o 22:51 przez kicajek, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2016, o 22:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2014
Posty: 330
Lokalizacja: Rybnik
Pomógł: 54

Podstawowa sprawa, anody sterujesz tranzystorami PNP w układzie OE. Układ OE odwraca faze sygnału o 180stopni, dlatego chcąc mieć 1 podajesz na bazę 0, a więc nie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


Dlatego tak ważne jest zawsze umieszczenie schematu.

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


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



kicajek napisał(a):
Witam
DeTronix napisał(a):
      PORTB |= (pgm_read_byte( &cyfry[CYFRA1]) & maskB);
              PORTD |= ((pgm_read_byte( &cyfry[CYFRA1]) & maskD) |
                        (pgm_read_byte( &cyfry[CYFRA1])>>3 & maskD_));
                                PORTB |= CA1;                //załączenie wyświetlacza pierwszego

Troszkę to zakręcone, ale nie wiem czy nie powinno być PORTB = (..... i PORTD = ...
ponieważ w kolejnych "if(licznik== ...)" dopisujesz poszcz. segmenty

Pozdr.



Nie dopisujesz bo po pierwsze masz else if, a po drugie zmienną licznik zwiększasz tylko na końcu, więc za każdym wejściem w obsługę przerwań wykonują się instrukcję z tylko jednego ifa. A poza tym, na początku obsług przerwań zerujesz wykorzystywane piny portów B i D.

DeTronix napisał(a):
... myślę ze jest coś nie tak z tym maskowaniem ... w przerwaniu ...


Właśnie przez to że zmieniasz całą zawartość portów (czyli bez OR), bez maskowania pinów, których używasz w innych celach ;)

_________________
Amatorska stacje meteorologiczna



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2016, o 22:51 
Offline
Użytkownik
Avatar użytkownika

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

Witam
Wydaje mi się, że przy takim #define segmentów bez dwóch tablic się nie obejdzie.
Tu na podstawie Twojego nabazgrałem inną wersję ( tylko dla siebie będziesz musiał zanegować wartości w tablicy bo testowałem to z 7led wsp.Kat.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Edit
Pisałem jak pojawił się nowy wpis - ale to też działa :)

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lis 2016, o 23:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2014
Posty: 330
Lokalizacja: Rybnik
Pomógł: 54

Przepraszam, mój błąd, za mało wytłumaczyłem.
Popatrz na podłączenie, przedstawione w bitach:

PORTB 0b10011111
PORTD 0b01000100

Widać wyraźnie, bit 2 pokrywa się w obu portach. Dlatego też zrobiłem taki chwyt, że przeniosłem go w miejsce wolnego bitu 5 dla zapisu znaków.

Ja znaki definiuję z głupiego przyzwyczajenia zawsze binarnie, wtedy o tym pamiętam:

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



Żeby nie być gołosłownym, podłączyłem według twojego schematu ( z tym, że wspólna katoda), program z mojego pierwszego postu.
Obrazek

_________________
Amatorska stacje meteorologiczna



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lis 2016, o 00:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2014
Posty: 330
Lokalizacja: Rybnik
Pomógł: 54

DeTronix napisał(a):

co radzisz?


Ja już przyczynę tego zjawiska opisałem post wyżej:

anonimowy napisał(a):
Przepraszam, mój błąd, za mało wytłumaczyłem.
Popatrz na podłączenie, przedstawione w bitach:

PORTB 0b10011111
PORTD 0b01000100

Widać wyraźnie, bit 2 pokrywa się w obu portach. Dlatego też zrobiłem taki chwyt, że przeniosłem go w miejsce wolnego bitu 5 dla zapisu znaków.


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


Powinno zadziałać, potem możesz to sobie zapisać po swojemu, uwzględniając przeniesienie PD2 na pozycję piątego bitu.

DeTronix napisał(a):
jesteś dobry w te klocki rzekłbym wielki w cudzysłowie tego słowa znaczeniu naprawdę znasz się na rzeczy ...

Ten kod to pierwsze co mi przyszło na myśl, bez żadnej optymalizacji ani nic, więc niech kolega nie przesadza ;)

_________________
Amatorska stacje meteorologiczna



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 lis 2016, o 00:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2014
Posty: 330
Lokalizacja: Rybnik
Pomógł: 54

Czyli teraz żeby było "po Twojemu", bardziej czytelne piszesz tak:

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


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

zostawiasz, dla ustalenia kierunku itd.

Acha, i rzutowanie jawne, żebyś znowu nie miał warningów, ale z tym dasz se radę :lol:

Mam nadzieje, że po analizie już będziesz wiedział, gdzie leżał problem.

_________________
Amatorska stacje meteorologiczna



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lis 2016, o 20:22 
Offline
Użytkownik
Avatar użytkownika

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

Witam
DeTronix napisał(a):
wiec tak zanegowałem tablice patrz: ...i jak zmieniam te wartości to są bzdury gdzie błąd ?

Sprawę wyświetlacza masz załatwioną, ale przyzwoitość nakazuje wytłumaczyć się ( tzn. mię :) )
Napisałem o zanegowaniu tablic, ale dodatkowo trzeba było też zmienić system sterowania z wsp.K na wsp.A o czym wspominał kolega:
anonimowy napisał(a):
...Podstawowa sprawa, anody sterujesz tranzystorami PNP w układzie OE. Układ OE odwraca faze sygnału o 180stopni, dlatego chcąc mieć 1 podajesz na bazę 0, a więc nie: itd.

oraz maskowanie.
To co zamieściłem działało poprawnie z LED7 wsp.Kat, ale nie podjąłem się zmiany "w ciemno" bez możliwości sprawdzenia na wsp.Anodę

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2016, o 21:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2014
Posty: 330
Lokalizacja: Rybnik
Pomógł: 54

DeTronix napisał(a):
zajęte ok 31% pamięci i niewiele procent flash.

DeTronix napisał(a):
że program zwiększył swój rozmiar o ponad 70% co przekracza dostępna pamięć na 108,5% zaś flash mamy w normie na 28,9%


Tak się zastanawiam, czy przypadkiem czegoś nie pomyliłeś. Tak ogólnie mówiąc (w uproszczeniu), w pamięci flash znajduje się program, w pamięci RAM dane, zmienne.

Czego Tobie brakuje? Bo wydaje mi się, że pamięci programu (flash), ale z opisu jednoznacznie to nie wynika.

_________________
Amatorska stacje meteorologiczna



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2016, o 21:54 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

A jaki poziom optymalizacji masz ustawiony?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2016, o 22:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Jeśli jeszcze nie używasz to zainstaluj sobie na początek program Eclipse Gadget:
http://atnel.pl/eclipse-gadget.html
Bardzo przydatny program, gorąco polecam. ;)
Masz w nim opcję: BOOST FLASH.
Jak z niej skorzystasz (BOOST FLASH ON) to twój program się zmieści. ;)
Sprawdź!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2016, o 22:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

No to kliknij sobie na BOOST FLASH OFF, by zmieniło się na BOOST FLASH ON.
Następnie musisz zrobić Clean projektu i Build projektu.
Klikasz w Eclipsie prawym przyciskiem myszy na folder twojego projektu i klikasz na Clean Project.
Następnie kompilujesz. ;)
A żeby nie było, że się nie da, to proszę, wgraj sobie ten wsadzik do twojej ATtiny2313:
Załącznik:
Multi_LED.zip


Załączniki:

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



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

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