Osługa wyświetlacza 7 segmentowego
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
Osługa wyświetlacza 7 segmentowego
Witam
Do tej pory nie miałem zasilacza regulowanego, z którego mógłbym sobie zasilać układy, którymi się bawię w wolnym czasie.
Jako, że teraz mamy znacznie więcej czasu wolnego, który spędzamy w domu, więc mam wspaniałą okazję poświęcić się zabawie i zrobić sobie coś przydatnego Wybór padł na zasilacz regulowany.
Do wyświetlania napięcia w moim zasilaczu chcę wykorzystać wyświetlacze 7 segmentowe LED ze wspólną anodą.
Wybór padł na wyświetlacze led, ponieważ uznałem, że będzie lepiej wyglądać wartość napięcia wyświetlana na takim wyświetlaczu, niż na zwykłym lcd. A przy okazji nauczę się czegoś nowego.
I tu napotkałem na pierwszy problem, ponieważ obsługę wyświetlaczy lcd mam w miarę opanowaną i nie byłoby problemu z wyświetleniem danych na takim wyświetlaczu. Natomiast nigdy nie miałem do czynienia z obsługą wyświetlaczy 7 segmentowych pod względem programowym.
Przeczytałem oczywiście artykuł Bartka o obsłudze wyświetlaczy 7 segmentowych w Bascomie.
I teraz zastanawiam się jak zrobić to od strony hardware?
- nie mam całego portu wolnego w ATmedze, więc część segmentów byłaby podłączona do jednego portu, a pozostałe segmenty do drugiego portu. To chyba skomplikowałoby kod, prawda?
- Barek wspomniał też na końcu artykułu o użyciu rejestru przesuwnego 74HC595 do obsługi tych wyświetlaczy. Z tego co widziałem tam, to taki scalak znacznie skróciłby kod i przy okazji wyeliminowałbym potrzebę użycia całego portu kontrolera, prawda?
Jak radzicie to zrobić? Jak będzie lepiej i prościej w kodzie?
Do tej pory nie miałem zasilacza regulowanego, z którego mógłbym sobie zasilać układy, którymi się bawię w wolnym czasie.
Jako, że teraz mamy znacznie więcej czasu wolnego, który spędzamy w domu, więc mam wspaniałą okazję poświęcić się zabawie i zrobić sobie coś przydatnego Wybór padł na zasilacz regulowany.
Do wyświetlania napięcia w moim zasilaczu chcę wykorzystać wyświetlacze 7 segmentowe LED ze wspólną anodą.
Wybór padł na wyświetlacze led, ponieważ uznałem, że będzie lepiej wyglądać wartość napięcia wyświetlana na takim wyświetlaczu, niż na zwykłym lcd. A przy okazji nauczę się czegoś nowego.
I tu napotkałem na pierwszy problem, ponieważ obsługę wyświetlaczy lcd mam w miarę opanowaną i nie byłoby problemu z wyświetleniem danych na takim wyświetlaczu. Natomiast nigdy nie miałem do czynienia z obsługą wyświetlaczy 7 segmentowych pod względem programowym.
Przeczytałem oczywiście artykuł Bartka o obsłudze wyświetlaczy 7 segmentowych w Bascomie.
I teraz zastanawiam się jak zrobić to od strony hardware?
- nie mam całego portu wolnego w ATmedze, więc część segmentów byłaby podłączona do jednego portu, a pozostałe segmenty do drugiego portu. To chyba skomplikowałoby kod, prawda?
- Barek wspomniał też na końcu artykułu o użyciu rejestru przesuwnego 74HC595 do obsługi tych wyświetlaczy. Z tego co widziałem tam, to taki scalak znacznie skróciłby kod i przy okazji wyeliminowałbym potrzebę użycia całego portu kontrolera, prawda?
Jak radzicie to zrobić? Jak będzie lepiej i prościej w kodzie?
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Osługa wyświetlacza 7 segmentowego
Ile wyświetlaczy tam przewidujesz? Multipleksowanie mocno obciąża procesor i jak bym miał wybór to bym złapał gotowy moduł lub budował płytkę z Max7219. Moduły są po 15zł na Alledrogo LINK tylko one są dość niskie (mam taki w domu i byłem zaskoczony jak przybył Mogę zrobić fotę z czymś do porównania)
W Max7219 chodzi o to że sam multipleksuje a procesorem wysyłasz mu tylko dane (chyba trzema kablami) co ma wyświetlić - tak jak do LCD. Kod do tego się znajdzie.
Gdybyś potrzebował wyższe wyświetlacze to lepiej kupić gołego Maxa i osobno wyświetlacze no chyba że trafisz wyższy - a może ten mały akurat przypasi
Przy multipleksowaniu to obsługę czujników temperatury DS18B20 już trzeba potrafić zrobić....a mogą się przydać.
W Max7219 chodzi o to że sam multipleksuje a procesorem wysyłasz mu tylko dane (chyba trzema kablami) co ma wyświetlić - tak jak do LCD. Kod do tego się znajdzie.
Gdybyś potrzebował wyższe wyświetlacze to lepiej kupić gołego Maxa i osobno wyświetlacze no chyba że trafisz wyższy - a może ten mały akurat przypasi
Przy multipleksowaniu to obsługę czujników temperatury DS18B20 już trzeba potrafić zrobić....a mogą się przydać.
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
Re: Osługa wyświetlacza 7 segmentowego
Wyświetlacze mam smd niskie - OSK3028A-IG koloru zielonego.
Jeden wyświetlacz, to 3 cyfry ze wspólną anodą.
Gotowego modułu nie chce, sam zrobię to na płytce dwustronnej. Więc z montażem MAX7219 nie będzie problemu. Nawet nie wiedziałem, że takie faje scalaki są
Ale widzę, że on ma wspólna katodę, więc musiałbym przy okazji kupić takie wyświetlacze ale ze wspólną katodą, prawda?
To robimy obsługę wyświetlaczy na MAX7219 I jeszcze jak płytkę uprości Same plusy tego rozwiązania, które mi podsunąłeś
Widzę, że do sterowania będą potrzebne piny MOSI, SCK i I/0.
Jeden wyświetlacz, to 3 cyfry ze wspólną anodą.
Gotowego modułu nie chce, sam zrobię to na płytce dwustronnej. Więc z montażem MAX7219 nie będzie problemu. Nawet nie wiedziałem, że takie faje scalaki są
Ale widzę, że on ma wspólna katodę, więc musiałbym przy okazji kupić takie wyświetlacze ale ze wspólną katodą, prawda?
To robimy obsługę wyświetlaczy na MAX7219 I jeszcze jak płytkę uprości Same plusy tego rozwiązania, które mi podsunąłeś
Widzę, że do sterowania będą potrzebne piny MOSI, SCK i I/0.
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Osługa wyświetlacza 7 segmentowego
No można go sterować Hardware SPI na dedykowanych pinach, Software SPI na jakichkolwiek albo najprostszym Shiftout też na każdych pinach...no i wspólna katoda.
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
Re: Osługa wyświetlacza 7 segmentowego
Czyli obojętne jakie 3 piny podepnę i będzie ok?
- Jacek
- Posty: 384
- Rejestracja: 25 kwie 2016, 19:14
Re: Osługa wyświetlacza 7 segmentowego
Witam - Michał a czy będzie to zasilacz regulowany analogowo czy przewidujesz sterowanie cyfrowe?
pozdrawiam Jacek.
pozdrawiam Jacek.
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
Re: Osługa wyświetlacza 7 segmentowego
Witaj
Regulację napięcia zrobię analogowo precyzyjnym potencjometrem.
Bartek - zamówiłem MAX7219
A jeszcze mam takie pytanie do Bartka, może orientujesz się -
Jest jeden mikrokontroler ATmega, mamy dwa osobne wyświetlacze - pierwszy wyświetlacz to górny wiersz, a drugi wyświetlacz to dolny wiesz. (coś takiego jak wyświetlacz lcd 2x16)
Każdy z tych wyświetlaczy podłączony jest do osobnego MAX7219. Da się w tym samym czasie wyświetlać z jednego mokrokontrolera np. napięcie na górnym wyświetlaczu, a prąd na dolnym wyświetlaczu w tym samym czasie?
A czy może jednak trzeba dać dwa mikrokonrolery, które będą realizować swoje zadania i każdy z nich będzie miał swoja kostkę MAX7219 i swój wyświetlacz?
Po poszukiwaniach w internecie, widzę że się chyba da tak zrobić. Tylko teraz tak - użyć sprzętowego SPI, a czy programowego? Oczywiście do sterowania na raz dwoma MAX7219 i dwoma wyświetlaczami niezależnie.
Regulację napięcia zrobię analogowo precyzyjnym potencjometrem.
Bartek - zamówiłem MAX7219
A jeszcze mam takie pytanie do Bartka, może orientujesz się -
Jest jeden mikrokontroler ATmega, mamy dwa osobne wyświetlacze - pierwszy wyświetlacz to górny wiersz, a drugi wyświetlacz to dolny wiesz. (coś takiego jak wyświetlacz lcd 2x16)
Każdy z tych wyświetlaczy podłączony jest do osobnego MAX7219. Da się w tym samym czasie wyświetlać z jednego mokrokontrolera np. napięcie na górnym wyświetlaczu, a prąd na dolnym wyświetlaczu w tym samym czasie?
A czy może jednak trzeba dać dwa mikrokonrolery, które będą realizować swoje zadania i każdy z nich będzie miał swoja kostkę MAX7219 i swój wyświetlacz?
Po poszukiwaniach w internecie, widzę że się chyba da tak zrobić. Tylko teraz tak - użyć sprzętowego SPI, a czy programowego? Oczywiście do sterowania na raz dwoma MAX7219 i dwoma wyświetlaczami niezależnie.
Ostatnio zmieniony 12 maja 2020, 18:41 przez Michał6201, łącznie zmieniany 2 razy.
- Jacek
- Posty: 384
- Rejestracja: 25 kwie 2016, 19:14
Re: Osługa wyświetlacza 7 segmentowego
Ok - dzięki za info.
pozdr. Jacek.
pozdr. Jacek.
- Pikczu
- Posty: 392
- Rejestracja: 17 sie 2015, 13:46
- Lokalizacja: Dublin, Ireland
- Kontakt:
Re: Osługa wyświetlacza 7 segmentowego
Zobacz na to chyba nie ma sensu robić zasilacza
- Michał6201
- Posty: 127
- Rejestracja: 03 paź 2015, 20:07
Re: Osługa wyświetlacza 7 segmentowego
Widziałem to.
Tylko że to jest impulsowy zasilacz.
Ja jednak do mojego hobby wolałbym zasilacz na transformatorze.
Poza tym, jaka jest satysfakcja z kupienia gotowca?
Chciałem sobie zrobić sam od podstaw i mieć radochę z tego, ze sam cos zrobiłem i działa. A przy okazji nauczyłem się czegoś nowego.
Ja to robię dla zabawy i przyjemności
Mam już moduł wyświetlacza LED na MAX7219.
Obsługę samego MAX7219 wziąłem z elektrody.
Skleciłem taki oto program do pomiaru napięcia i wyświetlenia wartości na wyświetlaczu led. Sam pomiar działa, bo wyświetla wartosć poprawna na wyświetlaczu lcd 2x16.
Natomiast nie potrafię wyświetlić tej wartości na tych wyświetlaczach led.
Oto ten kod:
Myślę, że problem leży w samym sposobie wyświetlenia tej wartości mierzonej. Niestety nie wiem jak to napisać. Myślałem, że to będzie równie proste i przejrzyste jak w przypadku LCD, ale się myliłem.
Tylko że to jest impulsowy zasilacz.
Ja jednak do mojego hobby wolałbym zasilacz na transformatorze.
Poza tym, jaka jest satysfakcja z kupienia gotowca?
Chciałem sobie zrobić sam od podstaw i mieć radochę z tego, ze sam cos zrobiłem i działa. A przy okazji nauczyłem się czegoś nowego.
Ja to robię dla zabawy i przyjemności
Mam już moduł wyświetlacza LED na MAX7219.
Obsługę samego MAX7219 wziąłem z elektrody.
Skleciłem taki oto program do pomiaru napięcia i wyświetlenia wartości na wyświetlaczu led. Sam pomiar działa, bo wyświetla wartosć poprawna na wyświetlaczu lcd 2x16.
Natomiast nie potrafię wyświetlić tej wartości na tych wyświetlaczach led.
Oto ten kod:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- ' WOLTOMIERZ LED MAX7219
- $regfile = "m8adef.dat"
- $crystal = 8000000
- $hwstack = 64
- $swstack = 64
- $framesize = 64
- Config Submode = New
- Const Opcja = 1
- '**************************************************************************************
- #if Opcja = 0
- '************ deklaracje SPI programowego dla MAX7219
- Config Spi = Soft , Din = Pinb.4 , Dout = Portb.3 , Clock = Portb.5 , Ss = None
- Spiinit
- #elseif Opcja = 1
- '************ deklaracje SPI sprzętowego dla MAX7219
- Config Spi = Hard , Interrupt = Off , Data_order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1
- Config Portb.2 = Output : Ss_pin Alias Portb.2 : Set Ss_pin 'żeby SPI nie przeszła w Slave
- Spiinit
- #endif
- '********************************** KONFIGURACJAA MAX7219****************************************************
- Config Portb.0 = Output : Load_max Alias Portb.0 : Set Load_max
- Dim Buff(4) As Byte
- Dim Displ2 As Word At Buff(1) Overlay
- Dim Displ1 As Word At Buff(3) Overlay
- Dim Test As Byte , N As Byte
- Const No_op = 0
- Sub Send_buff
- Reset Load_max
- Spiout Buff(1) , 4
- Set Load_max
- End Sub
- Buff(1) = &H0C '&H0C Power mode, 0-OFF,1-ON
- Buff(2) = &H00
- Displ1 = Displ2
- Call Send_buff
- Buff(1) = &H09 'Jeden bit na jeden wyswietlacz,wlaczaja dekodowanie cyfr
- Buff(2) = &B1111_1111 '10 - (kreska)'11 E '12 H '13 L '14 P '15 " " (pusty)
- Displ1 = Displ2
- Call Send_buff
- Buff(1) = &H02
- Buff(2) = &H02 'jasnosc 16 krokow, wartosci od &H00 do &H0F
- Displ1 = Displ2
- Call Send_buff
- Buff(1) = &H0B
- Buff(2) = 7 'ile ma obsługiwac cyfr, wartosci od 0 do 7
- Displ1 = Displ2
- Call Send_buff
- Buff(1) = &H0F
- Buff(2) = 0 'Test wyswietlacza, 0-OFF, 1-TEST ON
- Displ1 = Displ2
- Call Send_buff
- Buff(1) = &H0C
- Buff(2) = &H01 '&H0C Power mode, 0-OFF,1-ON
- Displ1 = Displ2
- Call Send_buff
- ' Konfiguracja I2C
- $lib "i2c_twi.lbx"
- Config Scl = Portc.5
- Config Sda = Portc.4
- I2cinit
- Config Twi = 100000
- ' Konfiguracj zmiennych pomiaru napięcia
- Dim Default As Byte
- Dim Napiecie As Single
- Dim Pga As Integer
- Dim Addressw As Byte
- Dim Addressr As Byte
- Dim Pomiarh As Byte
- Dim Pomiarl As Byte
- Dim Voltages As String * 10
- Pga = 1 'stopien wzmocnienia
- ' Default = &B10001100 ' ustawienie parametrów pracy, Bez tego rejestru układ ma fabryczne ustawienia
- Addressw = &B10011110 '158; adres zapizu danych dla [ED7]
- Addressr = &B10011111 '159; adres odczytu danych dla [ED7]
- '=====GŁÓWNA PĘTLA=====
- Do
- Gosub Odczyt 'Skoko do procedury odczytu danych
- Cursor Off
- Gosub Wyswietl 'Skok do proceduty wyświetlenia wyniku na LED
- Waitms 250
- Waitms 250
- Loop
- End
- '=====KONIEC GŁÓWNEJ PĘTLI=====
- '-------PROCEDURA ODCZYTU DANYCH Z ADS1110-----
- Odczyt:
- I2cstart
- I2cwbyte Addressr 'Adres Do Odczytu
- I2crbyte Pomiarh , Ack 'Odczyt Pomiaru
- I2crbyte Pomiarl , Nack
- I2cstop 'Bit Stopu
- Napiecie = Pomiarh * 256 'Przekształcenie
- Napiecie = Napiecie + Pomiarl
- 'Dla ADS1100 wpisujemy napięcie referencyjne = 2.048V
- Napiecie = Napiecie * 2.048
- Napiecie = Napiecie / 32768
- Napiecie = Napiecie / Pga
- Napiecie = Napiecie * 10.6 'Współczynnik K podziału (dzielnik rezystorowy)
- Return
- '-----PROCEDURA WYŚWIETLENIA WARTOŚCI MIERZONEGO NAPIĘCIA NA LED-----
- Wyswietl:
- Voltages = Fusing(napiecie , "00.&&&&")
- Displ1 = napiecie
- Return