Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   550 / 1318
(#) Hp41C válasza vilmosd hozzászólására (») Aug 23, 2009 /
 
Szia!

Hasonló problémába futottam bele az RS232 megszakításos kezelésénél, mint Te. A már jól működő programom az áramkör átépítése után nem működött (műkötött csak nagyon^3 lassan).

Fél nap fejtörés után lett csak meg a hiba. Ha a vétel hibás, az adatlap szerint letiltottam, újraengedélyeztem az UART egséget, de nem olvastam ki az RCREG regisztert - ez töröli ugyanis a megszakítás kérést. (Itt szerintem nev teljesen világos az adatlap.) A megszakításból való visszatérés után újra és újra a megszakítási rutin futott le. Két módosítás után a program jól fut.
1. Az RCREG kiolvasása a megszakítási rutinban hibás vétel után.
2. Az RX láb magas szinre való felhúzása.

Szia (hátha segít...)
(#) szkrep válasza vilmosd hozzászólására (») Aug 23, 2009 /
 
És tényleg!
A poti minimumtól középig balra forgást szabályoz, középtől maximumig pedig jobbra forgást.
Köszönöm!!
(#) vilmosd válasza szkrep hozzászólására (») Aug 23, 2009 /
 
Na latod !
(#) vilmosd válasza Hp41C hozzászólására (») Aug 23, 2009 /
 
Bocs, de nekem nem volt problemem a soros vonal kezelesenel. En csak probaltam segiteni a szkrep kolleganak.
Udv Vili
(#) Rumcájsz válasza watt hozzászólására (») Aug 23, 2009 /
 
Lehet itt is, tök mindegy....
(#) icserny válasza elektromosgyalogos hozzászólására (») Aug 23, 2009 /
 
Nem lehetséges, hogy csak újra kellene fordítani a programot az MPLAB IDE "Release" beállításával a "Debug" helyett?

Fordítás előtt állítsd be azt is, hogy az MPLAB IDE-ben a Debugger/Select Tool menüben a "None" előtt legyen pipa!
(#) icserny hozzászólása Aug 23, 2009 / 5
 
Indul a PICCOLO projekt!
Ismerkedés a PIC18 mikrovezérlőkkel
(Egyéni tanuláshoz - kezdőknek)

Szabadkozással kell kezdenem: bocs, de egyelőre a nyitólapon kívül csak egyetlen fejezet készült még el belőle, s a menüben még rengeteg az üres link.

Bevezetés a PIC18 assembly programozásába
A fejezet tartalma:
* A programtároló memória szervezése
* Az adattároló memória szervezése
* EEPROM adatmemória
* A CPU regiszterei
* Adatmozgató utasítások
* Indirekt címzés
* Matematikai utasítások
* A GOTO utasítás
* Egy egyszerű program anatómiája
* Mennyi idő alatt fut le a programunk?

Folyt. köv. - legalábbis nagyon remélem.

Bővebben: http://esca.atomki.hu/PIC18
(#) lidi válasza icserny hozzászólására (») Aug 23, 2009 /
 
Köszönjük ! Szép munka. Épp tervezek a 12F és 16F ek után szépen fokozatosan áttérni 18 -ra. És én is pont azt a két tipust (PIC18F14K50 és a PIC18F4550) szereztem be.
(#) gulasoft hozzászólása Aug 23, 2009 /
 
Egyszer csak ezt kezdte el kiírni az mplab.


Resetting
Programming Target (2009.08.23. 18:39:04)
PIC24FJ128GA008 found (Rev 0x3002)
Erasing Target
Programming Program Memory (0x0 - 0x2FF)
PE Error: Using ICSP
Verifying Program Memory (0x0 - 0x2FF)
PE Error: Using ICSP
PK2Error0027: Failed verify (Address = 0x0 - Expected Value 0x40200 - Value Read 0x0)
PICkit 2 Ready

Ha jól vettem ki a leírásból, akkor ez a kondi hiánya lenne, de ott van.
Mondjuk egy sima elko, ez lehet gond?

Ja és kiolvasni tudja.
(#) potyo válasza gulasoft hozzászólására (») Aug 23, 2009 /
 
Lehet gond a sima elkó is, mert annak nagy az ESR értéke. Ha nincs SMD kerámiád, forrassz oda ideiglenesen egy drótlábas példányt, természetesen minél rövidebb lábakkal.
(#) potyo válasza gulasoft hozzászólására (») Aug 23, 2009 /
 
Most jutott eszembe, hogy a Vdd lábon is van tápszűrő kerámiakondenzátor?
(#) gulasoft válasza potyo hozzászólására (») Aug 23, 2009 /
 
Mit értesz drótlábas alatt?
A következő nyákra ezeket már rátervezem, de ez próba panelnek lett készítve smd helyek nincsenek rajta
(#) gulasoft válasza potyo hozzászólására (») Aug 23, 2009 /
 
Nincs. A 18F-eknél nem volt ezzel gond. Mekkorát rakjak rájuk (mert van belőle 3 is)
(#) potyo válasza gulasoft hozzászólására (») Aug 23, 2009 /
 
Ilyen

Próbapanelre ugyanúgy kell kondenzátor, mint a végleges áramkörbe. A kondenzátor nem dísz, hanem működési feltétel...
(#) gulasoft válasza potyo hozzászólására (») Aug 23, 2009 /
 
De ez sima kondi, a tápra ilyet irnak, de a leírásban a vcap-on meg elko volt. Ez nem gond? Ilyenem van kilószámra csak smd alkatrészeim nincsenek. Hálistennek teliföldes, csak ki kell fúrnom a táplábak mellett, csak a lötstoppot kell lekaparnom (ami azért nem egyszerű, mert be is égettem, kemény mint a fene)
(#) gulasoft válasza potyo hozzászólására (») Aug 23, 2009 /
 
Még egy dolgot áruljatok el. Csinálok egy stabil 3.3 v-ot, telerakva szűrőkondikkal, mi a fenének kell a pic táplábaira szűrőkondi?
(#) potyo válasza gulasoft hozzászólására (») Aug 23, 2009 /
 
Az adatlapban írja, hogy low esr kondenzátor kell a VCap lábra. A kondenzátor az kondenzátor, csak egyes paramétereik különböznek. A kerámia az egyik legjobb kondenzátortipus, de sajnos a kapacitás/térfogat aránya elég rossz. Ezért kell kombinálni elkóval, aminek jó a kapacitás/térfogat aránya, viszont egyéb paraméterei meg elég siralmasak.
(#) m.joco válasza szilva hozzászólására (») Aug 23, 2009 /
 
Hello
Most 32768Hz-es kvarccal próbálkoztam, de rájöttem, hogy a hosszú program miatt problémák lesznek. Ezért gondoltam főoszcillátornak egy több MHz-es kvarcot használni, és külön rákötni a pic-re még a 32768Hz-eset, de ha jól tudom akkor timer1 ezzel a kvarccal is legkevesebb 1 megszakítás/ 2 másodperc tud adni. Mindenképp másodpercenként több megszakítást szeretnék kapni, mert megszakításkor akarom léptetni a LED kijelző multiplexelését. Már arra is gondoltam, hogy egy 8 lábú pic fog megszakítást adni az fő pic-nek, de szerintem cd4060-al ez egyszerűbb. De pontos?
Üdv.
(#) kissi válasza m.joco hozzászólására (») Aug 23, 2009 /
 
Mondok egy példát: vegyünk 4 MHz-es oszcillátort, akkor a léptető jel 1 MHz-es. Ez 1:1-es osztásnál mivel a TMR1 65536 egységenként ad megszakítást 65,536 ms-ként ad.
1s/65,536ms=15,258... azaz 15 teljes és még 0,258... rész kell! A 0,258...*65536=16960. Tehát a TMR1-nek 15-ször kell túlcsordulnia + meg kell számolnia 16960 impulzust! Ezt úgy is lehet, hogy "előretekerem" 65536-16960=48576-ra és innen indítva mikor 16-szor túlcsordul, akkor pont eltelt 1 másodperc ( és közben még a MUX is működhet, ha gyorsabban szaggatod, de ezt már rád bízom!)!
A pontosság természetesen a kvarctól függ, de szerintem ez kvarccal elég pontos lesz emberi méretekben!

A számolást nem ellenőriztem, remélem nem rontottam el!

Steve
(#) icserny válasza gulasoft hozzászólására (») Aug 24, 2009 /
 
Idézet:
„Csinálok egy stabil 3.3 v-ot, telerakva szűrőkondikkal, mi a fenének kell a pic táplábaira szűrőkondi?”

Az nem szűrőkondenzátor, hanem "decoupling capacitor"! A digitális áramkörök szintátmeneteinél keletkező nanoszekundumos tüskéket kell "eltüntetnie". Ez csak helyileg és kis induktivitású kapacitással kezelhető.

PIC24-nél Vcap-nál a 10 µF-os csepptantál nekem bevált. Vdd-re, Avdd-re pedig 100 nF-os kerámia, vagy csepptantál.
(#) gulasoft válasza icserny hozzászólására (») Aug 24, 2009 /
 
Köszi. Mondjuk csepptantál kondiról most hallottam először, de ez persze az Én hiányosságom. Este elnézek a boltba és megveszem a kondikat.
(#) icserny válasza gulasoft hozzászólására (») Aug 24, 2009 /
 
Pedig ezen a képen is láthattál néhányat....
(#) gulasoft válasza icserny hozzászólására (») Aug 24, 2009 /
 
Hát ezt a képet szerintem Én most látom először, de este elbattyogok az alkatrészesboltba, és veszek pár darabot.
(#) frecsko hozzászólása Aug 24, 2009 /
 
Sziasztok.
segítséget szeretnék kérni.Még csak most tanulgatom a pic-programozást. Nagyon kezdő szinten vagyok.
Írtam egy progit ami egy gombbal be-és kikapcsol ledeket. Működik is csak annyi baja van, hogy 2-3 másodperc múlva 3-dik és 5-dik ledem elkezd világítan.
Valaki átnézné nekem, hogy mit rontottam el?[code=c]

main2.asm
    
(#) szilva válasza m.joco hozzászólására (») Aug 24, 2009 /
 
Igen, a 32768Hz fő órajelnek használva elég hamar gondot okozhat, főleg, ha nem assemblyben programozol. Ténlyeg érdemes emiatt MHz-es nagyságrendű CPU órajelet alkalmazni.

Amiket írtál, azok úgy vannak, 32768Hz-es órakvarccal járatva a timer1-et 2 másodpercenként fogsz kapni megszakítást "szabadonfutó" módban, azaz amikor a timer1 regisztereit a bekövetkezett megszakításban egyáltalán nem piszkálod. Ha viszont újratöltöd a megszakításban, akkor elérheted azt, hogy nem 65536, hanem akármennyi impulzus megszámolása után kapj újabb interruptot. A timer1 regiszterek újratöltéséről írtam korábban, hogy figyelni kell pár apróságra, különben elveszhetnek megszámlálandó impulzusok, amik az óra késését okozzák. Egyébként nyílván a kvarctól (és az esetleges trimmeléstől) függ a pontosság. Az órakvarcokkal nekem jó tapasztalataim vannak, elég pontosan járnak róluk az órák, külön trimmelés nélkül is.

Egyébként el kell gondolkozni azon, hogy fontos-e minden másodpercben növelni az időt, vagy esetleg elég 2 másodpercenként. Ha nem csinálsz másodperckijelzést, akkor szerintem teljesen felesleges bonyolítani a dolgokat, hagyni kell a timer1-et szabadon futni, és minden megszakításkor 2 másodperccel növelni az időt.

A kijelző multiplexelését pedig (gondolatban legalábbis) függetleníteni kellene az idő mérésétől. Annak ugyanis nem kritikus a pontossága, teljesen mindegy, hogy 4 digitnél mondjuk másodpercenként 190-szer vagy 210-szer esik be egy megszakítás a névlegesen kiszámolt 200 helyett. Tehát ennek az ütemezését lehet szinkronizálni egy sokkal pontatlanabb órajelhez is, pl. a PIC belső oszcillátorához.

Az kicsit komolyabb fejtörést okozna, ha nagyon fontos lenne a rendkívül alacsony fogyasztás, mert akkor kénytelen lennél az alvó állapotban is működőképes timer1-hez, így a 32768Hz-es órakvarcos oszcillátorhoz szinkronizálni az egész működést és ott már tényleg piszkálni kell a megszakításban a timer1 regisztereket. De mivel azt írtad, hogy LED kijelzős lesz az óra, a kijelző által felvett egy-két száz mA mellett teljesen eltörpül a PIC aktív állapotbeli 5-10 mA fogyasztása, így nem sok értelme lenne azt altatni az inaktív időben.

Ja, egyébként hogy a konkrét kérdésedre is válaszoljak: a CD4060-nal felépített időalap is annyira lesz pontos, amennyire a felhasznált kvarc vagy rezonátor pontos. Én építettem valamikor nagyon régen órakvarcból, egy CD4060-ból és talán 7474-esből 1Hz-es időalapot frekimérőhöz, az elég pontosnak tűnt, de mint mondtam, az órakvarcok tapasztalatom szerint tényleg használható pontosságúak.
(#) szilva válasza szilva hozzászólására (») Aug 24, 2009 /
 
És még egy gondolat: ha van MHz-es nagyságrendű, pontos kvarcod, akkor természetesen szinkronizálhatod az órát, a kijelzést, és a programfutást is ehhez, mint fő oszcillátorhoz. Én valami túrkálóban vettem egyszer olcsón egy marék "12.000000MHz" feliratút, azok elég jónak tűnnek, mindenesetre sokkal pontosabban jár egy óra az ilyen kvarcomról, mint a szintén marékszámra otthon lévő (régi RS232 terminálokból kitermelt) "11MHz"-esekkel (de egyik sem összehasonlítható a 32768Hz-es órakvarcokról járatott órák pontosságával).

Tehát pl. egy 12MHz-es kvarc esetén a timer2-t felhasználva a következőt teheted: timer2 prescalert 1:16-ra, PR2-t 74-re állítod, ami 2500 timer2 túlcsordulást fog okozni másodpercenként. A postscalerrel lehet még játszani, 10-zel osztva pont 250 megszakítást fogsz kapni másodpercenként. A megszakításban már szoftverből, számlálókkal lehet megoldani, hogy minden 250-ediknél növeld az időt. A multiplex vezérlése akár mehet is a 250Hz-es ütemjel alapján.
(#) watt válasza frecsko hozzászólására (») Aug 24, 2009 /
 
  1. MAIN
  2.         BTFSS   PORTA,0                 ;megvizsgálva PORTA 0-dik bite
  3.         MOVLW   B'00001111'             ;ha 1-es akkor bekapcsolom a LED-eket
  4.         MOVWF   PORTD                   ;Ki a PORTD-re
  5.         CALL    DELAY

A harmadik sor megjegyzése nem jó, oda akkor fut a program, ha az RA0=0!
Ez az egyik probléma, a másik, hogy a W-nek nem adsz kezdő értéket, csak akkor ha RA0=0. Ettől mindenféle maradék értékek bejöhetnek a DELAY rutinból, vagy egy esetleges nem lekezelt megszakításból.
(#) elektroláma válasza frecsko hozzászólására (») Aug 24, 2009 /
 
"
CALL DELAY
BTFSS PORTA,0
MOVLW B'00000000' ;ha 1-es akkor kikapcsolom a LED-eket
MOVWF PORTD
"
Szerintem(asm-ben nem programozok), a delay rutinod után lesz vmi w-be.
BTFSS Skip if set, tehát ha 1, akkor szerintem a delay által bennhagyott W-t teszi ki portd-re.

CALL DELAY
BTFSS PORTA,0
MOVLW B'00000000' ;ha 1-es akkor kikapcsolom a LED-eket
MOVLW B'00011111' ;egyébként be
MOVWF PORTD

A másik részen is így átírni.
(#) lidi válasza szilva hozzászólására (») Aug 24, 2009 /
 
Ezt nem értem, én úgy tudtam hogy minél magasabb a freki, annál pontosabb a quartz. Mivel ugye le kell osztanunk jócskán a quartz órajelét, így az esetleges kis hibát is jócskán leosztjuk.
(#) elektroláma válasza watt hozzászólására (») Aug 24, 2009 /
 
Akkor jól gondoltam
A kód gombbal lehet úgy betenni a kódot?(Ezt jól megaszondtam )
Következő: »»   550 / 1318
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