Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   822 / 1320
(#) chriskross hozzászólása Okt 24, 2010 /
 
Ja megvan a megoldás:
  1. dt  "M",0x00,"r",0x01, 0
(#) trudnai válasza chriskross hozzászólására (») Okt 24, 2010 /
 
Nem a tarolasnal kellene szerintem ezzel vacakolni, hanem a kiiro rutinban... Tehat nyugodtan taroldd el az ekezeteseket 852-es kodkeszlettel es a kiiro rutinnal alakitsd at azokat az LCD-nek megfeleloen.
(#) chriskross válasza trudnai hozzászólására (») Okt 24, 2010 /
 
Ööö. Ezt nem igazán értem. Magyarul ha ékezetest írok a kódban, akkor hozzárendelődik a CGRAM azon része? Ezt hogy lehet megvalósítani?
(#) trudnai válasza chriskross hozzászólására (») Okt 24, 2010 /
 
Nem, nem rendeloik hozza - a normal karakter sem rendelodik hozza, neked kell a kiiro rutinnal kiirni a karaktereket, nem?

Tehat a kiiro rutin kivesz egy karaktert, megvizsgalja mi az, majd ha ekezetes akkor azt megfeleloen atalakitod (hogy hogyan az rajtad ill a rutinodom mulik) - es utana irod ki...
(#) chriskross válasza trudnai hozzászólására (») Okt 24, 2010 /
 
Értem. Meg is csinálom. Köszi az ötletet!
(#) chriskross válasza trudnai hozzászólására (») Okt 24, 2010 /
 
Még annyit, hogy hogy vizsgálom meg? 16F819-en adatlapjában nem találtam okos utasítást hozzá. Kivonást és XOR-t kezdtem el próbálgatni, de ahhoz minden bitet egyenként meg kellene vizsgálni (csak a btfsc/btfss-ről tudok) és elég hosszú kód lenne az eredménye. Létezik egyszerűbb megoldás? Ha nem, akkor maradok inkább az eredeti verziómnál (sok szöveget úgyse akarok). C-ben kicsit könnyebben el tudom képzelni a megoldást.
(#) Hp41C válasza chriskross hozzászólására (») Okt 24, 2010 /
 
Szia!

Van egy egyszerűsítési lehetőség: a xor művelet öndiális:

x xor y xor y = x

  1. movf newchar,w; A soron következő karakter a W-be
  2. xorlw 'á'          
  3. btfsc STATUS,Z     ; Vizsgálat az 'á' karakterre
  4. xorlw 'á' ^ 0x00    ; ha a 0x00 az á karakter az LCD-n
  5. xorlw 'é' ^ 'á'        ; Vizsgálat az 'é' karakterre
  6. btfsc STATUS,Z
  7. xorlw 'é' ^ 0x01    ; ha a 0x01 az é karakter az LCD-n
  8. ...
  9. xorlw 'é'               ; Az utolsó értékkel kell elvégezni
  10.                           ; W -ben az átódolt karakter
(#) trudnai válasza chriskross hozzászólására (») Okt 25, 2010 /
 
Tablazatosan is megcsinalhatod, tehat pontosan 256 elemed van a tablaban es normalisan az ASCII erteket adja vissza, az ekezetek helyen meg a megfelelo ertekeket (0x00, 0x01 stb...).

Program memoriaban Hp41C javasolt kod rovidebb lesz, de futas idoben a tablazatos, ami raadasul kiegyensulyozott azaz mindegy melyik karakterrol van szo, ugyanannyi idot vesz igenybe. Rajtad mulik mit valasztasz, melyik megoldas a szimpatikusabb...
(#) szabics hozzászólása Okt 25, 2010 /
 
Segítséget kérek! Van lehetőség PWM módban a CCPR1L/H vagy CCPR2L/H regiszterek külső frekvenciával való meghajtásra?
(#) icserny válasza szabics hozzászólására (») Okt 25, 2010 /
 
PWM módban nem a CCPR1L/H regiszterek vannak "meghajtva", hanem TMR2. Ebből következik, hogy nem lehet külső jellel hajtani. Legfeljebb úgy, hogy az egész mikrovezérlőt hajtod külső órajellel.

CCPR1L és CCPR1H a kitöltési tényező beíró tároló regisztereiként működnek (legalábbis a felső 8 bit vonatkozásában, mert az alsó két bitet CCP1CON<5:4> bitjeiben kell megadni).
(#) chriskross válasza Hp41C hozzászólására (») Okt 25, 2010 /
 
Köszönöm, ez működik!
Ezt a sort hogy kell értelmezni? Már láttam pár kódban ezt a ^ jelet.
  1. xorlw 'á' ^ 0x00

Valami feltételes utasítás? Ha xorlx 'á' igaz, akkor 0x00-t rak W-be?

trudnai én is ezt szerettem volna az elején, de nem értem, hogy lehetne kivitelezni.
Így valahogy?
  1. dt 'a',0x00,'bcde',0x01,....

De még így se értem, hogy akkor hogy tudja, hogyha á következik a kódban, akkor a 0x00-t adjon vissza.
(#) Hp41C válasza chriskross hozzászólására (») Okt 25, 2010 /
 
Szia!

A fordító a forrás fordítása alatt is tud műveleteket végezni - mindenütt láthatsz összeadásra, kivonásra, stb példát. A '^' jel a bitenkénti xor művelet kódja. A kifelyezést a fordító számolja ki, az eredményt teszi a lefordított állományba...

Pont az van leírva, amit
Idézet:
„Valami feltételes utasítás? Ha xorlx 'á' igaz, akkor 0x00-t rak W-be?”
-ben kérsz, csak egy lépéssel meg van toldva, a következő eset figyelésére beállítja a Z flag-et...

Egy kód figyelése:
  1. movf newchar,w; A soron következő karakter a W-be
  2. xorlw 'á'          
  3. btfsc STATUS,Z     ; Vizsgálat az 'á' karakterre
  4. movlw 'á' ^ 0x00 ; ha a 0x00 az á karakter az LCD-n
  5. xorlw 'á'


A 0x00 kódot egyszerűbben is elő lehet állítani, de a fenti kódrész működik más kimenő kóddal is...
Ha két ilyen részletet egymás után írsz, akkor két xorlw sor kerül egymás után, ami egy utasítással is megoldható - ezt írtam el az előző hozzászólásban...
(#) andpet hozzászólása Okt 25, 2010 /
 
Helló kedves Mindenki!

Lenne egy olyan problémám, hogy egy PIC16f877a C portját kimenetre konfigoltam, és tranzisztorokat akasztottam rá, a B-t pedig bemenetre, ahogy azt a mellékelt ábra mutatja, és a B port 4es lábán lévő fesztől függően kirak egy értéket a
.
.
.
MENUTESZT4
BTFSS PORTB,4
GOTO $+5
CALL PERGMENTESIT
MOVLW 0XE0
MOVWF PORTC
GOTO LLL4
MOVLW 0X06
MOVWF PORTC
LLL4
BTFSC PORTA,2
GOTO MENUTESZT4
CALL PERGMENTESIT
GOTO MAIN

Míg 0 van a porton (és a tranyó bázisán), akkor ugye az szakadásként üzemel, de ha kijön rá az ,,1" (5V) akkor át kellene mennie rövid zárba, ami nem következik meg, mert csak 2.5V jelenik meg rajta, és a PIC kimenetén is csak ekkora a fesz, viszont ha megjelenik RB4-en az 5 volt, akkor a kimenet is megemelkedik 2.5-ről 5 voltra... ilyet még nem láttam... :S
Mit csináltam rosszul? Előre is köszi a segítséget, üdv: Péter

vmds.jpg
    
(#) Hp41C válasza andpet hozzászólására (») Okt 25, 2010 /
 
Szia!

A mostani kimenetet egy PNP tranzisztorral kellene kapcsolni. Ennek emittere a +12V-ra, a kollektora a kimenetre kapcsolódik, a básiza és a 12V közé egy ellenállás kerül. A bázisa egy másik ellenálláson keresztül egy NPN tranzisztor kollektorára, melynek az emittere a földre, a bázisa egy ellenálláson a portra menjen.

A rajzodon a tranzisztor áramgenerátor, az emitter árama akkorára áll be, hogy a bázis és az emittere között 0.6V legyen....
(#) andpet válasza Hp41C hozzászólására (») Okt 25, 2010 /
 
Köszi!
holnap kipróbálom, de ez mág nem magyarázza meg h. a pic-ből miért csak 2.5V jön ki :S
(#) andpet válasza Hp41C hozzászólására (») Okt 25, 2010 /
 
Ha szépen megkérlek le tudnád rajzolni?
ha a kimeneten 5V jön ki, akk mekkorának kell lennie az ellenállásnak?
(#) Hp41C válasza andpet hozzászólására (») Okt 25, 2010 /
 
Szia!
Mekkora árammal terheled majd a kimeneteket?
(#) andpet válasza Hp41C hozzászólására (») Okt 25, 2010 /
 
Helló!
70, ill 40 mA-os keringető szivattyúkat fog hajtani, de azt gondoltam, hogy 12V-ot eresztek a kábelre (az 5-höz sajna túl hosszú) és optocsatolós, triakos leválasztással meg meghajtom a cirkót. Valahogy úgy gondoltam, ahogy a képen van, csak a rendszer nem ért még velem egyet :S, de talán jó lesz

grfsdd.jpg
    
(#) Hp41C válasza andpet hozzászólására (») Okt 25, 2010 /
 
Szia!

Ekkor egyszerűbb a helyzet: Az optotriak led anódja menjen a +12V -ra, a katódja egy ellenálláson keresztül egy NPN tranzisztor kollektorára. Az ellenállás - 40 mA LED áramhoz - (12-1.2-0.3)/0.04. A tranzisztornak 40mA kollektor áramhoz csak kb. 1-5 mA bázisáram kell, tehát az NPN tranzisztor bázisa kb. 1k ellenálláson keresztül vezérelhető a pic kimenetével. 100mA -ig használható a BC547, 1A -ig a BC639...
(#) trudnai válasza chriskross hozzászólására (») Okt 25, 2010 /
 
Idézet:
„rudnai én is ezt szerettem volna az elején, de nem értem, hogy lehetne kivitelezni.
Így valahogy?
dt 'a',0x00,'bcde',0x01,....

De még így se értem, hogy akkor hogy tudja, hogyha á következik a kódban, akkor a 0x00-t adjon vissza.”


Nem, nem a magyar ABC szerint kell felsorolni a betuket. Neked az ASCII tablat kellene leirnod, es mar nagyon-nagyon regen csinaltam ilyet bevallom, ugy emlekeztem, hogy Windows alatt a magyar ekezeteket ASCII-ban (8 bitesen) a 852-es kodlappal kodoljak, de azt hiszem ez inkabb a Windows-1250 lesz(?).

ASCII karakter tablazat

852-es kodlap

Windows-1250-es kodlap

Tehat ha megnezed az ASCII tablat, az 'A' az a hexa 41-es szamon van, tehat a decimalis 65. A 852-es tablaban a magyar ekezeteseket talalod meg, pl hosszu nagy Ő a hexa 8A, azaz decimalisan 138-as szamhoz van hozza rendelve. Azonban Windows-1250-es kodlap mashova teszi a magyar ekezeteket, ott ugyanezt a hexa D5 azaz dec 213 helyen talalod meg. A 852-es es 1250-es kodtabla csak a felso 128 karakterben ter el az ASCII-tol, neked igazandibol csak a szamodra ertekes karakterek kellenek, a tobbi helyre tehetsz pl 255-ot is, ami jelzi, hogy a karakter nem letezik a tablaban... Sot, ha nem utik a magyar ekezetek egymast a 852-es es 1250-es tablaban, akkor mindkettot beteheted egy tablaba, azaz mindegy melyik kodolassal jon az ekezet...

Tehat mikor a tablad megvan, akkor ha a W-ben dec 65 van, akkor a tablad 65. helyen is 65 van, tehat a W nem fog valtozni, tovabbra is az 'A'-t fogja tartalmazni. Ha viszont 213 van benne, akkor a tabla 213. helyen a nagy hosszu Ő-nek megfelelo kodot tarolod el, pl 0x03-at, igy a CALL utan a W-be 3 lesz, ami az LCD-n a megfelelo ekezetest fogja neked kiirni.

Ez bonyolultnak tunhet elsore, de nem az, es a tablat egyszer epited fel, meg az algoritmust, es utana az osszes projectedben felhasznalhatod, tehat szerintem megeri a befektetes. De Hp41C megoldasa is kivalo, szoval ugy is jo lesz a programod.
(#) vilmosd válasza chriskross hozzászólására (») Okt 26, 2010 /
 
Hali
Latom kijott a "meta" (cel) . Nincs internetem a Turbonett.gt jovoltabol kb 1 hete. majd megprobalok rajuk hatni. De latom haladtal elore a projectben.
Udv Vili
(#) watt válasza andpet hozzászólására (») Okt 26, 2010 /
 
Az Opto Triakot a PIC kimenete is meg tudja hajtani egy 470ohm-on keresztül akár.
(#) watt válasza chriskross hozzászólására (») Okt 26, 2010 /
 
Én egy harmadik hasonló lehetőséget is ajánlok. Ez az első programomban volt így megoldva, ezért gondoltam, hogy elsőre neked is jó lehet.
LCD CGRAM rekeszcímekhez hozzárendelés:
  1. CONSTANT        áá=00
  2. CONSTANT        óó=01
  3. CONSTANT        íí=02
  4. CONSTANT        őő=03
  5. CONSTANT        öö=04
  6. CONSTANT        úú=05
  7. CONSTANT        éé=06
  8. CONSTANT        üü=07


A táblázat és a kiolvasása:
  1. KI_IR2         
  2.                 UTASITAS
  3.                 PAGESEL ADAT_4BIT_KI
  4.                 CALL    ADAT_4BIT_KI
  5.        
  6. KAR_IR2        
  7.                 PAGESEL LCD_TABLA2                      ; (4-ES VEREM HA AZ UNNEP HIVJA)       
  8.                 MOVLW   HIGH(LCD_TABLA2)
  9.                 MOVWF   PCLATH
  10.                 KARAKTER
  11.                 MOVF    MUTATO,W
  12.                 LCALL   LCD_TABLA2
  13.                 MOVWF   LCD_ADAT                ; LCD-re KIIR
  14.                 LCALL   ADAT_4BIT_KI
  15.                 INCF    MUTATO,F
  16.                 PAGESEL KAR_IR2
  17.                 DECFSZ  COUNTER,F
  18.                 GOTO    KAR_IR2
  19.                 RETURN
  20.  
  21. LCD_TABLA2      ADDWF   PCL,F                   ; Báziscímek
  22.                 DT      "  .  . SET=OK!"        ; 0,14
  23.                 DT      " VALASZT=",úú,"jra." ; 14,14
  24.                 DT      "Nincs harangsz",óó   ; 28,15
  25.                 DT      "d",éé,"lut",áá,"n."                ; 43,8
  26.                 DT      "DU-i harangsz",óó,":"        ; 51,15
  27.                 DT      "-kor."                 ; 66,5
  28.                 DT      "A be",áá,"ll",íí,"t",áá,"s k",éé,"sz"  ; 71,16
  29.                 DT      "K",öö,"sz",öö,"n",öö,"m!"                ; 87,9
  30.                 DT      "Ny",áá,"ri"                  ; 96,5
  31.                 DT      "T",éé,"li"                   ; 101,4
  32.                 DT      "id",őő,"sz",áá,"m",íí,"t",áá,"s"               ; 105,11
(#) trudnai válasza watt hozzászólására (») Okt 26, 2010 /
 
Erdekes, es egyszeru!

UI: Amugy ö meg Ü mintha lenne ezekben mar eleve igy ket hely felszabadulhat es a hosszu ő meg ű is bele ferhet?
(#) Hp41C válasza Hp41C hozzászólására (») Okt 26, 2010 /
 
A felhasználói karakterek alakját lehet dinamikusan is módosítani, mindig a kiírni szándékozott szöveg karaktereinek megfelelően. A magyar ékezetes betük 2*9 helyet igényelnének... Az azonos LCD-k a karakterkészletben különbözhetnek. Szerencsére van olyan LCD, aminek a karakter készlete tartalmazza az 'á', 'é' karaktereket is...
(#) watt válasza trudnai hozzászólására (») Okt 26, 2010 /
 
Már nem emlékszem, de lehet az is, hogy abban az LCD-ben nem volt ö-sem. Többféle karaktertáblával gyártották ezeket, ha jól emlékszem az adatlapjára...
(#) watt válasza Hp41C hozzászólására (») Okt 26, 2010 /
 
Igen, ezt használtam is, csak egyszerre 8-nál több eltérő nem lehetett és arra is figyelni kellett, hogy azt cserélhetem le, amit éppen nem jelenítettem meg, így ez sem volt teljesen egyszerű történet.
(#) trudnai válasza watt hozzászólására (») Okt 26, 2010 /
 
Amugy szerintem alap ekezetesekkel el lehet lenni, es ha nagyon zavaro akkor olyan LCD kell amiben a Japan irasjelek helyett benne vannak az ekezetek mar eleve. Masik megoldas a grafikus kijelzo lenne, de az mar kisse tullo a celon. Vegulis az en ekezet nelkuli irasaimat is tobbnyire megertitek
(#) watt válasza trudnai hozzászólására (») Okt 26, 2010 /
 
Hát persze! Mit mondsz?
(#) gdeak hozzászólása Okt 26, 2010 /
 
Segítségre lenne szükségem! Explorer 16 próbapanellel vezérlek egy SSD1963 grafikus procit. A megírt program PIC32MX795F512 modullal működik, míg PIC32MX460F512 és PIC32MX360F512 modulokkal nem. Hogy lehetséges ez?
Következő: »»   822 / 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