Wyświetlacz widmowy

Jesli jesteś początkującym elektronikiem, to tu z pewnością znajdziesz pomoc. Miejsce dobre do dyskusji nad podstawami elektroniki w zakresie teorii i praktyki.
kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Wyświetlacz widmowy

Post autor: kaliska5 » 14 lut 2009, 13:41

Witam. Mam pewien problem z moim wyświetlaczem umiem już wyświetlacz napisy ale chciałbym żeby wyświetlał godzinę. Próbowałem samemu coś sklecić ale nie wychodzi mi wogule. Czy mógłby mi ktoś to wyjaśnić albo podać link do listingu takiego zegara na attiny2313 może coś sam zakapuje. Z góry dziękuje.

Awatar użytkownika
Kulpina
Użytkownik
Posty: 2037
Rejestracja: 28 lip 2005, 16:57
Lokalizacja: Sanok
Kontakt:

Post autor: Kulpina » 14 lut 2009, 16:54

ale jaki język? w bascomie? jeśli już wyswietlacz napis to chyba nie problem zrobić zegar ;) co dokładnie ci nie wychodzi? :mrgreen:

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 14 lut 2009, 17:28

Sorka chodzi mi o bascom. Dorwałem listing do zegara ale na procek AT89C4051 i próbowałem go przystosować pod attiny2313 ale mi się nie udało.

Awatar użytkownika
Kulpina
Użytkownik
Posty: 2037
Rejestracja: 28 lip 2005, 16:57
Lokalizacja: Sanok
Kontakt:

Post autor: Kulpina » 14 lut 2009, 17:49

a mozesz wkleic co już masz i jak to wygląda? masz problem z odpaleniem zegara zeby liczył, czy zegar działa ale nie mozesz go wyswietlic? :mrgreen:

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 16 lut 2009, 16:22

Tak się ładnie złożyło, że w EP 02/2009 jest mój artykuł pt. "zegar widmowy" :D, wykorzystałem tam właśnie procka 2313 i program napisałem w bascomie, w artykule jest kompletny listing :) Więc masz wszystko jak na tacy.

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 24 mar 2009, 22:15

Nie chce zakładać owego tematu wiec napisze w starym.Napisałem taki soft do zegarka miałem pod ręka tylko polski help do bascoma i soft do innego zegarka tylko na AT89C405. Proszę o pomoc i wyrozumiałość ponieważ bascoma znam bardzo krotko. Nie wyświetla tego co powinien na początku widać cyfry odlicza sekundy potem się coś rypie i już nic nie wyświetla.Z góry dziekuje.:

Kod: Zaznacz cały

$regfile "Attiny2313.dat"
$crystal = 1000000
Config Portb = &B11111111
Portb = &B00000000
Config Portd = &B0000000
Portd = &B1111111
Dim Sek_jedn As Byte , Sek_dzies As Byte , Min_jedn As Byte,
Dim Min_dzies As Byte , Godz_jedn As Byte , Godz_dzies As Byte
Dim A As Byte , B As Byte
Dim Licznik As Integer

Sek_jedn = 0
Sek_dzies = 0
Min_jedn = 0
Min_dzies = 0
Godz_jedn = 0
Godz_dzies = 0
A = 1.5
Config Timer0 = Timer , Prescale = 64

On Timer0 Przerwanie_co_2ms
Enable Interrupts
Enable Timer0
Timer0 = 6
Licznik = 0
Start Timer0
Do
Do
Loop Until Pind.6 = 1


If Sek_jedn = 10 Then
Sek_jedn = 0
Incr Sek_dzies
End If

If Sek_dzies = 6 Then
Sek_dzies = 0
Incr Min_jedn
End If

If Min_jedn = 10 Then
Min_jedn = 0
Incr Min_dzies
End If

If Min_dzies = 6 Then
Min_dzies = 0
Incr Godz_jedn

End If

If Godz_jedn = 10 Then
Godz_jedn = 0
Incr Godz_dzies
End If

If Godz_dzies = 2 Then
Godz_dzies = 0
Godz_jedn = 0
End If

'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
If Sek_jedn = 0 Then
      Gosub Zero
End If

If Sek_jedn = 1 Then
      Gosub Jeden
End If

If Sek_jedn = 2 Then
      Gosub Dwa
End If

If Sek_jedn = 3 Then
      Gosub Trzy
End If

If Sek_jedn = 4 Then
      Gosub Cztery
End If

If Sek_jedn = 5 Then
      Gosub Piec
End If

If Sek_jedn = 6 Then
      Gosub Szesc
End If

If Sek_jedn = 7 Then
      Gosub Siedem
   End If

If Sek_jedn = 8 Then
      Gosub Osiem
   End If

If Sek_jedn = 9 Then
      Gosub Dziewiec
   End If
'############################
If sek_dzies = 0 Then
      Gosub Zero
   End If

If Sek_dzies = 1 Then
      Gosub Jeden
   End If

