Fórum témák
» Több friss téma |
Gondolom hogy mi lehet:
A SPIxBUF tulajdonképpen 2 regisztert takar (TX és RX buffer). Írni csak a TX buffert lehet, olvasni pedig csak az RX buffert. Tehát a beírt adatot nem lehet visszaolvasni mert az a TX bufferbe (onnan pedig a Shift regiszterbe) kerül, olvasáskor pedig te az RX buffert látod. Az RX bufferben pedig akkor lesz valós adat ha a tranzakció már befejeződött. Példa:
Bemásoltam a bufferbe írós sort, szimulátorban szépen bekerül az adat a bufferbe, betöltöm picbe, nyomkövetéskor léptetem a zöld nyilacskát, és mikor nop-ra ér, még adat nincs benne a bufferben...
Mégegyszer:
A SPI1BUF regiszter fizikailag 2 külön regisztert takar; a SPI1TXBUF és SPI1RXBUF regisztereket. Amikor a SPI1BUF regiszterbe írsz, akkor tulajdonképpen a SPI1TXBUF regiszterbe írsz, amikor pedig olvasod, akkor a SPI1RXBUF regisztert olvasod. Tehát a beírt adatot nem tudod visszaolvasni. (A szimulátor sem.)
Ja értem, akkor gyakorlatilag, mikor élesben nyomkövetem, azért ír nullákat, mert a rx ből olvas, ahol viszont nincs semmi eddig. Oké, köszönöm!
Igen. Csak akkor lesz ott valós adat ha a 8 (vagy 16) ciklus után a Shift regiszterből áttöltődik a vett adat a SPI1BUF (SPI1RXBUF) regiszterbe.
Sziasztok! Egy ideje szenvedek már a SPI-vel 24H-s picen. Logikai analizátorral nézném a kommunikációt, ha lenne, de nincs. Esetleg a periféria elhelyezésen, konfigurálásán, kívül kell még valamit csinálni? Config bitekkel esetleg, vagy valami?
Üdv!
Fel tudnád vázolni konkrétan a problémát? Mivel szeretnél kommunikálni SPI-n keresztül? Milyen hardveres elrendezéssel? Milyen beállításokkal? Mi nem működik?
Szia! Majd egy nokia 3310-es kijelzőre küldenék adatokat, de egyenlőre szeretném látni, hogy megy ki adat, elvileg analizátoron kellene látnom a SPI master órajelét, meg a kimenő adatot. Microstick 2 a környezet. 26,25,24,23-mas lábakra van beállítva a SPI modul.
Ez csak egy teszt akar lenni, hogy lássam a működését. Egyébként 16 és 18F en már sokmindennel kommunikáltam, SPI-n is. De ott nem volt túlbonyolítva a modul.
Közben látom hogy a csatolt kódban pont ki van kapcsolva a modul, de ha bekapcsolom, akkor is fura az órajel jelalakja, és nincs adat. Kérdés hogy holvan az adat?
A hozzászólás módosítva: Feb 14, 2015
Milyen mikrovezérlőt nyúzol? PIC24HJ128GP502-t?
Az ilyen kis lábszámú mikrovezérlők perifériakiosztása elég furfangos a tetszőleges lábhozzárendelés miatt (RPx lábak). A programrészletedben nem látom a Control Register Unlock folyamatot, ami a lábhozzárendelések engedélyezéséhez kell. Anélkül nem módosíthatod a beállításokat. Doksi 138. oldal (11.6.3.1).
Igen, ezt a vezérlőt kínzom. Control regiszterrel valóban nem találkoztam. Utánanézek és jelentkezem! Azért az órajel jelalak akkor is ilyesztő általában 50%-os a a normál jelalak kitöltése, ennek meg vagy 90... (Basszus, hogy átsiklottam a control reges rész felett, pedig erre járkáltam, mikor a lábakhoz rendeltem a ki-be meneteket)
A hozzászólás módosítva: Feb 14, 2015
Egy példa (PIC24FJ64GB002-re):
A hozzászólás módosítva: Feb 14, 2015
Még valami:
Az SS vezeték nem kimenet, hanem bemenet, és csak szolga módban van jelentősége. Amikor a mikrovezérlő mester módban működik, akkor a szolga egység kiválasztásához bármelyik nekünk tetsző kimenetet használhatjuk, nincs erre semmi megkötés. A lényeg hogy nekünk kell a kommunikáció megkezdése előtt a megfelelő Chip Select (Slave Select) vezetéket aktiválni, majd a kommunikáció végeztével inaktiválni (ha szükséges). Ha a szolga egység nem igényel /CS jelet, akkor ez elhagyható. (Ilyenkor a szolga folyamatosan aktív állapotban van.)
Szia! Köszönöm a segítséget! Ez a periféria felóldó és lezáró szekvencia dolog meglepett. 16 és 18F nél én is tetszőleges lábat használtam SS nek. Lesznek még meglepetések a 16bitesekkel úgylátom sokkal nagyobb a különbség, mint 16F és 18F között...
Az benne a jó, hogy mikor én majd foglalkozom vele, akkor addig Ti már kitárgyaljátok az "alap" buktatókat !
További jó munkát !
Ez a feloldó szekvencia nem csak a lábkiosztások módosításánál van, hanem a futásidőben történő órajel/PLL módosításoknál is. (Ott viszont csak feloldás van, lezárás nincs, mert az automatikusan megtörténik. Ez a művelet ezért időkritikus.)
A hozzászólás módosítva: Feb 15, 2015
Sziasztok!
Egy érdekes problémával találtam szembe magamat, mégpedig adott egy MCP2200-ás USB-UART átalakító, meg egy PIC32MX440-es proci. A problémám meg az volna, hogy a PC-ről küldök egy bájtot a procinak, amit az mindenféle módosítás nélkül visszaad a PC-nek. Azonban ha a bájt értéke nagyobb, mint 127, a proci minden esetben 63-at dob vissza. Melyet nem értek, hogy miért, és hogy hogyan lehetne kiküszöbölni. PC-n ez a program fut:
A procin meg egy ilyen:
Előre is köszönök mindenféle segítséget! A hozzászólás módosítva: Feb 15, 2015
Idézet: „Azonban ha a bájt értéke nagyobb, mint 127, a proci minden esetben 63-at dob vissza.” Lehet, hogy a típusokkal lesz a gond. Ha előjelesen küldesz 1bájtot, akkor az -128 és +127 lesz a maximális érték. Ha előjel nélkül küldöd akkor mehet a 255 érték a nullával együtt 1 byte-ban. Bővebben: Link Bár elvileg, ha jól látom akkor az "unsigned int c" változód lesz amit kiküldesz ez esetben egy 32bites változód lesz. Azt hiszem neked egy "unsigned char v" változó kellene.. A hozzászólás módosítva: Feb 15, 2015
Egyébként a kapcsos zárójel mit jelent, mit módosít, mikor kell használni? Kissi! Végülis ez a fórum lényege, többek közt
A szögletes zárójelre gondolsz? Az az indirekt címzésre utal.
Ajánlom elolvasásra a 16-bit MCU and DSC Programmer's Reference Manualt. mov w0,w1 - w0 tartalmának betöltése w1-be. mov w0,[w1] - w0 tartalmának betöltése a w1 által mutatot memóriacímre. (Nem tudom hogy a kerek zárójel miért nem volt jó a Microchipnek.) A hozzászólás módosítva: Feb 15, 2015
Igen, a szögletesre voltam kiváncsi, köszönöm! Le is töltöttem a reference manualt, tanulmányozom!
A PC oldali programozásnál volt olyan tapasztalatom, hogy a (virtuális) soros portról érkező karaktereket az alkalmazás (vagy a rendszer?) alapértelmezetten átkódolta ASCII-ra. Külön be kellett állítani a soros port tulajdonságai között, hogy ne ASCII legyen, hanem hagyja meg az ANSI kódolást (nekem az ékezetes betűk átviteléhez kellett).
A mai hírük szerint pedig 50 %-os kedvezménnyel lehet Pickit 3 vagy ICD 3-at venni, ha beviszed a régi Pickit 2 vagy ICD 2 programozódat. Bővebben: Link
A világért sem adnám ki a kezemből a PICkit2 -t...
Nemrég én is írtam, montjuk nem ide, hanem a közérdekűbe. Szépen törölve is lett. Csak óvatosan a reklámokkal!
Ejj de egyet értek , ez hirdetés sem más csak vakítás és a jobb hardverek beszedése...
Sziasztok!
Pic18f97j60-at forrasztok be épp, és folyamatosan ellenőrizgetek menet közben multiméterrel, nehogy összeérjenek a lábak. Két lábsort forrasztottam be eddig. Elértem az AVSS lábig, ahol a multiméter majdnem minden lábnál kontaktot jelez. Ezen kívül az összes többi láb rendben van. Valaki tudja, hogy ez mi?
A multiméter vezetékeit felcserélve megmarad a kontakt jelzése?
Megfordítottam, és így csak a többi VSS-sel jelez. Akkor gondolom ez nem baj.
Kezdő amatőr PIC-kelőként 16F628-al komparátor hiszterézist szeretnék állítani (az adatlapon nem találtam rá utalást...). Kettős komparátor megoldással próbálkozom, de gyanítom, hogy nem így a legelegánsabb. Tudna valaki segíteni?
|
Bejelentkezés
Hirdetés |