f
Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/page_header.php on line 343
And-Tech :: Zobacz temat - LED 7 segmentowy i RC5

Strona korzysta z plików cookie w celu realizacji usług zgodnie z Politykš prywatnoœci.

Możesz okreœlić warunki przechowywania lub dostępu do cookie w Twojej przeglšdarce lub konfiguracji usługi.

And-Tech Strona Główna And-Tech
Forum firmy And-Tech

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  DownloadDownload

Poprzedni temat «» Następny temat
LED 7 segmentowy i RC5
Autor Wiadomość
Trebor

Dołączył: 29 Sty 2011
Posty: 3
  Wysłany: Nie Sty 30, 2011 7:33 pm   LED 7 segmentowy i RC5

Witam - mam problem potrzebuję wyświetlić na 3 kolejnych segmentach LED cyfry z podane za pomocą kolejnych naciśnięć pilota RC5. Z tego co znalazłem na forum zaadoptowałem do swoich potrzeb. Mam 3 zmienne B,C i D - pytanie jak brzmi - jak zmienić ich wartość na te podane z pilota RC5?
Kod:


$regfile = "m32def.dat"

'Częstotliwość kwarcu domyślnie 16MHz
$crystal = 16000000
$hwstack = 32
$swstack = 10
$framesize = 40
$lib "mcsbyte.lbx"

'Podłaczenie wyświetlacza 7 segmentowego
' Digit1 PORTB.0
' Digit2 PORTB.1
' Digit3 PORTB.2
' Digit4 PORTB.3

'Segment A PORTA.1
'Segment B PORTA.2
'Segment C PORTA.3
'Segment D PORTA.4
'Segment E PORTA.5
'Segment F PORTA.6
'Segment G PORTA.7

Config Porta = Output
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinb.3 = Output

'Pin odbiornika TSOP4836
Config Rc5 = Pind.2 ,

'the interrupt routine is inserted automatic but we need to make it occur
'so enable the interrupts
Enable Interrupts

'reserve space for variables
Dim Address As Byte , Command As Byte




Config Timer1 = Timer , Prescale = 256


Declare Sub Pobr_znaku(cyfra As Byte)
Declare Sub Rc(z As Byte)

On Timer1 Mult_wysw

Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim Z As Byte
Dim Nr_wysw As Byte

W1 Alias Portb.0
W2 Alias Portb.1
W3 Alias Portb.2



Enable Timer1
Load Timer1 , 125
Enable Interrupts

Do
B = 6
C = 3
D = 7

Loop
End



Sub Pobr_znaku(cyfra As Byte)
Porta = Lookup(cyfra , Kody7seg)
End Sub

Sub Rc(z As Byte)
Do
Getrc5(address , Command)
If Address = 0 Then Command = Command And $b11111110

End
Loop
End Sub

Mult_wysw:

Load Timer1 , 150
Set W1
Set W2
Set W3


'Call Rc(d)

Select Case Nr_wysw

Case 0:
Call Pobr_znaku(b)
Reset W1


Case 1:
Call Pobr_znaku(c)
Reset W2

Case 2:
Call Pobr_znaku(d)
Reset W3

End Select

Incr Nr_wysw
If Nr_wysw = 3 Then
Nr_wysw = 0
End If
Return


Kody7seg:

Data &B10000001 , &B11110011 , &B01001001 , &B01100001 , &B00110011 ,
Data &B00100101 , &B00000101 , &B11110001 , &B00000001 , &B00100001

byłbym wdzięczny za pomoc (nalepiej kilka linijek kodu - ja się zawiesiłem :( [/fade]
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Pon Sty 31, 2011 10:28 am   

po pierwsze:
Kod:

Command = Command And &B01111111

dalej (w tym samym warunku)
dodajesz sobie zmienną, która przechowuje licznik podanych cyfr. i z każdym odebranym klawiszem zwiększasz ten licznik, który wskazuje na którym wyświetlaczu powinna wyświetlić się wprowadzona cyfra
_________________
http://www.piotr94.net21.pl/
 
     
Trebor

Dołączył: 29 Sty 2011
Posty: 3
Wysłany: Wto Mar 01, 2011 12:19 pm   

Programowo problem jest rozwiązany - nie mam akurat pliku z programem ( wkleje w terminie poźniejszym) zamierzenia były takie - odbieram kody z pilota RC5 i wyświetlam cyfry znaczące ( tzn. nie zapala się np 001 tylko 1) Po wciśnięciu na pilocie kolejnej cyfry ta z pierwszego wyświetlacza przchodzi na drugi a na pierwszym wyświetla się ostatnio wciśnięta. Analogicznie po wciśnięciu pilota kolejny raz. Czwarte naciśnięcie dowolnej cyfry powoduje wyzerowanie wyświetlacza i zmiennych i wygaszenie wyświetlacza. Cyfry można też wygasić określonym klawiszem pilota. Program zachowuje się bardzo ładnie na płytce testowej EvB 4.3. Wyświetlacze ze wspólną anodą - do wysterowania wystarczy to co poda mikrokontroler. Teraz przyszedł czas na wykonanie płytki docelowej i zastosowanie dużych wyświetlaczy. Mam wyświetlacze KINGBRIGHT SA40-18SRWA są tam 4 diody na segment czyli napięcie na anodę chcę podać około 10-12V prąd z mikroprocesora jest za mały - dlatego na wyjściu dałem ULN2003 - on odwraca sygnał ale to nie problem zmienić programowo na wyjściu mikrokontrolera ( próbowałem na płytce testowej i działa)
Poniżej schemat projektowanego urządzenia - prosiłbym o spojrzenie okiem na niego przez fahowców - ja to robiłem na zasadzie analogi i podobieństw Smile - głównie chodzi mi o sprawdzenie czy dobrze dobrałem tranzystory kluczujące anody poszczególne cyfr i czy takie podłączenie ULN2003 będzie prawidłowe. Bascom AVR wyświelanie kodów RC5 na LED 7 segmentowym
Schemat nie jest może przejżysty ale słyży mi głównie do zaprojektowania płytki drukowanej.

I jeszcze jedno w nocie katalogowej jest tak:


Bascom AVR wyświelanie kodów RC5 na LED 7 segmentowym
skoro są 4 diody to napięcie podawane na segment ma być równe 1.85 do 2.5 V x 4 czyli nie więcej niż 10V . Jednak występuje spadek napięcia na każdej diodzie tak więc jakie napięcie ustawić na pierwszym stablizatorze? Byłbym wdzięczny za uwagi

DTR.png
nota wyświetlacza
Plik ściągnięto 325 raz(y) 81,64 KB

Tablica.png
schemat
Plik ściągnięto 379 raz(y) 65,05 KB

 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Wto Mar 01, 2011 1:19 pm   

następuje nie spadek napięcia, ale wzrost pobieranego prądu. Załóżmy, że jeden led pobiera 20 mA, to 4 segmenty będą pobierać 80 mA. Ja mam na wyświetlacze podawane napięcie 5V przez rezystory 220R (od strony segmentów z uln2003) a wspólne końce zwierane przez tranzystor do 5V
_________________
http://www.piotr94.net21.pl/
 
     
Trebor

Dołączył: 29 Sty 2011
Posty: 3
Wysłany: Wto Mar 01, 2011 6:29 pm   

wspominany kod programu:
Kod:

$regfile = "m32def.dat"

'Częstotliwość kwarcu domyślnie 16MHz
$crystal = 16000000

'Podłaczenie wyświetlacza 7 segmentowego
' Digit1 PORTB.0
' Digit2 PORTB.1
' Digit3 PORTB.2
' Digit4 PORTB.3

'Segment A PORTA.1
'Segment B PORTA.2
'Segment C PORTA.3
'Segment D PORTA.4
'Segment E PORTA.5
'Segment F PORTA.6
'Segment G PORTA.7

Config Porta = Output
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output



Config Timer1 = Timer , Prescale = 256

Declare Sub Pobr_znaku(cyfra As Byte)

On Timer1 Mult_wysw

Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim Nr_wysw As Byte
Dim Licznik As Byte
Dim Odczyt As Byte
Dim X As Byte
Dim Y As Byte
Dim Z As Byte
Dim S As Byte


W1 Alias Portb.0
W2 Alias Portb.1
W3 Alias Portb.2
Wait 1
Set W1
Set W2
Set W3

Wait 2

'Pin odbiornika TSOP4836
Config Rc5 = Pind.2


Enable Interrupts
Dim Address As Byte , Command As Byte

Enable Timer1
Load Timer1 , 125
Do

  Getrc5(address , Command)


  If Address = 0 Then
     Command = Command And &B01111111
     Waitms 100
     Y = Command



     Select Case Y
     Case 0:
     Odczyt = 0
     Waitms 50
     Case 1:
     Odczyt = 1
     Waitms 50
     Case 2:
     Odczyt = 2
     Waitms 50
     Case 3:
     Odczyt = 3
     Waitms 50
     Case 4:
     Odczyt = 4
     Waitms 50
     Case 5:
     Odczyt = 5
     Waitms 50
     Case 6:
     Odczyt = 6
     Waitms 50
     Case 7:
     Odczyt = 7
     Waitms 50
     Case 8:
     Odczyt = 8
     Waitms 50
     Case 9:
     Odczyt = 9
     Waitms 50
     Case 12:
   Odczyt = 12

     End Select


    Select Case Address
    Case 0:
    Incr Licznik
      End Select

    If Odczyt = 12 Then
    S = 0
   X = 0
   B = 0
  Licznik = 0
  End If


    Select Case Licznik
    Case 0:
    Licznik = 0

    Case 1:
    D = Odczyt
    C = 0
    B = 0
    Z = D + C
    S = Z + B

    Waitms 50


    Case 2:
    C = D
    D = Odczyt
    B = 0
    X = B + C

    Waitms 50

    Case 3:
    B = C
    C = D
    D = Odczyt

    Waitms 50
    Case 4:
   B = 0
   C = 0
   D = 0
   S = 0
   X = 0

  Licznik = 0
    End Select

End If
Loop

End






Sub Pobr_znaku(cyfra As Byte)
Porta = Lookup(cyfra , Kody7seg)
End Sub


Mult_wysw:

Load Timer1 , 150
Set W1
Set W2
Set W3



Select Case Nr_wysw

Case 0:
If B <> 0 Then
Call Pobr_znaku(b)
Reset W1
End If

Case 1:
If X <> 0 Then
Call Pobr_znaku(c)
Reset W2
End If
Case 2:
If S <> 0 Then
Call Pobr_znaku(d)
Reset W3
End If



End Select

Incr Nr_wysw
If Nr_wysw = 3 Then
Nr_wysw = 0
End If
Return



Kody7seg:

Data &B10000001 , &B11110011 , &B01001001 , &B01100001 , &B00110011 ,
Data &B00100101 , &B00000101 , &B11110001 , &B00000001 , &B00100001 ,

'Data &B01111110 , &B00001100 , &B10110110 , &B10011110 , &B11001100 ,
'Data &B11011010 , &B11111010 , &B00001110 , &B11111110 , &B11011110 ,

Co do napięcia to przy dużych wyświetlaczach na 5V to nawet nie błyśnie. Każdy z 7 segmentów cyfry ma połączone w szereg 4 diody tak więc potrzebuję pomiędzy 8-10V.
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group