 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
| Poglej prejšnjo temo :: Poglej naslednjo temo |
| Avtor |
Sporočilo |
galex4 Član

Pridružen-a: Tor 01 Apr 2008 18:27 Prispevkov: 460 Aktiv.: 2.09
|
Objavljeno: Ned Mar 14, 2010 1:04 pm Naslov sporočila: Ura z PIC16F877A |
|
|
Pravkar se igram z uro v programskem jeziku mikrobasic, za takt skrbi zunanji oscilator 8MHz ter z ustrezno nastavitvijo prescalerja 1:4 dobim 1ms, uro prikažujem na lcd, za vidnost takta (tik-tak) je prikazano z dvopičjem(utrip), problem mi nastane takkrat ko želim zadevo"polepšati", ker imam za izpis spremenljivko definirano kot char mi zasede 3 mesta -> 000:000, ko pa šteje pa zgleda tako 00: 01, kako bi lahko to naredil v tej obliki 0:00 tu je glavni del kode:
| Koda: |
Lcd_Out(1, 1, "Time: 00:00")
while true
if i = 1000 then
Inc(j)
if j mod 2 = 0 then
Lcd_Out(1, 9, ":")
else
Lcd_Out(1, 9, " ")
end if
if j <= 119 then
ByteToStr(j/2, sek)
Lcd_Out(1, 10, sek)
else
j = 0
Inc(k)
if k < 2 then
ByteToStr(k, min)
Lcd_Out(1, 6, min)
else
k = 0
end if
end if
i = 0
end if
wend
|
se pa tudi opazi ko preide iz sekunde na minuto npr.: iz 00:59 se opazi ta korak 1:59 in še nato 1:00, pa še ko je k večji od 2 mi k ne postavi na 0 ampak na 1
prosim za pomoč |
|
| Nazaj na vrh |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2120 Aktiv.: 9.11 Kraj: Krško
|
Objavljeno: Ned Mar 14, 2010 3:54 pm Naslov sporočila: |
|
|
Najprej vse izračunaj.
Na LCD izpiši samo enkrat, na koncu.
Izračunaš minute (min), znak (: ali _ ) in sekunde (sek), in izpišeš kot niz.
Lcd_Out(1, 6, min znak sek)
Poštimaj sintakso za izpis niza, saj pečem PICe v zbirniku in nimam pojma o mikrobasicu.
Glede 000:000 naj kdo drug poda rešitev.
Morda:
Lcd_Out(1, 6, min)
Lcd_Out(1, 6, ' ') ; s presledkom povoziš prvo 0 od 000 minut
Lcd_Out(1, 7, ' ') ; s presledkom povoziš drugo 0 od 000 minut
Lcd_Out(1, 9, sek)
Lcd_Out(1, 9, znak) ; z znakom povoziš prvo 0 od 000 sekund _________________ Denis |
|
| Nazaj na vrh |
|
 |
galex4 Član

