Stránka 1 z 1
Digitální hodiny v Bascomu na ATTINY 2313
Napsal: 04 črc 2008, 21:30
od Robert
Zdravím,
potřeboval bych pomoc. Programuji hodiny v Bascomu a nejdemi to rozjet. Už nad tím sedím spoustu dní a pořád mi to nejdene. Nemněl by někdo funkční program nebo návod jak na ten program.
Díky Zatím
Napsal: 05 črc 2008, 10:24
od rkozeluh
'--------------------------------------------------------------
' Hodiny.bas
'
' Po zapnutí začne zobrazovat hodiny : minuty : vteřiny (od 0:00:00)
' K PD5 a PD6 připojte tlačítka pro nastavení
'--------------------------------------------------------------
'$sim
$regfile = "Attiny2313.DAT"
$crystal = 10000000
'Deska ZD1:
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
'Timer1 = časovač, bez předděliče, odpojený od pinu OC1A, při shodě vynuluj čítač
Config Timer1 = Timer , Prescale = 1 , Compare A = Disconnect , Clear Timer = 1
Compare1a = 50000 'porovnávací hodnota (5 ms)
Enable Interrupts 'povol přerušení
Enable Compare1a 'povol přerušení COMPARE1A
On Compare1a Tim 'při přerušení jdi na Tim
Declare Sub Zobraz 'deklarace procedury
Dim Pocet_preruseni As Word 'počet přerušení
Dim Vterin As Byte , Minut As Byte , Hodin As Byte
Tlac_hod Alias Pind.5 'tlačítko nastavení hodin
Tlac_min Alias Pind.6 'tlačítko nastavení minut
Config Portd = Input 'celý portD vstupní
Portd = 255 'pull-up
Cursor Off 'vypni kurzor
''''''''''''''''''''''''''' HLAVNI PROGRAM '''''''''''''''''''''''''''''''''''
Pocet_preruseni = 0 'vynuluj proměnné
Vterin = 0
Minut = 0
Hodin = 0
Do
'Test tlačítek:
If Tlac_hod = 0 Then
Cls
Incr Hodin 'přičti 1
Call Zobraz
Waitms 200 'rychlost přičítání
End If
If Tlac_min = 0 Then
Cls
Incr Minut
Call Zobraz
Waitms 200
End If
'Zobrazení na displeji:
Call Zobraz
Waitms 100
Loop
''''''''''''''''''''''''''' KONEC HLAVNIHO PROGRAMU ''''''''''''''''''''''''''
End
Sub Zobraz
Cls
Lcd Hodin ; ":"
If Minut < 10 Then 'pokud minut je 0 - 9
Lcd "0" ; Minut ; ":" 'přidáme úvodní nulu, aby výsledek byl vždy dvojmístný
Else
Lcd Minut ; ":"
End If
If Vterin < 10 Then
Lcd "0" ; Vterin
Else
Lcd Vterin
End If
End Sub
Tim: 'obsluha přerušení
Incr Pocet_preruseni 'každých 5 milisec vznikne přerušení (při 10 MHz)
If Pocet_preruseni > 199 Then '200 x 5 ms = 1 sec
Incr Vterin 'zvětši o 1
Pocet_preruseni = 0 'vynuluj počítadlo
End If
If Vterin > 59 Then
Vterin = 0
Incr Minut 'každou minutu
End If
If Minut > 59 Then
Minut = 0
Incr Hodin 'každou hodinu
End If
If Hodin > 23 Then 'každý den
Hodin = 0
End If
Return
----------------------------------
toto není moje tvorba, ale našel jsem to někde na netu, tak snad by to mohlo pomoci.
Napsal: 05 črc 2008, 16:16
od nekmil
to Robert: prozraď nám schéma a výpis programu

Napsal: 06 črc 2008, 18:49
od Robert
Paráda. Díky moc.
Už mi to jede. Ještě bych se zeptal, co a jak mám upravit pro krystal 12 MHz. Jinak pro ,,Nekmil,, konkrétněji co máš na mysly. Schéma programu nebo fyzické desky na kterou to dám?
Napsal: 07 črc 2008, 18:12
od nekmil
Myslel jsem schéma zapojení těch hodin a výpis programu.
Při použití krystalu 12MHz změň $crystal = 12000000
a v obsluze přerušení musíš přepočítat počty přerušení
Tim: 'obsluha přerušení
Incr Pocet_preruseni 'každých 5 milisec vznikne přerušení (při 10 MHz)
If Pocet_preruseni > 199 Then '200 x 5 ms = 1 sec
Incr Vterin 'zvětši o 1
Pocet_preruseni = 0 'vynuluj počítadlo
End If
Napsal: 07 črc 2008, 18:30
od Robert
Přímo schéma ti můžu zaslat. Jinak to bude vosekaná testující deska, pouze ATTINY 2313, LCD monitor, asi čtyři tlačítka a podpůrné obvody pro chod (,,napájení,, , krystal, piezo).
Spíš to budou stopky než hodiny
Kdyžtak mi naište na ICQ
Napsal: 08 črc 2008, 09:17
od Návštěvník
jak mám upravit pro krystal 12 MHz
Stačí změnit řádek
Compare1a = 50000
na
Compare1a = 41666
Napsal: 09 črc 2008, 18:57
od nekmil
to anonym: teoreticky ano, ale stejně je třeba nastavit
$crystal = 12000000 protože jsou v programu použity instrukce WAITMS , jinak by ty časy neseděly

Napsal: 09 črc 2008, 19:29
od Jakut
třeba nastavit
$crystal = 12000000
To jsem předpokládal, ale i kdyby se na to zapomnělo, bude to fungovat. O něco častěji bude zobrazovat a přičítat při nastavování.
(Ten program jsem psal já).