Napsal/a: Žirafka Publikováno dne: 12.11.2015 20:27:07
Pokud někdo zvládá "C" tak by snad mohl zmáknout i Basic
Jinak řízení jasu je jen dvoustupňové, vstup se buď nechá volný a nebo se připojí na zem a tím se jas sníží. To funguje tak, že se poněkud zpomalí běh multiplexu. Při malém jasu diody svítí 500 µs a pak jsou 200 µs zhasnuté. Pokud je nastavený velký jas, tak diody svítí o 800 µs déle a to je celý trik s řízením jasu. Je to v podprogramu Preruseni_c0 ktery obsluhuje přerušení od časovače. Konkrétně se jedná o část na řádku 378 zdrojového souboru.
Preruseni_c0:
Tcnt0 = 128
Incr Pozice ' Chci zobrazit dalsi sloupecek
If Pozice = 7 Then ' Pokud jsem na 7 pozici, je to uz moc a musim od zacatku
Pozice = 1 ' protoze hodiny maji jen 6 pozic
Rotate Sloupec , Left , 2 ' Posunuti sloupce tak, aby se zacinalo opet od jednotek sekund
End If ' kvuli zapojeni HW
Pom2 = Portb And &B00000011 ' Ulozim si hodnotu tech bitu, ktere z portu chci nechat
Pom3 = Sloupec And &B11111100 ' Ze promenne SLOUPEC vypustim bitu, ktere chci na portu uchovat
Portb = Pom2 Or Pom3 ' Na port se vrati hodnota SLOUPEC BEZ zmeny bitu, ktere chci nechat
'
Portd = &B00000111 + Displej(pozice) ' Zobrazeni cislice
If Jas = 1 Then Waitus 800 ' Zpozdeni multiplexu sloupecku, urcuje jas
Waitus 500 ' maly jas je vzdy
Portd = &B00000111 ' Zhasnuti displeje
Waitus 200 ' a chvilku pockam. Tahle cast zabrani "duchum" na displeji
Rotate Sloupec , Left , 1 ' Posunuti zobrazovaneho sloupce
Return
Úprava programu není složitá, proto je psaný v Basicku A co se týče zhasnutí diod při výpadku napájení, tak by to znamenalo mírnou změnu zapojení, protože v tom současném procesor neví z kterého zdroje běží a proto se podle toho nemůže rozhodovat. Řešením by bylo zrušení regulace jasu a přivedení napětí odvozeného z hlavního napájení na tento pin. Přes diodu, nebo nějakým jiným vhodným způsobem. Program by se pak musel upravit tak, aby při logické nule na tomto vstupu hnedka opustil toto přerušení a pak by se toho nemuselo měnit tolik. Teďka mne z hlavy napadá toto řešení:
Preruseni_c0:
If Jas = 0 Then Return ' Pokud není hlavní napájení, opustím přerušení a tím zhasnu displej
Tcnt0 = 128
Incr Pozice ' Chci zobrazit dalsi sloupecek
If Pozice = 7 Then ' Pokud jsem na 7 pozici, je to uz moc a musim od zacatku
Pozice = 1 ' protoze hodiny maji jen 6 pozic
Rotate Sloupec , Left , 2 ' Posunuti sloupce tak, aby se zacinalo opet od jednotek sekund
End If ' kvuli zapojeni HW
Pom2 = Portb And &B00000011 ' Ulozim si hodnotu tech bitu, ktere z portu chci nechat
Pom3 = Sloupec And &B11111100 ' Ze promenne SLOUPEC vypustim bitu, ktere chci na portu uchovat
Portb = Pom2 Or Pom3 ' Na port se vrati hodnota SLOUPEC BEZ zmeny bitu, ktere chci nechat
'
Portd = &B00000111 + Displej(pozice) ' Zobrazeni cislice
Waitus 1200 ' Zpozdeni multiplexu sloupecku, urcuje jas ' maly jas je vzdy
Portd = &B00000111 ' Zhasnuti displeje
Waitus 200 ' a chvilku pockam. Tahle cast zabrani "duchum" na displeji
Rotate Sloupec , Left , 1 ' Posunuti zobrazovaneho sloupce
Return
Úpravu prosím brát bez záruky, píši ji z hlavy a to se musím probírat vlastním kódem, což je po takové době dosti složitý proces
|