If Sek_dzies = 2 Then
      Gosub Dwa
   End If

If Sek_dzies = 3 Then
      Gosub Trzy
   End If

If Sek_dzies = 4 Then
      Gosub Cztery
   End If

If Sek_dzies = 5 Then
      Gosub Piec
   End If

If Sek_dzies = 6 Then
      Gosub Szesc
   End If

If Sek_dzies = 7 Then
      Gosub Siedem
   End If

If Sek_dzies = 8 Then
      Gosub Osiem
   End If

If Sek_dzies = 9 Then
      Gosub Dziewiec
   End If
'***********************************
If Min_jedn = 0 Then
      Gosub Zero
End If

If Min_jedn = 1 Then
      Gosub Jeden
End If

If Min_jedn = 2 Then
      Gosub Dwa
End If

If Min_jedn = 3 Then
      Gosub Trzy
End If

If Min_jedn = 4 Then
      Gosub Cztery
End If

If Min_jedn = 5 Then
      Gosub Piec
End If

If Min_jedn = 6 Then
      Gosub Szesc
End If

If Min_jedn = 7 Then
      Gosub Siedem
   End If

If Min_jedn = 8 Then
      Gosub Osiem
   End If

If Min_jedn = 9 Then
      Gosub Dziewiec
   End If
'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
If Min_dzies = 0 Then
      Gosub Zero
   End If

If Min_dzies = 1 Then
      Gosub Jeden
   End If

If Min_dzies = 2 Then
      Gosub Dwa
   End If

If Min_dzies = 3 Then
      Gosub Trzy
   End If

If Min_dzies = 4 Then
      Gosub Cztery
   End If

If Min_dzies = 5 Then
      Gosub Piec
   End If

If Min_dzies = 6 Then
      Gosub Szesc
   End If

If Min_dzies = 7 Then
      Gosub Siedem
   End If

If Min_dzies = 8 Then
      Gosub Osiem
   End If

If Min_dzies = 9 Then
      Gosub Dziewiec
   End If

'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
If godz_jedn = 0 Then
      Gosub Zero
End If

If Godz_jedn = 1 Then
      Gosub Jeden
End If

If Godz_jedn = 2 Then
      Gosub Dwa
End If

If Godz_jedn = 3 Then
      Gosub Trzy
End If

If Godz_jedn = 4 Then
      Gosub Cztery
End If

If Godz_jedn = 5 Then
      Gosub Piec
End If

If Godz_jedn = 6 Then
      Gosub Szesc
End If

If Godz_jedn = 7 Then
      Gosub Siedem
   End If

If Godz_jedn = 8 Then
      Gosub Osiem
   End If

If Godz_jedn = 9 Then
      Gosub Dziewiec
   End If
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
If Godz_dzies = 1 Then
      Gosub Jeden
   End If

If Godz_dzies = 2 Then
      Gosub Jeden
   End If
Loop
End

Przerwanie_co_2ms:
Counter0 = Counter0 + 6


Incr Licznik
If Licznik = 500 Then

Licznik = 0                                                 'wyzeruj zmienną licznik
Incr Sek_jedn
End If
Return

Odstep:
Delay : Delay 

Zero:
Portb = 255
Waitms A
Portb = 129
Waitms A
Portb = 129
Waitms A
Portb = 255
Waitms A
Portb = 0
Waitms A
Gosub Odstep
return




Jeden:
Portb = 4
Waitms A
Portb = 2
Waitms A
Portb = 255
Waitms A
Portb = 0
Waitms A
Gosub Odstep
return

Dwa:
Portb = 249
Waitms A
Portb = 137
Waitms A
Portb = 137
Waitms A
Portb = 143
Waitms A
Portb = 0
Waitms A
Gosub Odstep
return

Trzy:
Portb = 129
Waitms A
Portb = 137
Waitms A
Portb = 137
Waitms A
Portb = 255
Waitms A
Portb = 0
Waitms A
Gosub Odstep
return

Cztery:
Portb = 15
Waitms A
Portb = 8
Waitms A
Portb = 252
Waitms A
Portb = 8
Waitms A
Portb = 0
Waitms A
Gosub Odstep
return

Piec:
Portb = 143
Waitms A
Portb = 137
Waitms A
Portb = 137
Waitms A
Portb = 249
Waitms A
Portb = 0
Waitms A
Gosub Odstep
return

Szesc:
Portb = 255
Waitms A
Portb = 145
Waitms A
Portb = 145
Waitms A
Portb = 241
Waitms A
Portb = 0
Waitms A
Gosub Odstep
return

Siedem:
Portb = 1
Waitms A
Portb = 241
Waitms A
Portb = 9
Waitms A
Portb = 7
Waitms A
Portb = 0
Waitms A
Gosub Odstep
return

Osiem:
Portb = 255
Waitms A
Portb = 137
Waitms A
Portb = 137
Waitms A
Portb = 255
Waitms A
Portb = 0
Waitms A
Gosub Odstep
return

