logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zwiększyć jasność wyświetlaczy siedmiosegmentowych 8051 w assemblerze?

De[vvv]il Blast 06 Sty 2007 11:10 3107 23
REKLAMA
  • #1 3411912
    De[vvv]il Blast
    Poziom 11  
    Posty: 57
    Ocena: 1
    Witam!
    Dostałem za zadanie wrzucenia na cztery multipleksowane wyświetlacze siedmiosegmentowe napisu "8051". Niestety prowadzący cały czas nie chce zaliczyć laborki z powodu tego, że według niego wyświetlacze powinny się palić mocniej (po odpaleniu mojego programu wyświetlacze nie palą się tak mocno, jak reszta diod, co jest chyba logiczne z uwagi na multipleksację). Według moich spostrzeżeń, efekt ten można trochę zminimalizować przez odpowiednie dobranie opóźnienia, ale zmęczony ciągłym przestawianiem wartości dopisałem kod tak, aby regulacja odbywała się przez dwa przyciski. Niestety po nastawieniu najlepszego opóźnienia prowadzącemu i tak nie podoba się sposób świecenia wyświetlaczy. Poniżej zamieszczam program, który napisałem. Znacie jakieś sposoby rozwiązania tego zadania? Myślałem trochę o operacjach logicznych żeby nie zmieniać wszystkich wartości, ale i tak zmieniona część powinna palić się słabiej.
    Z góry dzięki za wszelką pomoc.

    
    ;odpowiednie rozkazy
    	$MOD517
    ;tutaj umieszczam program
    	ORG	1000H
    	SJMP	START
    	ORG	1003H
    	SJMP	INTO
    	ORG	1013H
    	SJMP	INTI
    ;zaczynamy
    START:
    ;włączenie przerwań
    	SETB	EAL
    ;włączenie przerwania INT0
    	SETB	EX0
    ;włączenie przerwania INT1
    	SETB	EX1
    ;pętla, która będzie wykonywana:
    LOOP:
    ;wybieram pierwszy wyświetlacz:
    	CLR	P4.0
    ;wrzucam do niego wartość:
    	MOV	P1, #01111111B
    ;małe opóźnienie:
    	ACALL	DELAY
    ;wyłączam wyświetlacz:
    	SETB	P4.0
    ;to samo z drugim i tak dalej:
    	CLR	P4.1
    	MOV	P1, #00111111B
    	ACALL	DELAY
    	SETB	P4.1
    
    	CLR	P4.2
    	MOV	P1, #01101101B
    	ACALL	DELAY
    	SETB	P4.2
    
    	CLR	P4.3
    	MOV	P1, #00000110B
    	ACALL	DELAY
    	SETB	P4.3
    
    	SJMP	LOOP
    
    ;;;;;;;;;;;OBSŁUGA IRQ INT0;;;;;;;;;;;;
    INTO:
    ;eliminacja efektu drgania styków:
    	CLR	EX0
    	LCALL	DEL2
    	SETB	EX0	
    ;zwiększ akumulator, w którym trzymana jest wartość
    ;od której ma zliczać opóźnienie
    	INC	A
    	RETI
    ;;;;;;;;;;;OBSŁUGA IRQ INT1;;;;;;;;;;;;
    INTI:
    ;jak wyżej, tylko zmniejszamy akumulator
    	CLR	EX1
    	LCALL	DEL2
    	SETB	EX1
    	DEC	A
    	RETI
    ;;;;;;;;;;;;;;;OPÓŹNIENIE;;;;;;;;;;;;;;
    DELAY:		
    ;opóźnienie A*255 
    ;wrzucamy ustawioną wartość do R7
    	MOV	R7, A	
    DEL:
    	DJNZ	R6, $
    	DJNZ	R7, DEL
    	RET
    ;;;;;;;;;;;;;;;OPÓŹNIENIE;;;;;;;;;;;;;;
    ;tylko użyte do eliminacji efektu drgania styków
    ;nie wpływa raczej na działanie wyświetlania
    DEL2:
    	DJNZ	R4, $
    	DJNZ	R5, DEL2
    	RET
    END
  • REKLAMA
  • #2 3412085
    algebro
    Poziom 15  
    Posty: 118
    Pomógł: 8
    Ocena: 2
    Prowadzącemu być może chodziło o sterownaie wyświetlaczy w przerwaniach, Ty zrobiłeś to na pętlach opóżniających. Akurat te dwa klawisze możesz sprawdzać właśnie w tych przerwaniach obsługujących wyświetlacz albo całkiem śmiało po za przerwaniami. Bez sensu jest używać aż dwóch przerwań. Jeśli już, to podepnij klawisze pod jedno wejscie INT.
    DELAY:       
    ;opóźnienie A*255 
    ;wrzucamy ustawioną wartość do R7 
       MOV   R7, A    
    DEL: 
       DJNZ   R6, $ 
       DJNZ   R7, DEL 
       RET 

    Być może zawartość rejestru R6 (FFH) jest zbyt wielka, aby skrócić w znaczący sposób czas pętli (czas zaświecenia segmentu).
    tylko użyte do eliminacji efektu drgania styków 
    ;nie wpływa raczej na działanie wyświetlania 
    DEL2: 
       DJNZ   R4, $ 
       DJNZ   R5, DEL 
       RET 
    END

    Tutaj chyba miało być DJNZ R5, DEL2

    I jeszcze jedno: zanim włączysz wyświetlacz, wyślij wczesniej na P1 odpowiednie dane do wyświetlania.
  • #3 3412455
    De[vvv]il Blast
    Poziom 11  
    Posty: 57
    Ocena: 1
    algebro napisał:
    Prowadzącemu być może chodziło o sterownaie wyświetlaczy w przerwaniach, Ty zrobiłeś to na pętlach opóżniających. Akurat te dwa klawisze możesz sprawdzać właśnie w tych przerwaniach obsługujących wyświetlacz albo całkiem śmiało po za przerwaniami. Bez sensu jest używać aż dwóch przerwań. Jeśli już, to podepnij klawisze pod jedno wejscie INT.

    Ogólnie program w cale nie miał zawierać regulacji opóźnienia ani nie miał używać żadnego przerwania. Obsługę INT0 i INT1 dopisałem tylko dla wygody ustawienia odpowiedniego opóźnienia. Zresztą on w cale nie patrzył na kod, tylko na wynik działania;)

    algebro napisał:
    Być może zawartość rejestru R6 (FFH) jest zbyt wielka, aby skrócić w znaczący sposób czas pętli (czas zaświecenia segmentu).
    To już wypróbowałem zmniejszając R6 na laborkach(ustawiałem R6 na 128), ale to nie ma to tak dużego wpływu na opóźnienie, jak R7.

    algebro napisał:
    Tutaj chyba miało być DJNZ R5, DEL2
    Tak jest.

    algebro napisał:
    I jeszcze jedno: zanim włączysz wyświetlacz, wyślij wczesniej na P1 odpowiednie dane do wyświetlania.
    To mnie zainteresowało. Tego jeszcze nie sprawdzałem. W poniedziałek mam kolejne podejście na zaliczenie tej części więc zobaczę. Dzięki.
  • #4 3412738
    algebro
    Poziom 15  
    Posty: 118
    Pomógł: 8
    Ocena: 2
    Jeśli chodzi o ostatni punkt, to po prostu nie wysyłaj cyfry z poprzedniego wyświetlacza do następnego. Co prawda, akurat w Twoim programie mignięcie za nim trafią nowe dane, nie musi być widoczne, ale kto wie?
    Zauważyłem jeszcze jeden błąd. Nie wiem jak długo trwa pętla opóżniająca "eliminująca drgania zestyków" ale jesli krócej niż naciskasz klawisz, to zawalasz stos mikrokontrolera, poniewaz trafia nowe przerwanie od INT, zanim poprzednie się kończy!!! Zakładam, że program uruchamiany jest na jakimś układzie szkolnym, z wgranym biosem, więc w ogóle dziwię się, ze to działa. Zresztą sama idea eliminacji grgania zestyków polega na czym innym: najpierw trzeba sprawdzic, czy klawisz rzeczywiście jest naciśnięty, a później czy na dobre zwolniony.

    Nie lepiej byłoby jednak doświadczalnie dobrać/obliczyć wartości początkowych rejestrów i je załadować w programie?
  • #5 3426355
    De[vvv]il Blast
    Poziom 11  
    Posty: 57
    Ocena: 1
    algebro napisał:
    Jeśli chodzi o ostatni punkt, to po prostu nie wysyłaj cyfry z poprzedniego wyświetlacza do następnego. Co prawda, akurat w Twoim programie mignięcie za nim trafią nowe dane, nie musi być widoczne, ale kto wie?
    Niestety to nic nie dało.

    algebro napisał:
    Zauważyłem jeszcze jeden błąd. Nie wiem jak długo trwa pętla opóżniająca "eliminująca drgania zestyków" ale jesli krócej niż naciskasz klawisz, to zawalasz stos mikrokontrolera, poniewaz trafia nowe przerwanie od INT, zanim poprzednie się kończy!!!
    Pętla trwa 256*256*2us(cykl trwa 1 us przy rezonatorze 12 MHz, a DJNZ wykonywane jest przez 2 cykle). W sumie to daje około 131 ms. Poza tym, nie naciskam tak żeby celowo zwalić coś w programie;) Te przyciski były po prostu dla mojej wygody.

    algebro napisał:
    Nie lepiej byłoby jednak doświadczalnie dobrać/obliczyć wartości początkowych rejestrów i je załadować w programie?
    Wiadomo, że jak będzie za duże opóźnienie, to będzie widać zapalające/gasnące się po kolei wyświetlacze, a jeżeli opóźnienie będzie za małe, to diody nie będą nadążały się zapalać przed zmianą wyświetlacza. Założyłem, że zmiana wyświetlaczy z częstotliwością 50 Hz będzie ok. To daje przejście wszytkich wyświetlaczy przez 20 ms. Jako, że mamy 4 więc pętla opóźniająca powinna trwać 5 ms, co daje wartości do pętli opóźniającej 256*10. W sumie obliczenia nie były dalekie od praktyki: najlepiej wyświetlacz palił się przy 6-7. Niestety to również nie odpowiadało do końca prowadzącemu. Zmodyfikowany program wyglądał tak:
    
       $MOD517;odpowiednie rozkazy
       ORG   1000H;tutaj umieszczam program
       SJMP   START
    
    START:;zaczynamy
    
    	MOV	P1, #01111111B	;wrzucam do niego wartość:	
       	CLR	P4.0		;wybieram pierwszy wyświetlacz
       	ACALL	DELAY		;opóźnienie:
       	SETB	P4.0		;wyłączam wyświetlacz:
    
    	MOV	P1, #00111111B
    	CLR   	P4.1
    	ACALL   DELAY
    	SETB   	P4.1
    
    	MOV   	P1, #01101101B
    	CLR   	P4.2
    	ACALL   DELAY
    	SETB   	P4.2
    
    	MOV   	P1, #00000110B
            CLR   	P4.3	
    	ACALL  	DELAY
    	SETB   	P4.3
    
       SJMP	START
    ;;;;;;;;;;;;;;;OPÓŹNIENIE;;;;;;;;;;;;;;
    DELAY:
    ;wrzucamy ustawioną wartość do R7
       MOV   R7, #7   
    DEL:
       DJNZ   R6, $
       DJNZ   R7, DEL
       RET
    END
    


    Jakieś inne pomysły na rozwiązanie?;)
  • REKLAMA
  • #6 3426798
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    kolego proponuję w ogóle zmienić podejście i sterować wyświetlaczmi nie w programie głównym a tylko w jednym przerwaniu. Natomiast opóźnienia wykorzystuj sobie tylko do eliminacji drgań styków klawiszy. Wyjdzie to wtedy łatwo prosto i przyjemnie a nie tak jak to teraz masz postawione troszkę na głowie. Już zdaje się ktoś ci to radził a ty brniesz w zaparte ;) ... sterując w przerwaniu będziesz mógł sterować sobie nawet jasnością do jakiegoś stopnia dobierając odpowiednią częstotliwość "przemiatania" wyświetlacza.

    pozdrawiam
  • #7 3427653
    GreG$
    Poziom 13  
    Posty: 73
    Ocena: 6
    witam,
    czy nikt nie znalazl w tej '51 nawet jednego timera ???
    reszte zdaje mi sie, ze juz kazdy sobie wymysli...
  • #9 3427780
    szod
    Poziom 33  
    Posty: 1663
    Pomógł: 215
    Ocena: 120
    :arrow: De[vvv]il Blast: No dobra, a jak strona sprzętowa? Może tam masz błąd? Wrzuć schemat
    jeśli możesz. Jak coś jest nie tak to najlepiej napisany program nie pomoże.
  • #10 3428267
    GreG$
    Poziom 13  
    Posty: 73
    Ocena: 6
    mirekk36 napisał:
    no a o czym ja mówiłem kolego Greg$ - jak nie o wykorzystaniu obsługi wyświetlacza w jednym przerwaniu timera??? bo jakoś tak wystrzeliłeś jak z choinki ;)


    kolego mirekk36,
    1) moj nick to "GreG$",
    2) o przerwaniach to wspominal juz algebro
    3) napiasles sie worek - ale nie powiedziales chlopakowi, ze jest cos takiego jak "timer", ktory sluzy takich zastosowan.

    wtedy De[vvv]il Blast bierze datasheet'a i szuka co to jest timer...
    i watek sie konczy.

    1+2+3 = przeczytaj swojego posta i zobacz czy choinka stoi ;-)
  • #11 3428426
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    ... no dobra kolego GreG$ może i macie rację, rzeczywiście w swoim poście napisałem o przerwaniach ale jakoś nie dopisałem, że od timera ;) ... poza tym, wiem, że kolega algebro już o tym wspominał i wątpię aby kolega autor, któy pisze program w asemblerze nie wiedział do końca, że istnieje timer (jak już to może nie wie jak go wykorzystać) .... w związku z tym raczej oczekiwałbym tu od niego pytania o podpowiedź jak to zrobić a nie brnięcie cały czas w ślepy zaułek ;) A skoro ma takie problemy to fakt przydałoby mu się coś konkretnego podpowiedzieć (nie mówić, że niech sobie sam wymyśli) .... ale on musi tego chcieć przecież - nieprawda? ;)

    ... niech więc będzie, że choinka razem nam stoi ;) i czekamy razem jeszcze z kolegą szod na dalsze od niego pytania albo info o szczęśliwym już rozwiązaniu swojego problemu

    pozdrawiam i co złego to nie ja
  • REKLAMA
  • #12 3430008
    tomkozak
    Poziom 11  
    Posty: 16
    Witam
    Do czego są podłączone te wyświetlacze?
    I nie chodzi mi o port i dekodery 4na7, tylko to co jest między portem a wyświetlaczami
    Próbowałeś tylko raz wpisać do wyświetlaczy te dane.
    Spróbuj wpisac zamist SJMP START -> SJMP $
  • #13 3430398
    algebro
    Poziom 15  
    Posty: 118
    Pomógł: 8
    Ocena: 2
    Hmmm... De[vvv]il Blast napisał, że nauczycielowi nie podoba się nie program (podobno go to nie interesuje ;-)) ale słabo świecące wyświetlacze... Więc rzeczywiście macie rację podejrzewając, iż coś nie tak jest konstrukcją elektroniczną.
    Z drugiej strony autor twierdzi, że najlepiej wyświetlacz się palił :lol: przy R7=6 do 7. A czy jednak próbowałeś zmienić zawartość rejestru na mniejszą wartość??? I ewentualnie drugiego R6???
    Aczkolwiek wcale nie twierdze, że nie powinieneś jednak obsługiwac wyświetlacza w przerwaniach, ale z ciekawości chciałbym jednak wiedzieć dlaczego tak licho świecą. A moze w tle działa jakiś inny program???
    tomkozak. Cyfry są wygaszane i zapalane sekwencyjnie.
  • #14 3430447
    De[vvv]il Blast
    Poziom 11  
    Posty: 57
    Ocena: 1
    mirekk36 napisał:
    kolego proponuję w ogóle zmienić podejście i sterować wyświetlaczmi nie w programie głównym a tylko w jednym przerwaniu.
    Niestety prowadzący powiedział, że to wszystko ma być w programie głównym. Dodał też, że sam napisał taki program, który zapala diody wyświetlacza tak mocno, jak reszta diod świecących się na płytce. Zresztą, co to zmieni? Według mnie nie chodzi już o dokładność odmierzania czasu, bo zmieniałem wartości w opóźnieniu w bardzo dużym zakresie z dużą dokładnością.

    mirekk36 napisał:
    sterując w przerwaniu będziesz mógł sterować sobie nawet jasnością do jakiegoś stopnia dobierając odpowiednią częstotliwość "przemiatania" wyświetlacza.
    No właśnie o to chodzi, że ja sobie już sterowałem tą jasnością i nic z tego nie wyszło. Jeżeli się mylę, to mnie popraw, ale jaka różnica będzie praktycznie (nie licząc tego, że kod będzie trochę bardziej uporządkowany) jeżeli wygeneruje opóźnienie timerem jeżeli i tak dobierałem najlepszą wartość nie tylko na podstawie obliczeń teoretycznych, ale i doświadczalnie?

    szod napisał:
    :arrow: De[vvv]il Blast: No dobra, a jak strona sprzętowa? Może tam masz błąd? Wrzuć schemat
    jeśli możesz. Jak coś jest nie tak to najlepiej napisany program nie pomoże.
    Zdaje się, że zestawy były projektowane przez firmę specjalizującą się w tego rodzaju rzeczach. Zresztą, jak napisałem prędzej - na tych układach program został już napisany przez prowadzącego poprawnie (tyle, że nie chce pokazać nam kodu). Niestety nie mam zestawu w domu, a schematu nie posiadam.

    tomkozak napisał:
    Witam
    Do czego są podłączone te wyświetlacze?
    I nie chodzi mi o port i dekodery 4na7, tylko to co jest między portem a wyświetlaczami
    Próbowałeś tylko raz wpisać do wyświetlaczy te dane.
    Spróbuj wpisac zamist SJMP START -> SJMP $
    O schemat postaram się dopytać na następnych zajęciach. Zdaje mi się, że po zmianie SJMP START -> SJMP $ po chwili na wyświetlaczach nic nie będzie się paliło dlatego, że nie będą miały sygnału z P4.
    Działa to w ten sposób: na P1 wyrzucam wartość, która jest podpięta do wyświetlaczy(do tych samych wyjść P1 może być podpięte 8 diod). Jeszcze są 4 wyjścia z P4, które dodatkowo wybierają wyświetlacz (multipleksacja). Z tego powodu nie można tylko raz wrzucić wartości, bo pojawia się ona na chwilę i dlatego też wszystko musi się odbywać w pętli.

    Rozumiem, że mirkkowi36 chodziło o coś w stylu:
    ;;;;;;;;;;;POCZĄTEK PROGRAMU;;;;;;;;;;;
    	$MOD51
    	ORG	1000H
    	SJMP	START
    	ORG	100BH
    	SJMP	TIMER0
    
    	;USTAWIENIA TIMERA 0
    	T0_G	EQU	0
    	T0_C	EQU	0
    	T0_M	EQU	1
    	TIM0	EQU	T0_M+T0_C*4+T0_G*8	
    	TMOD_SET	EQU	TIM0	
    	TH0_SET	EQU	256-196
    	TL0_SET	EQU	0
    START:	
    	MOV	TMOD, #TMOD_SET
    	MOV	TH0, #TH0_SET
    	MOV	TL0, #TL0_SET
    	MOV	TIME, #20
    	SETB	EA
    	SETB	ET0
    	SETB	TR0
    
    	SJMP	$
    
    ;;;;;;;;;;OBSŁUGA IRQ TIMER0;;;;;;;;;;;
    TIMER0:
    	MOV	TH0, #TH0_SET
    
    	CJNE	R0, #1, NO1	;WYSWIETLENIE 2 LICZBY
    	MOV	R0, #2
          	SETB   	P4.0
    	MOV   	P1, #00111111B 
    	CLR	P4.1
    	SJMP	ENDTI
    NO1:
    	CJNE	R0, #2, NO2	;WYSWIETLENIE 3 LICZBY
    	MOV	R0, #3
    	SETB	P4.1
    	MOV   	P1, #01101101B
    	CLR	P4.2
    	SJMP	ENDTI
    NO2:
    	CJNE	R0, #3, NO3	;WYSWIETLENIE 4 LICZBY
    	MOV	R0, #4
    	SETB	P4.2
    	MOV   	P1, #00000110B
    	CLR	P4.3
    	SJMP	ENDTI
    NO3:
    	MOV	R0, #1		;WYSWIETLENIE 1 LICZBY
    	SETB	P4.3
    	MOV   	P1, #01111111B
    	CLR	P4.0  
    	SJMP	ENDTI
    ENDTI:
    	RETI
    END

    Przerwanie z timera będzie generowane co 50ms (zegar równe 12 MHz). Regulowac opóźnienie można oczywiście podstawiając do TH0_SET inne wartości. Nie widzę jednak między tym programem a poprzednim różnicy w działaniu. Wyświetlacze powinny działać tak samo bez względu na sposób generowania opóźnienia. Jeżeli się mylę, to mnie poprawcie;)
  • #15 3430986
    algebro
    Poziom 15  
    Posty: 118
    Pomógł: 8
    Ocena: 2
    Trochę zmieniłem końcówkę programu:
    TIMER0: 
       MOV   TH0, #TH0_SET 
       CJNE   R0, #1, NO1   ;WYSWIETLENIE 1 LICZBY 
       INC R0 
       SETB      P4.0 
       MOV      P1, #00111111B 
       CLR   P4.1 
       RETI 
    NO1: 
       CJNE   R0, #2, NO2   ;WYSWIETLENIE 2 LICZBY 
       INC R0 
       SETB   P4.1 
       MOV      P1, #01101101B 
       CLR   P4.2 
       RETI 
    NO2: 
       CJNE   R0, #3, NO3   ;WYSWIETLENIE 3 LICZBY 
       INC R0 
       SETB   P4.2 
       MOV      P1, #00000110B 
       CLR   P4.3 
       RETI 
    NO3: 
       MOV   R0, #1      ;WYSWIETLENIE 4 LICZBY 
       SETB   P4.3 
       MOV      P1, #01111111B 
       CLR   P4.0  
       RETI
    Pytanie: co się stanie z wyświetlaczem na płytce edukacyjnej, jeśli zaświecisz "jedną ósemkę" na stałe??? Raczej zapytuję, niż masz spróbowac, chociaż zestaw szkolny powinien "to wytrzymać". Czy nadal segmenty będą świecić słabo???
  • #16 3431444
    De[vvv]il Blast
    Poziom 11  
    Posty: 57
    Ocena: 1
    Z tego, co zauwazyłem, to nie ma różnicy. Wszystkie się świecą tak samo, niezależnie od zapalonej cyfry. Jest jednak 8 diod, o których pisałem prędzej i które również można podłączyć do P1, które się świecą jak P1 jest odłączony i widać niewielką różnicę w porównaniu do najlepszej dobranej wartości. Jeżeli świecę bez przerwy jednym wyświetlaczem, to oczywiście pali się normalnie, tak jak diody obok. Rozumiem, że zmieniłeś kolejność wyświetlania tak, aby po kolei "dodawać" tylko jedynki do P1. Też miałem zamiar coś takiego sklepac na następne zajęcia. Zrobiłem ten program już na operacjach logicznych, ale też dużej róznicy to nie dawało.
  • Pomocny post
    #17 3431877
    algebro
    Poziom 15  
    Posty: 118
    Pomógł: 8
    Ocena: 2
    :oops: Poprawiłem mój fatalny błąd (brak zwiększania zawartości r0)! Zmiana polega na tym, ze tylko raz ładujesz wartość do R0, i uniknąłem rozkazu SJMP ENDTI - chodzi o czytelniejszy zapis programu.

    Trochę piszesz niezrozumiale. Nadal niewiem, czy pisząc o diodach masz na myśli sąsiedni wyświetlacz? I co znaczy, że można (diody?) podłączyć do P1, które świecą jak jest odłączony? I co znaczy, że jak zapalsz swój wyświetlacz na stałe (bez multipleksacji ma się rozumieć?) to sąsiednie (diody?) świecą tak samo. Dlaczego świecą???
  • #18 3431966
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    hmmm tak to jest jak się pisze program nie dla przyjemności tylko na potrzeby tzw "smutnego zaliczenia" .... :(

    ..... poza tym, bez tego schematu to koledze autorowi przy jego enigmatycznych tłumaczeniach, na nic zdadzą się podpowiedzi i przykładowe programiki kolegów , którzy poświęcają na ich napisanie swój cenny czas

    tak mi się wydaje (ale może się mylę ;) )

    pozdrawiam
  • REKLAMA
  • #20 3435105
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Czytam taki tekst ...
    De[vvv]il Blast napisał:
    Niestety prowadzący powiedział, że to wszystko ma być w programie głównym. Dodał też, że sam napisał taki program, który zapala diody wyświetlacza tak mocno, jak reszta diod świecących się na płytce.

    ... następnie to ...
    De[vvv]il Blast napisał:
    Jeżeli świecę bez przerwy jednym wyświetlaczem, to oczywiście pali się normalnie, tak jak diody obok.

    ... i nie mogę uwierzyć własnym oczom , bo jeden z was oszukuje , żeby nie powiedzieć kłamie :|
    Jeśli LED-y 7-seg sterowane/zasilane statycznie , świecą z jasnością porównywalną z diodą LED(zasilaną ciągle) , to jakim cudem te same wyświetlacze zasilane dynamicznie/multipleksowane , mogą świecić z tą samą jasnością , skoro każdy z 4 wyświetlaczy , otrzymuje tylko 1/4 energi :?:
    Ot , zagwozdka ;)

    Piotrek
  • #21 3437340
    De[vvv]il Blast
    Poziom 11  
    Posty: 57
    Ocena: 1
    algebro napisał:
    Trochę piszesz niezrozumiale. Nadal niewiem, czy pisząc o diodach masz na myśli sąsiedni wyświetlacz?
    To jest układ do nauki, jest trochę diod, przycisków, które można podłączyć. Obok wyświetlaczy znajduje się zestaw ośmiu diod, z których też można korzystać. W zasadzie porty standardowo nie są podłączone do niczego. Na początku lab trzeba podpiąć te, z których się ma zamiar skorzystać.

    algebro napisał:
    I co znaczy, że można (diody?) podłączyć do P1, które świecą jak jest odłączony?
    Na płytce są wyprowadzenia pinów, mamy kabelki i możemy sobie podłączyć do wyprowadzeń pinów P1 np. diody, albo wyświetlacz siedmiosegmentowy. Jeżeli diody odłączone są od P1, to cały czas świecą.

    algebro napisał:
    I co znaczy, że jak zapalsz swój wyświetlacz na stałe (bez multipleksacji ma się rozumieć?) to sąsiednie (diody?) świecą tak samo. Dlaczego świecą???
    Zapalenie wyświetlacza na stałe = bez multipleksacji - wysyłam wartość na P1, a następnie zeruję np. P4.0, do którego podłączony jest pierwszy wyświetlacz. Zdaje się, że pytałeś się czy wyświetlacz świeci się normalnie dla stałej wartości ósemki i odpowiadam, że tak. Problem jest, gdy mam użyć czterech wyświetlaczy na raz. Jak pisałem prędzej, na następnych laboratoriach postaram się załatwić schemat.

    mirekk36 napisał:
    hmmm tak to jest jak się pisze program nie dla przyjemności tylko na potrzeby tzw "smutnego zaliczenia" .... :(
    Niestety na studiach są przedmioty dla danej osoby ciekawsze i mniej ciekawe. Ja zdecydowanie jestem za programowaniem, ale nie mikrokontrolerów;)

    zumek napisał:
    Jeśli LED-y 7-seg sterowane/zasilane statycznie , świecą z jasnością porównywalną z diodą LED(zasilaną ciągle) , to jakim cudem te same wyświetlacze zasilane dynamicznie/multipleksowane , mogą świecić z tą samą jasnością , skoro każdy z 4 wyświetlaczy , otrzymuje tylko 1/4 energi :?:
    Ot , zagwozdka ;)
    No właśnie tego nie rozumiem. Dla mnie również jest logiczne, że nawet przy dobraniu odpowiedniego opóźnienia wyświetlacze nie powinny się palić tak samo, jak reszta diod czy też wyświetlacz trzymający tą samą wartość, ale nie jestem elektronikiem więc skoro prowadzący powiedział, że można, to zadałem pytanie tutaj.
  • #22 3437852
    szod
    Poziom 33  
    Posty: 1663
    Pomógł: 215
    Ocena: 120
    Jeśli wyświetlacze były by przystosowane do sterowania w multipleksie to
    manewr ustawienia liczby na P1 i wyzerowania P4.0 skończył by się
    dla wyświetlacza raczej niewesoło. Żeby wyświetlanie danych w multipleksie
    działało jak należy rezystory ograniczające prąd muszą mieć mniejsze wartości.
    Daje to większy prąd sterowania ale średnia wychodzi dla diod bezpieczna.
    Sęk w tym że w takim wypadku nie wolno włączać wyświetlacza na stałe.
    Prąd będzie za duży.
    Jeśli wyświetlacz nie pada przy stałym włączeniu i ma jasność zbliżoną do
    pozostałych diod to w multipleksie będzie świecił ciemniej. Nie ma na to rady.
    Widziałeś efekty programu osoby która twierdzi że taki napisała i działało
    poprawnie czy tylko słyszałeś jak mówiła?
    Podejrzewam że u ciebie może chodzić o co innego. Nie masz na płytce
    jakiś zatrzasków? Może trzeba wpisać liczbę do zatrzasku, zatrzasnąć,
    wpisać do drugiego, zatrzasnąć itd.
    W każdym razie bez schematu ciężko coś powiedzieć.
  • #23 3457809
    De[vvv]il Blast
    Poziom 11  
    Posty: 57
    Ocena: 1
    Niestety schematu uczelnia nie posiada :| No cóż...zaliczyłem program jak wszyscy, ale prowadzący powiedział, że jeżeli komuś trafi się to na zaliczeniu, to z takim świeceniem nie zaliczy. Już nawet napisałem program, który używał timera i regulował prędkość multipleksacji co 1 ms i nic z tego nie wyszło.
    Co do tego zatrzasku, to te 4 wyświetlacze mają 8 wejść z danymi i 4 wejścia do wyboru wyświetlacza. Raczej nie ma żadnych zatrzasków.
    Nie widziałem działania programu, ale to prowadzący twierdzi, że taki napisał.

    W każdym razie dzięki za pomoc, jeżeli trafi mi się to na końcowe zaliczenie, to wtedy będę próbował dalej:/
  • #24 3459221
    algebro
    Poziom 15  
    Posty: 118
    Pomógł: 8
    Ocena: 2
    De[vvv]il Blast napisał:
    To jest układ do nauki, jest trochę diod, przycisków, które można podłączyć. Obok wyświetlaczy znajduje się zestaw ośmiu diod, z których też można korzystać. W zasadzie porty standardowo nie są podłączone do niczego. Na początku lab trzeba podpiąć te, z których się ma zamiar skorzystać.

    Tak się jeszcze tylko zastanawiam, czy ten zestaw edukacyjny ma może jeszcze inne porty do wykorzystania...?

