FAQ | Points | Add... | Recent posts | Search | Register | Log in


[atmega16][bascom] Wyświetlacz 14-sto segmentowy.


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> AVR Microcontrollers -> [atmega16][bascom] Wyświetlacz 14-sto segmentowy.
Author
Message
pier
Poziom 18
Poziom 18


Joined: 26 Mar 2006
Posts: 533
Location: Biłgoraj

Post#1 Post from the author of the topic 06 Mar 2010 18:14   

[atmega16][bascom] Wyświetlacz 14-sto segmentowy.


Witam
Zakupiłem ostatnio listwę z 14-stoma wyświetlaczami 14-sto segmentowymi (w zasadzie 16-sto segmentowymi ale ja używam 14). Chciałbym zbudować na niej jakieś urządzenie typu zegar z kalendarzem. Podłączyłem już wszystko do atmegi16 na płytce stykowej. Jako drivery do poszczególnych wyświetlaczy użyłem uln2804 a segmentami steruję z pomocą zatrzasku 74hct573 (bez niego prawie wszystkie porty były by zajęte). Opanowałem już sterowanie tym wszystkim co widać w załączonym programie. Nie wiem tylko jak w zjadliwy sposób ładnie wyświetlać tekst i wartości zmiennych tak abym nie musiał wpisywać za każdym razem wartość liczbowych dla poszczególnych wyświetlaczy. Może dopisze ktoś kawałek kodu co i jak?

Code:

'-------------Zegar Kalendarz 14-segment LED-"

'opis złącza ISP
'czerwony - "+"
'zielony - RESET
'biały - MISO
'niebieski - SCK
'brązowy - MOSI
'czarny  - "-"

'------------dyrektywy dla kompilatora--------"
$regfile = "m16def.dat"
$crystal = 8000000

'------------konfiguracja timera--------------"
Config Timer2 = Timer , Prescale = 8 : Enable Interrupts : Enable Timer2
On Timer2 Co4ms


'------------zmienne--------------------------"
Dim Ktorywysw As Byte
Dim W1 As Byte
Dim W2 As Byte
Dim W3 As Byte
Dim W4 As Byte
Dim W5 As Byte
Dim W6 As Byte
Dim W7 As Byte
Dim W8 As Byte
Dim W9 As Byte
Dim W10 As Byte
Dim W11 As Byte
Dim W12 As Byte
Dim W13 As Byte
Dim W14 As Byte

'------------konfiguracja portów--------------"

Config Portb = &B11111111
 Portb = &B00000000

Config Portd = &B1111111
 Portb = &B11111111

Config Porta = &B11111111
 Porta = &B11111111

Config Pinc.0 = Output
 Portc.0 = 0




'-----------program główny--------------------"
Do
W1 = 3
W2 = 6
W3 = 36
W4 = 12
W5 = 35
W6 = 35
W7 = 35
W8 = 35
W9 = 35
W10 = 35
W11 = 35
W12 = 35
W13 = 35
W14 = 35
Loop
End











'-----------obsługa wyświetlacza------"
Co4ms:
Portd = &B00000000
Portb = &B00000000
Incr Ktorywysw : If Ktorywysw = 14 Then Ktorywysw = 0
Select Case Ktorywysw
Case 0:
   Portc.0 = 1
   Porta = Lookup(w1 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w1 , Tabela2) : Portd.0 = 1
Case 1:
   Portc.0 = 1
   Porta = Lookup(w2 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w2 , Tabela2) : Portd.1 = 1
Case 2:
   Portc.0 = 1
   Porta = Lookup(w3 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w3 , Tabela2) : Portd.2 = 1
Case 3:
   Portc.0 = 1
   Porta = Lookup(w4 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w4 , Tabela2) : Portd.3 = 1
Case 4:
   Portc.0 = 1
   Porta = Lookup(w5 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w5 , Tabela2) : Portd.4 = 1
Case 5:
   Portc.0 = 1
   Porta = Lookup(w6 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w6 , Tabela2) : Portd.5 = 1
Case 6:
   Portc.0 = 1
   Porta = Lookup(w7 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w7 , Tabela2) : Portd.6 = 1
Case 7:
   Portc.0 = 1
   Porta = Lookup(w8 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w8 , Tabela2) : Portb.7 = 1
Case 8:
   Portc.0 = 1
   Porta = Lookup(w9 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w9 , Tabela2) : Portb.0 = 1
Case 9:
   Portc.0 = 1
   Porta = Lookup(w10 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w10 , Tabela2) : Portb.1 = 1
Case 10:
   Portc.0 = 1
   Porta = Lookup(w11 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w11 , Tabela2) : Portb.2 = 1
Case 11:
   Portc.0 = 1
   Porta = Lookup(w12 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w12 , Tabela2)  : Portb.3 = 1
Case 12:
   Portc.0 = 1
   Porta = Lookup(w13 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w13 , Tabela2)  : Portb.4 = 1
Case 13:
   Portc.0 = 1
   Porta = Lookup(w14 , Tabela1)
   Portc.0 = 0
   Porta = Lookup(w14 , Tabela2)  : Portb.5 = 1
