Multiplexowanie LED'a - problem


Witam
Proszę o napisanie kodu dla takiego wyświetlacza http://www.artronic.pl/o_produkcie.php?id=657

Program ma jedynie wyświetlić liczbę 3 i za sekundę liczba ma się zmienić na 5.38 i za sekundę znowu na 3 i tak w kółko i jak to możliwe to proszę o schemat podłączenia wyświetlacza do atmega8.

Wiem, że na stronie są tematy jak wyświetlać na takich wyświetlaczach, lecz nie udaje mi się to, a jak ktoś by napisał dla mnie taki prosty program to bym wszystko zrozumiał.

Pozdrawiam




Portret użytkownika matrix

Re: Multiplexowanie LED'a - problem

No ale jak masz zamiar wyświetlać tylko te dwie wartości to po co Ci do tego procesor? Zrób bramki or na diodach 1N4148 plus jakieś tranzystory sterujące, licznik 4017 i generator na NE555 i pozamiatane.
Kiedyś jak jeszcze nie potrafiłem programować i nie było szerokiego dostępu do AVR'ów i kompa, to na diodach 1N4148 zrobiłem wyświetlanie źródeł dźwięku w stylu TUNER, AUX, TAPE, DVD, CD i takie tam. Wszystko na diodach 1N4148, pięciu wyświetlaczach 16-sto segmentowych plus licznik 4017. Wyświetlało jak ta lala.

Portret użytkownika shoter09

chodzi mi o to, że jak ktoś

chodzi mi o to, że jak ktoś mi napisze program taki jak podałem w pierwszym poście i zrobi do tego schemat to już będę umiał wyświetlać coś na wyświetlaczach LED

Portret użytkownika mirley

Re: LED

Jak chcesz multipleksować LED to poczytaj http://mirley.firlej.org/multipleksowanie_wyswietlacza_led

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika shoter09

