Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   1110 / 1210
(#) menyus válasza aroxol hozzászólására (») Márc 12, 2020 /
 
Minek ehhez mikrovezérlő mikor sot 23-6 tokban van ilyen step-down cél áramkör? Ha nagyobb áram kell akkor MC34063, az SO8 as. Céllövöldében is adják vigaszdíjként...
A hozzászólás módosítva: Márc 12, 2020
(#) menyus válasza Pali79 hozzászólására (») Márc 12, 2020 /
 
Köszönöm. Az mindegy hogy milyen sorrendben állítom be a TRIS regisztert és az ADC nél a digit kimenetet a PORTA ra vonatkozólag? Még arra gondoltam hogy előbb átállítom az ADCON regisztert és utána a TRISA t.
(#) menyus válasza Pali79 hozzászólására (») Márc 12, 2020 /
 
A PORTA kimenetek egy analóg kapcsolókat vezérelnek amiknek a vezérlő lábán van egy-egy LED is, tehát a visszajelzés megoldott. A LED ek éppen hogy parázslanak... Ha VDD t adok rájuk akkor világítanak normálisan.
(#) Pali79 válasza menyus hozzászólására (») Márc 12, 2020 /
 
Mindegy milyen sorrendben állítod a regisztereket amíg megelőzik a lábak használatát, szvsz. Esetleg ha skiccelnél egy kapcsolási rajzot, lehet jobb lenne.
A hozzászólás módosítva: Márc 12, 2020
(#) menyus válasza Pali79 hozzászólására (») Márc 12, 2020 /
 
Ok, értem. Otthonról megoldom, most munkahelyen vagyok. Köszi előre is.
(#) pipi válasza menyus hozzászólására (») Márc 12, 2020 1 /
 
Mikor a progid indul(goto ini), az INI, ott a TRISx registerbe akarsz írni, de az melyik bankban is van, nem kéne előbb bankot váltani? (rp0, rp1)
A gyári adatlapban van minta az próbáltad?
BCF STATUS, RP0 ;
BCF STATUS, RP1 ; Bank0
CLRF PORTA ; Initialize PORTA by
; clearing output
; data latches
BSF STATUS, RP0 ; Select Bank 1
MOVLW 0x06 ; Configure all pins
MOVWF ADCON1 ; as digital inputs
MOVLW 0xCF ; Value used to
; initialize data
; direction
MOVWF TRISA ; Set RA<3:0> as inputs
; RA<5:4> as outputs
; TRISA<7:6>are always
; read as '0'.
(#) menyus válasza pipi hozzászólására (») Márc 13, 2020 /
 
A bankvaltasok nalam macrok ba meg vannak irva, lasd a program legelejet meg az INI elott. Valtok en is bankot csak nem a "szokvanyos" modon. Nem kozvetlenul a STATUS regiszterbe irok mert a BANK0 - BANK3 macrok ezt megteszik helyettem. A TRISA ha jol emlekszem a BANK 1 ben van, es a BANK1 macro hivasaval meg is tettem a bank valtast.
.
A hozzászólás módosítva: Márc 13, 2020
(#) pipi válasza menyus hozzászólására (») Márc 13, 2020 /
 
A forrás tabulálása miatt én cimkének néztem a BANK0, BANK1 -et, mivel előbb kezdődik mint az asm utasítások
(#) menyus válasza pipi hozzászólására (») Márc 13, 2020 /
 
Ok, no problem. Jeleztem is alább hogy rosszul tördelte a fórummotor e miatt az eredeti forrást. Pl egy sorba rendezett dolgokat ami eleve hibás lenne, de az eredeti forrás nem így néz ki. Nekem viszont így jobban átlátható, ezért használok tabulátort.
(#) menyus válasza menyus hozzászólására (») Márc 13, 2020 /
 
Viszont ezzel kapcsolatban eszembe jutott... Macro t nem lehetne rutin helyett használni? Csak mert akkor a CALL utasítás se kéne a rutin híváshoz, elég a macro címe. Az ENDM pedig ugyan oda küldi vissza a programot a macro lefutása után mint a rutinnál a return. Csak úgy eszembe jutott, lehet hülyeség...
(#) Pali79 válasza menyus hozzászólására (») Márc 13, 2020 / 1
 
Nem szerencsés... A makró teljes tartalma annyifor fordul bele a hex-be ahányszor a forrásban szerepel, míg a rutin csak egyszer bármennyiszer is van használva. Ez pont ezeknél a pic-eknél tud problémákat okozni, amikor a program "kinövi" az első memória lapot és nem elég egy sima utasítás a megfelelő visszatéréshez. További gond lehet még ha egy részt, pl táblázatot stb-t meghatározott helyre teszel és eszre sem veszed, hogy "rálóg" a főprogram vége. Bár utóbbira azt hiszem hibát dob a fordító, az első visztont csak érthetetlen újraindulásokat eredményez.
(#) menyus válasza Pali79 hozzászólására (») Márc 13, 2020 /
 
Értem, köszönöm a fejtágítót. Elsőre működőképes ötletnek tűnt, de gondoltam hogy van valami oka ami miatt nem használják ezt a megoldást.
A hozzászólás módosítva: Márc 13, 2020
(#) asch válasza menyus hozzászólására (») Márc 13, 2020 / 1
 
Használnak ilyet, és van ahol meg éppen ez a jó megközelítés. A call/return utasításokat meg lehet spórolni, amiknek a futásideje jelentős is lehet. Szubrutin (függvény, metódus, stb) Inline-osítás a neve a technikának.

Valóban egy kompromisszum a sebesség és a programmemória használat között, ezért minden esetben mérlegelni kell a használatát. A helyes megközelítés általában az, hogy ilyesmi optimalizálást csak a kész programon csinálunk azokon a részeken, amik szűk keresztmetszetnek bizonyulnak: azaz elkerüljük a korai optimalizálást.
(#) menyus válasza asch hozzászólására (») Márc 14, 2020 /
 
Értem, akkor nem teljesen "életképtelen" az ötlet csak módjával kell használni, mondhatni kerülendő egy kezdő számára. Én nem vagyok azon a szinten hogy merjem használni, de nem mondom hogy egyszerűbb programoknál nem fogom kipróbálni. Ahol valószínűleg nem is fog gondot okozni, mert nem olyan PIC et használok amiknél van már program lap váltás. Egyszer futottam bele hogy kinőttem egy F628 at, és helyette egy F648 at használtam végül mivel láb kompatibilis csakhogy ott már két memória lap van. Amelyek között váltani kell ha egy rutin még az egyik lapon van de már a másik lapról kell meghívni. Ilyenkor használni kell a lapváltást különben borul a bili. Szenvedtem is vele eleget mire rájöttem hogyan is működik ez.

Szoszo... csak felrémlett hogy a macro kb. ugyan azt csinálja amit a subrutin. Lefut, majd a program folytatódik onnét ahonnan a meg lett hívva. A különbséget nem láttam, de ezt Pali79 érthető módon leírta. Neked is köszönöm a választ, ez is egy alternatíva.
(#) Pali79 válasza menyus hozzászólására (») Márc 14, 2020 /
 
Idézet:
„Egyszer futottam bele hogy kinőttem egy F628 at, és helyette egy F648 at használtam végül mivel láb kompatibilis csakhogy ott már két memória lap van.”
Van itt egy kis zavar... A 628-nak is 2 lapja van, a 648-nak 3, az általad most használt 877-nek meg már 4. Szóval bele lehet keveredni rendesen. Ha nem akarod szivatni magad ezzel akkor át kell térni a 18F szériára. Nagyon hasonló, de bővített az utasításkészlet és a memória kezelése is egyszerűbb.
A hozzászólás módosítva: Márc 14, 2020
(#) menyus válasza Pali79 hozzászólására (») Márc 14, 2020 /
 
Igen, valóban a 628 nak is 2 lapja van. Lehet csak nem emlékeztem rá de most megnéztem. Tény, hogy elég nehézkes a lapváltások használata, hamar bele lehet keveredni a dologba. A 18F szériát nem ismerem egyáltalán, eddig csak a 10F - F648 volt a repertoár amikkel foglalkoztam. Azt is évekkel ezelőtt, ezért most sok minden nem ugrik már be. Pl a 877 el kreáltam az első projectemet (mezei futófény ) és semmi gondom nem volt a PORTA val, az RA4 en kívül, ami ugye open draines ezért máshogy működik mint a többi kimenet. De ez igaz a 628/648 ra is. De azt a problémát is "kiszenvedtem" anno. Most még mindig a F877 es PORTA jával szenvedek, az istennek se tudom beállítani kimenetnek és H ba tenni őket. ADCON1 regiszternél minden digit I/O nak beállítva, TRISA nál mind a 6 láb kimenet ("0") , PORTA nál 0 - 5 ig beállítva H ba ("1") . Minden regiszter a megfelelő bankjában van beállítva. 76x átnéztem. Mégse műkszik... Lehet döglött az F877 esem? 10 éve vettem nem is tudom használtam e már. DIL40 es, foglalatban még lehetett. Még a lapváltásokat átnézem de ha az nem lenne a helyén akkor úgy emlékszem a fordításkor hibát dobna és ez pár soros kód gond nélkül lefordul. A PCLATH hoz eleve nem nyúltam, és gondolom defaultban a Page0 án áll eleve, a PCLATH ráadásul mind a 4bankból elérhető tehát a bankváltás hiba is kilőve. Nincs ötletem de szenvedek tovább, hátha rájövök mi a gond. Pl a többi portot nem is próbáltam még (B,C,D,E) ott mit mutat ugyan ez a dolog. Ha azok se mennek akkor lehet döglött a PIC. Még esetléeg arra gondolok hogy a quartz nem rezeg és nincs órajel. 12MHz est használok, ezt találtam. INT_OSC a 877 ben nincs is, így ezt nem tudom kipróbálni hogy úgy menne e és kizárhatnám a quartz hibát. Az oszcillátor tipusa lényegtelen, mehetne belső 4MHz ről is akár. Majd szkóppal ránézek van e órajel.
(#) Hp41C válasza Pali79 hozzászólására (») Márc 14, 2020 / 1
 
Nagyon nagy itt a zavar:
Különbséget kell tenni a program memória lapjai és az adat memória bankjai között. Egy program memória lap 2k szót, egy adat memória lap 128 byte -ot jelent.
16F628: 2k program memória lap azaz 1 lap
16F648: 4k program memória lap azaz 2 lap
16F877: 8k program memória lap azaz 4 lap
Továbbá nem kell aggódni, hanem át kell nézni a lapok kezelését... Erről írtam is egy cikket ide.

Javaslat:
0. lap: Ugrás az inicializáló rutinra (jé! Pont 4 programszó áll rendelkezése... Egy a nyomkövetéshez, kettő a PCLATH felső bitjeinek beállítására és egy az ugrásnak.) és a megszakítási rutin.
1. lap: A többi kód.
2-3. lap: adatok, ugrótáblák.
Kis odafigyeléssel szépen működik.

Továbbá nem célszerű az bank váló makrok -ban az IRP állítása. Egyrészt sok helyet foglal feleslegesen, másrészt elront(hat)ja a memória indirekt címzés már beállított bankját.
(#) Hp41C válasza menyus hozzászólására (») Márc 14, 2020 /
 
16F877 vagy 16F877A? Van-e benne komparátor? CMCON be van állítva?
Mellékeld a forrást (asm állomány), hogy meg tudjuk vizsgálni.
(#) menyus válasza Hp41C hozzászólására (») Márc 14, 2020 /
 
Sima F877, nincs benne komparátor. Legalábbis CMCON regiszter nincs, és a perifériák közt sem sorolja a datasheet. Már lebutítottam a forrást csak a PORTA állítására, de úgysem megy. Mindjárt felrakom csak kiszedem belőle a tabulátorokat mert megzavarja a fórumon a kód megjelenését.
A hozzászólás módosítva: Márc 14, 2020
(#) menyus válasza Hp41C hozzászólására (») Márc 14, 2020 /
 
Igen, azt értem(?) hogy a bankok és a program memória lapok az 2 külön dolog. Az IRP t azért tettem a macro ba hogy akár melyik címzésmódot használom működjön ugyan az a macro. De ezek szerint ez sem jó megoldás, köszönöm. Nézem a cikket is!
(#) menyus válasza Hp41C hozzászólására (») Márc 14, 2020 /
 
Erről lenne szó...:

  1. errorlevel-302
  2. errorlevel-311
  3.  
  4. LIST P=16F877,F=INHX32
  5. #include <P16F877.INC
  6.  
  7.  
  8.  
  9. __CONFIG _HS_OSC&_WDT_OFF&_DEBUG_OFF&_PWRTE_OFF&_LVP_OFF&_WRT_ENABLE_OFF&_BODEN_OFF&_LVP_OFF  ; (QARTZ = 12MHz )
  10.  
  11.        
  12. ;BANK VÁLTÁS MAKRÓK
  13.  
  14. BANK0
  15.  
  16. MACRO
  17.  
  18. BCF     STATUS,IRP
  19. BCF     STATUS,RP0
  20. BCF     STATUS,RP1
  21.  
  22. ENDM
  23.  
  24. BANK1
  25.  
  26. MACRO
  27.  
  28. BCF     STATUS,IRP
  29. BSF     STATUS,RP0
  30. BCF     STATUS,RP1
  31.  
  32. ENDM
  33.  
  34. BANK2  
  35.                
  36. MACRO
  37.  
  38. BSF     STATUS,IRP
  39. BCF     STATUS,RP0
  40. BSF     STATUS,RP1     
  41. ENDM
  42.  
  43. BANK3
  44.        
  45. MACRO
  46. BSF     STATUS,IRP
  47. BSF     STATUS,RP0
  48. BSF     STATUS,RP1
  49.  
  50. ENDM
  51.  
  52. ----------------
  53.  
  54. ;VÁLTOZÓK
  55.  
  56. CBLOCK  0X0C
  57.  
  58.                                          
  59. S1      ;COUNTER LOOP1                           
  60. S2      ;COUNTER LOOP2           
  61. S3      ;COUNTER LOOP3           
  62.                                          
  63.                                        
  64. ENDC
  65.  
  66. ------------
  67.  
  68. ;RESET PONTOK KIJELÖLÉSE
  69.                        
  70. ORG  0X00
  71. GOTO INI
  72.  
  73. ORG 0X04
  74. GOTO INT
  75.  
  76. ;------ MEGSZAKÍTÁS --------
  77.  
  78. INT    
  79.  
  80. RETFIE
  81.  
  82. ;--------------------------
  83.  
  84. ;INICIALIZÁLÁS
  85.  
  86. INI
  87.                                          
  88. BANK1
  89.                                
  90. MOVLW   B'00000000'     ;MINDEN PORTA LÁB KIMENET       
  91. MOVWF   TRISA
  92.        
  93.  
  94. MOVLW   B'00000000'     ;MEGSZAKÍTÁSOK TILTVA        
  95. MOVWF   INTCON
  96.  
  97. MOVLW B'00001111' ;MINDEN PORTA LÁB DIGITÁLIS KIMENET VAGY BEMENET
  98. MOVWF ADCON1
  99.  
  100.                        
  101. BANK0
  102.                          
  103. CLRF     PORTA
  104.                        
  105. MOVLW   B'00011111'     ;PORTA 0 - 5 IG "H" BAN
  106. MOVWF   PORTA
  107.  
  108.                
  109. END
A hozzászólás módosítva: Márc 14, 2020
(#) menyus válasza menyus hozzászólására (») Márc 14, 2020 /
 
Uppppsz.... a CLRF PORTA eleve hibás a H ba állítás előtt, mivel a program így 12MHz es ütemben folyamatosan ki bekapcsolgatja a már H ba állított kimeneteket...
A hozzászólás módosítva: Márc 14, 2020
(#) Hp41C válasza menyus hozzászólására (») Márc 14, 2020 /
 
Inkább így:
  1. errorlevel-302
  2.     errorlevel-311
  3.      
  4.     LIST P=16F877,F=INHX32
  5.     #include <P16F877.INC>
  6.      
  7.      
  8.      
  9.     __CONFIG _HS_OSC&_WDT_OFF&_DEBUG_OFF&_PWRTE_OFF&_LVP_OFF&_WRT_ENABLE_OFF&_BODEN_OFF&_LVP_OFF  ; (QARTZ = 12MHz )
  10.      
  11.            
  12.     ;BANK VÁLTÁS MAKRÓK
  13.      
  14.    
  15. BANK0  MACRO
  16. ;;      BCF     STATUS,IRP
  17.     BCF     STATUS,RP0
  18.     BCF     STATUS,RP1
  19.   ENDM
  20.      
  21.      
  22. BANK1  MACRO
  23. ;;   BCF     STATUS,IRP
  24.     BSF     STATUS,RP0
  25.     BCF     STATUS,RP1
  26.   ENDM
  27.      
  28.                    
  29. BANK2  MACRO
  30. ;;    BSF     STATUS,IRP
  31.     BCF     STATUS,RP0
  32.     BSF     STATUS,RP1  
  33.   ENDM
  34.      
  35.            
  36. BANK3  MACRO
  37. ;;    BSF     STATUS,IRP
  38.     BSF     STATUS,RP0
  39.     BSF     STATUS,RP1
  40.   ENDM
  41.      
  42. ;    ----------------
  43.      
  44.     ;VÁLTOZÓK
  45.      
  46.         CBLOCK  0X0C
  47.      
  48.                                            
  49.     S1      ;COUNTER LOOP1                                
  50.     S2      ;COUNTER LOOP2                  
  51.     S3      ;COUNTER LOOP3                
  52.                                        
  53.                                            
  54.         ENDC
  55.      
  56. ;------------
  57.      
  58.     ;RESET PONTOK KIJELÖLÉSE
  59.                            
  60.     ORG  0X00
  61.     GOTO INI
  62.      
  63.     ORG 0X04
  64.     GOTO INT
  65.      
  66. ;------ MEGSZAKÍTÁS --------
  67.      
  68. INT    
  69.      
  70.     RETFIE
  71.      
  72. ;--------------------------
  73.      
  74.     ;INICIALIZÁLÁS
  75.      
  76. INI
  77.                                            
  78.     BANK1
  79.                                    
  80.             MOVLW   B'00000000'        ;MINDEN PORTA LÁB KIMENET      
  81.         MOVWF   TRISA
  82.            
  83.      
  84.         MOVLW   B'00000000'        ;MEGSZAKÍTÁSOK TILTVA  
  85.                 MOVWF   INTCON
  86.      
  87.         movlw   B'00000111'             ;MINDEN PORTA LÁB DIGITÁLIS KIMENET VAGY BEMENET
  88.         MOVWF ADCON1
  89.      
  90.                            
  91.     BANK0
  92.                        
  93.         CLRF     PORTA
  94.  
  95. Loop:                              
  96.         MOVLW   B'00011111'        ;PORTA 0 - 5 IG "H" BAN
  97.         MOVWF   PORTA
  98.         goto    Loop
  99.                    
  100.     END


- A makrok definíciója volt hibás.
- Az PORTA összes lábának digitálisra állítása a B'00000111' = 0x07 értékkel lehetséges (ld. adatlap Register 11-2)
- A program végére kell valami, ami meggátolja, hogy a kontroller újra és újra eljusson a 0 címre.
A hozzászólás módosítva: Márc 14, 2020
(#) menyus válasza Hp41C hozzászólására (») Márc 14, 2020 /
 
Köszönöm, próbálom a Te verziódat. Én hiába vettem ki a CLRF PORTA sort változatlanul nem műkszik. De én még a régi macro definíciókat használom egyelőre. Mindjárt módosítom. Vagy a program végére berakok egy sleep et, próbából...
(#) Hp41C válasza menyus hozzászólására (») Márc 14, 2020 /
 
A mikrokontrollerek programja egy végtelen hurok. A sleep mást jelent, elküldi a kontrollert "aludni", alacsony áramfelvételű állapotba.
(#) menyus válasza Hp41C hozzászólására (») Márc 14, 2020 /
 
Sajna így sem megy, lefordul hiba nélkül de fordításkor az output ablak teli van warning al és az összes PORTA marad L ben.

"Warning[207] C:\USERS\USER\DESKTOP\KEYBOARDSIM\KEYBOARDSIM.ASM 15 : Found label after column 1. (BANK0)
Warning[207] C:\USERS\USER\DESKTOP\KEYBOARDSIM\KEYBOARDSIM.ASM 22 : Found label after column 1. (BANK1)
Warning[207] C:\USERS\USER\DESKTOP\KEYBOARDSIM\KEYBOARDSIM.ASM 29 : Found label after column 1. (BANK2)
Warning[207] C:\USERS\USER\DESKTOP\KEYBOARDSIM\KEYBOARDSIM.ASM 36 : Found label after column 1. (BANK3)
Warning[207] C:\USERS\USER\DESKTOP\KEYBOARDSIM\KEYBOARDSIM.ASM 68 : Found label after column 1. (INT)
Warning[207] C:\USERS\USER\DESKTOP\KEYBOARDSIM\KEYBOARDSIM.ASM 76 : Found label after column 1. (INI)
Warning[207] C:\USERS\USER\DESKTOP\KEYBOARDSIM\KEYBOARDSIM.ASM 95 : Found label after column 1. (Loop)"
(#) menyus válasza Hp41C hozzászólására (») Márc 14, 2020 /
 
Igen, de úgy tudom csak a ciklust állítja le, a program futását. A kimenetek állapotát megőrzi, tehát ha a PORTA H ba állítása után aludni küldöm akkor ami H ban volt az H ban is marad. De ha nincs ott a CLRF PORTA akkor is H ban marad csak folyamatosan fut a program és minden cilusban H ba állítja feleslegesen a kimeneteket mivel már amúgy is H ba lettek egyszer állítva. Értelmetlen ez így persze, de ez az egész csak egy próba részemről, miért nem megy a PORTA H ba állítása? Mert így se megy. Lehet hibás a kontrollerem... Másra már nem igen tudok gondolni.
(#) menyus válasza Hp41C hozzászólására (») Márc 14, 2020 /
 
Minden esetre köszönöm szépen a segítségeteket!
(#) menyus válasza menyus hozzászólására (») Márc 14, 2020 /
 
A sok warning csak a miatt volt hogy nem a sor elején kezdődtek a cimkék. Egy az egyben másoltam be a kódot és így tördelte a gép az MPLAB alá. A PORTA viszont nem megy, nyomozok tovább. Köszi szépen. Lehet nincs is órajelem pl...
(#) Hp41C válasza menyus hozzászólására (») Márc 14, 2020 /
 
A __config -ban ne állítsd a DEBUG bitet, hanem az MpLab ablakának felső részén a Debug -ot állítsd át Release -ra
Következő: »»   1110 / 1210
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