Dziewiec:
Portb = 143
Waitms A
Portb = 137
Waitms A
Portb = 137
Waitms A
Portb = 255
Waitms A
Portb = 0
Waitms A
Gosub Odstep
return


[ Dodano: 2009-04-12, 21:30 ]
Udało mi się odpalić ten zegar

http://www.youtube.com/watch?v=WvDUctPvtMo

ale gdy wykasowałem go z procka i wgrałem jeszcze raz już nie działał i do dziś nie działa wie ktos jak mi pomoc ? wgrałem backup nic nie grzebałem w fusach i nie ruszył ponownie

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 12 kwie 2009, 21:18

Ten program jest dłuuuugi... Za długi. Z tego co wiem jeśli w warunku IF jest tylko jedna komenda to nie trzeba pisać End If. Wtedy zamiast

Kod: Zaznacz cały

If Sek_jedn = 2 Then
      Gosub Dwa
End If

If Sek_jedn = 3 Then
      Gosub Trzy
End If

If Sek_jedn = 4 Then
      Gosub Cztery
End If 
Możesz zrobić

Kod: Zaznacz cały

If Sek_jedn = 2 Then Gosub Dwa
If Sek_jedn = 3 Then Gosub Trzy
If Sek_jedn = 4 Then Gosub Cztery
...itd
Zrób tak, będzie 4x krócej i na pewno bardziej czytelnie. Lepiej używaj tabulatorów.

[edit]
Twój program ma 430 linii kodu. Mój program do zegarka widmowego, na ten sam procesor i też w bascomie (tutaj program) ma 130 linii z czego 35 to procedury obsługi i2c. Popracuj nad skróceniem tego bo nie sposób to ogarnąć ;)

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 12 kwie 2009, 21:28

A mógłbyś go udostepnic ?

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 12 kwie 2009, 21:34

Przecież udostępniłem, w poście wyżej jest link ... A tu masz całość: http://c4r0.skrzynka.org/_hv/index.php? ... /pendclock

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 12 kwie 2009, 21:44

Przepraszam nie zauważyłem. Czyli jeśli chce zastosować ten kod u mnie przy obrotowym wyświetlaczu muszę przerwanie wywoływać poprzez fotodiodę ??

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 12 kwie 2009, 22:04

No wiesz, możesz przez coś innego :) Ważne żeby co obrót procesor dostawał impuls, a jak to zrobisz to już nie ważne.

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 13 kwie 2009, 15:18

Zrobiłem według swojego pomysłu ale jakoś nie działa mam pytanie na schemacie katody diod sa połączone do portów a w listingu jest napisane:

Kod: Zaznacz cały

$crystal = 12000000
Config Scl = Portd.1
Config Sda = Portd.0
Config I2cdelay = 10

Config Portb = Output
Portb = 127
Jeśli diody sa w ten sposób podłączone to chyba powinien być wejściem ?
Mam jeszcze prośbę czy mógłby mi ktoś wy komentować kod? Trochę zagmatwane jest ja jako początkujący nie bardzo go rozumiem ( rozumiem co znaczą poszczególne funkcje ale nie łapie całości)

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 13 kwie 2009, 16:04

kaliska5 pisze:na schemacie katody diod sa połączone do portów a w listingu jest napisane:

Kod: Zaznacz cały

$crystal = 12000000
Config Scl = Portd.1
Config Sda = Portd.0
Config I2cdelay = 10

Config Portb = Output
Portb = 127
Jeśli diody sa w ten sposób podłączone to chyba powinien być wejściem ?
Nie. Kierunek przepływu prądu nie ma znaczenia. To czy port jest wejściem czy wyjściem określa kierunek przepływu informacji - albo procesor będzie odczytywał stan portu (wtedy jest wejściem) albo będzie ustawiał jego stan (wtedy jest wyjściem). Działanie programu jest dość zagmatwane (głównie chodzi o fragment pod etykietą 'Go'), załatw sobie artykuł z EP ten który podałem wyżej, tam jest to opisane. Tak właściwie to nawet nie powinienem tutaj tego tłumaczyć skoro dałem to do czasopisma :P

kaliska5
Użytkownik
Posty: 348
Rejestracja: 01 maja 2008, 8:24
Lokalizacja: z nienacka
Kontakt:

Post autor: kaliska5 » 13 kwie 2009, 18:32

Czy ten artykuł da się ściągnąć z internetu ? np. płacąc przez SMS ? Niestety w mojej okolicy żaden sklep nie sprowadza tego typu prasy i najbliższy sklep gdzie mógłbym kupić takie czasopismo mam 15km od domu

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 13 kwie 2009, 19:07

Jeszcze się nie da bo chyba ten numer jest jeszcze za mało archiwalny :) Ale ogólnie archiwa da się ściągać w PDF-ach płacąc tak jak napisałeś przez SMS więc kiedyś pewnie ten artykuł będzie też dostępny.

ODPOWIEDZ