Fórum témák

» Több friss téma
Fórum » Óravezérlő
 
Témaindító: Lucifer, idő: Dec 20, 2005
Témakörök:
Lapozás: OK   3 / 9
(#) bbatka válasza Lucifer hozzászólására (») Jan 20, 2006 /
 
Valószínűleg hardveresen eltér a 16F62X-ektől a 16F818. Még az is lehet hogy nincs TMR0-ja. Nem ismerem. Letöltöm a doksiját a Microchip.com-ról, aztán a hétvégén átnézem hogy mi is ez a 16f818.
(#) bbatka válasza bbatka hozzászólására (») Jan 23, 2006 /
 
Nincs semmi gáz. Csak egy kis szintaktikai hiba. A 16f818-nál már máshogy hívják a TMR0-t. Itt a helyes megoldás.

ora.hex
    
(#) bbatka válasza bbatka hozzászólására (») Jan 23, 2006 /
 
2. rész

ora.bas
    
(#) Lucifer válasza bbatka hozzászólására (») Jan 23, 2006 /
 
Hálásan köszönöm!

Megpróbálkozok a felégetésével. 11 volt jön le a soros portomról, az elég egy külső táp nélküli JDM-égetőnek??
Mondjuk ha nem az sem baj, van a környéken elég régebbi PC, meg már készül a ProPic égetőm.
(#) bbatka válasza Lucifer hozzászólására (») Jan 24, 2006 /
 
Szerintem a Propicet használd. Nekem még nem okozott csalódást. A JDM-et nem ismerem.
(#) Lucifer válasza bbatka hozzászólására (») Máj 18, 2006 /
 
Sziasztok!
Na elkészült a "nagy mű". És mit ad a jó Isten működik. Na jó nem tökéletesen, de működik - késik vagy 3 órát naponta . Fix nyákon van a kvarc, kondik egyenlő távra a PIC-től szimmetrikusan, a kvarc háza átkötve egy dróttal a GND-hez. Nem a táp zaja miatt késik ugyanis próbáltam már egy ólomakksiról is - az meg szerintem nem túl zajos . Kissé módosítottam a szoftvert kérném nézzétek már át, nem e abban van a hiba. Válaszaitokat előre is köszönöm!

ora.bas
    
(#) Báddzsó válasza Lucifer hozzászólására (») Máj 18, 2006 /
 
sztem jó, de felesleges a tmr0if vizsgálata mivel csak akkor ugrik a programnak ebbe a részébe ha a tmrf0if=1,
én az On Interrupt sor után azonnal a INTCON.TMR0IF = 0 -t írnám. a sok if helyett select case-t használtam volna. nemtudom, hogy ilyen mélységben (5) müxik e az if, de felesleges egymásba ágyazni. ja meg nem tudom, hogy jó már 2 helyen láttam kvarcot kondik nélkül(gyári kapcsolások), sztem próbáld ki úgy is hátha pontosabb.

nálam igy nézne ki:

'Készítette: bbatka, Báddzsó összevisszátirogatta
'Fejlesztő környezet: Picsimulatoride
'2005.12.21.
'Pic16f818 kvarc 32768 Hz
'Megszakítás ha 32768/4/32=256 =>másodpercenkénti megszakítás=1
Dim t As Byte
TRISA = %00000000
TRISB = %00000000
PORTB = 0
OPTION_REG = %11000100 'TMR0 előosztó értéke: 32
INTCON.TMR0IE = 1 'engedélyezi TMR0 megszakítást
INTCON.GIE = 1 'engedélyez minden nem maszkolt megszakítást


On Interrupt 'interrupt routine
INTCON.TMR0IF = 0 'engedélyezése az új TMR0 megszakításnak
t = t + 1
If t = 59 Then PORTB.7 = 1
If t = 60 Then PORTB.7 = 0
f t = 119 Then PORTB.6 = 1
If t = 120 Then
PORTB.6 = 0
t = 0
Endif
Resume


(#) Báddzsó válasza Báddzsó hozzászólására (») Máj 18, 2006 /
 
ja meg vhova az elején lenulláznám a t-t.
(#) bbatka válasza Lucifer hozzászólására (») Máj 19, 2006 /
 
A szimulatorban lepróbáltam és pontos volt. Szerintem néha valamelyik impulzus nem léptet.
Próbáld meg az impulzus szélességet kicsit növelni.
A Picsimulatoride-ben sajna nincs select case.
(#) bbatka válasza bbatka hozzászólására (») Máj 19, 2006 /
 
Milyen kiegészítő kapcsolást tettél még a PIC mögé? Az órát meghajtó teljesítmény kapcsolás érdekel. Szerintem ott lesz a bibi hogy nem léptet stabilan. Előbb-utóbb csak összehozzuk.
(#) Lucifer válasza bbatka hozzászólására (») Máj 19, 2006 /
 
Szisasztok!
Köszönöm a kimerítő válaszokat!
Egy H-hidat építettem BD241 BD242-vel aminek a két bemenetét két BC547-el hajtottam meg. Előttük két 10 kiloOhmos ellenállás.
Más tegnep megmértem mennyi idő alatt ugrik. 1 perc 3 és 1perc 4 másodpercre jön ki. Ez kb 64 másodperc ami ugye szép kerek szám. Tehát nekem eléggé szoftvergyanús lett. Mindegy most átírom a programot, a Báddzsó által módosítottra meglátom mit fog eredményezni. Meg megpróbálom megy e a kondik nélkül.
(#) eSDi válasza Lucifer hozzászólására (») Máj 19, 2006 /
 
Szerintem frekimérővel nézd meg hogy tényleg 32768Hz-en rezeg e! Szerintem kondi nélkül nem fog menni az éppen hogy azért kell hogy beinduljon a rezgés. Az egyik kondi helyére tegyél trimmer kondit és akkor be tudod lőni pontosan a frekit.
(#) Lucifer válasza eSDi hozzászólására (») Máj 19, 2006 /
 
Sziasztok!
Sajnos frekimérőm nincs még, így marad a bizalom a boltban. (Azt kapod-e amit kérsz )
Viszont kiszedtem belőle a kondikat és akár hiszed akár nem megy. És így is ~64 másodpercenként vált.
(#) eSDi válasza Lucifer hozzászólására (») Máj 19, 2006 /
 
Hmm. akkor a progiban van a bibi vagy a fene tudja. a prescaler az biztos hogy jó mert 1.003921569 másodpercre jön ki az interrupt.
(#) eSDi válasza eSDi hozzászólására (») Máj 19, 2006 /
 
Próbáld ki így. Ezzel s nyertünk egy kis ídőt és nem kell az a sok Else.

'Készítette: bbatka
'Fejlesztő környezet: Picsimulatoride
'2005.12.21.
'Pic16f818 kvarc 32768 Hz
'Megszakítás ha 32768/4/32=256 =>másodpercenkénti megszakítás=1
Dim t As Byte
t = 0
TRISA = %00000000
TRISB = %00000000
PORTB = 0
OPTION_REG = %11000100 'TMR0 előosztó értéke: 32
INTCON.TMR0IE = 1 'engedélyezi TMR0 megszakítást
INTCON.GIE = 1 'engedélyez minden nem maszkolt megszakítást
End

On Interrupt 'interrupt routine
If INTCON.TMR0IF = 1 Then
t = t + 1
If t = 59 Then
PORTB.7 = 1
Endif
If t = 60 Then
PORTB.7 = 0
Endif
If t = 119 Then
PORTB.6 = 1
Endif
If t = 120 Then
PORTB.6 = 0
t = 0
Endif
INTCON.TMR0IF = 0 'engedélyezése az új TMR0 megszakításnak
Resume
(#) eSDi válasza eSDi hozzászólására (») Máj 19, 2006 /
 
És a prescalert így is be lehet állítani.

OPTION_REG.PSA = 0
OPTION_REG.PS2 = 0
OPTION_REG.PS1 = 1
OPTION_REG.PS0 = 0

persze a megfelelő értékre.
(#) eSDi válasza eSDi hozzászólására (») Máj 19, 2006 /
 
Jah és ez az On Interrupt-ba szerintem tök fölösleges.

If INTCON.TMR0IF = 1 Then

Mivel csak akkor van interrupt ha túlcsordul, tehát az TMR0IF = 1-el.
(#) Báddzsó válasza eSDi hozzászólására (») Máj 19, 2006 /
 
ezt már én is írtam...
(#) eSDi válasza Báddzsó hozzászólására (») Máj 19, 2006 /
 
Nem baj. az ismétlés nem árt senkinek.....
(#) eSDi válasza eSDi hozzászólására (») Máj 19, 2006 /
 
És mi lenne ha nem interruptal lenne pl így.

'Készítette: bbatka
'Fejlesztő környezet: Pic Simulator IDE
'2005.12.21.
'Pic16f818 kvarc 4MHz
TRISA = %00000000
TRISB = %00000000
PORTB = 0

loop:
RB.7 = 1
RB.6 = 0
WaitMs 1000
RB.7 = 0
RB.6 = 0
WaitMs 59000
RB.7 = 0
RB.6 = 1
WaitMs 1000
RB.7 = 0
RB.6 = 0
WaitMs 59000
Goto loop

End
(#) Lucifer válasza eSDi hozzászólására (») Máj 19, 2006 /
 
Sziasztok!
Ez igen! Van felhozatal. Köszönöjm szépen! Csak győzzem égetni meg kipróbálni.
Ez a wait-es dolog tetszik. Kipróbálom. Most éppen tüskesort fabrikálok a TAIT-emre, hogy ne kelljen szegény sokat látott 818-amat ráncigálni. Ha meglesz szólok!
(#) Lucifer válasza Lucifer hozzászólására (») Máj 21, 2006 /
 
Sziasztok!
Na kipróbáltam mindent változó eredményekkel:

A megszakításásos módosított verziókat mindet kipróbáltam továbbra is 64 másodpercenként vált.

Az eSDi féle verziót is felégettem, leletem hozzá egy kvarcot amire 4.000 volt írva de az egész éjszaka alatt csak 4 percet ment . Mondjuk a két kondi nem volt benne most benne vannak, mindjárt kipróbálom.
(#) eSDi válasza Lucifer hozzászólására (») Máj 21, 2006 /
 
4MHz-hez 22pF-os kondik kellenek.....
Ha így sem lesz jó akkor valami a mechanikában lehet a baj.
(#) Báddzsó válasza eSDi hozzászólására (») Máj 21, 2006 /
 
mindenkninek aki pices órát gyárt: katt

(http://ww1.microchip.com/downloads/en/AppNotes/00649a.pdf)
(#) bbatka válasza Lucifer hozzászólására (») Máj 22, 2006 /
 
Látom nem jutottál vele sokra a hétvégén. Délután ismét végig szimulálom. Megvárok több szimulációt, mert eddig csak egyet vártam végig. De az is lehet hogy úgy kéne módosítani a programot hogy kisebbre kéne venni az ütemadási időt és NOP-kat vagy várakozást kéne beépíteni és azzal már könnyen lehetne játszani. Tehát nem lenne ennyire kvarc freki függő.
(#) Báddzsó válasza bbatka hozzászólására (») Máj 22, 2006 /
 
hm.. mindenképp kvarc freki függű lesz mivel a pic sebessége is a kvarc frekijétől függ...
(#) Báddzsó válasza eSDi hozzászólására (») Máj 22, 2006 /
 
ez így 100%, hogy nem jó, hiszen a feladatok végrehastása is idő
(#) Báddzsó válasza Báddzsó hozzászólására (») Máj 22, 2006 /
 
5.3 Using the TMR0 timer

TMR0 timer is 8-bit and has working range of 255. Assuming that 4MHz oscillator is used, time period TMR0 can measure falls into 0-256 microseconds range (with 4MHz frequency TMR0 increments by one microsecond). If prescaler is used that period can be prolonged, because prescaler divides the clock in a certain ratio (prescaler settings are made in OPTION_REG register).

Following program illustrates use of TMR0 timer for generating 1 second time period. Prescaler is set to 32, so that internal clock is divided by 32 and TMR0 increments every 31 microseconds. If TMR0 is initialized on 96, overflow occurs in (256-96)*31 us = 5 ms. If variable "Brojac" is increased every time interrupt takes place, we can measure time according to the value of variable "Brojac". If "Brojac" is set to 200, time will total 200*5 ms = 1 second.

Before the main program, TMR0 should have interrupt enabled (bit 2) and GIE bit (bit 7) in INTCON register should be set.

+kép:

tmr0.gif
    
(#) eSDi válasza Báddzsó hozzászólására (») Máj 22, 2006 /
 
Csókolom! De most nem assembly-be vagyunk. Azok az idők már rég bele vannak kalkulálva a BASIC rutinokba........

ha interruptal csinája akkor itt is ugyan úgy végre kell hajtania a feledatot nem? sőt még többet is mert IF függvény is volt ott benne.
(#) Báddzsó válasza eSDi hozzászólására (») Máj 22, 2006 /
 
Csókolom! Nézd má meg még 1* azt a képet! :boxer:
,mert annak köze nincs az assemblyhez! Azért raktam ide, mert ennek biztos jó az időzítése és 4MHz-s kvarcot használ.....
Következő: »»   3 / 9
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem