Digitální hodiny v Bascomu na ATTINY 2313

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Robert
Příspěvky: 17
Registrován: 25 led 2005, 00:00
Bydliště: Zlín
Kontaktovat uživatele:

Digitální hodiny v Bascomu na ATTINY 2313

#1 Příspěvek 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
Uživatelský avatar
rkozeluh
Příspěvky: 262
Registrován: 17 úno 2007, 00:00
Bydliště: Liberec

#2 Příspěvek 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.
Uživatelský avatar
nekmil
Příspěvky: 787
Registrován: 06 bře 2005, 00:00
Bydliště: Havířov

#3 Příspěvek od nekmil »

to Robert: prozraď nám schéma a výpis programu :)
Uživatelský avatar
Robert
Příspěvky: 17
Registrován: 25 led 2005, 00:00
Bydliště: Zlín
Kontaktovat uživatele:

#4 Příspěvek 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?
Uživatelský avatar
nekmil
Příspěvky: 787
Registrován: 06 bře 2005, 00:00
Bydliště: Havířov

#5 Příspěvek 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
Uživatelský avatar
Robert
Příspěvky: 17
Registrován: 25 led 2005, 00:00
Bydliště: Zlín
Kontaktovat uživatele:

#6 Příspěvek 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 :lol:
Kdyžtak mi naište na ICQ
Návštěvník

#7 Příspěvek od Návštěvník »

jak mám upravit pro krystal 12 MHz

Stačí změnit řádek
Compare1a = 50000
na
Compare1a = 41666
Uživatelský avatar
nekmil
Příspěvky: 787
Registrován: 06 bře 2005, 00:00
Bydliště: Havířov

#8 Příspěvek 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 :)
Jakut

#9 Příspěvek 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á).
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“