Fórum témák

» Több friss téma
Fórum » PIC programozás assemblyben
 
Témaindító: sonajkniz, idő: Máj 30, 2015
Témakörök:
Lapozás: OK   16 / 32
(#) nemgyuri válasza foxi63 hozzászólására (») Okt 25, 2016 /
 
Igazad van, most néztem meg, hogy mennyi lehet a max. PCL a program futása közben. 0x8B, tehát bőven benne van. Akkor a szimulátorral is eltévedne.
Én máshol keresem a hibát, mert amikor a NEM vezérelt step bemenetet testre húzom akkor minden oké!
(#) nemgyuri válasza eyess hozzászólására (») Okt 25, 2016 /
 
Az első gondok után már nem a pc párhuzamos portjáról kapta a vezérlést hanem 4 szög generátorról, meg 3V-os elemmel kézzel pöcögtetve is.
(#) eyess válasza nemgyuri hozzászólására (») Okt 25, 2016 /
 
Idézet:
„amikor a NEM vezérelt step bemenetet testre húzom akkor minden oké!”


Ez melyik is a pic bemenete lenne , akkor ezt programból is megtudod csinálni.
(#) nemgyuri válasza eyess hozzászólására (») Okt 25, 2016 /
 
Amikor az egyik motornak lépegetnie kell, pl a step1 (PORTA0) kap léptető impulzusokat akkor a másik motornak vagy kell mennie vagy nem attól függően, hogy a step 2 (PORTA2) lábára kap-e impulzusokat. Ez a vezérlőszoftvertől függ.
Tehát az a feladat, hogy a step1 jelére a PORTB alsó 4 bitje jobbra vagy balra lépjen a dir1 "L" vagy "H" szintjétől függően. Ennek viszont a másik motorra (PORTB fölső 4 bitje) ne legyen hatása. Természetesen a step2 jele sem befolyásolhatja az első motor jeleit.
Ha kipróbálod MPLAB-bal a feltett programomat és stimulussal izgatod PORT A0 és A2-t akkor PORTB figyelésével láthatod, hogy mi történik.
A baj az, hogy a valóságban nem ez történik.
(#) eyess válasza nemgyuri hozzászólására (») Okt 25, 2016 /
 
Ami feltünt nekem , az az hogy a szimulátorban te irod , hogy jól müködik .Viszont a szimulátorban csak mondjuk a (PORTA0) át vezérled , és a szimulátorban a (PORTB) felső 4 bitje nem vezérlődik , viszont valóságban meg igen.Függetlenül attól , hogy nem is kap semmilyen vezérlést .

Nos ha a Pic (PORT B) lábát nem kötöd be akkor mi a helyzet .Mert azt tudjuk , ha testeled , akkor jó .
(#) nemgyuri válasza eyess hozzászólására (») Okt 25, 2016 /
 
Nem a PORTB lábait testelem, mivel azok kimenetek, hanem a PIC egyik bemenetét. Azt az állapotot állítom elő mintha pl. a STEP1 "L" ben maradt volna. Most mindegy, hogy miért. Ha ezalatt STEP2 kap négyszögjelet akkor jó! Tahát motor 1 áll, motor 2 megy. Viszont, ha STEP1 "H"-ban van akkor motor 1 megy!, kb fele sebességgel mint motor 2. Motor 2 azzal a sebességgel megy amivel kell mennie.
(#) eyess válasza nemgyuri hozzászólására (») Okt 25, 2016 /
 
Ha megcseréled a motorokat , akkor is ez van ? Biztos hogy jó mindkét motor .Mert ha step1 , és step2 is mondjuk H ban van , és a teljesítmény fokozat kimenetén meg van rendesen a feszültség , akkor felvetődhet , hogy a motorral van valami amelyik , csak felesebességel megy.Nyilván ha motor cserekor is ugyan az a helyzet , akkor a motorok jók viszont akkor meg kell nézni , hogy step1 H ban mennyi feszültség van jelen amiért csak fele sebességgel megy , és a step2 L állásában a hozzá tartozó Pic bemeneten mi a helyzet ilyenkor.
A hozzászólás módosítva: Okt 25, 2016
(#) nemgyuri válasza eyess hozzászólására (») Okt 25, 2016 /
 
Teljesítmény fokozatok és motorok nélkül, a PIC kimeneteire LED-eket rakva pontosan lehet követni az eseményeket. (Egyébként ezt már írtam)
(#) eyess válasza nemgyuri hozzászólására (») Okt 25, 2016 /
 
Én mondjuk feszültség értrékekre lettem volna kiváncsi .Na mindegy ha nem bánod holnap folytathatjuk , mert lassan bealszok .Szóval holnap .
(#) nemgyuri válasza eyess hozzászólására (») Okt 25, 2016 /
 
Holnap
(#) nemgyuri hozzászólása Okt 26, 2016 /
 
Moderátor! A tegnapi 21:28-as hozzászólásom mellékletét szerintem törölni kellene, mert a file hibás!
Megtaláltam a hibát, a jelváltozás figyelésem rossz volt. (Amikor az egyik step magas és a másik kapja az impulzusokat ugyanúgy lépegetett mint a valóságban.) Jó volt beszélni róla, így megtaláltam. Új programmal működik! Köszönöm a hozzászólásokat.
(#) nedudgi válasza nemgyuri hozzászólására (») Okt 26, 2016 /
 
Nem a moderátort kellene ugráltatni, hanem feltenni a jó megoldást, amennyiben publikálni akarod. Mellékesen, egy ilyen kérés könnyen elkerüli a figyelmet, a sok hozzászólás között könnyen elsikkad. Ha töröltetni akarod, arra minden hozzászólás fejlécében ott van a "Moderációt kérek" menüpont a "V" betűnél.
(#) nemgyuri válasza nedudgi hozzászólására (») Okt 26, 2016 /
 
Elnézést kérek, később megtaláltam a megfelelő formát és jeleztem a kérésemet. (A file azért volt fenn, mert nem találtam a hibát és segítséget kértem.
(#) sonajkniz hozzászólása Nov 5, 2016 /
 
Sziasztok!

Észrevettem egy hibát az egyik programomban, ami a hiba ellenére működik.
A hiba abban áll, hogy egy kimenetet nem a LAT, hanem a PORT paranccsal kapcsoltatok.
Hogy így is működik, az véletlen, vagy a PIC 18-as széria elfogadja mindkét parancsot a kimenet kapcsolására?
(#) kissi válasza sonajkniz hozzászólására (») Nov 5, 2016 /
 
Szia!

A PORT is írható, csak a régi, 16-osoknál megismert RMW hiba itt is megmaradt, azaz szükséges az árnyékregiszterek használata...ezek a LAT-ok !
(#) sonajkniz válasza kissi hozzászólására (») Nov 5, 2016 /
 
Köszönöm. Akkor összességében a már beszerelt áramköreimben ez a hiba igazából nem fog gondot okozni? Vagy biztosabb, ha mindet újraprogramozom?
(#) kissi válasza sonajkniz hozzászólására (») Nov 5, 2016 /
 
Ismered az RMW problémát ? Ha nálad ez nem gond, akkor OK !
(#) sonajkniz válasza kissi hozzászólására (») Nov 5, 2016 /
 
Nem tudom, mi az RMW probléma. Ha felvilágosítanál róla megköszönném.
(#) kissi válasza sonajkniz hozzászólására (») Nov 5, 2016 / 1
 
Vegyük a következő kódot:
  1. BSF PORTB,0
  2. BSF PORTB,1


Ezzel az a probléma, hogy a PIC úgy működik, hogy a PORT írásakor beolvassa a teljes PORT-ot (R), módosítja a szükségest (M) és visszaírja az eredményt (W). Ez azt jelenti, hogy BSF PORTB,0 hatására beolvassa a PORTB-t, a nulladik bitet 1-be teszi és visszaírja a PORT-ra. Ezután a BSF PORTB,1 hatására beolvassa megint a PORT-ot, az 1.bitet beállítja 1-be és visszaírja a PORT-ra. Ezzel elvileg nincs is baj, de ha pl. a PORTB 0. bitjét egy kapacitív terhelés "fogja", akkor nem biztos, hogy a második BSF utasításnál már kialakult az 1-es szint, így 0-t olvas be és azt írja ki a PORT frissítésénél, azaz a várt 11B kombináció helyett 10B lesz ! Ez még további problémákat okozhat egy aktív eszköz csatlakoztatásánál, ahol az oda-vissza kommunikáció miatt egy láb hol kimenet, hol bemenet...!
Ha az előző program helyett a következőt alkalmazod, akkor biztos, hogy kialakul az 11B kombináció!
  1. MOVLW 00000011B
  2. MOVWF PORTB


Megoldás az un. árnyékregiszterek (shadow) alkalmazása, ami azt jelenti, hogy egy másik regiszterben módosítom a biteket, amit időnkét átmásolok a PORT-ra ( pl.megszakításból!)! Ezt a 18-as sorozatnál megoldották a LAT regiszterekkel !

Remélem érthető volt a leírás ?!
(#) sonajkniz válasza kissi hozzászólására (») Nov 5, 2016 /
 
Igen, így már értettem. Köszönöm.
Az elvi esély sajnos meg van a hibára, de remélem nem fog továbbra sem gondot okozni.
(#) kissi válasza sonajkniz hozzászólására (») Nov 5, 2016 /
 
OK, ha van rá lehetőség, akkor szerintem javítsd ki !
(#) sonajkniz hozzászólása Jan 2, 2017 1 /
 
Buék!

Az érdekességek rovatba feltett rakétakilövő kapcsolási rajzát és programját itt tenném közzé.


  1. LIST    P=PIC10F322     ; lista megad??sa
  2.         RADIX   hex             ; alap?©rtelmezet sz??mrendszer megad??sa
  3.         #include "p10F322.inc"
  4.  
  5.  
  6.  __CONFIG _FOSC_INTOSC & _BOREN_OFF & _WDTE_OFF & _MCLRE_OFF & _LVP_OFF & _LPBOR_OFF
  7.  
  8.     CBLOCK  0x40
  9.     POTI1
  10.     POTI2
  11.     WAIT
  12.     ENDC
  13.    
  14. #define SW1 MB,0    
  15.  
  16.     org     0x0000
  17.     nop
  18.    
  19. INICIALIZALAS
  20.     CLRF    LATA
  21.     MOVLW   B'00000110'
  22.     MOVWF   ANSELA
  23.     MOVLW   B'00001110'
  24.     MOVWF   TRISA
  25.     MOVLW   B'00001000'
  26.     MOVWF   WPUA
  27.     MOVLW   B'00100000'
  28.     MOVWF   OSCCON
  29.     MOVLW   B'00000011'
  30.     MOVWF   OPTION_REG
  31.     MOVLW   B'00000100'
  32.     MOVWF   T2CON
  33.     ;---------------
  34. MAIN
  35.     BTFSC   PORTA,3
  36.     GOTO    MAIN
  37.     MOVLW   B'0000101'
  38.     MOVWF   ADCON
  39.     NOP
  40.     NOP
  41.     BSF     ADCON,1
  42.     BTFSC   ADCON,1
  43.     GOTO    $-1
  44.     MOVF    ADRES,W
  45.     MOVWF   POTI1
  46.     MOVLW   B'0001001'
  47.     MOVWF   ADCON
  48.     NOP
  49.     NOP
  50.     BSF     ADCON,1
  51.     BTFSC   ADCON,1
  52.     GOTO    $-1
  53.     MOVF    ADRES,W
  54.     MOVWF   POTI2
  55.     MOVLW   D'250'
  56.     MOVWF   PR2
  57.     CLRF    PWM1DCL
  58.     MOVF    POTI1,W
  59.     MOVWF   PWM1DCH  
  60.     MOVLW   B'11000000'
  61.     MOVWF   PWM1CON
  62. VARAKOZAS
  63.     BTFSC   PORTA,3
  64.     GOTO    LEALL
  65.     BTFSS   INTCON,2
  66.     GOTO    VARAKOZAS
  67.     BCF     INTCON,2
  68.     DECFSZ  POTI2
  69.     GOTO    VARAKOZAS
  70. LEALL
  71.     CLRF    PWM1CON
  72.     CLRF    PWM1DCL
  73.     CLRF    PWM1DCH
  74.     CLRF    LATA
  75.     BTFSS   PORTA,3
  76.     CLRF    WAIT
  77.     INCFSZ  WAIT
  78.     GOTO    $-3
  79.     GOTO    MAIN
  80.     ;---------------------------------------------------------------------------
  81.     END
A hozzászólás módosítva: Jan 2, 2017
(#) Edem222 hozzászólása Ápr 26, 2017 /
 
Üdvözlet mindenkinek! Egy Hatalmas segítséget szeretnék kérni! Építettem egy saját elektronikát,amit egy Pic18f14k22 mikrovezérlő irányít. Nagyon tömören az elektronikáról: Be olvas egy digitális impulzust,eltárolja egy általam deklarált változóba (RAM-ba). Be olvas még egyet,el tárolja egy másik változóba. A kettő értéket összehasonlítja és a végeredménynek megfelelően egy másik lábon digitális 0 vagy 1-et küld ki. A problémám a következő: Néha csinál olyat,hogy új érték felvétel esetén a régi értéket hagyja meg a változóban,vagy teljes mértékben önálló életet él. Függetlenül,attól,hogy előtte töröltem az értéket a változóból. Hogy ez mikor keletkezik? Nagyon random alkalmakkor. Van úgy,hogy napokon át használva van és hibátlanul működik,viszont olyan is van,hogy 5 perc után előjön. (Mind a kettő esetben ugyanazt csinálja a mikrovezérlő) Külön kimértem mindent a NYÁK-on mikrovezérlő nélkül. A legextrémebb környezetet is beleértve és hibátlanul adta/fogadta a jeleket,vagyis külső eszköz nem lehet probléma. 5db ugyanilyen mikrovezérlőn teszteltem,hátha az a hibás de sajnos nem.
Hogy oldódik meg? 2 módon tudom meggyógyítani. Vagy le veszem tápról,várok kb negyed-fél órát és újra vissza,vagy újra rá "égetem" a programot. Valószínűleg van valami bit vagy ilyesmi,ami 1x átbillen és akkor megőrül,viszont nem tudom mi az. Debuggon végig futtattam az egészet,figyelve a biteket,de semmi furcsát nem tapasztaltam. Végig hibátlanul ment. Raktam bele szoftveres resetet pont az ilyen esetekre,azt sikeresen véghez is viszi,viszont a probléma nem szűnik meg. Esetleg van valami olyan funkció,ami teljesen vissza tudja állítani a mikrovezérlőt alaphelyzetébe? (pl POR?) Akkor elég valószínű meg oldódna a probléma. Válaszokat nagyon köszönöm!
(#) Hp41C válasza Edem222 hozzászólására (») Ápr 26, 2017 /
 
A kapcsolás és a program ismerete nélkül nem fogunk tudni segíteni.
(#) Edem222 hozzászólása Ápr 26, 2017 /
 
Akkor egyszerűbben kérdezem. Milyen módon tudnám alaphelyzetbe állítani a mikrovezérlőt? Power on reset képes ilyenre?
(#) zenetom válasza Edem222 hozzászólására (») Ápr 26, 2017 /
 
Lehet nincs köze a problémához, de kötelező olvasnivaló: Bővebben: Link.
(#) ktamas66 válasza Edem222 hozzászólására (») Ápr 26, 2017 /
 
Ha most csak találgatni lehet, én a változó elhelyezését, elérését ellenőrizném először (acces / banked, BSR regiszter kezelése).
(#) Pali79 válasza Edem222 hozzászólására (») Ápr 27, 2017 /
 
Mit értünk "alaphelyzet" alatt? Ha a sima reset nem oldja meg a problémát, csak az újraégetés akkor egyik reset sem fogja. Meg kéne nézni, hogy ha kiolvasod a programot egy "hibásból" és összehasonlítod az általad fordítottal, hogy látsz-e különbséget.
(#) Hp41C válasza Edem222 hozzászólására (») Ápr 27, 2017 /
 
A MCLR láb fel van húzva a Vdd -re? A felhúzó áramkörben van dióda?
(#) ktamas66 válasza Edem222 hozzászólására (») Ápr 27, 2017 /
 
Az egyszerű resetek nem törlik a memóriát, tehát azok a regiszterek, amiknek nincs definiált reset állapotuk megtartják értéküket (szerintem ezért kell neked 20 percet várni, mert addigra ezek is törlődnek). Esetleg inicializáláskor törlöd a teljes memóriát.
Következő: »»   16 / 32
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