Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   335 / 1319
(#) trudnai válasza mrfencer hozzászólására (») Nov 9, 2008 /
 
Nem, akkor azt maskepp kell megcsinalnod. BSF / BCF az Bit Set File ill Bit Clear File... Magyaran 1-1 bitet billegtetsz vele. Ha tobbet szeretnel, akkor pl csinalhatsz ilyet:
  1. # define LEDSOR B'00001111'
  2. ...
  3. vilagitas_be
  4.     MOVLW   LEDSOR
  5.     IORWF   PORTB,f
  6. ...
  7. vilagitas_ki
  8.     MOVLW   ~LEDSOR
  9.     ANDWF   PORTB,f
(#) mrfencer válasza trudnai hozzászólására (») Nov 9, 2008 /
 
Rendben, köszönöm szépen!! Tényleg ebbe bele sem gondoltam, hogy az csak egy bitet billent. Azt meg mondod nekem, hogy az IORWF utasítás mit csinál? Mármint, az tudom, hogy bitenkénti vagy kapcsolat, de itt jelen esetben nem értem. Ja és azt, hogy a iért van hullámjel a második LEDSOR előtt?
(#) mrfencer válasza trudnai hozzászólására (») Nov 9, 2008 /
 
Trudnia, a Te segítségedel átírtam a programomat,a mi edig egy LEDet kapcsolt fel, a program hibátlanul lefut, de ha beégetem, akkor már alapból úgy indul, hogy az RB0-3ig az összes led világít, és nem tudom kapcsolgatni. Nincs ötletem mi a rossz, belinkelem, hátha ti láttok valamit, amit én nem!
  1. #INCLUDE "P16F877.INC"
  2. __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_LVP_OFF
  3.  
  4. ORG 0
  5.  
  6. #define LEDSOR b'1111'  ;  RB0-RB3
  7. #define S1 PORTC,1         ; S1 kapcsoló
  8. LEDPORT         equ PORTB
  9. SWPORT          equ PORTC
  10.        
  11.  
  12. start
  13.  
  14.         banksel TRISB          
  15.         clrf    TRISB          
  16.         banksel PORTB          
  17.  
  18.  
  19. testS1
  20.  
  21.         btfsc S1
  22.                 goto ledOFF    
  23.  
  24. ledON
  25.        
  26.                 MOVLW   LEDSOR
  27.                 IORWF   PORTB,f
  28.                 goto testS1
  29.                 ; bsf RRLED
  30.         ;goto testS1
  31.  
  32. ledOFF
  33.                
  34.                 MOVLW   LEDSOR
  35.         ANDWF   PORTB,f
  36.         goto testS1
  37.                 ;bcf RRLED
  38.         ;goto testS1
  39. end
(#) Báddzsó hozzászólása Nov 9, 2008 /
 
sziasztok, abban kérem a segítségeteket, hogy javasoljatok minél egyszerűbb megoldást. A dolog a következő:
16F677 (16F690 kistesója)
óra áramkör, külső tápról, mert 7szegmenses multiplexelt kijelzője van. Namármost, ha külső táp megszűnik, a picnek sleepbe kéne ugrania minél hamarabb, és ezzel együtt kikapcsolni a kijelezést. Viszont ha a táp visszajön újra bekapcsolni. Egy 3V-os gombelem a "backup" és 3.3Vos tápról menne az áramkör. A kérdés, hogy hogy szokás ezt megoldani, figyelni egy adc-s lábbal a feszt és pollingolni, vagy van valami speciálisabb megoldás?
köszi előre!
(#) watt válasza Báddzsó hozzászólására (») Nov 9, 2008 /
 
Nézz utána a comparátor működésének, és a Sleep-nek az adatlapban.
(#) trudnai válasza mrfencer hozzászólására (») Nov 9, 2008 /
 
  1. ledOFF
  2.         MOVLW   LEDSOR
  3.         ANDWF   PORTB,f

A MOVLW-nel hianyzik a "malacfarok" azaz a ~ jel... az az egesz byte-ot negalja... Ha anelkul csinalod akkor ugye a felso 4 bitet nullazod ki es az also 4 marad valtozatlan...
(#) trudnai válasza Báddzsó hozzászólására (») Nov 9, 2008 /
 
Comparatorra tedd ra a kulso es belso tapforrast... Amugy ha kulso ora aramkorod van (RTC) akkor azokban amugy is szokott lenni belso taplalas, az oraja nem all le soha, a PIC-nek viszont nem kell mennie meg sleep modban sem... Tehat mikor a tap vissza jon a PIC amugy is lekerdezi az aktualis idot az RTC-tol es elkezdi a kijelzest...
(#) mrfencer válasza trudnai hozzászólására (») Nov 9, 2008 /
 
Köszi, működik, pedig amit irtál segitséget abban benen volt a ~ jel, valószinű véletlenül kitörölhettem vagy ilyesmi. Köszi a segitséget!
(#) Báddzsó válasza trudnai hozzászólására (») Nov 9, 2008 /
 
pic timer1-je méri az időt, tehát kell a sleep a picnek.
@Watt: comparátort még nem használtam picben, de köszi, megnéztem, jólesz!
köszönet mindkettőtöknek!
(#) geri12 hozzászólása Nov 9, 2008 /
 
Hello! Dolgoztam egy kicsit a módosításon, de nagy eredményt továbba sem értem el.

Átírtam a progi elejét, ahogy 12F629-be szokott lenni. Lábak, kimenetek, TRISIO, OPTION_REG, stb. MLAB szerint minden rendben, valamint a PIC szimulátorban ismét megjelennek az adott kimenet a jelek (GPO,1,2), de áramkörben nem indul. Természetesen a progam berását, config biteket nem szurom el...

Felteszem az általam módosított progit Ha valaki nem látja hogy mi lehet a gond, akkor holnap veszek egy F509A-t és hagyom.... Bár jobb lett volna ebben.

A progi módosítva: (ha valaki a többi sort is megnézné beszurhatom -- kb.+80-85 sor)

LIST p=12f629a ; proc. defs
#include ; constants

__CONFIG _MCLRE_ON & _CP_OFF & _WDT_ON & _XT_OSC & _BODEN_OFF & _PWRTE_ON

#DEFINE OUT1 GPIO,0
#DEFINE OUT2 GPIO,1
#DEFINE OUT3 GPIO,2
#DEFINE OUT1_M 0x00
#DEFINE OUT2_M 0x01
#DEFINE OUT3_M 0x02


ORG 0000h

CLRF GPIO
MOVLW 0X07
MOVWF CMCON
BSF STATUS,RP0
MOVLW 0X01
MOVWF OPTION_REG
MOVLW B'00001000'
MOVWF TRISIO
MOVLW 0X85
BCF STATUS,RP0
BCF INTCON,GIE
(#) trudnai válasza geri12 hozzászólására (») Nov 9, 2008 /
 
Idézet:
„A progi módosítva: (ha valaki a többi sort is megnézné beszurhatom -- kb.+80-85 sor)”


Ne szurd be, hanem csatold a Filemelleklet segitsegevel. Az eredeti programot is csatolhatnad, hogy ossze lehessen nezni mit kell(ene) csinalni.
(#) geri12 hozzászólása Nov 9, 2008 /
 
Igaz! Mellékelve mindkettő.

Köszi!
(#) Norberto válasza geri12 hozzászólására (») Nov 9, 2008 /
 
Idézet:
„_WDT_ON”


A későbbi programon belül le van kezelve a watchdog-áramkör megfelelő időközönként?
(#) icserny válasza geri12 hozzászólására (») Nov 9, 2008 /
 
Ennek mit kellene csinálnia? Én nem látom értelmét, ugyanis a (nem használt) timer0-nek konfigurálsz vele előosztót. Ha netán a watchdognak akarsz előosztást beállítani, akkor bit 3-at is 1-be kell állítani!

  1. MOVLW 0X01
  2.             MOVWF OPTION_REG


Ez mire jó?
  1. MOVLW 0X85


CMCON és TRISIO beállítása jónak tűnik, én is így csinálom.

A BCF/BSF STATUS,RP0 helyett átláthatóbb a BANKSEL TRISIO/ BANKSEL GPIO. Bár ízlés dolga...
(#) trudnai válasza geri12 hozzászólására (») Nov 9, 2008 /
 
Amit igy kapasbol latok ebben, hogy van benne egy RMW hiba - valoszinuleg abban az eredeti PIC-ben epp mukodott a dolog, de nem neveznem az ilyet stabil megoldasnak.
  1. lbl_1            NOP           
  2.                 BSF        GPIO , 0
  3.                 BCF        GPIO , 1

Ugye itt egymas utan modositasz ket portlabat, de ha rosszul jonnek ki a dolgok, akkor a masodik hatasara az elso kinullazodik. Ez nem a program logikajanak a hibaja, hanem hardware idozitesi problema amivel szamolni kell.

Nem ismerem a protokollt amit hasznalsz, de ha megengedi, hogy kb 2us idozites legyen a ket atmenet kozott a jelenlegi 1us-hez kepest, akkor a kovetkezonek mukodnie kell itt anelkul, hogy a tobi idozites befolyasolva legyen:
  1. lbl_1            BSF        GPIO , 0           
  2.                 NOP
  3.                 BCF        GPIO , 1

Ha ez nem megengedheto, akkor trukkozni vagy kenytelen, pl:
  1. lbl_1            NOP           
  2.                 MOVLW       B'00000011'
  3.                 XORWF       GPIO , f

Ez ugye megforditja a 0 es 1 bitek allasat, aminek a hatasa pontsan ugyanaz lesz mint amit jelenleg a program muvel: Mivel alapertelmezesben az 1. bit magas, es a kodod ezt alacsonyra teszi az lbl_1 -nel ami mellett a 0-sat magasra emeli, egy negacionak epp ugyanez lesz a vegeredmenye...

Van megegy hely ahol egymas utan kozvetlenul modositas ket bitet:
  1. BCF        GPIO , 0
  2.                 BCF        GPIO , 1

Ezt pedig igy lehetne kitrukkozni:
  1. MOVLW        B'11111100'
  2.                 ANDWF        GPIO , f

Remelem mukodni fog!
(#) trudnai válasza Norberto hozzászólására (») Nov 9, 2008 /
 
Idézet:
„„_WDT_ON”

A későbbi programon belül le van kezelve a watchdog-áramkör megfelelő időközönként?”


En ugy nezem igen, bar bevallom oszinten nem egeszen ertem mi szuseg lehet arra...
(#) ciw hozzászólása Nov 10, 2008 /
 
Üdv !


Igen furcsa dologgal fordulok hozzátok.

Uj rendszer telepítése után felraktam (mondván legyen egy friss cucc a gépen) az mplab 8.15a Interim Release verzióját a gépre.

A hibajelenség, illetve inkább csak idegesítő jelenség az az, hogy minden indítás után ha megnyitok egy projektet , akkor az mplab mindíg a ... local settings/temp könyvtárban akar keresni és oda is akar menteni.
A config biteket és a programozót is újra be kell állítani, minden egyes projekt megnyitáskor.

Valaki találkozott már ilyen problémával ?
(#) mrfencer hozzászólása Nov 10, 2008 /
 
Üdv!
A kedves konzuelensem instrukcióit követve irtam egy kis progit, de nem működik, és nem értem miért. A konzulensem jelenleg nem hajlandó segiteni, szóval minden reményem bennetek van. A kis progi lényeg, hogy ha pl az RD0-n logiaki egy van, akkor az RB0-n lévő led ezt világitással jelezze, ha az RD1en, akkor az RB1 en lévő LED és igy tovább. A programom lefut, de nem csinál semmit. Ime a progi:
  1. LIST P=16F877
  2. #INCLUDE "P16F877.INC"
  3. __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_LVP_OFF
  4.  
  5. ORG 00h
  6.  
  7.  
  8. POSI equ 020h
  9.  
  10.         banksel TRISB           ; Selects bank containing register TRISB
  11.         clrf    TRISB           ; All port B pins are configured as outputs
  12.        
  13.        
  14. start  
  15.         clrw
  16. ;copy of the position bits in POSI register
  17.         banksel PORTD
  18.         movlw   PORTD
  19.         movwf   POSI
  20. ;
  21. ;sending of POSI to PORTB
  22.         movlw   POSI
  23.         movwf   PORTB
  24. ;
  25.         goto    start
  26. ;
  27. end

Előre is köszönöm szépen a segitségeket!!
(#) trudnai válasza mrfencer hozzászólására (») Nov 10, 2008 /
 
Idézet:
„movlw PORTD”


es

Idézet:
„movlw POSI”


azt csinalja, hogy a PORTD ill a POSI cimeit betolti a W-be - tehat nem a PORTB ill. POSI tartalmat!

Helyette MOVF PORTB,W kellene... POSI-nel is ertelm szeruen...
(#) ciw válasza mrfencer hozzászólására (») Nov 10, 2008 /
 
Hát elég régen használtam assemblert, de nekem első nekifutásra az tűnik fel, hogy a portot literál ként olfasod be, de regiszterként írod ki.

movlw PORTD
nem inkább movfw PORTD

thát én először is megadnám, hogy a PORTD az bemenet !!!




LIST P=16F877
INCLUDE "P16F877.INC"
__CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_LVP_OFF
ORG 00h

banksel TRISB ; Selects bank containing register
TRISB=0x00
TRISD=0xFF

start
clrw
banksel PORTD
movfw PORTD
movwf PORTB
goto start

end

Valahogy így.
(#) watt válasza mrfencer hozzászólására (») Nov 10, 2008 /
 
Már korábban is javasolni akartam, hogy legalább egyszer vizsgáld meg tüzetesebben az utasításokat, és hogy azoknak milyen következményei vannak. Azután használd az MPLAB szimulátorát, és kövesd végig a Watch ablakban az érintett regiszterek változásait lépésenként végrehajtva a programod.
pl. ezzel mit akarsz?
  1. movlw   POSI

A W-be beletölteni 020h-t?
és ezzel?
  1. movlw   PORTD

A W-be tölteni a PORTD címét?
Ha használnád a fejed, és nem mindent trudnaitól várnál megoldásnak, akkor már rég előrébb lennél!

Keresd meg melyik utasítás kell neked!

Aki segíteni mer, kap egy fekete pontot!

Basszus, lekéstem!
Ha mindent a szájába rágtok, az életben nem fogja megérteni a lényeget. (szerintem)
(#) mrfencer válasza watt hozzászólására (») Nov 10, 2008 /
 
Köszi a segitségeket!
Watt, teljesen igazad van. Magam is tudom, hogy nem értek meg nem tudok dolgokat.(folyamatosan gyakorlok, és olvasok) Csak sajnos a konzulens tanárom pl ezt a progit kvázi megirta nekem, hogy próbáljam ki vele az áramkörömet, de nem müködik és mivel szerinte ez igy jó, nem hajlandó segíteni, meg el sem magyarázza.
(#) watt válasza mrfencer hozzászólására (») Nov 10, 2008 /
 
Mármint, hogy a tanár írta a movlw-ket? Ez kicsit övön aluli szerintem. Na mindegy, most már gondolom érted, miért nem jó, és legalább azt is megtanultad, hogyan lehet betölteni W-be egy regiszter címét.
(#) trudnai válasza mrfencer hozzászólására (») Nov 10, 2008 /
 
Hat ha ezt a tanar irta es az szerinte jo, akkor hagyd a fenebe azt az embert - ne sertsd meg, csak csinald meg a magad modjan, es mikor segiteni akar akkor bologass, hogy jaj de jokat mondd (mert azt mindenki szereti hallani ) de amugy meg csinald meg jol a dolgot hogy mukodjon is!

Javasolnam, hogy szanj ra vagy 2-3 hetet, hogy atragod magad ezeken a konyveken:

mikroelektronika books

En anno abbol a 3rd edition-bol tanultam meg az alapokat, es nagyon nagy segitseg volt! Es ugy nezem az az uj konyv sem rossz! 2-3 hetig ne csinalj mast csak azt a konyvet tanulgasd, es utana mar minden konnyen fog menni - mar eddig is elvacakoltal par hetet ezzel az apro feladattal ami nem lenne tobb a konyv elolvasasa es megertese utan par percnel!
(#) mrfencer válasza watt hozzászólására (») Nov 10, 2008 /
 
Igen, ezt betüről betűre a francia konzuelens tanárom írta. Tőletek többet tanulok, mint itt kint a konzulensemtől. Szóval az ERASMUS beszámolómban szerepelni fog a fórum
(#) mrfencer válasza trudnai hozzászólására (») Nov 10, 2008 /
 
Köszi a könyveket! Mindenkép elolvasom! Még egy rövid dolgot hizzáfűznék. Azért kapkodok igy, mert egy robotot kell felprogramoznom, még jó, hogy azért válalltam ezt az erasmust, mert arról volt szó hogy szélerőműveket kell méregetni meg egy progit irni, ami lementi az adatait. Szóval nem igazán voltam felkészülve PIC-ből . És dec 10ig be kell fejezenm a robotomat. Csak, hogy értsétek miért kapkodok, és kérdezek folyton!Nem győzöm megköszönni a segítséget!
(Ha kiváncsiak vagytok, akkor leirom, mit csinál a robot)
(#) watt válasza trudnai hozzászólására (») Nov 10, 2008 /
 
Le vagyok hidalva, hogy ilyen könyvek léteznek online-free!
(#) watt válasza mrfencer hozzászólására (») Nov 10, 2008 /
 
Igen, kíváncsi vagyok! És azt is leírhatnád, hogy miként tervezed a programot megírni hozzá. Ha ilyen szűkös a határidő, akkor lehet, hogy többet tudunk segíteni, ha mi is értjük a feladatot.
Ennek ellenére nem biztos, hogy az lesz a jó megoldás, ha valamelyikünk megírná a teljes forrást, sokkal hasznosabb lesz neked, ha terelgetünk!
Ennek ellenére egy hetet szánj rá a PIC működésének megértésére, mert anélkül nem sikerülhet a project.

Ha nem bánod, lenne néhány kérdésem felsorolásszerűen, tőszavakkal utalva a témára, hogy tudod-e miről van szó, ismered-e a működését?
1. Címbusz?
2. Adatbusz?
3. Vezérlőbusz?
4. Utasításdekóder, gépi kód, hogy is működik ez?
5. Flash?
6. RAM?
7. Stack?
8. Megszakítás és lekezelése?
9. Szubrutin?
10. Az előző kettő között mi a különbség(alig van!)?
11. Számrendszerek elvét el tudod magyarázni 5perc alatt?
12. Bináris számrendszer implementálása digitális rendszerekben?
13. Bináris logika?
14. W regiszter szerepe?
15. LED előtétellenállás kiszámítása?
16. Egy NPN tranyó illesztése TTL kimenetre, relé(egyébb fogyasztó) meghajtása, tranyó védelme?

Kb. ilyen kérdésekre keresd a választ, és könnyebben boldogulsz. Ha valamelyik kérdésre nincs meg a válasz, itt többen szívesen válaszolnak, én is, bár van ami nem kimondottan PIC kérdés. A kérdéseknek nincs vége természetesen, csak nem akartam 500-ig eljutni!
(#) mrfencer válasza watt hozzászólására (») Nov 10, 2008 /
 
Örülnék minden segítségnek. Természetesen nem várom el, hogy megcsiáljátok helyettem a feladatomat, mert én sem tanulok belőle, meghát nem is szeretem az ilyet. Szóval a robot rövid müködése. Van egy nagy zöld padlószőnyeg, ezen van egy kb 2cm széles fehér vonallal egy körpálya rajzolva. A robot elején van hét senzor ami követi a fehér vonalat, illetve figyeli, hogy van-e jobb iletve bal kanyar. Mégpedig ugy, hogy ha bal elágazás jön akkor 10cm-el az elágazó előtt van egy kb 4cm hosszú vonal a pályára merőlegesen, ha jobb elágazó akkor a jobb oldalon. Illetve a robot jobb oldalán van egy sharp senzor ami a jobbról érkező robotot figyeli(egy időben két robot van a pályán) és ha érzékel robotot, akkor a jobbkéz szabályt alkalmazza, és ad neki 3 másodpercet hogy átmenjen az elágazón. Szóval a porgimank azt kellene csinálnia, hogy a 7 senor adataiból eldönti hogy egyenesen, jobbra, vagy balra kell-e kanyarodni, illetve jön-e robot jobbról, és ezt küldi egy másik PIC nek ami pedig a robot sebességét és fordulási szögét irányitja.
Mellékeltem egy képet a robotról és a pálya egy részlete is látható. Amit most én csinálok progit az egy logikai áramkörrel van most megvalósitva és a tanárom ezt szeretné PIC re cserélni. Remélem sikerült világosan fogalmaznom
aképek valamiért nem jelentek meg ittBővebben: Linkmeg tudjátok nézni!
(#) mrfencer válasza watt hozzászólására (») Nov 10, 2008 /
 
Köszönöm a kérdéseket, hasznosak, nem mindegyikre tudom a választ, illetve van amelyikre csak részen. Meg lesz az éjszaki programom
Következő: »»   335 / 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