Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   761 / 1320
(#) potyo válasza miklosch hozzászólására (») Jún 20, 2010 /
 
C18-ban a ROM területre tett cuccokat a rom kulcsszóval kell megadni, nem a const kulcsszóval.
(#) miklosch válasza potyo hozzászólására (») Jún 21, 2010 /
 
Köszönöm, így működik, viszont a meghívás helyén még figyelmeztet:
Warning [2066] type qualifier mismatch in assignment
Mi az oka?
(#) icserny válasza miklosch hozzászólására (») Jún 21, 2010 /
 
Nem mondtad meg, hogy melyik sorra kaptad ezt a figyelmeztetést.

Ebben a hozzászólásban muttattam egy C18-hoz való LCD-re író programot, azt is megnézheted.
(#) m.joco hozzászólása Jún 22, 2010 /
 
Hello
PIC16F628A CCP moduljával (Capture) szeretnék ultrahangos távolságmérőt csinálni. Az adatlapból nem derült ki nekem, hogy a Timer1 előosztóját, bekapcsolását nekem kell külön beállítanom? Illetve ha jön a megszakítás, és kimentődik a Timer1 értéke, akkor utána nekem kell kinulláznom a Timert, vagy kinullázódik magától?
Üdv.
(#) icserny válasza m.joco hozzászólására (») Jún 22, 2010 /
 
Szerintem az adatlapból egyértelműen kiderül, hogy a CCP modul csak kiolvassa a Timer1 számlálóját, de annak már futnia kell (tehát neked kell beállítanod az üzemmódját és az előosztóját).
Idézet:

Illetve ha jön a megszakítás, és kimentődik a Timer1 értéke, akkor utána nekem kell kinulláznom a Timert”
Nem kell nullázni, hanem fut tovább, s amikor majd kiolvasod a következő értéket, akkor kivonod belőle az elsőt (közben, persze figyelni kell az esetleges körülfordulásra, vagy túlcsordulásokra).
(#) PoC_Zoli hozzászólása Jún 22, 2010 /
 
Sziasztok!

Egy 18F14k50-es pic-hez építettem próbapanelt. Ledeket hajtok meg vele 430 Ohm-os ellenállásokon keresztül. Tesztelésnek készült hozzá asembliben egy program, amely 4-4 db ledet villogtatta felváltva a panelen.

Érdekesen indult a dolog, a rc4-es lábon lévő led nem akart villogni, átléptem debug-ba, majd vissza programozó módba és utána ment. (MPLAB)

Jött a következő ötlet, egy LCD beüzemelése. Ahogy átírtam a programot ismét nem világított, a beállításokon csak annyit változtattam, hogy a B portot is kimenetnek állítottam. A debugba átlépés nem segített most. Így az LCD-se megy.

Van valami ötletetek, hogy ez miért van?

Annyit még, hogy az mplab-nak nem teccik, hogy 5V-ot kap a PIC tápnak. Pedig én adatlapból azt értelmeztem, hogy 5V is lehet (7805-el). Most akkor hány voltos?

Előre is köszi!
(#) watt válasza PoC_Zoli hozzászólására (») Jún 22, 2010 /
 
Véletlenül nem az LF-et válaszottad ki az MPLAB-ban?
Az F-es 5V-os, ezt jól látttad, az LF nem.

A programot csatold, úgy többet is lehetne mondani.
(#) icserny válasza PoC_Zoli hozzászólására (») Jún 22, 2010 /
 
Az ilyen kérdésekre akkor lehet érdemi választ adni, ha a részleteket (amelyekben az ördög megbújik) is ismerjük!

Pl. Konfigurációs bitek beállítása, kapcsolási rajz, programkód, stb. Pl. MPLAB-ban ügyeltél-e arra, hogy a fordítás/linkelés RELEASE opcióval történjen?

Konfigurációs bitek vonatkozásában hagyatkozhatsz az általam is használt beállításokra!
Idézet:
„Annyit még, hogy az mplab-nak nem teccik, hogy 5V-ot kap a PIC tápnak.”
Nem az MPLAB-nak, hanem a programozó készülékeknek nem tetszik, mivel azok nem tudnak a VDD-től eltérő jelszinttel programozni, a PGC/PGD lábakra viszont nem szabad 3,6 V-nál magasabb feszültséget kapcsolni. Azért nem, mert ezek az USB jelvezetékek is egyben, s azoknál ez a max. megengedett feszültség.

1. Vagy hagyd, hogy a programozó adjon az áramkörödnek 3,3 V-os VDD-t,
2. vagy pedig ne kösd be a külső 5 V-ot a programozóba (a VDD ne legyen összekötve az ICSP csatlakozóval), s mondd azt a programozónak, hogy tegyen úgy, mintha ő adna 3,3 V-ot ...
(#) Ideiglenes hozzászólása Jún 22, 2010 /
 
Ma jutott eszembe, hogy mindig a következő sablont használom a programjaim kezdésére ( PIC16F sorozat ), ami valahogy így néz ki:
  1. ...
  2. reset_cim      code      0x0000
  3.  
  4.     pagesel    foprogram
  5.     goto       foprogram
  6.  
  7. ...
  8.  
  9. foprogramkezdet     code
  10.  
  11. foprogram
  12.  
  13. ...


Namármost, ha felhagynék ezzel és a következőt használnám, vajon vétek-e valami nagyot?

  1. ...
  2. reset_cim      code      0x0000
  3.  
  4.     call       foprogram
  5.  
  6. ...
  7.  
  8. foprogramkezdet     code
  9.  
  10. foprogram
  11.  
  12. ...


Mivel az 0x0001-es címre nem akarok visszatérni, ezért szerintem továbbra is használhatom a 8 szintű stack-et, legfejjebb túlfordul és kipottyan belőle az 0x0001-es visszatérési érték. Valaki használja ezt a módot? Van róla tapasztalat?
(#) watt válasza icserny hozzászólására (») Jún 22, 2010 /
 
Idézet:
„a PGC/PGD lábakra viszont nem szabad 3,6 V-nál magasabb feszültséget kapcsolni.”

Ez mindig kimegy a fejemből.
De hogy ekkora sületlenséget a gyár részéről miért kell csinálni, azt nem értem, na mindegy...
(#) nemgyuri hozzászólása Jún 22, 2010 /
 
Bocsi kollégák, hogy ezzel zavarok:
Error[149] C:\APA\PICKIT2\PROJEKT\MERORENDSZER\PIC_LCD4.INC 6 : Directive only allowed when generating an object file
...INC file-t akartam létrehozni amiben udata majd .. RES-ek vannak. Az UDATA-s sorra írja a hibát. Mit tegyek?
(#) Hp41C válasza Ideiglenes hozzászólására (») Jún 22, 2010 /
 
Szia!

A call elé ugyanúgy kell a pagesel, mint a goto elé a 16F -eken...
A 18F -en a goto és a call 4 byte-os, és az egész memória tartományon belül lehet velük hivatkozni.
A nagyobb kontrollerekben van stack túl- ill. alulcsordulás figyelés. Szerintem, ha nem akarsz visszatérni, nem jó ötlet...
(#) icserny válasza nemgyuri hozzászólására (») Jún 22, 2010 /
 
Ne abszolút módban írd/fordítsd a programot! Hanem így:

  1. #include <p18cxxx.inc>
  2.  
  3.       UDATA_ACS
  4. j      res 1
  5. k      res 1
  6.  
  7. RST    CODE
  8.        goto main
  9. PGM    CODE
  10. main:             ; itt kezdődik a program
  11.        ...
  12.        END


Linker script is kell, abból derül ki az RST és PGM szekció címe (ha beleírod...).
(#) nemgyuri válasza icserny hozzászólására (») Jún 22, 2010 /
 
Megpróbáltam az ajánlott módon,de nem jött be. A linkert (16f886.lkr) ha megadom neki az .inc-es file-ban levő összes sort hibának veszi az UDATA és RES.. sorok kivételével.
(#) trudnai válasza Ideiglenes hozzászólására (») Jún 22, 2010 /
 
Bar elmeletileg minden resetkor elolrol kezdi a stack-et, megis nem egy javallott megoldas. Elveszitesz egy stack helyet es cserebe semmivel sem kapsz tobbet, mint egy GOTO-val kapnal -- a PAGESEL tovabbra is kell, hacsak nem garantalod, hogy ahova ugrasz az ugyanugy a 0-as lapon fog tartozkodni...

Szoval nyerni nem nyersz semmit sem ellenben csunya a megoldas, elveszitesz egy stack helyet, raadasul ha ne adj isten stack alulcsordulasod lenne, akkor nem egybol veszed eszre, mivel a CALL utani memoria szeletre fog racsorogni a PC...
(#) icserny válasza nemgyuri hozzászólására (») Jún 22, 2010 /
 
A Microchip/MPASM Suite/Template/Object mappában nézd meg a 16F886TMPO.ASM mintapéldát! Mondtam, hogy az én példámhoz a linker fájlt is át kell szabni. Ha a fenti mintapéldát követed, akkor nem...

PIC16F esetében természetesen Access Bank sincs (nincs udata_acs), hanem UDATA_SHR és UDATA van.

Egyébként ez az object fájl-osdi a MPASM Helpjében részletesen le van írva, érdemes elolvasni!
(#) Ideiglenes válasza Hp41C hozzászólására (») Jún 22, 2010 /
 
Mégiscsak érdemes volt feltenni a kérdést. Nem tudom, miért hittem, hogy a call a teljes memóriatartalmat elérheti. Ez a lapolás és bankolás a halálom.
Amúgy rájöttem. Most épp 16F628-ast programozok, és annak a legnagyobb memóriacíme 0x07FF, ami belefér még egy utasításba, anélkül, hogy lapozni kellene. A 16F887-nél viszont már bajosan. Oda már tényleg nagyon keményen meg kell gyúrni a kódod, hogy moduláris maradhasson. Na de a fordító is nagyon értelmes, mert nem tette bele a végeredménybe a pagesel utasításait. Most esett le, hogy miért...
(#) icserny válasza Ideiglenes hozzászólására (») Jún 22, 2010 /
 
Idézet:
„Ez a lapolás és bankolás a halálom.”
El is hiszem. De mi a búbánatért nem használsz akkor PIC18-at? Abban is van kicsi, olcsó, kis lábszámú...
(#) trudnai válasza Ideiglenes hozzászólására (») Jún 22, 2010 /
 
Idézet:
„Amúgy rájöttem. Most épp 16F628-ast programozok, és annak a legnagyobb memóriacíme 0x07FF, ami belefér még egy utasításba, anélkül, hogy lapozni kellene. A 16F887-nél viszont már bajosan.”


Es azt nezted-e mar, hogy a PAGESEL mire fordul a 628-as eseten? Ha olyan kodot szeretnel irni, amit esetleg masik MCU-ra is le szeretnel forditani, akkor nem art az a PAGESEL
(#) Hp41C válasza Ideiglenes hozzászólására (») Jún 22, 2010 /
 
Szia!

Ha a programtár mérete magyobb, mint 2K, más dolgok is előjönnek. Megszakítási rutin mentés, visszaállítás megváltozik, PCLATH -t is menteni kell. A mentés után a 0. lapot kell beállítani...

Lapozás: Szervezd úgy az életet, hogy ameddig csak lehet, a program maradjon egy lapon (a 0. on), a nagymennyiségű táblázat kerüljön más lapokra. Ha mégsem fér el a program egy lapon, tegyél át komplett rutinokat (amik összetartoznak és nem hívnak más lapon levő eljárást - inicializálás...) az 1. vagy a 2. lapra. Nem olyan ördöngösség, mint amike látszik...

Bankolás: -- Ha elég sok az adat a 18F -en is lehet bankolni...
(#) trudnai válasza Hp41C hozzászólására (») Jún 22, 2010 /
 
Idézet:
„Bankolás: -- Ha elég sok az adat a 18F -en is lehet bankolni...”


Mar varom ki fogja eloszor felbodni, hogy tessek AVR-t hasznalni
(#) Ideiglenes válasza trudnai hozzászólására (») Jún 22, 2010 /
 
Na persze egyszerű programoknál ki lehet használni például a megosztott regiszterterületet. Igaz, max 16 reg, de ha az éppen elég valamilyen feladathoz, akkor minimális bankolással meg lehet úszni. De azért most már én is inkább abba az irányba kacsingatok, hogy amit megcsinálok kicsiben, az legyen jó nagyban is. Tehát minél általánosabb legyen a kód és minél inkább átvihetőbb más feladatokba is és más vezérlőkre is.
( Van már itthon atmega88 )
(#) potyo válasza Ideiglenes hozzászólására (») Jún 23, 2010 /
 
Általában az SFR regiszterek miatt kell a bankolgatás, nem a változók miatt. Változókat általában a nullás bankon használjuk, a többi bankot pl. pufferterületként használjuk és indirekt módon érjük el. Persze ez nem kötelező érvényű, csak amennyiben lehetséges, akkor így szokás.

Ez a hordozhatóság elméletben szép dolog, gyakorlatban valahogy nem tűnik annyira működőnek, amikor hardverrel közvetlenül végzünk valamit. C-ben megírva egy CRC számítás az pl. hordozható, de egy LCD vagy soros port kezelésen szinte mindig kell valamit faragni.
(#) watt válasza potyo hozzászólására (») Jún 23, 2010 /
 
Érdekes, hogy csak kevesen tudnak ilyen egyszerűen gondolkodni (mindig a legegyszerűbb megoldás a "legszebb" hosszú távon), legtöbbször csak saját életüket bonyolítják az emberek.

Még annyit fűznék hozzá, hogy 18F-eknél ha kiválasztjuk az 1-es bankot, akkor 256(bank1)+128(bank0 access) bájt folyamatosan elérhető bankváltás nélkül. Ez a legtöbb esetben elég szokott lenni, és indirekt címzés nélkül sem kell bankot váltani. Persze vannak kivételek, de ez a ritkább eset, mert mindent meg lehet oldani többféleképpen is és érdemes mindig az egyszerűbbet választani. A MOVFF -al is meg lehet kerülni a bankváltást. Én is azt mondom, hogy 18F, ha több memó kell, mint 1 bank, vagy több flash, mint 1lap...
(#) Hp41C válasza potyo hozzászólására (») Jún 23, 2010 /
 
Szia!

- 16F: elég kevés az 1 lapon levő memória, 96 változó általában nem elég egy összetettebb feladathoz.
- 18F: Az SFR -ek az Access bankon keresztül elérhetők bankolás nélkül, ha több változó kell, mint 256+128, direkt kezeléssel, akkor jön a bankváltás....
- A bankolás nem feltétlenül hátrány, jól ki is lehet használni: változók mentése helyett, egy rutin többféle adatot is tud kezelni..., de ehhez gondos tervezés kell...
(#) PoC_Zoli válasza watt hozzászólására (») Jún 23, 2010 /
 
Most ez komoly? Már ptogramoztam minden gond nélkül 18f2550-et (asszem). Ott is össze volt kötve. (Az más kérdés, hogy valami gond ott is volt)De a programozás ment.

Most azt csinálom, hogy lehúzom a tápot mikor programozok, mikor meg próbálom az áramkört a pk2-t húzom le, egyszerűen reset-ben tartja...

Na és a részleteket is csatolom, hátha tudtok segíteni eredeti problémámra amit előre is köszönök.
(#) szilva válasza PoC_Zoli hozzászólására (») Jún 23, 2010 /
 
A 18F14K50-ről volt szó, annak nem szereti a PGD/PGC lába a 3.6V-nál nagyobb szintet. A 18F2550 nem ilyen, az teljesen 5V-os PIC.

A PK2-nél be tudod állítani, hogy tartsa-e resetben vagy nem. Valahogy meg kellene oldani, hogy ne kelljen lehúzogatni állandóan.
(#) icserny válasza PoC_Zoli hozzászólására (») Jún 23, 2010 /
 
Tegnap már ajánlottam, hogy a konfigurációs biteket be kellene állítani tisztességesen. Ha pl. az LVP nincs letiltva, az RC3 láb a normál és a programozói üzemmód közötti váltásra van fenntartva. Ráadásul ha nem húzod le földre, akkor nem is fut a program....

A panel szép és hasznos, bár én a 7805 helyett egy USB csatlakozót tettem volna rá.
(#) Hp41C válasza PoC_Zoli hozzászólására (») Jún 23, 2010 /
 
Szia!

Sokkal kevesebb gondod lesz az áramkörökkel, ha a táp és főleg a föld vezetékeket megvastagítod. Ezen a kártyán is vígan elfért volna 1 mm vastag föld is.
(#) kisfejes hozzászólása Jún 23, 2010 /
 
Hello!
Az lenne a kérdésem hogy a mellékelt rajzon az A és B áramkörnek mi a szerepe és hogy működnek.
Azt tudom hogy mclr láb reset láb, de hogy mi az a reset és mit csinál azt nem . Illetve azt tudom hogy OSC1 OSC2 lábon kapja az impulzusokat a chip, hogy dolgozni kéne. Pl.: ha 10Mhz akkor 1 sec alatt 10 millió impulzus.
Azt nem értem még, hogy mit csinál az a 2 kondenzátor ott és minek kell 2 láb ehhez. Előre is köszi a segítséget!
Következő: »»   761 / 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