Obsługa MAX7219 z wyświetlaczami LED 7SEG
: 22 maja 2020, 12:59
Witam
Zamówiłem dwa moduły wyświetlaczy 7seg z układem MA7219, dziś podłączylem do ATmegi 8
Załadowałem kod do procesora z obsługą tego scalaka znaleziony na elektrodzie:
Jak w ogóle można na tym wyświetlić jakieś dane?
Jakoś trzeba konwertować jakieś zmienne?
Załóżmy że chcę wyświetlić temperaturę mierzoną DS18B20. Malo tego że nie da się żadnej innej wartości wyświetlić, to jak zmienię liczbę wyświetlaczy na 4, bo tyle mi potrzeba cyfr, a nie 8, to od końca wyświetla się 4 cyfry.
Nie chcę gotowca, tylko podpowiedź jak to robić.
Bardzo proszę Was o pomoc
Zamówiłem dwa moduły wyświetlaczy 7seg z układem MA7219, dziś podłączylem do ATmegi 8
Załadowałem kod do procesora z obsługą tego scalaka znaleziony na elektrodzie:
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m8def.dat"
- $crystal = 8000000
- $hwstack = 64
- $swstack = 64
- $framesize = 64
- Config Submode = New
- 'Wybierz opcje ;)
- '0 - Software SPI
- '1 - Hardware SPI
- 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
- '**************************************************************************************
- 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) = &H06
- Buff(2) = &H06 '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
- ' Tutaj już powinny być zainicjalizowane oba
- 'Teraz żeby dane przesłac do tylko jednego
- ' wystarczy napisac że drugi No_op i to wyzeruje dwa bajty na raz
- 'Można też odwoływac sie bezpośrednio do bajtów
- ' Buff(1), Buff(2), Buff(3), Buff(4)
- Do
- For N = 1 To 8
- Buff(3) = N
- Buff(4) = 9 - N
- Buff(1) = N
- Buff(2) = N
- Call Send_buff
- Next
- Wait 3
- For N = 1 To 8
- Buff(1) = N
- Buff(2) = 9 - N
- Buff(3) = N
- Buff(4) = N
- Call Send_buff
- Next
- Wait 3
- Loop
- End
Jakoś trzeba konwertować jakieś zmienne?
Załóżmy że chcę wyświetlić temperaturę mierzoną DS18B20. Malo tego że nie da się żadnej innej wartości wyświetlić, to jak zmienię liczbę wyświetlaczy na 4, bo tyle mi potrzeba cyfr, a nie 8, to od końca wyświetla się 4 cyfry.
Nie chcę gotowca, tylko podpowiedź jak to robić.
Bardzo proszę Was o pomoc