Pridružen-a: Tor 01 Apr 2008 18:27 Prispevkov: 460 Aktiv.: 2.09
|
Objavljeno: Ned Jun 20, 2010 4:22 pm Naslov sporočila: |
|
|
zadeve sem se lotil na malce drugač način
koda:
| Koda: |
'prekinitvena procedura
sub procedure interrupt
Inc(i)
'TMR0 = 6
TMR0 = 6
'GIE - OFF; T0IE - ON; T0IE - OFF
INTCON = %00100000
end sub
main:
TRISB = 0
PORTB = 0
Lcd_Init()
Lcd_Cmd(_LCD_CURSOR_OFF)
Lcd_Cmd(_LCD_CLEAR)
'PRESCALER 1:4
OPTION_REG = %10000001
'GIE - ON; T0IE - ON; T0IF - ON
INTCON = %10100000
TRISB = %00000000
PORTB = 255
TMR0 = 6
txt = "00:00:00"
i = 0
j = 47
k = 48
x = 48
y = 48
c = 48
v = 48
dvopicje = 58
presledek = 32
'prikaži na lcd
Lcd_Out(1, 1, "Time: ")
Lcd_Out(1, 7, txt)
'po preteku 1s naj poveča števec in izpiše
while true
if i = 1000 then
'povečaj števec za 1
Inc(j)
'00:00:00
' ^
'če je j večji od 9 ga postavi na 0
if j >= (48+10) then
j = 48
Inc(k)
end if
'00:00:00
' ^
'če je k večji od 5 ga postavi na 0
if k >= (48+6) then
k = 48
Inc(x)
end if
'00:00:00
' ^
'če je x večji od 9 ga postavi na 0
if x >= (48+10) then
x = 48
Inc(y)
end if
'00:00:00
' ^
'če je y večji od 5 ga postavi na 0
if y >= (48+6) then
y = 48
Inc(c)
end if
'00:00:00
' ^
'če je c večji od 9 ga postavi na 0
if c >= (48+10) then
c = 48
Inc(v)
end if
'00:00:00
'^
'če je v večji od 5 ga postavi na 0
if v >= (48+6) then
v = 48
end if
gosub izpis
if j mod 2 = 0 then
Lcd_Chr(1, 12, dvopicje)
else
Lcd_Chr(1, 12, presledek)
end if
i = 0
end if
wend
izpis:
Lcd_Chr(1, 14, j)
Lcd_Chr(1, 13, k)
Lcd_Chr(1, 11, x)
Lcd_Chr(1, 10, y)
Lcd_Chr(1, 8, c)
Lcd_Chr(1, 7, v)
return
|
zadeva deluje vredu, vendar imam problem ko mi dvopičje utripa mi šteje 2 sekundi (2 koraka) kar je prehitro za realni čas, potrebujem torej utrip dvopičja na 1 sekundo, kako se lotiti te težave? |
|
| Nazaj na vrh |
|
 |
galex4 Član

Pridružen-a: Tor 01 Apr 2008 18:27 Prispevkov: 460 Aktiv.: 2.09
|
Objavljeno: Ned Jun 20, 2010 4:55 pm Naslov sporočila: |
|
|
sem rešil problem s taktom in sem preveril za koliko prehiteva oz. zaostaja
torej moja ura z mikrokontrolerjem zaostaja, kako se torej pospeši ura mikrokontrolerja? |
|
| Nazaj na vrh |
|
 |
polhar Član


Pridružen-a: Sob 04 Mar 2006 9:11 Prispevkov: 365 Aktiv.: 1.49 Kraj: Dol pri Ljubljani
|
|
| Nazaj na vrh |
|
 |
galex4 Član

Pridružen-a: Tor 01 Apr 2008 18:27 Prispevkov: 460 Aktiv.: 2.09
|
Objavljeno: Pon Jun 21, 2010 5:30 pm Naslov sporočila: |
|
|
| cca. 7 min zaostaja |
|
| Nazaj na vrh |
|
 |
polhar Član


Pridružen-a: Sob 04 Mar 2006 9:11 Prispevkov: 365 Aktiv.: 1.49 Kraj: Dol pri Ljubljani
|
Objavljeno: Pon Jun 21, 2010 10:46 pm Naslov sporočila: |
|
|
7 min na dan predvidevam
probej dati manjše kondenzatorje
mi smo imeli laboratorijsko vajo na faksu in se je frekvenca pri 1MHz kristalu takole spreminjala
če sta bila kondenzatorja (vrednosti kondenzatorjev so mogoče malo čudne ker so bile to kombinacije zaporedno in vzporedno vezanih kondenzatorjev):
24pF -> 1.000880Mhz
47pF -> 1.000523Mhz
94pF -> 1.000475Mhz
141pF -> 0.999590MHz
frekvence merjene z LeCroy wavesurfer osciloskopom |
|
| Nazaj na vrh |
|
 |
galex4 Član

