Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   621 / 1319
(#) trudnai válasza Attila86 hozzászólására (») Dec 14, 2009 /
 
Annyit meg hozza tennek ahhoz amit a tobbiek mar elmondtak, hogy en ezt shiftelessel csinalnam ciklusban... Merthogy igy elegge pazarlos a kod.
(#) watt válasza Attila86 hozzászólására (») Dec 14, 2009 /
 
A többiek már leírták a lényeget, én csak annyit tennék hozzá, hogy használd a szimulátort, rögtön kiderülnek a turpisságok!
(#) szilva válasza Attila86 hozzászólására (») Dec 14, 2009 /
 
Ha a goto-kat rendbe is teszed, akkor sem fog helyesen működni, mert mindig a W bitjeit nézegeted, és a W-be töltöd be a számot is, amit majd a SZAM1-be kipakolsz. Így a tesztelendő W-t az első megtalált bitnél felül is írod. A "movwf SZAM1" sorok után kellene egy goto a sok összehasonlítás legvégére, vagy a tesztelendő adatot nem a W-ben kellene tartanod.
(#) watt válasza szilva hozzászólására (») Dec 14, 2009 /
 
Ezekre a turpisságokra utaltam!

Attila! Van kérdésed a szimulátorral kapcsolatban?
(#) bec1234 hozzászólása Dec 14, 2009 /
 
sziasztok

valaki adjon útbaigaztást
pic <---> max232<--- > pc

ezt a kommuniációs sémát akarom megvalósítani
a pic ről tudok küldeniadatot a pc re,
de
a pc ről fogadni nem tudok
ez az alaphelyzet .
miért nem?
lehet, hogy valamit rosszul konfiguráltam fel?
lehet,hogy a hiperterminálall nem is lehet adatot küldeni, mert én azon keresztűl szándékoztam .
vagy mia fene a hiba?

portfogad.asm
    
(#) Rumcájsz hozzászólása Dec 14, 2009 /
 
18F4520 - RR3 manchester modemet kötöttem össze. A PIC beállitva. MikroC-ben hogy tudom egy LCD-re kiiratni hogy mit vett a vevő?
Aki konkrét infóval tudna szolgálni kérem válaszoljon!
(#) icserny válasza Rumcájsz hozzászólására (») Dec 14, 2009 /
 
PIC Microcontrollers - Programming in [Mikro] C
4.fejezet: EXAMPLE 10 - Using LCD display
Bővebben: Link
(#) icserny válasza bec1234 hozzászólására (») Dec 14, 2009 /
 
Idézet:
„lehet,hogy a hiperterminállal nem is lehet adatot küldeni”

Hogyne lehetne! Pont arra való, hogy küldjön is, meg fogadjon is.
(#) bubu hozzászólása Dec 14, 2009 /
 
Sziasztok!

Egy olyan kérdésem lenne, hogy hogyan tudom megtenni azt, hogy a PIC egyik lábán sorosan kiküldök egy 8 bites valamit amit egy másik lábon fogadok?
Hogyan tudok egy bitre hivatkozni?
És a beolvasás hogyan megy? A shift regiszter jónak tűnt de nem megy.
A kódot mellékeltem, mert nagyon hosszú!

A válaszokat előre is köszönöm!

SMB_test.c
    
(#) Rumcájsz válasza icserny hozzászólására (») Dec 14, 2009 /
 
Köszönöm a linket, nem az LCD kezeléssel van probléma hanem a vett adatok dekódolásával.
(#) watt válasza bubu hozzászólására (») Dec 14, 2009 /
 
Szerintem szoftveres C-ben sehogy...
(#) bubu válasza watt hozzászólására (») Dec 14, 2009 /
 
Akkor hogyan lehet a felvetett feladatot megoldani?
Mert a maszkolás nem nagyon jött össze....
Az assemblyhez még nem értek ilyen szinten, sajnos...
(#) pepe33 válasza bubu hozzászólására (») Dec 14, 2009 /
 
Esetleg keresel egy olyan PIC-et amiben 2 hardweres sorosport is van. Talán így a legegyszerübb.
(#) MPi-c válasza Rumcájsz hozzászólására (») Dec 14, 2009 /
 
A Telecontrolli RR3-as vevő moduljáról van szó? Az olyan adatokat vesz, amilyeneket egy adómodullal te küldesz neki. Ahogy az adó oldalon kódolod, a vevő oldalon úgy dekódolod. A manchaster kódolás egy módszer a kommunikáció során előforduló adatvesztés felderítésének. Olvastad Topi cikkét?Bővebben: Link
(#) bubu válasza pepe33 hozzászólására (») Dec 15, 2009 /
 
Ne viccelj!
Annyit szeretnék, hogy kiadom a jelet az egyik lábon és a másikon visszaolvasom.
Azért mellékeltem a kódrészt is...
(#) icserny válasza bubu hozzászólására (») Dec 15, 2009 /
 
Idézet:
„hogyan tudom megtenni azt, hogy a PIC egyik lábán sorosan kiküldök egy 8 bites valamit amit egy másik lábon fogadok?”

Úgy semmiképp sem, hogy az egyik lábon kiküldesz nyolc bitet, és utána kezded el olvasni! Addig szerinted hová lesz a jel?

Ha a szoftveresen megvalósított I2C kommunikáció érdekel, akkor nézz szét a C18 fordító telepítési könyvtárában! (MCC18/src/pmc_common/SW_I2C mappa)
(#) Attila86 válasza watt hozzászólására (») Dec 15, 2009 /
 
Idézet:
„Attila! Van kérdésed a szimulátorral kapcsolatban?”

Nem, nincs! Egyenlőre elvagyok úgy, hogy hibakeresésként a programkódba olyan helyekre ahol feltételezem hogy elakadt a program, oda beillesztek egy goto START2-t. És ha futófényt látok a LED-eken akkor tudom hogy ott akadt el a program ahová beszúrtam a goto START-t.
(#) norby1 válasza bec1234 hozzászólására (») Dec 15, 2009 /
 
Én inkább ezt a programot szoktam használni soros kommunikációra: Hercules
(#) bec1234 válasza norby1 hozzászólására (») Dec 15, 2009 /
 
hát, így sem tudok adatot fogadni a pic el, de köszönöm, hogy segítnei próbáltál!
(#) Attila86 hozzászólása Dec 15, 2009 /
 
Utánaolvastam azoknak amiket írtatok. Ez alapján ét is írtam a programocskámat, de így is nyolcat ír mindig a SZAM1 regiszterbe.
  1. SZAM1_tarolas:
  2.         clrf    SZAM1
  3.         movf    PORTC,W
  4.         szam1_teszt_0   btfss   W,0             ;az első szám 1?
  5.                                         goto    szam1_teszt_1
  6.                                         movlw   d'1'    ;ha igen, akkor...
  7.                                         movwf   SZAM1   ;... írjunk 1-et a SZAM1 regiszterbe
  8.                                         RETURN
  9.         szam1_teszt_1   btfss   W,1             ;az első szám 2?
  10.                                         goto    szam1_teszt_2
  11.                                         movlw   d'2'    ;ha igen, akkor...
  12.                                         movwf   SZAM1   ;... írjunk 2-őt a SZAM1 regiszterbe
  13.                                         RETURN
  14.         szam1_teszt_2   btfss   W,2             ;az első szám 3?
  15.                                         goto    szam1_teszt_3
  16.                                         movlw   d'3'    ;ha igen, akkor...
  17.                                         movwf   SZAM1   ;... írjunk 3-at a SZAM1 regiszterbe
  18.                                         RETURN
  19.         szam1_teszt_3   btfss   W,3             ;az első szám 4?
  20.                                         goto    szam1_teszt_4
  21.                                         movlw   d'4'    ;ha igen, akkor...
  22.                                         movwf   SZAM1   ;... írjunk 4-et a SZAM1 regiszterbe
  23.                                         RETURN
  24.         szam1_teszt_4   btfss   W,4             ;az első szám 5?
  25.                                         goto    szam1_teszt_5
  26.                                         movlw   d'5'    ;ha igen, akkor...
  27.                                         movwf   SZAM1   ;... írjunk 5-öt a SZAM1 regiszterbe
  28.                                         RETURN
  29.         szam1_teszt_5   btfss   W,5             ;az első szám 6?
  30.                                         goto    szam1_teszt_6
  31.                                         movlw   d'6'    ;ha igen, akkor...
  32.                                         movwf   SZAM1   ;... írjunk 6-ot a SZAM1 regiszterbe
  33.                                         RETURN
  34.         szam1_teszt_6   btfss   W,6             ;az első szám 7?
  35.                                         goto    szam1_iras_7
  36.                                         movlw   d'7'    ;ha igen, akkor...
  37.                                         movwf   SZAM1   ;... írjunk 7-et a SZAM1 regiszterbe
  38.                                         RETURN
  39.         szam1_iras_7    movlw   d'8'
  40.                                         movwf   SZAM1   ;... írjunk 8-at a SZAM1 regiszterbe
  41.                                         RETURN
(#) watt válasza bubu hozzászólására (») Dec 15, 2009 /
 
Assemblerben, és minden kiadot bitnél viszgálni kell a bemenő bitet is.
(#) watt válasza Attila86 hozzászólására (») Dec 15, 2009 /
 
Én ebben a részben nem látok hibát. Csatold a teljes forrást!
(#) Attila86 válasza watt hozzászólására (») Dec 15, 2009 /
 
Itt van:
(#) norby1 válasza bec1234 hozzászólására (») Dec 15, 2009 /
 
Milyen értékű kondikat használsz a MAX232 IC-hez?
Nálam 1µF -os kondikkal kapásból összejött a kommunikáció. Nah meg a polaritásra is figyelj!!
(#) Hp41C válasza bec1234 hozzászólására (») Dec 15, 2009 / 1
 
Szia!

Több probléma is van a programoddal:

- Megszakítási rutin kezdeténél a W és a STATUS regiszter mentése hiányzik. Automatikus mentés használatánál valóban elhagyható.
- Megszakítási rutin végénél a STATUS és a W regiszter visszaállítása hiányzik. Automatikus mentés használatánál valóban elhagyható.
- A megszakítási rutinban előbb vizsgáld meg, mi okozta a megszakítást, aztán végezd el a kiszolgáló műveleteket:

  1. btfss           PIR1,RCIF       ; Test for receive interrupt
  2.         bra             TX_IT
  3.  
  4. ; Meg kell nézni történt-e hiba a vétel során
  5.         btfsc           RCSTA,FERR; Test frame error
  6.         bra             R_ERR   ;       error handling if 1
  7.         btfsc           RCSTA,OERR; Test overrun error
  8.         bra             R_ERR   ;       error handling if 1
  9.  
  10.         movf            RCREG,w ; move char to w
  11.                 ; El kellene tenni valahová a vett adatot
  12.  
  13.         bra             TX_IT
  14.  
  15. ; Nagyon fontos rész, ha hibás a vett adat, akkor is ki kell olvasni a vételi regisztert, a hiba csak a vétel tiltásával és újraengedélyezésével törölhető.
  16.  
  17. R_ERR
  18.         movf            RCREG,w         ; move char to w
  19.         bcf             RCSTA,CREN      ; Clear receive error
  20.         nop
  21.         bsf             RCSTA,CREN
  22.  
  23. TX_IT
  24.         btfss           PIR1,TXIF               ; Test for transmit IT
  25.         bra             IT_EXIT
  26.                 ; Elő kellene venni valahonnan az adandó adatot
  27.         movwf   TXREG           ; Send next char
  28.  
  29. IT_EXIT


- A megszakítási okot csak azért nem töröljük ki, mert a vételi regiszter olvasása ill. az adási regiszter írása törli azokat.
- A megszakítási rutinból a retfie utasítással kell visszatérni. Ha nem végeztél mentést - rábíztad a kontroller automatikus mentésére, akkor retfie 1

- A megszakításos uart kezeléshez járna két buffer is, amiben átmenetileg tárolódnak a vett illetve az adásra váró karakterek.

Szia
(#) Ktulu válasza Attila86 hozzászólására (») Dec 15, 2009 /
 
Mindenhol csereld ki a
  1. btfss      W,0  -t,

  1. btfss   WREG,0  -ra.

Ugyszinten a forrasod tobbi reszeben mind csereld ki a
  1. CLRF    W  -t,
  1. CLRF    WREG -re.
(#) watt válasza Attila86 hozzászólására (») Dec 15, 2009 /
 
Lefuttattam a szimulátorban, és rögtön kiderült, hogy a btfss W,0 sorban a W-t a fordító nem a W regiszternek értelmezi. A W regiszterre a WREG címkével hivatkoz ott, ahogy a regiszterek nevét kell megadni.
A movf SZAM1,W nem ilyen, de a clwf WREG igen! Remélem érted mi a kettő közötti különbség!

A szimulátort jó lenne megtanulnád, nem olyan bonyolult! Csatolok két képet...
(#) trudnai válasza watt hozzászólására (») Dec 15, 2009 /
 
Igen, hat ugye a W az egy egyszeru EQU-s deklaracio az INC file-ban, es ha az 0, akkor az a 0-s memoria cimet fogja megcimezni
(#) watt válasza watt hozzászólására (») Dec 15, 2009 /
 
Most nézem ,hogy a két kép 0bájt lett! ?
Próbálom újra: ... most jó...
(#) Attila86 válasza watt hozzászólására (») Dec 16, 2009 /
 
Ezt a szimulátort kipróbálom a közeljövőben, mert nem tűnik túl bonyolultnak.

Ezt így jól gondolom hogy működik?
  1. movf    SZAM1,W         ;az első számot betesszük a W-be
  2.         addwf   SZAM2,0         ;a második számot hozzáadjuk
  3.         movwf   SZAM3           ;az eredményt kiírjuk a SZAM3-ba
  4.         movff   SZAM3,LATC      ;majd ugyan ezt a LED-ekre


Közben rájöttem, hogy a programom sok más sebből is vérzik amit eddig nem mondtatok. Például eddig hogyha a nyomógombot lenyomva tartottam sokáig, akkor a program tovább futott és ugyan azt a számot gyorsan eltárolta a másik regiszterbe is. Bele kellett írnom, hogy csak akkor menjen tovább ha felengedtem a gombbot. Meg volt még benne pár hasonló hiba...
Elég elvont, nem túl emberi gondolkodásmódot követel meg a PIC programozás.
És basszus... ez tényleg inkább egy elektronikai alkatrész, s nem pedig egy számítógép.
Következő: »»   621 / 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