Óra programozása
Óra programozása
Sziasztok!
Azt szeretném kérdezni a tisztelt egybegyültektől, hogy lehet-e Basic-ben pontos órát programozni 90s2313-ba LCD kijelzéssel.
Lenne egy pici programom, de ez baromira nem pontos.
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.6 , Rs = Portb.7
Config Lcd = 16 * 2
Dim Hour As Byte , Minute As Byte , Second As Byte
Kezd:
Locate 1 , 1
If Hour < 10 Then
Lcd "0" ; Hour
Else
Lcd Hour
End If
Lcd ":"
If Minute < 10 Then
Lcd "0" ; Minute
Else
Lcd Minute
End If
Lcd ":"
If Second < 10 Then
Lcd "0" ; Second
Else
Lcd Second
End If
Wait 1
Second = Second + 1
If Second > 59 Then
Second = 0
Minute = Minute + 1
End If
If Minute > 59 Then
Minute = 0
Hour = Hour + 1
End If
If Hour > 23 Then Hour = 0
Goto Kezd
End
köszi
Azt szeretném kérdezni a tisztelt egybegyültektől, hogy lehet-e Basic-ben pontos órát programozni 90s2313-ba LCD kijelzéssel.
Lenne egy pici programom, de ez baromira nem pontos.
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.6 , Rs = Portb.7
Config Lcd = 16 * 2
Dim Hour As Byte , Minute As Byte , Second As Byte
Kezd:
Locate 1 , 1
If Hour < 10 Then
Lcd "0" ; Hour
Else
Lcd Hour
End If
Lcd ":"
If Minute < 10 Then
Lcd "0" ; Minute
Else
Lcd Minute
End If
Lcd ":"
If Second < 10 Then
Lcd "0" ; Second
Else
Lcd Second
End If
Wait 1
Second = Second + 1
If Second > 59 Then
Second = 0
Minute = Minute + 1
End If
If Minute > 59 Then
Minute = 0
Hour = Hour + 1
End If
If Hour > 23 Then Hour = 0
Goto Kezd
End
köszi
Nono.
Az óra léptetése nem így kell megy.
Timer programrészletet nézd meg. Illetve a versenyfeladatok között a ma felkerült is pont egy ilyen alkalmazás...
A config timer részt nézd meg. ez periódikus megszakítást csinál. Timer0 8 bites, a Timer1 16 bites.
Illetve egy _bonyolultabb_ megoldás ollózható ki a 902-es projektből is.
Javasolt az AVRCalc program-segédlet tanulmányozása is....
.
Na jó sokat megaszontam.
Az óra léptetése nem így kell megy.
Timer programrészletet nézd meg. Illetve a versenyfeladatok között a ma felkerült is pont egy ilyen alkalmazás...
A config timer részt nézd meg. ez periódikus megszakítást csinál. Timer0 8 bites, a Timer1 16 bites.
Illetve egy _bonyolultabb_ megoldás ollózható ki a 902-es projektből is.
Javasolt az AVRCalc program-segédlet tanulmányozása is....
Na jó sokat megaszontam.
Ja igen!Robert írta:Nono.
Az óra léptetése nem így kell megy.
Timer programrészletet nézd meg. Illetve a versenyfeladatok között a ma felkerült is pont egy ilyen alkalmazás...
A config timer részt nézd meg. ez periódikus megszakítást csinál. Timer0 8 bites, a Timer1 16 bites.
Illetve egy _bonyolultabb_ megoldás ollózható ki a 902-es projektből is.
Javasolt az AVRCalc program-segédlet tanulmányozása is.....
Na jó sokat megaszontam.
Megnéztem az órás pályamunkát és rá kellett jönnöm, hogy az én tudásom etéren a béka feneke alatt van
-
lajostoth
Sziasztok!
Az ora interruptos kezelesehez kapcsolodva...
Az alabbi progammal probalkoztam, de a megszakitas rutinba nem akar belepni. A foprogram a C.1 bitet villogtatja, a megszakitasnak a C.1 biten kellene egy tusket kiadni, de ide nem jut el a program... Torespontnal nem all meg, szkoppal nezve nincs jelvaltozas...
Megszakitasok engedelyezve. (?)
Enable Interrupts
Enable Timer0
Mit rontottam el?
-----------------------------------------------
$regfile = "M16DEF.dat"
$crystal = 7372800
Config Pinc.0 = Output
Config Pinc.1 = Output
Dim Wtime As Word
Config Timer0 = Timer , Prescale = 1
On Timer0 Pulse:
Wtime = 50
Enable Interrupts
Enable Timer0
Do
Set Portc.1
Waitms Wtime
Reset Portc.1
Waitms Wtime
Loop
Pulse:
Toggle Portc.0
Return
End
Az ora interruptos kezelesehez kapcsolodva...
Az alabbi progammal probalkoztam, de a megszakitas rutinba nem akar belepni. A foprogram a C.1 bitet villogtatja, a megszakitasnak a C.1 biten kellene egy tusket kiadni, de ide nem jut el a program... Torespontnal nem all meg, szkoppal nezve nincs jelvaltozas...
Megszakitasok engedelyezve. (?)
Enable Interrupts
Enable Timer0
Mit rontottam el?
-----------------------------------------------
$regfile = "M16DEF.dat"
$crystal = 7372800
Config Pinc.0 = Output
Config Pinc.1 = Output
Dim Wtime As Word
Config Timer0 = Timer , Prescale = 1
On Timer0 Pulse:
Wtime = 50
Enable Interrupts
Enable Timer0
Do
Set Portc.1
Waitms Wtime
Reset Portc.1
Waitms Wtime
Loop
Pulse:
Toggle Portc.0
Return
End
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00
Üdv!
Az én kütyümben is van vekker. A timer1 csinálja de nem vagyok vele elégedett. Belső oszcillátorral kritikán aluli. Mostanában tettem rá kvarcot de még mindig van valami gond. Erős a gyanúm, hogy a programomban van a hiba.
OFF:
Fusebitek -ben jártas valaki?
Én MEGA32 vel szenvedek. nem tudom felhúzni 16Mhz-re. Már megy 12MHz-en. De nekem ez kevés.

