Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

Tisočinka

 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Boštjan
Profesionalec


Pridružen/-a: Tor Mar 2004 22:48
Prispevkov: 100

PrispevekObjavljeno: Čet Nov 15, 2012 6:39 pm    Naslov sporočila: Tisočinka Odgovori s citatom

Kako v AVRBascomu generirat stotinko sekunde, čim bolj natančno?
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Boštjan
Profesionalec


Pridružen/-a: Tor Mar 2004 22:48
Prispevkov: 100

PrispevekObjavljeno: Čet Nov 15, 2012 8:50 pm    Naslov sporočila: nekaj sem že sam naredil Odgovori s citatom

Ta program sem napisal za začetek , vendar me moti način izpisa. ki je na tak način: 1:39:22
Jaz pa želim izpisn na tak način: 00:00:000
Kje naj brišem display da ne bo utripal?


Config Timer1 = Timer , Prescale = 1
load timer1 , Timer1Reload
on ovf1 Timer1_isr
enable timer1
start timer1
enable interrupts

Dim Tistevec As Byte
Dim Seconds As Byte
Dim Minutes As Byte
Dim Hours As Byte
Dim Days As Byte

Cls
Cursor Off

' ////////////////ZANKA GLAVNEGA PROGRAMA ////////////////////////
Do

If Tistevec => 100 Then
Tistevec = 0
cls
Incr Seconds
If Seconds >= 60 Then
Seconds = 0
Incr Minutes
If Minutes >= 60 Then
Minutes = 0
End If
End If
End If
Gosub Izpis
Loop
End

Timer1_isr:
Load Timer1 , Timer1reload
Incr Tistevec
Return

Izpis:
Locate 1 , 1
Lcd Minutes ; ":" ; Seconds ; ":" ; Tistevec
Return
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
RudiP
Profesionalec


Pridružen/-a: Sre Jul 2008 8:39
Prispevkov: 128
Kraj: KOPER

PrispevekObjavljeno: Čet Nov 15, 2012 8:56 pm    Naslov sporočila: Odgovori s citatom

Z interaptom !

Pomagaš si z AVR timer calculatorjem. Ta ti pripravi kar rabiš za časovni interapt.

Primer kode:

[/code]

const Timer0Reload = 62
config timer0=timer,prescale = 64
load timer0 , Timer0Reload
on ovf0 Timer0_isr
enable ovf0
start timer0
enable interrupts
'Add your code here

Timer0_ISR:
load timer0, Timer0Reload
'Add your ISR code here
return

'Timer value explination
' The timer is a 8Bit timer, it overflows when the timer reaches 256
' The AVR is running at 4000000Hz, the prescaler is 64
' Each tick is 0,016 ms - (1 / CPUSpeed in KHz ) * Prescaler
' The timer needs 62 ticks to reach the required time ( 62 * 0,016 = 0,992ms)
' The start value for the timer must be set to 194 so that it will overflow at 256 after 62 ticks
' NOTE: The load command does the inversion for you (256-value or 65536-value)
Koda:

_________________
Lep pozdrav !
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Boštjan
Profesionalec


Pridružen/-a: Tor Mar 2004 22:48
Prispevkov: 100

PrispevekObjavljeno: Pet Nov 16, 2012 7:39 pm    Naslov sporočila: timer Odgovori s citatom

Tak del kode že imam , sedaj me zanima kako naj naredim, da moj izpis na LCD_ju ne bo tak: 1:23:1
ampak da bi bil tak: 01:23:001
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Pet Nov 16, 2012 7:52 pm    Naslov sporočila: Odgovori s citatom

Citiram:
ampak da bi bil tak: 01:23:001

Pri izpisu preverjaja ali so minute in sekunde manjše od 10 in ali so stotinke manjšeod 10 ali manjše od sto in dodaj pred izpisom istih ničlo ali ničle.
Lahko pa rezultat pretvoriš v string in uporabiš ukaz FORMAT.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Boštjan
Profesionalec


Pridružen/-a: Tor Mar 2004 22:48
Prispevkov: 100

PrispevekObjavljeno: Ned Nov 25, 2012 11:14 am    Naslov sporočila: novo vprašanje Odgovori s citatom

sedaj imam naslednji program in novo težavo.

Program:

Const Timer1reload = 15000
Config Timer1 = Timer , Prescale = 64
Load Timer1 , Timer1reload
On Ovf1 Timer1_isr
Enable Timer1
Start Timer1
Enable Interrupts
'Add your code here


Dim Tistevec As Byte
Dim Seconds As Byte
Dim Minutes As Byte
Dim Hours As Byte
Dim Days As Byte

Cls
Cursor Off

' ////////////////ZANKA GLAVNEGA PROGRAMA ////////////////////////
Do

If Tistevec => 100 Then
Tistevec = 0
Incr Seconds
If Seconds >= 60 Then
Seconds = 0
Incr Minutes
If Minutes >= 60 Then
Minutes = 0
End If
End If
End If
Gosub Izpis
Loop
End

Timer1_isr:
Load Timer1 , Timer1reload
Incr Tistevec
Return

