www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Ura z PIC16F877A

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 460
Aktiv.: 2.09

PrispevekObjavljeno: Ned Mar 14, 2010 1:04 pm    Naslov sporočila:  Ura z PIC16F877A Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dkone
Član
Član



Pridružen-a: Sre 07 Mar 2007 18:53
Prispevkov: 2120
Aktiv.: 9.11
Kraj: Krško

PrispevekObjavljeno: Ned Mar 14, 2010 3:54 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 460
Aktiv.: 2.09

PrispevekObjavljeno: Ned Jun 20, 2010 4:22 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 460
Aktiv.: 2.09

PrispevekObjavljeno: Ned Jun 20, 2010 4:55 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
polhar
Član
Član



Pridružen-a: Sob 04 Mar 2006 9:11
Prispevkov: 365
Aktiv.: 1.49
Kraj: Dol pri Ljubljani

PrispevekObjavljeno: Pon Jun 21, 2010 4:20 pm    Naslov sporočila:   Odgovori s citatom

koliko pa zaostaja

tista dva kondezatorja pri kvarcu vplivata na frekvenco (na 3. ali pa 4. decimalki)

jaz bi zadevo izvedev podobno temule: http://www.kmitl.ac.th/~kswichit%20/Ajay2/clock.html
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 460
Aktiv.: 2.09

PrispevekObjavljeno: Pon Jun 21, 2010 5:30 pm    Naslov sporočila:   Odgovori s citatom

cca. 7 min zaostaja
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
polhar
Član
Član



Pridružen-a: Sob 04 Mar 2006 9:11
Prispevkov: 365
Aktiv.: 1.49
Kraj: Dol pri Ljubljani

PrispevekObjavljeno: Pon Jun 21, 2010 10:46 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 460
Aktiv.: 2.09

PrispevekObjavljeno: Sob Jun 26, 2010 11:31 am    Naslov sporočila:   Odgovori s citatom

a mi kdo lahko svetuje kako uporabiti tipke za nastavitev trenutnega časa??

edit: zadevo s tipko sem rešil
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 460
Aktiv.: 2.09

PrispevekObjavljeno: Sob Jun 26, 2010 3:24 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 460
Aktiv.: 2.09

PrispevekObjavljeno: Pon Jan 17, 2011 6:46 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14803
Aktiv.: 59.90

PrispevekObjavljeno: Pon Jan 17, 2011 7:06 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 460
Aktiv.: 2.09

PrispevekObjavljeno: Pon Jan 17, 2011 7:23 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14803
Aktiv.: 59.90

PrispevekObjavljeno: Pon Jan 17, 2011 7:36 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
galex4
Član
Član



Pridružen-a: Tor 01 Apr 2008 18:27
Prispevkov: 460
Aktiv.: 2.09

PrispevekObjavljeno: Sob Jan 22, 2011 1:24 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 17.60

PrispevekObjavljeno: Sob Jan 22, 2011 1:48 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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