Podsumowanie tematu

✨ Dyskusja dotyczy problemu zwiększenia jasności czterech multipleksowanych wyświetlaczy siedmiosegmentowych sterowanych mikrokontrolerem 8051 w asemblerze. Autor napotkał trudności, ponieważ wyświetlacze świecą słabiej niż pozostałe diody na płytce, co jest typowe przy multipleksacji, gdyż każdy wyświetlacz jest zasilany tylko przez ułamek czasu. Próby regulacji jasności poprzez zmianę opóźnień w pętlach oraz dodanie sterowania przyciskami nie przyniosły oczekiwanego efektu. Wskazano, że lepszym rozwiązaniem jest sterowanie wyświetlaczami w przerwaniu timera zamiast w głównej pętli programu, co umożliwia precyzyjniejsze kontrolowanie czasu świecenia segmentów i potencjalnie jasności. Zwrócono uwagę na konieczność prawidłowego doboru wartości rezystorów ograniczających prąd, które w multipleksacji powinny mieć mniejsze wartości, aby zwiększyć chwilowy prąd i jasność, przy zachowaniu bezpiecznej średniej mocy. Podkreślono, że bez schematu układu trudno jednoznacznie zdiagnozować problem, a sam program może być poprawny, lecz ograniczenia sprzętowe multipleksacji powodują naturalne obniżenie jasności. Dyskutowano także o eliminacji drgań styków przycisków oraz o tym, że wyświetlacze nie posiadają zatrzasków, a ich sterowanie odbywa się przez 8 linii danych i 4 linie wyboru wyświetlacza. Autor potwierdził, że wyświetlacz świeci normalnie przy stałym zasilaniu pojedynczego segmentu, ale problem pojawia się przy multipleksacji czterech wyświetlaczy. Prowadzący zajęcia posiada własny program, który według niego rozwiązuje problem, jednak nie udostępnił go studentom.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA