Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   758 / 1320
(#) borvendeg válasza potyo hozzászólására (») Jún 8, 2010 /
 
Kösz az eddigi segítséget de nem tudnád leírni hogy miben is más, mert angolból nem vagyok valami erős sőt mondhatnám hogy angoltudásom 0
(#) vilmosd válasza borvendeg hozzászólására (») Jún 8, 2010 /
 
Hali
Ha esetleg a listat lathatnank tobbet lehetne mondani rola. Egyebkent a 12 biteseknel ASM-ben a
  1. movlw   b'11111100'
  2.    tris  GPIO

hasznalhato a tris allitasara, mert nincs fizikai cime a TRISGPIO regiszternek. Ugyanilyen az OPTION is.
Udv Vili
(#) Beles hozzászólása Jún 8, 2010 /
 
Valaki help,mert agybaj kapok. Nem akar működni a PORTA-m, hiába küldök rá valamit. Már írtam is rá egy egyszerű programot, de hiába,meg se nyikkan. Mi lehet az ok? Meghalt volna a picem?(pic16f88)
  1. START
  2.         BANK1
  3.         MOVLW   B'01100000'
  4.         MOVWF   OSCCON
  5.         MOVLW   B'00000110'
  6.         MOVWF   OSCTUNE
  7.         BANK0
  8.         CLRF    PORTA
  9.         BANK1
  10.         CLRF    ANSEL
  11.         MOVLW   B'11111011'
  12.         MOVWF   TRISA
  13.         BANK0
  14.  
  15. MAIN
  16.         MOVLW   B'11111111'
  17.         MOVWF   PORTA
  18.         GOTO    MAIN
  19.  
  20.         END
(#) Hp41C válasza Beles hozzászólására (») Jún 8, 2010 /
 
Szia!

Nézd meg konfigurációs szó beállításáat és az OSCCON regiszter leírását, mert gondosan beállítod a belső oszcillátor frekvenciát és a config szóban megadott oszciátor üzemmódot válsztod ki.
A 3. sorban movlw B'01100010' kellene...
(#) Beles válasza Hp41C hozzászólására (») Jún 8, 2010 /
 
Persze, ez jogos. Amúgy működik enélkül is a program
De alapvetően nem ez a probléma, hanem az, hogy hiába írok a porta-ra,nem változik meg a kimenet. Pedig ha mplab-ban a watch ablakot megnyitom, és megnézem a porta-t, ott jól írja, szóval ezért gyanakszom, hogy a picnek halott a porta-ja.
(#) Beles válasza Beles hozzászólására (») Jún 8, 2010 /
 
Most nézem, hogy bemenetként van konfigurálva a porta Csak már annyira tele volt az agyam 5 órányi programozás után, hogy nem sikerült észrevennem.
(#) Zsora hozzászólása Jún 9, 2010 /
 
Hi!
Tudja valaki, hogy mi a különbség az A-ra végződő típusszámú, és az A-nélküli PIC-ek között?
(Pl. PIC24HJ64GP206A)
(#) cNobody válasza Zsora hozzászólására (») Jún 9, 2010 /
 
Én úgy tudom hogy az A-ra végződőek azok az eredetihez képest hiba-javított, újabb verziós PIC-ek.
(#) icserny válasza Zsora hozzászólására (») Jún 9, 2010 /
 
A PIC24 és dspic33 mikrovezérlők első szériái elég gyalázatosan "sikerültek": sok volt a tervezési/vagy gyártási hiba (hosszú volt a hibák jegyzéke az Errata-kban) és alacsony az újraprogramozhatósági szám. Ezeken sokat javítottak az A szériában (de még nem eleget...), s talán a működési hőmérsékélet tartománya is szélesedett.
(#) kissi válasza Beles hozzászólására (») Jún 9, 2010 /
 
Ha rosszul definiálod, akkor tudtommal a szimulációban sem tudod módosítani a port értékét ( ilyenkor ne csak '1'-el próbáld !! ) !

Steve
(#) trudnai válasza Zsora hozzászólására (») Jún 9, 2010 /
 
Az A -ra vegzodoek a nonemuek (AndreA, SzilviA, KrisztinA), a tobbi pedig a himnemu (Peter, Zoltan, Andras)
(#) potyo válasza trudnai hozzászólására (») Jún 9, 2010 /
 
Mondhattál volna Andrea, Petra, Krisztina és András, Péter, Krisztiánt
(#) trudnai válasza potyo hozzászólására (») Jún 10, 2010 /
 
Na igen Meg meg azt is hozza tehetjuk, hogy ezek kozul a 10F, 12F es 16F-eket, szigoruan tilos ossze parositani, mig a 18F-et mar ovatosan, de lehet, azonban ilyenkor is a kapcsolodo labacskakra ajanlott vedekezo ellenallasokat helyezni
(#) potyo válasza trudnai hozzászólására (») Jún 10, 2010 /
 
Bár itt most nem vágom, hogy pontosan mire gondolsz, de legalább egy kapcsolódó kép: Link
(#) trudnai válasza potyo hozzászólására (») Jún 10, 2010 /
 
18F mar nagy koru... A kep nagyon jo
(#) icserny hozzászólása Jún 10, 2010 /
 
Új fejezetrésszel és mintaprogramokkal gyarapodott az esca.atomki.hu/PIC18 címen található, "Ismerkedés a PIC18 mikrovezérlőkkel" című PICCOLO projekt.

A kiegészült fejezet: I/O portok
A fejezet tartalma:
* Az I/O portok
o A PIC18F14K50 mikrovezérlő I/O portjai
o A PIC18F4550 mikrovezérlő I/O portjai
* Az I/O portok vezérlő regiszterei
* Az I/O portok programozása
* A ki/bement megosztása más perifériákkal
* Bemeneti szint megváltozásának jelzése
* A belső felhúzások engedélyezése
* Nyomógombbal vezérelt bemenet kezelése
* Mintaprogram: LED vezérlése nyomógombbal I. (nyomógomb pergésmentesítése)
* Mintaprogram: LED vezérlése nyomógombbal II. (állapotgépes megközelítés)
* Egy összetettebb feladat: LED vezérlése nyomógombbal és kapcsolóval (állapotgépes megközelítés)
* A PIC18 mikrovezérlők RESET áramköre
* Mintaprogram: A RESET, Sleep és WDT kipróbálása

Ugyanott elérhető a PIC18 támogatói programkönyvtár és a példaprogramok Doxygen-nel dokumentált gyűjteménye (verziószám 0.26, kiadási dátuma 2010-06-10).

Letöltések: code_examples.zip

A támogatói programkönyvtárban most csak apró változások vannak, melyet a dokumentációban található Változások jegyzéke foglal össze.

Az új fejezet mintaprogramjai a PIC18F14K50 és a PIC18F4550 mintaáramkörökre egyaránt lefordíthatók (a forrásfájl ugyanaz de van mindkét MCU-hoz projektfájl).
(#) trudnai válasza icserny hozzászólására (») Jún 11, 2010 /
 
Eszmeletlen jo anyag! Lassan azt hiszem ez lesz a Magyar referencia anyag, ahonnan a kezdok kiindulhatnak. Gratulalok!
(#) potyo válasza trudnai hozzászólására (») Jún 11, 2010 /
 
Gondolod el fogják olvasni?



Ettől függetlenül én is gratulálok icsernynek
(#) atideath hozzászólása Jún 11, 2010 /
 
Hali. Esetleg valaki rá tudna nézni a kódomra? Érdekes módon ha csak karaktereket akarok kiírni az működik, próbáltam egyedi karaktert csinálni de azt nem akarja kiírni a képernyőre valamiért. Ha esetleg valaki megtudná nézni megköszönném.

A main részben:
lcdWrite(CMD_REG,0x40);
lcdWrite(DATA_REG,0x04);
lcdWrite(DATA_REG,0x0E);
lcdWrite(DATA_REG,0x0E);
lcdWrite(DATA_REG,0x0E);
lcdWrite(DATA_REG,0x1F);
lcdWrite(DATA_REG,0x00);
lcdWrite(DATA_REG,0x04);
lcdWrite(DATA_REG,0x00);

Ha viszont csak egy karaktert akarok kiírni: lcdWrite(DATA_REG,'C');

Ez működik de az egyéni nem .
(#) Hp41C válasza atideath hozzászólására (») Jún 11, 2010 /
 
Szia!

  1. lcdWrite(CMD_REG,0x40);
  2.         lcdWrite(DATA_REG,0x04);
  3.         lcdWrite(DATA_REG,0x0E);
  4.         lcdWrite(DATA_REG,0x0E);
  5.         lcdWrite(DATA_REG,0x0E);
  6.         lcdWrite(DATA_REG,0x1F);
  7.         lcdWrite(DATA_REG,0x00);
  8.         lcdWrite(DATA_REG,0x04);
  9.         lcdWrite(DATA_REG,0x00);


Az első sorral az LCD-t a karakter generátor memória elérésére kapcsoltad át. A végéről hiányzik egy
  1. lcdWrite(CMD_REG,0x80);

amivel a kijelző memóriára kapcsolnál vissza.. Ezután már jöhet a
  1. lcdWrite(DATA_REG,'C');
  2.         lcdWrite(DATA_REG,0x00);  // a definiált karakter
(#) atideath válasza Hp41C hozzászólására (») Jún 11, 2010 /
 
Szia

Lehet én fogalmaztam rosszul. Amit szeretnék hogy egyedi karaktert kiírni a kijelzőre. Na sajnos ez nem megy nekem . Minden mást ki tudok írni de egyedi karaktert nem tudok összerakni.

Konkrétabban fogalmazva a következő oldalon lévő csengő ikont akartam kiiratni:
http://www.8051projects.net/lcd-interfacing/lcd-custom-character.php

Ez nem megy az istenért sem. Minden más karaktert (pl.: A,B,C,D,....) kitudok iratni viszont pixelekből nem bírok kirakni semmit. Mit rontottam el? Elméletileg az első sort lcdWrite(CMD_REG,0x80)-ra kell lecserélni a 40-ről?

Köszönöm a segítséget.
(#) proli007 válasza atideath hozzászólására (») Jún 11, 2010 /
 
Hello!
Látom tolmács kell..
Az első sorban, a "CMD_REG,0x40"-el, átváltottál, a CGRAM első byte-jára. Így a következő adatok, oda fognak töltődni.
Viszont, amikor betöltötted a csengő bitmintáit, ezt követően az adatáramlást, vissza kell váltani, a DDRAM-ra, hogy a következő adatok, már a kiírásra kerüljenek. Ehhez kell, a "CMD_REG,0x80"-as parancs.
Tekintve, hogy a CGRAM első karakterét töltötted fel a bitmintával, ennek ASCII címe "0x00". Ha ezt a csengő (User) karaktert ki akarod írni, akkor adatként a "DATA_REG,0x00"-val hivatkozol rá.
Tehát amit HP41C írt neked, az kell a kis programod végére, majd próba kiírásként kiírja a Display első karakter helyére a "C" betűt, majd a második helyre, a csengődet. (Persze ha a kiírás inkrementálása be van kapcsolva)
üdv! proli007
(#) icserny válasza atideath hozzászólására (») Jún 11, 2010 /
 
Reggel egy másik topikban már felhívtam a figyelmedet erre a beírásomra, de most Hp41C-től is megtudtad: nem lecserélni kel, hanem a grafikus karakter definiálása UTÁN kell egy lcdWrite(CMD_REG,0x80); paranccsal visszaálítani a címet, s ezt követően tudod használni az általad definált karakter(eke)t.
(#) kisszee válasza potyo hozzászólására (») Jún 11, 2010 /
 
Naivan reménykedek benne - már csak azért is, mert kevés ehhez hasonló, jól összeszedett anyag van magyarul, a kellemes design és a sok ábra, mintapélda azt az érzést kelti bennem, hogy valóban az oktatás a cél; ráadásul sokszor egy-egy fejezet újraolvasásánál mindig találok benne valami újat ( persze ez lehet az én hibám ). Köszönöm és kitartást, erőt a folytatáshoz!
(#) icserny hozzászólása Jún 14, 2010 /
 
Nézem, hogy a C18 fordító mit művel az interruptok kiszolgálásakor. Feltűnt, hogy a logikusnak látszó regisztermentéseken kívül elmenti FSR2H értékét is (ez a veremkeret mutató magas helyiértékű fele), valamint a szoftveres veremmutatón is léptet még egyet:
  1. MOVFF FSR2H,PREINC1
  2.     MOVF POSTINC1,F,ACCESS


Érti ezt valaki, hogy mire jók ezek a lépések?

Fentieket a Stack Model: Single-bank model beállításban tapasztaltam. Ha átkapcsolom a fordítót Stack Model: Multi-bank modelbe, akkor viszont FSR2H mentése már nem kerül bele a kódba. Ennek nem fordítva kellene történnie? (Számomra legalábbis logikusabbnak tűnne FSR2H mentése, ha a verem kezelésénél laphatár-átlépés is várható...)
(#) potyo válasza icserny hozzászólására (») Jún 14, 2010 /
 
A megszakítási rutinból hívsz-e függvényt?
(#) trudnai válasza icserny hozzászólására (») Jún 14, 2010 /
 
FSR2 az nem a frame pointer? FSR1 pedig a stack (ez utobbi latszik is a kodon amit beideztel). A kovetkezo kerdes pedig, hogy a multi bank modban vajon hasznal-e frame pointert?
(#) icserny válasza potyo hozzászólására (») Jún 14, 2010 /
 
Idézet:
„potyo: A megszakítási rutinból hívsz-e függvényt?”
Nem.

Idézet:
„trudnai: FSR2 az nem a frame pointer?”
De igen, azért hívják veremkeret mutatónak.
Idézet:
„a multi bank modban vajon hasznal-e frame pointert?”
A megszakítási rutin szerintem nem. Függvényhívásnál van szerepe, lokális változók bázisrelatív címzésénél. Bővebben: Link

Azonban ha nincs laphatár átlépés, akkor FSR2-nek elég az alsó felét elmenteni a verembe.
(#) trudnai válasza icserny hozzászólására (») Jún 15, 2010 /
 
Csak amiatt kerdeztem, mert nem tudom a C18-ban hogy van megoldva, csak remlett, hogy az FSR2 volt a fram pointer.

Viszont a frame-eknek nem feltetlenul kell a stack-en lennie (en epp emiatt nem hasznalom a stack-frame kifejezest, mert az csak es kizarolag a stack-en megvalositott frame-ekre vonatkozik). Tehat a heap-en barhol lehet a frame-ed, az a comilertol fugg, hogy heap vagy stack ahova helyezi. Prologue es epilogue rutinokbol ki kell derulnie, hogy mit muvel ilyenkor, de gyanitom ha egyetlen bank-on van a stack (merthogy azt kerted), akkor nem a stack-re helyezi a lokalisokat, azokat fenntartja a fuggveny parameterek es kontextus mentes szamara. Ezzel novelheto a beagyazasok szama -- de ez csak spekulacio, nem neztem most bele a C18-ba, hogy pontosan hogy csinalja.

Az interruptnal meg termeszetes, ha nem hasznal frame-eket, mivel ott nem reentrans a kod (elmeletileg), igy a valtozok statikus helyen lehetnek, amivel nemcsak a pologue-epilogue szakaszok lesznek kisebbek, de a valtozo hozzaferesek koruli kodreszletek is csokkennek.

Amugy nagyon sok olyan PIC C firdito van ahol pseudo-stack-et hasznalnak, es akkor a nem reentrans fuggvenyeknel az osszes lokalis overlay teruletre kerul -- termeszetesen ugy kioptimalizalva, hogy a leheto legkevesebb helyet foglaljon az overlayed terulet. C18-nal ha jol emlekszem csak akkor tortenik valami hasonlo, ha overlay kulcsszoval kenyszeriti ki ezt az ember.
(#) icserny válasza icserny hozzászólására (») Jún 15, 2010 /
 
Valamivel érthetőbb lesz a dolog, ha egy (auto) lokális változót is definiálunk:
  1. #pragma interrupt hi_isr
  2. void hi_isr() {
  3.     int a;
  4.     a++;
  5. }


Ekkor kiderül, hogy az ISR mégis használja az FSR2 veremkeret mutatót a lokális változó(k) elérésére!
  1. ;--- #pragma interrupt hi_isr
  2. ;---    void hi_isr() {
  3.         movff FSR2H,PREINC1             ;FSR2H -> (++SP)
  4.         movff FSR1H,FSR2H               ;FSR1H -> FSR2H
  5.         movf  POSTINC1,F,ACCESS         ;SP++
  6.         movff FSR2L,POSTINC1            ;FSR2L -> (SP++)
  7.         movff FSR1L,FSR2L               ;FSR1L -> FSR2L
  8. ;--     int a;
  9.         movlw 0x2
  10.         addwf FSR1L,F,ACCESS            ;SP++; SP++
  11. ;--     a++;
  12.         incf  INDF2,F,ACCESS            ;a++
  13.         movlw 0x1
  14.         bnc   $+2
  15.         incf  PLUSW2,F,ACCESS
  16. ;--     }
  17.         movlw 0x2
  18.         subwf FSR1L,F,ACCESS            ;SP--; SP--
  19.         bc    $+6
  20.         clrf  FSR1L, ACCESS
  21.         movf  postdec1,F,ACCESS
  22.         movwf FSR1L,ACCESS
  23.         movf  POSTDEC1,F,ACCESS         ;SP--
  24.         movff INDF1,FSR2L               ;(SP) -> FSR2L
  25.         movf  POSTDEC1,F,ACCESS         ;SP--
  26.         movff INDF1,FSR2H               ;(SP) -> FSR2H 
  27.         retfie 0x1

(remélem, hogy nem írtam el semmit...)

Talán a fentiek kioptimalizálatlan csökevényei lehettek a korábban nem értett (és szerintem teljesen fölösleges)
  1. movff FSR2H,PREINC1             ;FSR2H -> (++SP)
  2.         movf  POSTINC1,F,ACCESS         ;SP++

sorok!
Következő: »»   758 / 1320
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