End Select
Return





Tabela1:                                                    'TABELA DLA PORTU A
Data 63 , 6 , 219 , 207 , 230 , 237 , 253 , 7 , 255 , 239 , 247 , 143 , 57 , 15 , 249 , 241 , 189 , 246 , 0 , 30 , 112 , 56 , 54 , 54 , 63 , 243 , 243 , 237 , 1 , 62 , 54 , 0 , 0 , 9 , 0 , 0 , 227 , 192

Tabela2:                                                    'TABELA DLA PORTU A-dodatkowe segmenty
Data 12 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 18 , 0 , 18 , 0 , 0 , 0 , 0 , 18 , 0 , 36 , 0 , 5 , 33 , 0 , 0 , 32 , 0 , 18 , 0 , 40 , 45 , 21 , 12 , 8 , 0 , 0 , 0

Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 06 Mar 2010 18:14   





Back to top
   
jony15
Poziom 18
Poziom 18


Joined: 25 Apr 2003
Posts: 497
Location: okolice Tarnowa

Post#2 07 Mar 2010 01:27   

Re: [atmega16][bascom] Wyświetlacz 14-sto segmentowy.


Co do tekstu to nie wiem, ale co do zmiennych to np w jakimś rejestrze masz zmienna niech będzie to "x" i jeśli chcesz wyświetlić na wyświetlaczach to ja robie to tak: jeśli interesuje cie wartość od 0 do 99 to po prostu dzielisz x przez 10 i na pierwszy wyświetlacz ( x/10 ) później reszta z dzielenia i na drugi ( x%10 ), a jeśli chcesz na trzy wyświetlacze to sprawdzasz czy x jest większy lub równy 100 i reszta podobnie x/100; (( x%100 )/10); ((x%100)%10). Hm możesz pokazać schemat? co do tekstu hm może stworzyć tablice "intów" ( word w bascomie jeśli się nie mylę ) każdej cyfrze i literce przyporządkowana jedna zmienna, coś na wzór tablicy asci. tylko ze to trochę pamięciożerne. pozdrawiam
Back to top
   
Google

Google Adsense


Post# 07 Mar 2010 01:27   





Back to top
   
nenpa8lo
Poziom 15
Poziom 15


Joined: 14 Mar 2008
Posts: 262
Location: Shannon

Post#3 07 Mar 2010 02:42   

Re: [atmega16][bascom] Wyświetlacz 14-sto segmentowy.


Wydaje mi się, że nie masz za bardzo wyboru, jak po prostu wklepać do flasha procesora tablicę ze znakami ASCII i odpowiadające każdemu znakowi segmenty do zaświecenia. To była by funkcja w stylu putc(). Następnie piszesz sobie printf_led() do którego podajesz wskaźnik do łańcucha a wewnątrz tej funkcji wołasz putc().
Ja bym zrobił całe API: putc(), print_led(), goto(), clrscr() itd.
Back to top
   
Google

Google Adsense


Post# 07 Mar 2010 02:42   





Back to top
   
pier
Poziom 18
Poziom 18


Joined: 26 Mar 2006
Posts: 533
Location: Biłgoraj

Post#4 Post from the author of the topic 11 Mar 2010 19:18   

Re: [atmega16][bascom] Wyświetlacz 14-sto segmentowy.


Kolego jony15 to o czy piszesz to ja wiem ale chodzi mi o to jak wyświetlać tekst tak aby nie pisać wartości liczbowej dla każdego wyświetlacza osobno.
nenpa8lo napisał:
Quote:
Wydaje mi się, że nie masz za bardzo wyboru, jak po prostu wklepać do flasha procesora tablicę ze znakami ASCII i odpowiadające każdemu znakowi segmenty do zaświecenia. To była by funkcja w stylu putc(). Następnie piszesz sobie printf_led() do którego podajesz wskaźnik do łańcucha a wewnątrz tej funkcji wołasz putc().
Ja bym zrobił całe API: putc(), print_led(), goto(), clrscr() itd.


Przecież ja mam dwie tablice ze znakami do zaświecenia. A to o czym Piszesz dalej to nic nie łapię to na pewno nie do bascoma.
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> AVR Microcontrollers -> [atmega16][bascom] Wyświetlacz 14-sto segmentowy.
Page 1 of 1
Similar topics
atmega16 (ATMEGA16-16AU SMD) bascom - problem z portemC (3)
[atmega16][Bascom]74hc164 i wyświetlacz led (2)
atmega8 i wyświetlacz 7 segmentowy LED ==> BASCOM (31)
[Bascom] Wyświetlacz 7 Segmentowy (2)
Atmega16 i wyświetlacz 17- segmentowy nie działa prawidłowo (4)
Atmega16 i wyświetlacz segmentowy - o tym nie znalazłem. (14)
MAX6955 i wyświetlacz 16-sto segmentowy. (1)
Bascom i wyświetlacz vfd 14-sto segmentowy (7)
[Atmega16][Bascom] moduł gps -> uart -> atmega16 (30)
[atmega16][bascom] atmega16 + siemens s55 + uart (4)

Page generation time: 0.138 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed