Fórum témák
» Több friss téma |
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.
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.
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.
Szerintem a Propicet használd. Nekem még nem okozott csalódást. A JDM-et nem ismerem.
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!
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
ja meg vhova az elején lenulláznám a t-t.
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.
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.
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.
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.
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.
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.
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
É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.
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.
Nem baj. az ismétlés nem árt senkinek.....
É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
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!
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.
4MHz-hez 22pF-os kondik kellenek.....
Ha így sem lesz jó akkor valami a mechanikában lehet a baj.
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ő.
hm.. mindenképp kvarc freki függű lesz mivel a pic sebessége is a kvarc frekijétől függ...
ez így 100%, hogy nem jó, hiszen a feladatok végrehastása is idő
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:
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.
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..... |
Bejelentkezés
Hirdetés |