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   688 / 1207
(#) Hp41C válasza Pali79 hozzászólására (») Júl 2, 2015 /
 
Pass. Nézted már az errata -ját?
(#) bbalazs_ válasza bbalazs_ hozzászólására (») Júl 2, 2015 /
 
Forditsd le mindket valtozatot, utana vessuk ossze, mit latsz a .lst fileban, mire is forditott.
Az spi_adat cimet tudjuk? Az is kiderul a .lst filebol...
De varjunk csak egy pillanatra: nem lehet, hogy maga a masolas mukodik, csak utana valamilyen vizsgalatot vegzel es mivel nem kerult be a W regbe egyaltalan egy movff soran, ezert a korabbi, random W erteket vizsgalod tulajdonkeppen?
A hozzászólás módosítva: Júl 2, 2015
(#) Pali79 válasza bbalazs_ hozzászólására (») Júl 2, 2015 /
 
Az spi_adat címe 00000011
  1. 0000C4                00286 SPI_pot
  2. 0000C4 948B           00287         bcf             LATC,2                          ; Digi poti engedélyezve
  3. 0000C6 0E13           00288         movlw   b'00010011'                     ; Adatküldés, mindkét poti kiválasztva
  4. 0000C8 6EC9           00289         movwf   SSP1BUF                         ; Adatküldés indul
  5. 0000CA A0C7           00290         btfss   SSP1STAT,BF                     ; Adatküldés befejezve?
  6. Warning[226]: Destination address must be word aligned
  7. 0000CC D7FE           00291         bra             $-1                                     ; Ha nem, várunk
  8.                       00292 ;       movff   spi_adat,SSP1BUF        ; Ha igen, küldjük az adatot
  9. 0000CE 5011           00293         movf    spi_adat,w
  10. MPASM  5.51   18F6622_ENCODER_SPI_DIGIPOT.ASM   7-2-2015  22:16:41         PAGE  7
  11.  
  12.  
  13. LOC  OBJECT CODE     LINE SOURCE TEXT
  14.   VALUE
  15.  
  16. 0000D0 6EC9           00294         movwf   SSP1BUF
  17. 0000D2 A0C7           00295         btfss   SSP1STAT,BF                     ; Adatküldés befejezve?
  18. Warning[226]: Destination address must be word aligned
  19. 0000D4 D7FE           00296         bra             $-1                                     ; Ha nem, várunk
  20. 0000D6 848B           00297         bsf             LATC,2                          ; Ha igen, digi poti tiltás
  21. 0000D8 0012           00298         return


  1. 0000C4                00286 SPI_pot
  2. 0000C4 948B           00287         bcf             LATC,2                          ; Digi poti engedélyezve
  3. 0000C6 0E13           00288         movlw   b'00010011'                     ; Adatküldés, mindkét poti kiválasztva
  4. 0000C8 6EC9           00289         movwf   SSP1BUF                         ; Adatküldés indul
  5. 0000CA A0C7           00290         btfss   SSP1STAT,BF                     ; Adatküldés befejezve?
  6. Warning[226]: Destination address must be word aligned
  7. 0000CC D7FE           00291         bra             $-1                                     ; Ha nem, várunk
  8. 0000CE C011 FFC9      00292         movff   spi_adat,SSP1BUF        ; Ha igen, küldjük az adatot
  9.                       00293 ;       movf    spi_adat,w
  10. MPASM  5.51   18F6622_ENCODER_SPI_DIGIPOT.ASM   7-2-2015  22:20:40         PAGE  7
  11.  
  12.  
  13. LOC  OBJECT CODE     LINE SOURCE TEXT
  14.   VALUE
  15.  
  16.                       00294 ;       movwf   SSP1BUF
  17. 0000D2 A0C7           00295         btfss   SSP1STAT,BF                     ; Adatküldés befejezve?
  18. Warning[226]: Destination address must be word aligned
  19. 0000D4 D7FE           00296         bra             $-1                                     ; Ha nem, várunk
  20. 0000D6 848B           00297         bsf             LATC,2                          ; Ha igen, digi poti tiltás
  21. 0000D8 0012           00298         return
(#) bbalazs_ válasza bbalazs_ hozzászólására (») Júl 2, 2015 /
 
A forditas alapjan minden tokeletes, a bitek is rendben vannak, a cimek is. Az adatmasolas jo kell, hogy legyen. Szerintem mas gond lehet ott.
Esetleg masik PIC is ezt csinalja? Ha teszel NOP-okat elotte-mogotte, akkor is csinalja?
Ha mondjuk egy masik memcimrol toltod be (
movf spi_adat,w
movwf masikmem
movff masikmem,SSPIBUF1

vagy fix erteket hasznalsz

movlw fixertek
movwf spi_adat
movff spi_adat,SSPBUF1

Ilyenkor mit csinal?
(#) ktamas66 válasza Pali79 hozzászólására (») Júl 2, 2015 /
 
Cseréld le azt a $-1-et címkére. A 18F-es PIC-ek memóriaszervezése is 8 bites az utasítások mindig csak páros címen lehetnek.
(#) Pali79 válasza ktamas66 hozzászólására (») Júl 2, 2015 /
 
Vártam már, hogy mikor szúrja ki valaki. Az érdekes az, hogy attól még működik, szimulációban is és élőben is.
(#) cross51 válasza Pali79 hozzászólására (») Júl 2, 2015 /
 
Az tényleg érdekes mert én is belefutottam párszor ebbe a hibába nekem le se fordította a fordító.
(#) Pali79 válasza cross51 hozzászólására (») Júl 3, 2015 /
 
Pedig nekem dob egy warning-ot a fordító, de szimulátorban is megy.
(#) usane válasza Pali79 hozzászólására (») Júl 3, 2015 /
 
Ajánlom figyelmedbe az errata 14. pontját, és az adatlap 210. oldalát.
Szerk: tesztelhetnéd az ütközés detektáló bitet mielőtt módosítasz a kódon, valószínű 1 lenne.
"Bátor" dolog kommunikációt hibakezelés nélkül megírni. Nagyon tudnod kell mikor milyen adat milyen irányba folyhat és hogy zajlanak a bufferek cseréi. Nem kritika én is azt hittem anno minden úgy megy ahogy én gondolom, de hát a saját hibájából tanul az ember, ritkán máséból
A hozzászólás módosítva: Júl 3, 2015
(#) Pali79 válasza usane hozzászólására (») Júl 3, 2015 /
 
Ez nagyon hasznos volt, köszönöm! De nem oldotta meg a problémát. Átírtam a kódot így:
  1. SPI_pot
  2.         bcf             LATC,2                          ; Digi poti engedélyezve
  3.         movlw   b'00010011'                     ; Adatküldés, mindkét poti kiválasztva
  4.         movwf   SSP1BUF                         ; Adatküldés indul
  5. SPI_com
  6.         movf    SSP1STAT,w
  7.         btfss   WREG,BF                         ; Adatküldés befejezve?
  8.         bra             SPI_com                         ; Ha nem, várunk
  9.         movff   spi_adat,SSP1BUF        ; Ha igen, küldjük az adatot
  10. SPI_data
  11.         movf    SSP1STAT,w
  12.         btfss   WREG,BF                         ; Adatküldés befejezve?
  13.         bra             SPI_data                        ; Ha nem, várunk
  14.         bsf             LATC,2                          ; Ha igen, digi poti tiltás
  15.         return

Így sem működik. Az ütközést detektálást még tanulmányozom, de szerintem itt más a gond.
(#) kt hozzászólása Júl 3, 2015 /
 
Sziasztok.
Pic18f2550 el usb-n keresztül akarok küldeni adatokat ( HID kapcsolattal ).
Örülök mert tudok ledeket ki be kapcsolgatni, meg nyomógombok állapotát lekérdezni, viszont az usb_descriptors.c ben lévő USB_DESCRIPTOR_STRING stringeket sehogy se tudom lekérdezni.
A kliens programot c# ban van írva. Remélem tud nekem segíteni valaki abban hogy hogyan tudom ezeket lekérdezni.
Előre is köszönöm.
(#) don_peter válasza kt hozzászólására (») Júl 3, 2015 /
 
Bár nem értek hozzá (mármint az USB-hez) és lehet hülyeséget fogok írni, de lehet, hogy az USB-s kapcsolat is egy fajta COM portos UART kapcsolatot létesít.
Így talán egy UART-os RX/TX -s lekérdezést készítesz a win programodba és megnézed milyen adatok jönnek.
Lehet teljesen rossza amit írtam, de hátha ad ötletet a továbbiakra...
(#) Pali79 hozzászólása Júl 3, 2015 /
 
Ha olvasni fogadni nem akarok adatot az SPI vonalon, akkor az SDI lábat lehet I/O-ként használni vagy nem ajánlatos?
(#) don_peter válasza Pali79 hozzászólására (») Júl 4, 2015 /
 
Most akkor olvasni és írni sem akarsz SPI-n?
Akkor nem kell beállítani az SPI regisztert és már is használhatod ki és bemenetnek, legalább is, ha az adott PIC (adatlapja szerint) adott lába is engedi az oda vissza irányt.

De egyébként, akkor is használhatod I/O portként az SPI lábakat, -persze ha a fenti mondat vége is igaz- ha használod az SPI-t csak mindig arra kell figyelned, hogy az adott port adott lábára a megfelelő beállításokat megadd (TRISx regiszter) és, hogy az SPI CS lába magas szinten (vagyis SPI-t nem használod) legyen, majd a művelet végén visszaállítod a portokat (TRISx regiszter).
A hozzászólás módosítva: Júl 4, 2015
(#) Hp41C válasza kt hozzászólására (») Júl 4, 2015 /
 
(#) Pali79 válasza don_peter hozzászólására (») Júl 4, 2015 /
 
PIC-el SPI potikat vezérelek, de ahhoz a PIC-nek csak írnia kell az adat vonalat, olvasni nem, tehát az SDI lábat az SPI nem használja. Ezért kérdeztem, hogy felhasználható-e pl a CS vezérlésére.
(#) Zsora válasza Pali79 hozzászólására (») Júl 4, 2015 /
 
Ha a láb nem egy periféria kimenete, vagy nem analóg módban működik, akkor minden további nélkül felhasználható rendes kimeneti/bemeneti célokra. A lábra ugyanis egyszerre több digitális periféria, port kapcsolódhat. Egyetlen kikötés hogy csak egyikük lehet kimenet, az összes többi csak bemenet.
A hozzászólás módosítva: Júl 4, 2015
(#) Pali79 hozzászólása Júl 5, 2015 /
 
Sziasztok!
Próbáltam az SPI digi poti projektet 16F877A-ra átültetni, de valami gond van az SPI-vel. Az a helyzet, hogy az SSPSTAT,BF nem akar 1-be billenni soha. Próbáltam már mindent, de semmi eredmény. Maga sz SPI működik, mert ha késleltetést rakok a bitfigyelés helyére akkor nagyon kínlódva de megy az átvitel. Az errata nem ír semmit. Találkozott már valaki hasonlóval?
(#) Zsora válasza Pali79 hozzászólására (») Júl 5, 2015 /
 
Az előző hozzászólásomat javítanám, ugyanis ez az SPI lábaknál nem igaz. Az SDI láb felett ugyanis az SPI teljesen átveszi a hatalmat, vagyis sem a PORT sem a TRIS regiszter nem jut érvényre. Elnézést a félrevezetésért!
(#) Pali79 válasza Zsora hozzászólására (») Júl 5, 2015 /
 
Köszönöm szépen a kiigazítást!
(#) cross51 válasza Pali79 hozzászólására (») Júl 5, 2015 /
 
Ez minden PIC-nél így van a BF bit csak I2C-nél lehet küldésre és fogadásra figyelni viszont SPI-nél csak a bejövő adatra szolgál, így tudsz adatot küldeni SPI-n:
  1. BCF PIR1, SSPIF
  2. MOVF ADAT, W
  3. MOVWF SSPBUF
  4. BTFSS PIR1, SPPIF
  5. GOTO $-1
  6. GOTO $-2 ;vagy BRA $-2
A hozzászólás módosítva: Júl 5, 2015
(#) Pali79 válasza cross51 hozzászólására (») Júl 5, 2015 /
 
Köszönöm, de sajnos így sem megy. Nem tudom mennyire lehet hinni a PICKIT2 debug-nak, de pl.
  1. movlw 0x02
  2. movwf SSPBUF

után üres marad a buffer, tehát nem tölti bele a w tartalmát és ezért nem megy az egész. Az mindenesetre érdekes, hogy ha a bitfigyelés helyett késleltetést teszek be, hogy egy helyben pörögjön a program, akkor néha átmegy az adat.
(#) cross51 válasza Pali79 hozzászólására (») Júl 5, 2015 /
 
Hát nem tudom nekem Pk3-nál volt, hogy újabb típusú PIC-nek az SSPBUF-ját üresnek írta de mégis elküldte az adatot. Én amit ilyenkor próbálni szoktam egy multiméterrel, 2,7 - 3,3V környékéig kell mérni feszültséget az SDO-n és SCK lábon:
  1. BCF PIR1, SSPIF
  2. MOVLW 0x55 ;vagy 0xAA
  3. MOVWF SSPBUF
  4. BTFSS PIR1, SSPIF
  5. GOTO $-2

Ha így "mérés" szinten sincs semmi akkor nem tudom, hogy mi lehet a baj.
A hozzászólás módosítva: Júl 5, 2015
(#) Pali79 válasza cross51 hozzászólására (») Júl 5, 2015 /
 
A GND-hez képest mindkét lábon 4,5 V-t mutat.
(#) cross51 válasza Pali79 hozzászólására (») Júl 5, 2015 /
 
Helyesbítek ez a feszültség a sebességtől is függ, de szerintem működik a modul is meg a szoftver is mert ha 4.5V-ot mérsz az elég "nagy" különbség nullához képest.
(#) Pali79 válasza cross51 hozzászólására (») Júl 5, 2015 /
 
Igen. Most azt mutatja, debug módban, hogy az SDO lábon 0V-van amíg arra az utasításra nem ér, hogy a bufferbe töltse az adatot. Ha elérte ezt az utasítást felmegy a feszültség 4,5 V-ra és ott is marad. Ha kész az adatküldés, nem kéne visszaesnie 0 V-ra?
(#) cross51 válasza Pali79 hozzászólására (») Júl 5, 2015 /
 
Nézd meg az SCK ha az nulla akkor mindegy mi van az SDO-n, ha az SCK egy vagy felfutó élen van akkor számít az SDO állapota(már nem emlékszem, hogy szint vagy él vezérelt).
(#) Pali79 válasza cross51 hozzászólására (») Júl 5, 2015 /
 
Azt már néztem. Ott egyből meg van a 4,5 V ahogy az SSPCON regiszter feltöltődik a megfelelő adattal.
(#) cross51 válasza Pali79 hozzászólására (») Júl 5, 2015 /
 
És mikor a polling enged tovább nem lesz nulla az SCK ?
(#) Pali79 válasza cross51 hozzászólására (») Júl 5, 2015 /
 
Basszus! Találtam egy jó kis doksit és rájöttem, hogy mekkora láma voltam, már megint!
Szóval eszerint nincs igazad abban, hogy az SSPSTAT,BF csak I2C-re jó. Viszont rávilágított, hogy az SSPBUF BANK0-ban, az SSPSTAT pedig BANK1-ben van. Én meg nem váltottam bankot a polling előtt, így aztán hiába vártam, hogy bebillenjen a bit. Tehát a helyes megoldás:
  1. SPI_pot
  2.         bcf             PORTB,3                         ; Digi poti engedélyezve
  3.         movlw   b'00010011'                     ; Adatküldés, mindkét poti kiválasztva
  4.         movwf   SSPBUF                          ; Adatküldés indul
  5. SPI_com
  6.         bsf             STATUS,RP0
  7.         btfss   SSPSTAT,BF                      ; Adatküldés befejezve?
  8.         goto    SPI_com                         ; Ha nem, várunk
  9.         bcf             STATUS,RP0
  10.         movf    spi_adat,w                      ; Ha igen, küldjük az adatot
  11.         movwf   SSPBUF
  12. SPI_data
  13.         bsf             STATUS,RP0
  14.         btfss   SSPSTAT,BF                      ; Adatküldés befejezve?
  15.         goto    SPI_data                        ; Ha nem, várunk
  16.         bcf             STATUS,RP0
  17.         bsf             PORTB,3                         ; Ha igen, digi poti tiltás
  18.         return
Következő: »»   688 / 1207
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