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   1081 / 1203
(#) Pali79 válasza aDom hozzászólására (») Ápr 13, 2019 /
 
A wachdog timer törlése, de az csak akkor kell be van kapcsolva.
(#) aDom hozzászólása Ápr 14, 2019 /
 
Köszönöm a sok segítséget holnap nekifutok
(#) Pali79 válasza Hp41C hozzászólására (») Ápr 14, 2019 /
 
Megpróbáltam SPI eepromot kezelni, nem sok sikerrel. Biztos nem sikerült megértenem a hardver működését. Az eeprom adatlapja szerint kell kapjon először egy 8 bites parancsot ami olvasás esetén b'00000011' ezután egy 16 bites címet és erre válaszul adja a tárolt értéket. Próba képpen pickittel feltöltöttem az első pár címet különböző értékekkel. Szkóppal vizsgálva úgy tűnik, hogy csak a parancs megy ki, tehát az első bájt, a többi nem.
Valaki el tudná magyarázni a metodikáját?
(#) Hp41C válasza Pali79 hozzászólására (») Ápr 14, 2019 / 3
 
25LC640:
Kell egy külön vonal, ami az EEProm CS jelét vezérli.
0. Felprogramozni az MSSI modult SPI master módra. Beleértem az órajel beállítását és az esetleges megszakítás beállítását is.
1. CS alacsony szintre kapcsolni.
2. SSPBUF kiolvasása (még akkor is, ha az adat nem fontos), SSPIF törlése
3. SSPBUF feltöltése az adattal. Ebben az esetben a kiolvasási parancs kódját kell beírni.
4. Várni, amíg kiküldi: while (SSPIF == 1) vagy a megszakítás megérkezik.
5. SSPBUF kiolvasása (még akkor is, ha az adat nem fontos), SSPIF törlése
6. SSPBUF feltöltése az adattal. Ebben az esetben a kiolvasandó adat címének felső byte-ját kell beírni.
7. Várni, amíg kiküldi: while (SSPIF == 1) vagy a megszakítás megérkezik.
8. SSPBUF kiolvasása (még akkor is, ha az adat nem fontos), SSPIF törlése
9. SSPBUF feltöltése az adattal. Ebben az esetben a kiolvasandó adat címének alsó byte-ját kell beírni.
10. Várni, amíg kiküldi: while (SSPIF == 1) vagy a megszakítás megérkezik.
11. SSPBUF kiolvasása (még akkor is, ha az adat nem fontos), SSPIF törlése
12. SSPBUF feltöltése a tetszőleges adattal.
13. Várni, amíg kiküldi: while (SSPIF == 1) vagy a megszakítás megérkezik.
14. SSPBUF kiolvasása. Végre az első értékes adat a memóriából kiolvasva, SSPIF törlése
Ha kell még több, a 12..14 ismételhető.
15. CS magasra megy.
(#) eSDi válasza Pali79 hozzászólására (») Ápr 14, 2019 /
 
Üdv!

Mi a típusa az EEPROM-nak? Mert, ha 93C sorozat valamelyike, akkor az MicroWire. Majdnem SPI, de mégsem és kicsit trükkös.

Én most SPI Flash-el és MicroWire-el bíbelődök. Flash-nél a következő a folyamat olvasásnál:
CS alacsonra, Olvasás parancs kiküldés, Cím kiküldés, egy üres "Dummy" byte kiküldés. Ez az üres byte fogja beléptetni a az SSPxBUF-ba a vett adatot. CS magasra.
(#) Pali79 válasza Hp41C hozzászólására (») Ápr 14, 2019 /
 
Ez igazán kimerítő válasz, köszönöm. A CS vonalat muszáj vezérelni? Ha csak egy ilyen eeprom van az áramkörben, nem elégséges ha gndre van kötve?
(#) Pali79 válasza eSDi hozzászólására (») Ápr 14, 2019 /
 
Hp41C pont eltalálta a típust. SPI az biztos. A CS vonal és/vagy a buffer kiolvasásának hiánya lesz a gond. Este kiderül. Köszönöm a segítséget neked is!
(#) Bakman válasza Pali79 hozzászólására (») Ápr 14, 2019 / 1
 
Idézet:
„A CS vonalat muszáj vezérelni?”
Igen, szinte minden SPI képes eszköznél ez egy trigger is, enélkül általában nem végzi a dolgát/nem lehet szóra bírni.
(#) Pali79 válasza Hp41C hozzászólására (») Ápr 14, 2019 /
 
Azt hittem megértettem, de valami mégsem stimmel. A mellékelt képen látszik, hogy pickit2-vel visszaolvastam az eeprom tartalmát és a 0. valamint a 2. címen van adat. Az alábbi kódot próbáltam:
  1. Teszt
  2.                 bcf             SPI_CS                  ;CS vonal alacsony szintre
  3.                 movlw   b'00000011'             ;olvasás parancs
  4.                 movwf   SPI_TX                                         
  5.                 call    SPI_kuldes
  6.                 movlw   b'00000000'             ;címzés, felső bájt
  7.                 movwf   SPI_TX
  8.                 call    SPI_kuldes
  9.                 movlw   b'00000010'             ;címzés, alsó bájt
  10.                 movwf   SPI_TX
  11.                 call    SPI_kuldes
  12.                 movlw   b'00000000'             ;üres adat küldése
  13.                 movwf   SPI_TX
  14.                 call    SPI_kuldes
  15.                 bsf             SPI_CS                  ;CS vonal magas szintre
  16. ...
  17. ...
  18. ...
  19. SPI_kuldes
  20.                 movf    SSPBUF,w                                ;buffer kiolvasása
  21.                 bcf             PIR1,SSPIF              ;flag bit törlése
  22.                 movf    SPI_TX,w                                ;küldendő adat W-ben
  23.                 movwf   SSPBUF                  ;buffer feltöltése
  24. SPI_polling
  25.                 btfss   PIR1,SSPIF                      ;várunk a küldésre
  26.                 bra             SPI_polling                                    
  27.                 movf    SSPBUF,w                                ;buffer kiolvasása
  28.                 movwf   SPI_RX                  ;kiolvasott adat mentése
  29.                 bcf             PIR1,SSPIF              ;flag bit törlése
  30.                 return


A CS vonalat a program elején állítom magasra.
A végén a CS vonal magasra állítását követően az SPI_RX-ben lévő adatot küldöm LCD-re, de folyton nullákat kapok csak.
A hozzászólás módosítva: Ápr 14, 2019

eeprom.jpg
    
(#) aDom hozzászólása Ápr 14, 2019 /
 
Sziasztok közben még én a tegnapi témámmal kapcsolatban mindig segítséget kérnék mert nem oldódott meg. A problémám tehát az, hogy mikroC ben megirom ezt a programot
Trisc=0;
Portc=1;
Feltoltom a k150es programozommal PIC16f676-os chippemre és semmit nem csinál(ledeket szeretnék megvilágítani vele)
A válaszokat előre is köszönöm
(#) pipi válasza aDom hozzászólására (») Ápr 15, 2019 / 1
 
Ezt már leírtad...mondj valami újat
Ezen átrágtad magad?
Bővebben: Link
(#) Pali79 válasza aDom hozzászólására (») Ápr 15, 2019 / 1
 
Két utasítás az nem program! Hol a többi része? Ennyi infóval egymillió oka lehet, hogy nem működik.
(#) Pali79 válasza Hp41C hozzászólására (») Ápr 15, 2019 /
 
Az kimaradt, hogy az SSP modul beállítására csak ennyit csináltam:
  1. SPI_init
  2.                 bsf             TRISB,4                 ;RB4 SPI SDI adat bemenet
  3.                 bcf             TRISB,6                 ;RB6 SPI SCK órajel kimenet
  4.                 bcf             TRISC,7                 ;RC7 SPI SDO adat kimenet
  5.                 movlw   b'00100000'             ;SPI Master mode, clock = FOSC/4
  6.                 movwf   SSPCON1                 ;SPI bekapcs


Nem teljesen világos, hogy az SSPSTAT,CKE és az SSPCON1,CKP biteket mi alapján kell beállítani. Az adatlapban vannak ábrák, táblázatok, hogy milyen hatással vannak ezek a működésre, csak azt nem tudom, hogy melyik beállítás kell nekem.
(#) eSDi válasza Pali79 hozzászólására (») Ápr 15, 2019 /
 
Az EEPROM adatlapjában leírtak alapján. Ha szerencséd van akkor konkrétan leírják az SPI módot is. Bővebben: Link

De szerintem ez kell neked, ha jól látom így kora reggel.
SMP = 0; //Input data sampled at middle of data output time
CKE = 1; //Transmit occurs on transition from active to Idle clock state
CKP = 0; //Idle state for clock is a low level
(#) Pali79 válasza eSDi hozzászólására (») Ápr 15, 2019 /
 
Én az adatlapon nem láttam ilyet, pont ez a gondom. Ezek az értékek honnan vannak?
(#) Hp41C válasza Pali79 hozzászólására (») Ápr 15, 2019 /
 
MSSI modul SSPSTAT regiszterében.
Pl. PIC18F2550 adatlapjában a 19.3.5 fejezet.
(#) Pali79 válasza Hp41C hozzászólására (») Ápr 15, 2019 /
 
Ezt láttam, meg a táblázatot is, hogy 4 módot lehet beállítani, de azt honnan tudom, hogy az eepromnak melyik kell?
(#) Hp41C válasza Pali79 hozzászólására (») Ápr 15, 2019 /
 
25LC640 adatlap Figure 3-1
(#) Pali79 válasza Hp41C hozzászólására (») Ápr 15, 2019 /
 
Azt hiszem kezdem kapisgálni. Az már világos, hogy az órajel alacsony szintről indul. Ha jól látom az első bit érkezésének meg kell előznie az órajel első felfutását, tehát SPI BUS MODE 0,0-t kell beállítani, ahogy eSDi is írta.
(#) Pali79 válasza Hp41C hozzászólására (») Ápr 15, 2019 /
 
Hát csak nem akarja az igazságot. Ezen adatlap FIGURE 1-2 szerint Mode 1,1 vagy Mode 0,0 kell neki. Kipróbáltam mindkét beállítással, de a helyzet változatlan.
(#) Pali79 válasza Pali79 hozzászólására (») Ápr 15, 2019 /
 
Sikerült! A kiolvasás már megy! Az ANSELH törlése maradt el. Köszönöm a segítséget.
(#) Hp41C válasza Pali79 hozzászólására (») Ápr 15, 2019 / 1
 
Gratulálok!
Nagy tanulság:
TRIS bit 0, ANSEL bit 1 (analóg módban a láb): a kimeneten a legutoljára beírt adat szerinti szint mérhető, sőt az A/D is a magas vagy alacsony szint feszültségét méri. Azonban visszaolvasni nem lehet a szintet, mindig 0 -t kapunk. bsf, bcf, művelet a PORTA regiszterben képződő eredménnyel (xorwf PORTA,f) hibás adatot írhat vissza. Két kivétel van: clrf és a movwf. Sajnos a LAT bit sem olvasható vissza. (Csak néhány típuson vizsgáltam.)
TRIS bit 1, ANSEL bit 1: Analóg mód, portról beolvasva 0 -t ad.
(#) usane válasza Pali79 hozzászólására (») Ápr 15, 2019 /
 
Elnézést kínálok, de ő 1,0 vagy 0,1-et írt, nem tudom a CKP, vagy a CKE van-e elöl. Viszont valóban 0,0 vagy 1,1 kell az adatlap szerint.

De látom már megolddott, gratula
A hozzászólás módosítva: Ápr 15, 2019
(#) icserny válasza usane hozzászólására (») Ápr 16, 2019 /
 
Úgy tudom, hogy a Microchipnél a CKE fordítva értendő, tehát a CKP=0, CKE=1 valójában a 0,0 SPI módot jelenti.
(#) Pali79 válasza icserny hozzászólására (») Ápr 16, 2019 /
 
A jelen esetben használt PIC18F14K22 esetén az adatlap szerint:

  1. SPI Mode     CKP CKE
  2. 0,0           0   1
  3. 0,1           0   0
  4. 1,0           1   1
  5. 1,1           1   0
A hozzászólás módosítva: Ápr 16, 2019
(#) usane válasza icserny hozzászólására (») Ápr 16, 2019 /
 
Valóban, egyszer már belefutottam az MC különcködésébe.
(#) Pali79 válasza usane hozzászólására (») Ápr 16, 2019 /
 
Igen, a logikával ellentétben a mód "neve" nem tükrözi a CKP, CKE bitek állapotát.
(#) Pali79 hozzászólása Ápr 16, 2019 /
 
Most, hogy működik az SPI kommunikáció szeretnék RFM12 modulokat használni. Találtam egy példa programot PIC16F886-ra írva. A fura az, hogy van benne egy változó ami a szimulátor szerint 16 bites. Nem tudom mennyire fontos, de gondolom azért van mert ebben a modulban a vezérlő utasítások 16 bitesek. Két kérdés:
1. Hogyan lehet ezt megoldani?
2. Kell ezzel feltétlenül foglalkozni? Hardveres SPI-vel egymás után elküldve a két bájtot is működhet?
(#) superuser válasza Pali79 hozzászólására (») Ápr 16, 2019 /
 
Csatold a kódot, anélkül nehezen értelmezhető a kérdés.
(#) Pali79 válasza superuser hozzászólására (») Ápr 17, 2019 /
 
Csatolva. Azóta rájöttem, hogy az MPlab-ban van mókolva valami amitől a watch ablakban 16 bitesnek mutatja. Ha újonnan létrehozom a projektet már csak 8 bitesként mutatja. Szóval az első kérdés már csak érdekesség szinten, a 2. kérdés második fele az igazán érdekes.
A hozzászólás módosítva: Ápr 17, 2019

rfm12_tx.asm
    
Következő: »»   1081 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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