Fórum témák
» Több friss téma |
Ez csak a gyári kalibrálásra vonatkozik, azaz "ezen belül húzzák be"! Nem lenne ezzel gond, ha stabil lenne, mert akkor tudná korrigálni! Itt a gond a bizonytalanságból ered, aminek legfőbb okozója a hőmérséklet változás lehet / a táp szerintem elég stabil!/ Az a baj, hogy a közölt karakterisztika elnagyolt és nemlineáris, így nem lehet pontosan megmondani, hogy 20 C hőmérséklet változás milyen frekvenciaváltozást okoz, én úgy tippeltem, hogy akár az 1 ezreléknél is több lehet !
Megfelelne, de oda nem lehet szerintem zip fájlt feltölteni!
Üdv!
A gyári bootloaderekben (hex) van boot gomb konfigurálva, vagy csak akkor ha magam konfigolok egyet a forráskódból? PIC18F14K50-hez lenne.
Persze, hogy van , azt azért nem olyan egyszerű a hex-ben megadni !
Sziasztok!
Próbált már valaki CCS C-ben FVR-t használni az ADC-hez feszültség referenciának? Hogy lenne érdemes? A PIC tápfeszültségét szeretném mérni, az FVR-hez képest.
100%, hogy RTC-t használnék. Ott nagyon pontosan betudod állítani a kívánt időpontokat és csupán 2 láb kell a kommunikációhoz.
Szerintem félre értettél. Van egy Gyári bootloaderem. Az egyik fejlesztő csomaggal töltöttem le. (HEX)
A kérdés az volt, hogy ez tartalmaz-e. Megnéztem egy gyári forrásfájlt, abban RB4-re van beállítva, de a gyári hex, nem reagál az RB4-re. Mondjuk a MCLR ki van kapcsolva. megnézem mit alkot ha bekapcsolom és resetelem. A hozzászólás módosítva: Jún 15, 2015
Szia!
Idézet: „A gyári bootloaderekben (hex) van boot gomb konfigurálva, vagy csak akkor ha magam konfigolok egyet a forráskódból?” Ha nem lenne benne és neked kellene "konfigolni" egyet a forráskódból, akkor minek terjesztenék ?! Inkább az a veszély áll fenn, hogy nem tudod milyen kapcsoláshoz készült a boot és hol van a hozzátartozó nyomógomb ! A boot gombnak az az értelme, hogy a kontroller induláskor megnézi, hogy nyomják-e a gombot. Ha igen, akkor boot mód, ha nem, akkor normál futás! Ha RESET nem volt aktív, akkor hiába nyomkodod a boot gombot ! Etz úgy tudtad volna kipróbálni a konfig bitek állítása nélkül, hogy a táp ráadása előtt már nyomod a boot gombot !
Megvolt, nem működött. Gondoltam csak béna vagyok mert vezetékkel próbáltam (gomb nincs rajta, az fölösleges eszköz ) Amihez letöltöttem azon nincs reset gomb, feltöltés után I2C to USB hídként működött. Viszont gondoltam, hogy nem csináltak hozzá külön bootloadert, hanem a kontrollerhez a simát adták amihez van forráskód is, de ezek szerint nem. Na mindegy, csinálok hozzá egyet.
"Van egy Gyári bootloaderem." Melyik gyár melyik bootloadere? A Low Pin Count USB Dev kitnél a Microchip az RA3 bemenetet (MCLR funkció letiltása mellett) használja. Azt vettem át én is a PICCOLO projekthez.
Mivel PIC-ről beszélünk természetesen a microchip-é, onnan töltöttem le, ha nem fogalmaztam érthetően elnézést, de aki akarja megérti. És low pin count, mert 18f14k50. Én viszont az MLA forrásan RB4-et láttam, azt néztem meg, de kipróbáltam a reset lábon is (RA3) azon sem működött, ha nyomva tartva csatlakoztattam. Lehet, hogy csak béna voltam, de azért kipróbálom a piccolo-s bootloadert is és akkor kiderül, hogy ugyanezt töltöttem-e le.
És láss csodát, a 2013.06.15-ös ben valóban az RA3-on van, tehát ehhez a fejlesztői csomaghoz kreáltak egy sajátot amiben nincs boot gomb. Viszont belenéztem ujra a forrásba, valóban RA3-ra van definiálva, a 4550-en van RB4-en.
A hozzászólás módosítva: Jún 16, 2015
Sziasztok!
Mikropascalban programoznék egy PIC16F886-ot. A feladat egyszerű, de nem boldogulok vele. Egy ledet folyamatosan villogtatnia kellene a pic-nek, egy másikat pedig csak akkor, ha az RB0/INT lábon kap egy impulzust. Ennek vizsgálatához Timer0-t szeretnék használni. A jelenség, hogy ha a Timer0-t engedélyezem, akkor az RB0/INt láb impulzusaira villog a megfelelő led, viszont a főprogramban megadott másik led nem vált állapotot, ha viszont kikapcsolom a Timer0-t, akkor a főprogramban villogtatott led működik, értelemszerűen a másik nem. A program lényegi része:
Tudja valaki miért van ez? A hozzászólás módosítva: Jún 18, 2015
Fontos még hozzátennem, hogy a PIC belső óráját szeretném használni.
Ha a OPTION_REG.T0CS értékét változtatom, akkor szintén hol az egyik, hol a másik led működik. Fordításnál INTOSC oscillatort állítottam be.
No lehet sikerült megoldanom, de nem tudom miért is így működik.
Ha a TMR0 értékét 255 helyett 1-re állítom, és minden megszakításnál ismét, akkor működik. Jól gondolom, hogy a Timer0 megszakítás hamarabb lefutott mint maga a fő program és ez gátolta a főprogram működését, folyamatosan újraindítva azt?
Szia!
1 - A Figure 14-7 szerint a PEIE nem kell, ha csak a RB és a TMR0 megszakítást használod. 2 - A TIMER0 felfelé számol, ha 255 -öt írsz bele, akkor azonnal (náhány utasítás ideje alatt) túlcsordul és T0IF 1 -re vált. 3 - Az RB megszakítás használatához a INTCON.RBIE = 1; beállítás kell. 4 - Ha a TMR0 megszakítást is használod, a procedure Interrupt -ban meg kell írni a TMR0 megszakítás kezelését is. Miután nem használod ki ezt a megszakítást elegendő az INTCON.T0IE = 0;
Köszi az infot!
Az utolsót nem értettem. Leállításkor ki kell kapcsolni a timer0-t? Azt hogyan?
Hello!
Megint értetlenkedem egy kicsit. Minek a vizsgálatához kell a TMR0? Csak azt látom, hogy elindítod és slussz. Megy a végtelen ciklus a B2 alternálásáva, és figyeli az INT-et, de mihez kell a TMR0. Másik, nem néztem az adatlapot, de ha T0IF bebillen akkor végtelen megszakításba megy, mert sehol sem törlöd csak indításkor.
Valahogy így:
Fordulatszámláláshoz kell a timer. A leddel csak teszteltem, hogy működik-e.
A másik led pedig csupán a főprogram futását jelzi. Az INTCON.T0IF tudtommal a TOCKI (RA4) lábon érkező impulzusra vált, azt pedig nem használom csak az említett INT (RB0) lábat, ami az INTCON.INTF -et billenti át. Idézet: „Az INTCON.T0IF tudtommal a TOCKI (RA4) lábon érkező impulzusra vált” Téves! Olvasd el a TMR0 leírását. A timer flag-ek mindíg a timerek túlcsordulását, vagy a TMR2 esetén a PR2 és postscaler által beállított érték elérését jelzik. Szerk: Csak kiegészítésként, a T0CKI-ra érkező impulzus a timer értékét növeli. A jelzőbithez nem sok köze van. A hozzászólás módosítva: Jún 18, 2015
Tehát a INT lábon érkező impulzus csak elindítja a timer0 számlálóját, és amikor az eléri a 255-öt, akkor vált a INTCON.INTF? Mert akkor az 1-től történő számítás téves adatot fog adni fordulatszámnál. Ezek szerint nem véletlenül volt 255-től indítva a számlálás, hiszen így szinte azonnal átbillen.
A valódi megoldást pedig nem az 1-től indított számláló, hanem a INTCON.T0IF := 0; értéke adja. A hozzászólás módosítva: Jún 18, 2015
Na akkor tegyük tisztába.
Az INT lábon érkező impulzus megszakítást generál amit le is kezeltél az interrupt procedurában. Az INT lábnak semmi köze a TMR0-hoz. A TMR0 mindíg fut, csak engedélyezni és tiltani lehet a hozzá tartozó megszakítást. A TMR0 órajele lehet a T0CKI lábon érkező impulzus, vagy mint nálad, az FOSC/4. A TMR0 a beít értéktől számol felfelé, és 0xFF-ről 0x00-ra billenéskor(túlcsordulás) bebillenti a T0IF bitet. Ha engedélyezve van a T0IE megszakítás akkor ez megszakítást generál amit szintén le kell kezelni. Ez nálad nincs megcsinálva. Mivel a PIC16-on csak egy szintű megszakítás van, ugyanabban a megszakítás rutinban kell lekezelni ezt is mint az INT lábon érkezőt, mégpedig úgy ahogy Hp41c kolléga mutatta, IF-el megnézed mi okozta a megszakítást. Értelemszerűen mivel felfelé számol, minél nagyobb számot írsz a TMR0 regiszterbe annál gyorsabban lefut, tehát 255 azaz 0xFF esetén a következő órajelre. Továbbá, ha számolásra, időmérésre akarod használni azt is meg kell oldani. Fordulatszám számlálás esetén uygebár számolni kell a két INT megszakítés között. Elsőre ezeket emészd meg. Egy kis magyarnyelvű magyarázat: Bővebben: Link Időzítők, számlálók, timer0 menüt keresd. A hozzászólás módosítva: Jún 18, 2015
Köszönöm!
Közben rájöttem én is, hogy hülyeséget írtam! Pár havonta előszedem az elektronika hobbimat, és olyankor le kell porolnom a tudást. Néha sikerül belegabalyodni
Van még egy dolog, ami meg tudja zavarni az embert...
Ebben a példában a TMR0 megszakítás nincs lekezelve, de (legalább) egyszer keletkezik kérés. Mivel nincs lekezelve a megszakítás rutinban, a visszatéréskor a T0IF bit értéke 1 marad. A következő utasítás végrehajtása után megint elfogadja a kérést a kontroller és lefuttaja a megszakítási rutint. A T0IF továbbra is 1 marad. Ez így zajlik a továbbiakban. A főprogram csiga lassúsággal "halad" a delay_ms(500) utasításban, a várakozási idő sokszorosára nő.
Sziasztok!
Nem kommunikál a programom. Az RC0-át csak kijelzésként tettem bele, de az sem működik. Külső tápról viszont villog a LED, de persze az nem elég.
Köszönöm az ötletet, utánanézek. Még egy problémám van a kvarcokkal kapcsolatban. Olvastam, hogy kell vele sorosan egy ellenállást kötni, ami a kvarcra jutó teljesítményt korlátozza és az adatlapja alapján határozható meg, viszont nekem régi kiforrasztott kristályaim vannak, amikhez nem találok adatlapot mert csak az értéküket tudom. Mennyire problémás az ellenállás hiánya a PIC-ek esetében?
Sziasztok.
Gondoltam ismerkedek kicsit a program írással C nyelven.Bele is futottam mindjárt az első megoldandó problémába. PICkit2 -est használok,és próbaként egy 16F628 PIC-et. RB-portot adtam meg kimenetnek,ezzel nincs is semmi gond ,villágít a nyolc led,vagy kialszik,ha változtatom a portot,viszont írtam már több próba programot ,de egyik sem akar lefutni.16F628 -as kíván valami egyéb beállítást,vagy hol hibázom? Kösz!
|
Bejelentkezés
Hirdetés |