Izpis:
If Minutes < 10 Then
Locate 1 , 1
Lcd "0" ; Minutes
Else
Locate 1 , 1
Lcd Minutes
End If
Locate 1 , 3
Lcd ":"
If Seconds < 10 Then
Locate 1 , 4
Lcd "0" ; Seconds
Else
Lcd Seconds
End If
Locate 1 , 6
Lcd ":"
If Tistevec < 10 Then
Locate 1 , 7
Lcd "0" ; Tistevec
Else
Lcd Tistevec
End If
Return

Ta program prav lepo deluje, vendar se pojavi težava, ko pridejo stotinke iz vrednost 99 na 00 se mi pojavi tak izpis:
00:01:010 ta treja nula se pojavi domnevam kot posledica stotinke 100 in naredi trimestno število, ne vem mogoče se motim, kako naj to odpravim? Izpis bi moral biti takšen: 00:01:01

LP Boštjan
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Ned Nov 25, 2012 12:48 pm    Naslov sporočila: Odgovori s citatom

Citiram:
If Tistevec < 10 Then
Locate 1 , 7
Lcd "0" ; Tistevec
Else
Lcd Tistevec
End If
Return


ta del programa poskusi popraviti:
If Tistevec < 10 Then
Locate 1 , 7
Lcd "0" ; Tistevec;" " 'pobrises vse zanake za vrednostjo
Else
Lcd Tistevec;" " 'pobrises vse zanake za vrednostjo
End If
Return
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Boštjan
Profesionalec


Pridružen/-a: Tor Mar 2004 22:48
Prispevkov: 100

PrispevekObjavljeno: Ned Nov 25, 2012 1:52 pm    Naslov sporočila: še vedno Odgovori s citatom

zanimivo.
zadeva se je bistveno izboljšala vendar se še vedno pojavi izpis
00:43:120 namesto 00:43:12 ampak se nula še vedno pojavi.
Opazil sem da se nula ne pojavi kot neko naključno število, zato je ukaz:
Lcd Tistevec ; "" ne pobriše ko se pojavi. Zdi se mi da je del spremenljivke tistevec, pojavi pa se, ko se tistevec prelije iz vrednosti 99 na 00 , zgleda tako, kot da se tretje mesto pojavi kot posledica vrednosti 100. Ne vem če ima to kak pomen.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Ned Nov 25, 2012 2:34 pm    Naslov sporočila: Odgovori s citatom

Boštjan,
jaz ti nisem napisal "", ampak " ",( narekovaj, dve prazni mesti narekovaj"!
Samo tako boš za spremenljivko pobrisal neželene karakterje.
Nisem pa se spuščal v program da vidim ali je še kakšna napaka.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Boštjan
Profesionalec


Pridružen/-a: Tor Mar 2004 22:48
Prispevkov: 100

PrispevekObjavljeno: Ned Nov 25, 2012 4:02 pm    Naslov sporočila: ja sem razumel Odgovori s citatom

Ja sem razumel, da bi za stoticama naredil še dve prazni mesti, tako
LCD tistevec ; " "
ampak žal mi ne pomaga, ničla ki se mi pojavi je verjetno pojav iz spremenljivke tistevec zato je ne pobriše.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Ned Nov 25, 2012 5:02 pm    Naslov sporočila: Odgovori s citatom

Boštjan,
na žalost izpis na LCD ni tako hitrer kot si mislil.
Ko prideš pri izpisu na LCD do tega da izpišeš stotinke ti se števec že poveča.
pri izpisu stotic preveri ali je rezultat tega >100, če je ga deli z 10.
Pripni cel tvoj program vključno z reg file, crystal . . .
Programa ne prepisuj ampak ga kopiraj takšnega kot ga uporabljaš.
Zakaj imaš prekinitev vsako milisekundo če prikazuješ desetinke?
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Boštjan
Profesionalec


Pridružen/-a: Tor Mar 2004 22:48
Prispevkov: 100

PrispevekObjavljeno: Ned Nov 25, 2012 6:50 pm    Naslov sporočila: zanimivo Odgovori s citatom

Hvala vlado.
Sedaj sem naredil tri presledke in deluje ok.
Sedaj pa bi naredil še start in stop, mogoče kakšna ideja.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Boštjan
Profesionalec


Pridružen/-a: Tor Mar 2004 22:48
Prispevkov: 100

PrispevekObjavljeno: Čet Dec 06, 2012 7:32 pm    Naslov sporočila: sem ugotovil v čem je težava Odgovori s citatom

Težava se pojavi kadar se izvaja izpis na lcd in se pojavi prekinitev za stotinko. Ali se da dobiti stotinke kako drugače brez prekinitve?
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Jure
Urednik


Pridružen/-a: Pon Jan 2004 12:51
Prispevkov: 2132
Kraj: Ljubljana

PrispevekObjavljeno: Čet Dec 06, 2012 7:47 pm    Naslov sporočila: Odgovori s citatom

Boštjan,

Vlado je predlagal, da pripni program, sicer tipamo v temi in verjemi, da ni enostavno takole svetovati.

Če ti prekinitev uniči prikaz na LCD-ju lahko uporabiš ukaz INITLCD tik preden skočiš v rutino za prikaz.

Lp
Jure
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski č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
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group