Pridružen-a: Tor 01 Apr 2008 18:27 Prispevkov: 460 Aktiv.: 2.09
|
Objavljeno: Sob Jun 26, 2010 11:31 am Naslov sporočila: |
|
|
a mi kdo lahko svetuje kako uporabiti tipke za nastavitev trenutnega časa??
edit: zadevo s tipko sem rešil |
|
| Nazaj na vrh |
|
 |
galex4 Član

Pridružen-a: Tor 01 Apr 2008 18:27 Prispevkov: 460 Aktiv.: 2.09
|
Objavljeno: Sob Jun 26, 2010 3:24 pm Naslov sporočila: |
|
|
se mi je pa pojavil problem in sicer pri štetju ur 00:00:00 saj ure gredo max do 23 in se potem števec postavi na 00 ker imam ti dve ničli ločeni vsako za sebe mi dela problem druga ničla saj mora števec povečati 9x in nato še 3x kako torej to izvedem
prosim za pomoč |
|
| Nazaj na vrh |
|
 |
galex4 Član

Pridružen-a: Tor 01 Apr 2008 18:27 Prispevkov: 460 Aktiv.: 2.09
|
Objavljeno: Pon Jan 17, 2011 6:46 pm Naslov sporočila: |
|
|
| ali je možno nastaviti za mikrokrmilnik za štetje časa uporabi notranji oscilator, za točen takt ure pa se uporabi zunanji oscilator z 32kHz? |
|
| Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14803 Aktiv.: 59.90
|
Objavljeno: Pon Jan 17, 2011 7:06 pm Naslov sporočila: |
|
|
| galex4 je napisal/a: |
| ali je možno nastaviti za mikrokrmilnik za štetje časa uporabi notranji oscilator, za točen takt ure pa se uporabi zunanji oscilator z 32kHz? |
Seveda, zakaj ne? Lažje pa je kar mikrokontroler gnati s točnim oscilatorjem. _________________ lp
Silvo |
|
| Nazaj na vrh |
|
 |
galex4 Član

Pridružen-a: Tor 01 Apr 2008 18:27 Prispevkov: 460 Aktiv.: 2.09
|
Objavljeno: Pon Jan 17, 2011 7:23 pm Naslov sporočila: |
|
|
| ker še nisem tega delal pa me zanima kako se to nastavi, vem da kristal spada na priključka OSC1 in OSC2, če nastavim recimo 8Mhz notranji oscilator, potem kam priljučim oscilator z 32Khz ? na priključka OSC1 in OSC2 ali pa na pin TOCKL? |
|
| Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14803 Aktiv.: 59.90
|
Objavljeno: Pon Jan 17, 2011 7:36 pm Naslov sporočila: |
|
|
Pravzaprav se moraš zadeve lotiti zelo podobno, kot bi uporabil procesorjev oscilator. Zunanji oscilator pač pripelješ na vhod timerja. Vključiš overflow prekinitev. V prekinitveni rutini šteješ prekinitve. Po potrebi pa delaš še korekcijo timerja. _________________ lp
Silvo |
|
| Nazaj na vrh |
|
 |
galex4 Član

Pridružen-a: Tor 01 Apr 2008 18:27 Prispevkov: 460 Aktiv.: 2.09
|
Objavljeno: Sob Jan 22, 2011 1:24 pm Naslov sporočila: |
|
|
kako pa priključim zunajnji oscilator z 32kHz na timer? Če ima oscilator 2 priključka, en priključek gre na pin mikrokontrolerja RA4/TOCKl, kam pa pripeljem drugega?
ker običajno je zunanji oscilator, ki skrbi za delovanje je priljučen na osc1 in osc2 |
|
| Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 17.60
|
Objavljeno: Sob Jan 22, 2011 1:48 pm Naslov sporočila: |
|
|
T0CKI je vhod za timer 0. Kristal se pa priključi na timer 1 (T1OSI/T1OSO pin).
Glej sliko 6-2 v datasheetu, vse je lepo narisano in napisano. _________________ Tule nisem več aktiven. |
|
| Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 233 dni
Powered by phpBB © 2001, 2005 phpBB Group
|