Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   358 / 1319
(#) trudnai válasza bkati hozzászólására (») Dec 10, 2008 /
 
Az SFR (Special Function Register) az nem feltetlen RAM, nem feltetlen tarolasra alkalmas regiszter! A PIC mikroknal nincsenek port in/out utasitasok mint mas mikroknal vagy processzoroknal szokas - inkabb hasonlit a motorola nyomvonalhoz az architektura. Ez azt jelenti, hogy a memoria cimzo aramkoron keresztul oldjak meg az IO interface-eket es ennek koszonhetoen az IO portokra ugyanazok az utasitsok alkalmazhatoak, mint a normal RAM elereshez - ellentetben pl az Atmel AVR-hez ahol ez a resz egy picity kesze-kusza...
(#) gulasoft válasza bkati hozzászólására (») Dec 10, 2008 /
 
Milyen hibát ír ki a debug?
Egyébként meg szerintem lehet éppen halott is, mert a debughoz két olyan lábat is használ amit sem az írásnál, sem az olvasásnál nemhasznál.
(#) watt válasza gulasoft hozzászólására (») Dec 10, 2008 /
 
Idézet:
„mert a debughoz két olyan lábat is használ amit sem az írásnál, sem az olvasásnál nemhasznál.”

És melyik kettő lenne az?
(#) icserny válasza bkati hozzászólására (») Dec 10, 2008 /
 
Az ördög a részletekben bújik meg, ezért a részletek ismerete nélkül errenem lehet érdemben válaszolni.

Fordításkor pl. Debug volt állítva (Release helyett)? Config bittel nem lett a debug letiltva, vagy más lábra átirányítva (bár lehet, hogy ilyet csak a 16 bitesek tudnak)? Nincs-e valami olyan a lábakra kötve, zavarja a debug adatforgalmát?
(#) bkati válasza icserny hozzászólására (») Dec 10, 2008 /
 
Hű, most hülyén érzem magam, mert a configban le volt tiltva a debug. (Viszont ez mindig is így volt, és ennek ellenére ment a debuggolás.) Bekapcsoltam, és most az a furcsa, hogy teljesem mindegy, be vagy ki van kapcsolva, lefordítja a fájlt, programozza, és el is indul szépen. Meg tudom állítani F5-tel, és tudom F7-tel léptetni a kódot. Látom közben a fájlregisztereket is. Viszont nem áll meg a törésponton. Pedig ha léptetni tudom, akkor a töréspont működik, mert gondolom, a léptetés is azzal megy, nem?
(#) szilva válasza trudnai hozzászólására (») Dec 10, 2008 /
 
Ezt szokás magyarul "memóriába ágyazott I/O"-nak, vagy angolul "memory mapped I/O"-nak hívni. Az MCS51 architektúrában még ez teljes mértékben jelen volt, az AVR-be már tényleg bekavartak valami köztes megoldással.
(#) Mate78 válasza icserny hozzászólására (») Dec 10, 2008 /
 
Köszönöm a segítséget mégegyszer.
Minden bizonnyal nézek egy olyan kontrollert amiben van 4 PWM, és ezzel tervezem meg a végleges áramkört.
A 18F452-t azért használtam mert " az volt kéznél".
Azért mindenesetre hasznos volt számomra, hogy feltettem ezt a kérdést, és kaptam rá választ.

üdv
(#) icserny válasza bkati hozzászólására (») Dec 10, 2008 /
 
Idézet:
„teljesem mindegy, be vagy ki van kapcsolva, lefordítja a fájlt, programozza, és el is indul szépen.”

Ezeket nem befolyásolja a debug bit.

Idézet:
„Meg tudom állítani F5-tel, és tudom F7-tel léptetni a kódot.”

No, ez már meglepő, ha letiltott debug-gal működik!

Idézet:
„Pedig ha léptetni tudom, akkor a töréspont működik, mert gondolom, a léptetés is azzal megy, nem?”

Őszintén szólva: nem tudom. Soha nem néztem még utána.
(#) bkati válasza icserny hozzászólására (») Dec 10, 2008 /
 
A CONFIG4L 7. bitjéről beszélünk, ugye? Csak hogy ne legyen félreértés.
(#) gulasoft válasza bkati hozzászólására (») Dec 10, 2008 /
 
C vagy ASM?
A legújabb 8.15a mplab?
(#) icserny válasza bkati hozzászólására (») Dec 10, 2008 /
 
Idézet:
„A CONFIG4L 7. bitjéről beszélünk, ugye?”

Igen.
(#) Braf hozzászólása Dec 10, 2008 /
 
Valaki használt már nRF24L01-et pic16F/18F el?
Mert nem tudom működésre bírni őket...

16F690-et használok hw-es SPI-vel. Maga az spi rész működik (illetve úgy tűnik...). Az első csatorna a CSN láb, a második az SCK, a harmadik a MISO.
Mellékelem a program egy részét.

  1. #DEFINE RF1_CE PORTC,6
  2. #DEFINE RF1_CSN PORTC,3
  3. #DEFINE RF1_IRQ PORTA,2
  4.  
  5. BOOT
  6.         BANK0
  7.  
  8.         MOVLW B'00100010' ; 8mhz fosc/64 órajel
  9.         MOVWF SSPCON
  10.  
  11.         CLRF PORTA
  12.         CLRF PORTB
  13.         CLRF PORTC
  14.  
  15.         BANK2
  16.  
  17.         CLRF ANSEL ; MINDEN PORT DIGITÁLIS I/O
  18.         CLRF ANSELH
  19.  
  20.         BANK1
  21.  
  22.         MOVLW B'00111111' ; PORTAN NINCS FELSŐ 2
  23.         MOVWF TRISA
  24.  
  25.         MOVLW B'10110000' ; PORTBN NINCS ALSÓ 4
  26.         MOVWF TRISB
  27.  
  28.         MOVLW B'00010111' ; EZ FULL 8 PINES PORT
  29.         MOVWF TRISC
  30.  
  31.         MOVLW B'01000000'
  32.         MOVWF SSPSTAT
  33.  
  34.         BANK0
  35.  
  36.         CLRF PORTA
  37.         CLRF PORTB
  38.         CLRF PORTC
  39.  
  40.         BSF RF1_CSN ; MIVEL HIGH AZ ALAP ÁLLAPOTA ,LOW HA AKTíV
  41.  
  42. MAIN
  43.         CALL DELAY50MS
  44.  
  45.  
  46.         BCF RF1_CSN ;MODUL AKTIVÁLÁSA
  47.  
  48.         MOVLW B'00000000' ; 0 ás című regiszter olvasása (config)
  49.         MOVWF SSPBUF
  50.  
  51.         BANK1
  52. LOOP
  53.         BTFSS SSPSTAT, BF
  54.         GOTO LOOP
  55.         BANK0
  56.  
  57.         MOVLW B'00000000' ;
  58.         MOVWF SSPBUF
  59.  
  60.         BANK1
  61. LOOP1
  62.         BTFSS SSPSTAT, BF
  63.         GOTO LOOP1
  64.         BANK0
  65. ;sspbuf ban a fogadott adat
  66.         MOVFW SSPBUF ; KIOLVAS
  67.         BSF RF1_CSN; DEAKTIVÁL
  68.  
  69.  
  70. VEGTELEN
  71.         NOP
  72.         GOTO VEGTELEN

kep.JPG
    
(#) gulasoft válasza Braf hozzászólására (») Dec 10, 2008 /
 
Ezt nem értem ha nekem * van pickit2 mindhárom csatornájában akkor nem indul el, neked meg megy a másik két csatorna is. Mit kell még állítani, hogy menjen?
(#) Braf válasza gulasoft hozzászólására (») Dec 10, 2008 /
 
Hogy érted, hogy nem indul el? Nekem gyári van, nem állítgattam semmit sem. (minden beállítás leolvasható a képről) Nincs is olyan mód benne, hogy 1 vagy 2 csatornát nézzen. Mindig 3 csatornát néz. Esetleg az lehet a baj, hogy mind a három csatornára beállítottál tigger feltételeket és az sosem teljesül egyszerre.
(#) gulasoft válasza Braf hozzászólására (») Dec 10, 2008 /
 
nem állítottam semmit. Bár nekem ugye akkor hibásan a quartzon volt, de akkor megpróbálom a kimenetre tenni ahol most egy led van, és megnézem úgy is.
(#) gulasoft válasza Braf hozzászólására (») Dec 10, 2008 /
 
Hát most már abszolút jól van minden.

A 3-as csatornát használom csak ahhoz a leírás szerint nem kell +ellenállás. Rádugom a led pozitív lábára az ellenállás és a led közé, triggernek azt állítom hogy a 3-ason ha 1 és miközben bőszen villog a led, ez ott várja hogy 1 legyen, miközben tuti hogy 1 mert villog a led.
(#) potyo válasza gulasoft hozzászólására (») Dec 10, 2008 /
 
Idézet:
„Rádugom a led pozitív lábára az ellenállás és a led közé”


Inkább az ellenállás másik végére dugd, a kontroller lábára közvetlenül.
(#) icserny válasza gulasoft hozzászólására (») Dec 11, 2008 /
 
Idézet:
„Ezt nem értem ha nekem * van pickit2 mindhárom csatornájában akkor nem indul el”
Persze, hogy nem indul, mert legalább az egyiken be kell állítani egy triggerelési feltételt. Amint láttad, Braf Ch1-nél negatív élre triggerelt.

(#) gulasoft válasza icserny hozzászólására (») Dec 11, 2008 /
 
Ez egy kicsit gáz. Kicsit olyan mintha egy szkóp csak akkor kapcsolna be, ha valamelyik bementén jelet észlel. Jó tudom ez nem szkóp, de egy analizátor is tudhatna olyat, hogy ha bármi jön egy csatornán akkor azt mutassa.
(#) gulasoft hozzászólása Dec 11, 2008 /
 
Kipróbáltam szimultorrasl (Potyó tanácsaára) ezt a ds182-as dallas hőmérő kommunikációt, és a b2 melett direkt billegtettem a b3-at, és döbbenten vettem észre, hogy míg a b3 szépen adja a négyszöget, addig az output_float (azthiszem így hívják, most egy vékonykliens előtt ülök, gépelni is nehéz, nemhogy az otthoni forrásokhoz hozzáférni) a b2-őn az ég egy adta világon semmit nem csinál, márpedig a kommunikáció indításához le kell húznia a jelet, utána 15-35 us-ig felhlúzni, amit utána a a ds lehúz. (Ha jól értettem a kommunikáció elejét)
Lehet hogy visszatérek az assembly-hez, mert ott legalább tudom mit csinálok, csak sokkal lassab a fejlesztés.
(#) bbalazs_ hozzászólása Dec 11, 2008 /
 
Sziasztok!

Csinaltam PIC-el egy regi leptetomotor szegmentalt magnesebol + 2 Hall szenzorbol inkrementalis jeladot.
Azt hiszem, ez a Grey-code, amikor fel fazissal eltolva jon a ket negyszogjel. Ez ket bit informacio.

Jelenleg eloszor vizsgalom, hogy volt-e valtozas a jelben, s ha volt, akkor a korabbi erteket shiftelem kettovel balra, hozzadom az uj erteket es ez alapjan egy 16 elemu tablazatbol kivalasztom, hogy 1-et vagy
-1 -et adok valamilyen ertekhez.
Majd a korabbi erteket feltoltom a jelenlegivel.
A tablazatban vannak 0-k is, szoval elvileg a kezdeti vizsgalatot ki is lehetne hagyni, csak idosporolo lepes.

A kerdesem az lenne, hogy mivel ez sajat agyalmany volt, van-e erre valami elegansabb megoldas, tehat 'szokasos' algoritmikus eljaras, amit elterjedten hasznalnak.
(#) szilva válasza bbalazs_ hozzászólására (») Dec 11, 2008 /
 
Én vacakoltam ilyesmivel pár hónapja, egy majdani tekercselőgép számlálóját akarom elektronikusan megoldani. Nálam a jeladó két rés-opto és az azok közé beforgó takarólemez-darab, de ez mindegy is, a programozás oldaláról gyakorlatilag ugyanaz, mint a tied.

Én egy állapotgéppel (state machine) oldottam meg az inkrementálás-dekrementálást, és úgy tűnt, hogy nagyon jól működik.

Az állapotgép megvalósítása programozáskor tulajdonképpen egy táblázatból történő olvasgatás, tehát majdhogynem "ész nélkül" meg lehet csinálni a programot. A táblázat felépítésekor kell elgondolkodni azon, hogy milyen működést akarunk.

Nagy vonalakban a következő történik:
- van egy állapotváltozó, az állapotoknak numerikus értékek felelnek meg;
- van két bitnyi input a hall-okról (vagy nálam az opto-król);
- a táblázat azt írja le, hogy egy adott állapoton állva az inpuok melyik értékeitől függően melyik új állapotra kell lépni.

Ha nem felejtem el, otthon előkotrom majd azt a kódot, amit a számlálóhoz én összeütöttem. Van egy szintén állapotgépre épülő kvarcórám is, az ráadásul C-ben van megírva, így szerintem elég jól látható a működés.
(#) icserny válasza gulasoft hozzászólására (») Dec 11, 2008 /
 
Idézet:
„egy analizátor is tudhatna olyat, hogy ha bármi jön egy csatornán akkor azt mutassa.”

Az analizátornak is igaza van a saját szempontjából, mert számára a három csillag az kb. annyira értelmes feladat, mint a fordítóprogramnak a GOTO SOMEWHERE utasítás.

Nem nagy gáz, mert ha valamelyik csatornánál pl. 0-át állítasz be, vagy ha mégsem jön be, akkor 1-et, máris elérted a célodat.

Mellesleg ez volt idáig az egyetlen dolog amire a piros gombot használtam: ezzel lehet lelőni az analizátort, ha
nem teljesül a trigger feltétel, s ki kell hozni a végtelen várakozásból.
(#) icserny válasza szilva hozzászólására (») Dec 11, 2008 /
 
Erre én is kíváncsi lennék, mert másra is fel lehetne használni!
(#) gulasoft válasza icserny hozzászólására (») Dec 11, 2008 /
 
A gond az, hogy a 0-ra azonnal kiszáll, mert a lábon alapban 0 van. Lehet hogy az egyik ellenállásos lábát tüsivel felrakom a +ra úgy, hogy ha hozzáérintem a vezetéket akkor meglegyen az az 1 ami indít.
Egyébként nem értek egyet a goto somewhere-vel én inkább a while(1)-hez hasonlítanám amit viszont rendszeresen használunk is!
(#) icserny válasza gulasoft hozzászólására (») Dec 11, 2008 /
 
Én csak egy dolgot nem értek: ha statikus jeleid vannak, akkor nem az analizátor, hanem a logikai teszter üzemmódot érdemes használnod. Ha pedig valamelyik lábon változik a jel, akkor annak van fel- vagy lefutó éle. Mi tehát a probléma?

(#) Lozsa hozzászólása Dec 11, 2008 /
 
Adott egy pic1320 által vezérelt ledes lámpa.
van két gomb kapcsoló ezáltal 4 állapota lehetséges:
0 gomb=100%
'A' gomb=75%
'B' gomb=50%
'A'+'B' egyszerre=25%

A megvalósítása, hogy pwm ciklusnak a duty cycle értékét változtatom, ezáltal előállítva a TTL szintű jelet az áramgenerátoroknak.

Tehát bekapcsoláskor ellenörzi a kapcsolók állását, majd ennek megfelelő lesz a pwm_duty változó értéke.

Felprogramozom a cuccot kipróbálom, de jön a meglepetés, mert egy-két kapcsolásig jól akpcsol utána viszont mindegy mit nyomok mindíg 25%-ot ad.

Minden kapcsolásnál gyakorlatilag újra ki és bekapcsolom a pic tápját is, tehát szüzen indul... Mégis csak pár próbáig jó.
Azonban, ha újra felprogramozom, akkor azonnal megjavul de szintén csk néhány kapcsolásig, persze kiszámíthatatlan, hogy meddig...


Azon filózok, hogy lehetséges, hogy valami a programban átíródik néhány ki-be kapcsolás után?

Hogyan lehet ellenőrizni utána, hogy megváltozott-e a tárolt kód az utoljára felprogramozott állapothoz képest?
(#) Action2K válasza (») Dec 11, 2008 /
 
Ezt nem a PIC - miértek, hogyanok...ban kellett volna írnod?

Idézet:
„Hogyan lehet ellenőrizni utána, hogy megváltozott-e a tárolt kód az utoljára felprogramozott állapothoz képest?”

Debug-olással.

Nincs kizárva, hogy bithibás a PIC EEpromja.
(#) bladika válasza (») Dec 11, 2008 /
 
Van az MPLABban a prog, reset stb között egy VERIFY gomb! Próbáld meg azzal! Az kell neked. Bár szerintem valahol máshol kéne a hibát keresni! Esetleg ha látnánk a forrást akkor könnyebb lenne!
(#) icserny válasza Lozsa hozzászólására (») Dec 11, 2008 /
 
Idézet:
„Hogyan lehet ellenőrizni utána, hogy megváltozott-e a tárolt kód az utoljára felprogramozott állapothoz képest?”

Például PICkit2-vel kiolvasod a programmemóriát, majd exportálod hex-be. Ha ezt friss beégetés után is megcsinálod, meg az "elromlott" állapotban is, akkor egyszerű fájlösszehasonlítással (pl. Notepad+) kibukik a változás.

Van persze a Microchipnek is megoldása a futás közbeni öntesztelésre: One New In-Operation Self-Testability Mechanism Designed for SoC Mi...D 1500.
Következő: »»   358 / 1319
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