Az én kütyümben is van vekker. A timer1 csinálja de nem vagyok vele elégedett. Belső oszcillátorral kritikán aluli. Mostanában tettem rá kvarcot de még mindig van valami gond. Erős a gyanúm, hogy a programomban van a hiba.
OFF:
Fusebitek -ben jártas valaki?
Én MEGA32 vel szenvedek. nem tudom felhúzni 16Mhz-re. Már megy 12MHz-en. De nekem ez kevés.
Külső órajel fusebitjét ld. adatlapon....
M16 esetén 1111-re kell rakni, kvarccal és 2*27pF kondival szoktam.
A beslő osc +/-5% pontosságú. PC sorosporti kommunikációra, alacsony sebességen még jó. (9600 bps)
Ha timer1 és IT, akkor az IT rutin ne legyen túl hosszú! Illetve ha más IT van, akkor sorrendben hajtódnak végre. De miért nem külső 32.768-as kristályt használsz a timer2-n? Itt az órakezelő rutiniok egyből élnek és a kód hossza is jóval rövidebb.
M16 esetén 1111-re kell rakni, kvarccal és 2*27pF kondival szoktam.
A beslő osc +/-5% pontosságú. PC sorosporti kommunikációra, alacsony sebességen még jó. (9600 bps)
Ha timer1 és IT, akkor az IT rutin ne legyen túl hosszú! Illetve ha más IT van, akkor sorrendben hajtódnak végre. De miért nem külső 32.768-as kristályt használsz a timer2-n? Itt az órakezelő rutiniok egyből élnek és a kód hossza is jóval rövidebb.
32.768 Az KHz ben értendő?
A fusebiteket én is 1111 re állítottam meg a CKOPT -ot is átállítottam.
De nem akart menni össze vissza villogtak a ledek meg recsegett a speaker.
Olyan érzésem volt mintha a program össze vissza menne mindenfelé.
A reset áramköröd hogy néz ki 16 MHz-en?
De 12 MHz-en megy rendesen, a hétvégén kipróbálom 14 MHz-en is.Ha megjön a kvarc hozzá.
A nem túl hosszú IT rutin mit jelent? A szimulátor szerint a legrosszab esetben is kb150 órajel alatt lefut a T1 megszakrutin. Szerintem az nem mondható hosszúnak.
Egyébként van másik külső megszakom is.
A fusebiteket én is 1111 re állítottam meg a CKOPT -ot is átállítottam.
De nem akart menni össze vissza villogtak a ledek meg recsegett a speaker.
Olyan érzésem volt mintha a program össze vissza menne mindenfelé.
A reset áramköröd hogy néz ki 16 MHz-en?
De 12 MHz-en megy rendesen, a hétvégén kipróbálom 14 MHz-en is.Ha megjön a kvarc hozzá.
A nem túl hosszú IT rutin mit jelent? A szimulátor szerint a legrosszab esetben is kb150 órajel alatt lefut a T1 megszakrutin. Szerintem az nem mondható hosszúnak.
Egyébként van másik külső megszakom is.
Igen.
DE: nem a normál kvarc helyére megy, hanem a TOSC1 TOSC2 lábra. A súgó/adatlapok az aszinkron timer néven hivatkoznak rá. A Bascom súgó is
(Config Clock pont).
Tipp: Watchdog nem resetel? Esetleg tápon belül ingadozás (BOD bekapcsolva?)?
Az IT rutinban ennyi bőven jó. Ott nem lehet ilyen gond (azt hittem pl. ott van LCD-re kiiratás).
DE: nem a normál kvarc helyére megy, hanem a TOSC1 TOSC2 lábra. A súgó/adatlapok az aszinkron timer néven hivatkoznak rá. A Bascom súgó is
(Config Clock pont).
Tipp: Watchdog nem resetel? Esetleg tápon belül ingadozás (BOD bekapcsolva?)?
Az IT rutinban ennyi bőven jó. Ott nem lehet ilyen gond (azt hittem pl. ott van LCD-re kiiratás).