nie mogę tego zrobić :(Mam

nie mogę tego zrobić :(

Mam attiny2313 i wyświetlacz LED
PortB.0 - A
portB.1 - B
portb.2 - C
portb.3 - D
portb.4 - E
portb.5 - F
portb.6 - G

męczę się i nic mi nie wychodzi jak możesz to pokarz mi jak to zrobić

To moja tabela

Tabela:
Data 63 , 6 , 91 , 79 , 63 , 109 , 125 , 7 , 127 , 111
'0, 1      ,2,3,4,5,6,7,8,9[qb]

[/qb]

Portret użytkownika mirley

Re: Multipleksowanie

Nie rozumiem czego nie rozumiesz.... wszystko tam jest napisane. Robisz np tak:

'****************************
           'Konfiguracja
'****************************
$regfile = "attiny2313.dat"
$crystal = 8000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B11111111
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Przerwanie0
 
 
Enable Interrupts
'****************************
      'Zmienne
'****************************
Dim Dziel(2) As Byte
Dim Wysw As Word , Ww As Byte , W(3) As Byte
Dim Wysw_pomoc As Word
Dim Mux As Byte , I As Byte
 
Dim F1s As Bit , F4ms As Bit , F100ms As Bit
'****************************
      'Petla glowna
'****************************
Do
 
If F4ms = 1 Then
  Reset F4ms                                                'co 4ms
  Wysw = 123 'tutaj wartosc wyswietlana, 
  Gosub Wyswietl
End If
 
If F100ms = 1 Then
  Reset F100ms                                              'co 100ms
 
  'tu można wykonywac coś co 100ms, np klawiatura albo jakieś obliczenia
 
End If
 
Loop
End
'****************************
      'Przerwanie timer0
'****************************
Przerwanie0:
Timer0 = 131
   Set F4ms
   Incr Dziel(1)
   If Dziel(1) = 25 Then
     Dziel(1) = 0
     Set F100ms
     Incr Dziel(2)
     If Dziel(2) = 10 Then
       Dziel(2) = 0
       Set F1s
     End If
   End If
Return
'****************************
      'wyswietlanie 
'****************************
Wyswietl:
  Incr Mux
  If Mux = 3 Then Mux = 0
 
  For I = 1 To 3
    Wysw_pomoc = Wysw Mod 10
    Ww = Wysw_pomoc
    W(i) = Lookup(ww , Tabela)
    Wysw = Wysw / 10
  Next I
 
  Select Case Mux
    Case 0:
      Set Portd.4
      Portb = W(3)
      Reset Portd.6
 
    Case 1:
     Set Portd.6
     Portb = W(2)
     Reset Portd.5
 
    Case 2:
     Set Portd.5
     Portb = W(1)
     Reset Portd.4
 
  End Select
 
Return
 
'*******************************************************************************
                           'Tabele do wyswietlania na wyswietlaczu
'*******************************************************************************
Tabela:
Data 63 , 6 , 91 , 79 , 63 , 109 , 125 , 7 , 127 , 111

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika shoter09

Wpisałem Wysw = 1234 i

Wpisałem

Wysw = 1234

i wyświetla sam nie wiem co ;p zobacz filmik http://www.youtube.com/watch?v=obtXkDZuyeQ

Portret użytkownika mirley

Re: LED

Po pierwsze to program ma napisaną obsługę 3 liczb więc maksymalna wartość to 999 a po drugie jak masz fusebity ustawione? Dla tego programu może być oscylator wewnętrzny ale trzeba wyłączyć dzielnik przez 8. Poza tym nie wiem czy twoja tabela jest poprawna, bo tego nie sprawdzałem

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika shoter09

tabela jest na 100% dobra bo

tabela jest na 100% dobra bo sprawdzałem już kilka razy, a fusebity mam fabryczne.

Portret użytkownika mirley

Re: Fabryczne fusebity

No to wyłącz w fusach biot CKDIV, ma być wartość 1. Wtedy sprawdź co się dzieje. Narazie nie widzę błędu w powyższym kodzie a nie mam czasu składać układu żeby to stwierdzić. Jak zmienisz fusy to pomyślimy nad kolejnymi problemami w układzie

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika shoter09

Mam kolejny problem :P Nie

Mam kolejny problem :P Nie umiem zrobić znaku minus (-), że jak wpiszę -100 to wyświetli się -100 na wyświetlaczu

' Fuse bity ustawione fabrycznie
$regfile = "attiny2313.dat"
$crystal = 1000000
 
Config Portb = Output 'sterowanie segmentów LED
Config Portd = Output 'sterowanie segmentów LED
 
Anoda1 Alias Portd.1 ' Lewy wyświetlacz
Anoda2 Alias Portd.2
Anoda3 Alias Portd.3
Anoda4 Alias Portd.4 ' prawy wyświetlacz
 
Dim Nr_wysw As Byte
Dim Liczba As Long
Dim Liczba1 As Long
 
Dim Temp_liczba_1 As Word
Dim Temp_liczba_2 As Word
Dim Temp_liczba_3 As Word
Dim Temp_liczba_4 As Word
 
Config Timer0 = Timer , Prescale = 8
 
Enable Timer0
Enable Interrupts
On Timer0 Timint
Start Timer0
Liczba = 1234
 
Do
Loop
Timint:
Stop Timer0
Timer0 = 0
Temp_liczba_4 = Liczba Mod 10
Temp_liczba_3 = Liczba / 10
Temp_liczba_3 = Temp_liczba_3 Mod 10
Temp_liczba_2 = Liczba / 100
Temp_liczba_2 = Temp_liczba_2 Mod 10
Temp_liczba_1 = Liczba / 1000
Start Timer0
Gosub Mult_wysw
Return
 
Mult_wysw:
Reset Anoda1
Reset Anoda2
Reset Anoda3
Reset Anoda4
 
Select Case Nr_wysw
Case 0:
Portb = Lookup(temp_liczba_1 , Kody7seg)
Set Anoda1
 
Case 1:
Portb = Lookup(temp_liczba_2 , Kody7seg)
Set Anoda2
 
Case 2:
Portb = Lookup(temp_liczba_3 , Kody7seg)
Set Anoda3
 
Case 3:
Portb = Lookup(temp_liczba_4 , Kody7seg)
Set Anoda4
End Select
 
Incr Nr_wysw
If Nr_wysw = 4 Then
Nr_wysw = 0
End If
Timer1 = 100000
Return
 
Kody7seg:
Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001
Data &B10010010 , &B10000010 , &B11111000 , &B10000000 , &B10010000

Portret użytkownika matrix

Re: Jak napisać znak minus

Musisz wysterować środkowy segment danego wyświetlacza.

Portret użytkownika shoter09

Quote:Musisz wysterować

Quote:
Musisz wysterować środkowy segment danego wyświetlacza.

co ty powiesz nie domyśliłbym się. tylko jak to zrobić

Portret użytkownika matrix

Re: Jak napisać znak minus

Jak dla mnie to w ogóle ta część softu jest do bani albo ja tego nie rozumiem:

Mult_wysw:
Reset Anoda1
Reset Anoda2
Reset Anoda3
Reset Anoda4
 
Select Case Nr_wysw
Case 0:
Portb = Lookup(temp_liczba_1 , Kody7seg)
Set Anoda1
 
Case 1:
Portb = Lookup(temp_liczba_2 , Kody7seg)
Set Anoda2
 
Case 2:
Portb = Lookup(temp_liczba_3 , Kody7seg)
Set Anoda3
 
Case 3:
Portb = Lookup(temp_liczba_4 , Kody7seg)
Set Anoda4
End Select

Po co włączasz wszystkie wyświetlacze na raz i po kolei je wyłączasz? Multiplexowanie nie na tym polega.

Portret użytkownika shoter09

to polega na tym ze po kolei

to polega na tym ze po kolei wyswietlają się cyfry na każdym wyświetlaczu. ale wróćmy do tematu jak zrobić ten minus ?

Portret użytkownika matrix

Re: Jak napisać znak minus

Ale rozjaśnij o co dokładnie chodzi? Bo zapalenie minusa to jak już pisałem, zapalenie środkowego segmentu więc nie widzę gdzie leży kłopot?

Portret użytkownika shoter09

ehhh chodzi mi o to jak

ehhh chodzi mi o to jak napisać to w programie

Portret użytkownika matrix

Re: Jak napisać znak minus

A jakie masz założenia? Może to co chcesz osiągnąć da się napisać znacznie prościej? Bo po kodzie nie jestem w stanie rozkminić co to ma być?

Portret użytkownika shoter09

Jak wpisuje w kodzie Liczba =

Jak wpisuje w kodzie

Liczba = 100

to wyświetla liczbę 100, a jak wpiszę

Liczba = -100

To wyświetla losowe liczby a chcę żeby wyświetliło -100 i nie umiem

Portret użytkownika mirley

Re: Multipleksowanie

Dlaczego nie skorzystałeś z programu który napisałem ci wyżej.... przecież jest cały i dobry, ma wszystkie elementy które potrzebuje. Próbowałeś go uruchomić?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika shoter09

WitamW końcu coś mi się

Witam
W końcu coś mi się udało :) ale mam problem z wyświetlaniem liczb na minusie możecie powiedzieć jak to się robi ?

'****************************
           'Konfiguracja
'****************************
$regfile = "m8def.dat"
$crystal = 8000000
 
Config Portb = &B11111111 : Portb = &B11111111
Config Portd = &B11111011 : Portd = &B11111111
 
Config Timer0 = Timer , Prescale = 8
Enable Timer0 : On Timer0 Przerwanie0
 
 
Enable Interrupts
'****************************
      'Zmienne
'****************************
Dim Dziel(2) As Byte
Dim Wysw As Word , Ww As Byte , W(3) As Byte
Dim Wysw_pomoc As Word
Dim Mux As Byte , I As Byte
 
Dim F1s As Bit , F4ms As Bit , F100ms As Bit
'****************************
      'Petla glowna
'****************************
Do
 
If F4ms = 1 Then
  Reset F4ms                                                'co 4ms
  Wysw = 37                                                 'tutaj wartosc wyswietlana,
  Gosub Wyswietl
End If
 
If F100ms = 1 Then
  Reset F100ms                                              'co 100ms
 
  'tu można wykonywac coś co 100ms, np klawiatura albo jakieś obliczenia
 
End If
 
Loop
End
'****************************
      'Przerwanie timer0
'****************************
Przerwanie0:
Timer0 = 131
   Set F4ms
   Incr Dziel(1)
   If Dziel(1) = 25 Then
     Dziel(1) = 0
     Set F100ms
     Incr Dziel(2)
     If Dziel(2) = 10 Then
       Dziel(2) = 0
       Set F1s
     End If
   End If
Return
'****************************
      'wyswietlanie
'****************************
Wyswietl:
  Incr Mux
  If Mux = 3 Then Mux = 0
 
  For I = 1 To 3
    Wysw_pomoc = Wysw Mod 10
    Ww = Wysw_pomoc
    W(i) = Lookup(ww , Tabela)
    Wysw = Wysw / 10
  Next I
 
  Select Case Mux
    Case 0:
      Set Portc.1
      Portd = W(3)
      Reset Portc.3
 
    Case 1:
     Set Portc.2
     Portd = W(2)
     Reset Portc.1
 
    Case 2:
     Set Portc.3
     Portd = W(1)
     Reset Portc.2
 
  End Select
 
Return
 
'*******************************************************************************
                           'Tabele do wyswietlania na wyswietlaczu
'*******************************************************************************
Tabela:
Data 247 , 160 , 111 , 238 , 188 , 222 , 223 , 224 , 255 , 254
'     0     1    2    3    4    5    6      7    8      9


Portret użytkownika mirley

Re: Minus

Ideowo jest to proste, trzeba napisać If'a który jak wartość jest ujemna ustawi na wyświetlaczu pierwszym odpowiedni stan na segmencie g wyświetlacza zamiast wpisywać wartość W(x)

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.