Fórum témák
» Több friss téma |
Nem tudom bankot váltasz-e közbe, mert ezek nem egy bankban "őrölnek" !
Igen tudom, az megvan. Illetve Bank1-be lépek > Start bit, egy idő után a Watch ablakban figyelem a PIR1-et, de nem csinál semmit.
Sziasztok
Van egy kis gondom amire keresnék megoldást. Megépítettem egy pic es órát 16f628-al és 4511-es ic vel tökéletesen működik is (Itt a cikkek közt található 6 csöves egyszerű nixi órát át tervezve ledesre).Most tovább szeretném fejleszteni úgy hogy a pic-es rész 5v-rol megy a 4511-es rész pedig 12v-rol ez azért kellene mert a 7szegmenses kijelzők nagyok és 8v körül kezd el világítani,a gond hogy csak 0000 ír ki a kijelző gondolom a bcd kód nál lehet a gond a különböző tápfeszek miatt ide kellene valamien szint illesztés ehhez keresnék valami egyszerű megoldást? Előre is köszönöm a segítőkész hozzászólást.
Szerintem próbáld meg a 4511-et is 5 V-ról hajtani és tranyókkal illeszteni a 12V-ra és így hajtani a kijelzőt.
A szimulátorod az I2C-t is tudja szimulálni? Mert a program ilyenkor a slave ACK jelére vár. Mplab-ban ilyenkor ki szoktam kommentelni a goto-t, persze így az adatküldést nem tudom tesztelni (arra ott a SerialAnalyzer).
Akkor én valamit nagyon félreértek. Az adatlapokból úgy olvastam, hogy a start bit után még nincs ACK jel, csak az első adat vétele után. Márpedig a példaprogramok a start bit után is figyelik a PIR1, SSPIF-et. Az adatlap is azt írja, hogy a start utasítás beállítja ezt a flag-et, de valamiért mégsem.
Megnéztem a 4511 adatlapját és 10 V tápfesznél már 9 V kell a magas szinthez, ezért nem megy a vezérlés. Az a legegyszerűbb megoldás ha a 4511 után teszel megfelelő tranzisztorokat és azokkal hajtod a kijelzőt.
Igen, mert itt figyeli, hogy a Start (vagy a Stop) rendesen lefutott-e, nincsen ütközés a buszon. Ha nem megfelelőek a jelszintek leállítja a startot (törli az SEN bitet, és bebillenti a BCLIF-et) az ütközés miatt.
Akkor nem értem mi a hiba, mert ahogy meghívódik a rutin, ott pörög a program egyfolytában. Illetve az sem teljesen világos, hogy miért van így ez az egész. Gondolok itt pl arra, hogy ha nincs is az áramkörben a slave akkor meghal az egész? Az órákban amiket eddig utánépítettem és volt benne RTC, semmiféle gondot nem okoz ha nincs az IC a helyén.
Ha nincs slave, akkor igen, meghal az egész. Ezért kell betenni egy figyelést, hogy belátható idő alatt jött-e ACK.
A hozzászólás módosítva: Júl 30, 2015
Sziasztok!
A következő kódot írtam pic12F628-ra ccsc-ben. Most ismerkedem a megszakításokkal, de nem nagyon akarnak működni. Pl.: ha a timer0-t vagy timer1-et vagy timer2-t használom nem működik a megszakítás, de ha a timer0-t használom rtcc névvel akkor igen, de ha mellette a külső megszakítást is használom ismét nem működik. Mi lehet a baj? Másik kérdésem az, hogy a külső megszakításnál, hogyan lehet beállítani, hogy pl.: csak a 0. láb állapotváltozása generálja a megszakítást? A segítségeket köszönöm.
Hello! Azért lehet így is..
Akkor az a kérdés, hogy a start bit küldése után minek kéne történnie (fizikailag), hogy a PIR1,SSPIF 1-be álljon?
Ha végbemegy a start kondíció beállítása , azaz az SDA és SCL lábat is lehúzta az MSSP akkor automatikusan beállítja a flag-et. Mi a szimulátor? Ha proteus akkor annak vannak nyűgjei I2C-vel. Legalábbis régen voltak. Hardveren élethűbb eredményt kapsz.
MPlab-bal kínlódok, de életben sem működik, pedig csak 5,6k-val van felhúzva a vonal. Az SCL-t lehúzta az biztos, mert azt megmértem, az viszont emlékeim szerint úgy is maradt. Este teszek rá egy szkópot, hogy lássam mi a helyzet ezekkel a lábakkal.
Esetleg még valami ötlet? A hozzászólás módosítva: Júl 30, 2015
Mielőtt a START -t kiadod meg kell győződni arról, hogy az SCK és az SDA is magas szinten van.
Be kell állítani az SPBRG és a többi SSP regisztereket. Ezután ki lehet adni a START -ot, avégrahajtásának végén az PIR1,SSPIF 1 -re áll. Bővebben: Link
Az adatlap ezt írja:
Idézet: „ The MSSP module has six registers for I2C operation. These are: • MSSP Control Register (SSPCON) • MSSP Control Register 2 (SSPCON2) • MSSP Status Register (SSPSTAT) • Serial Receive/Transmit Buffer Register (SSPBUF) • MSSP Shift Register (SSPSR) – Not directly accessible • MSSP Address Register (SSPADD) ” Ezeket beállítottam a példaprogramoknak megfelelően. Egy szó sem esik az SPBRG-ről, azt csak az USART-nál említi. Akkor most kell vagy sem.
Az MPLAB sw szimulátora nem állítja be az SSPIF bitet.
Elírtam... A sebességet az SSPADD -dal kell beállítani.
Akkor így pedig jónak kéne lennie és ha jól értem a start bit és a PIR1,SSPIF 1-be állásához még csak slave sem kell, csak a vonalakat kell felhúzni.
A TRISC3 -at és TRISC4 -et 1 -re (bemenetre) kell állítani. Szerintem 2k7 felhúzó ellenállás kell a vonalakra. Ha PICkit2 -vel nézed a jelek állapotát, egy elválasztó - meghajtó fokozat kell a PICkit2 elé, hiszen az ICSPDAT és az ICSPCLK vanalakra 4k7 elhúzó ellenállás van beépítve.
Sziasztok.
Szeretnék egy pic18f2550 el egy olyan időzítőt elindíteni ami 1 us enként csinál megszakítást. Kiválasztottam a timer0 T0CONbits.T08BIT = 0; T0CONbits.T0CS = 0; T0CONbits.PSA = 1; TMR0H = 0xFF; TMR0L = 0xFB; INTCONbits.T0IE = 1; INTCONbits.T0IE = 1; T0CONbits.TMR0ON = 1; Az interruptban egy ledet kapcsolgatok , és egy 20Mhz kristály adja az órajelet. Elindítás után villog a led, de szerintem nem jó a villogási periódus (túl lassú). Mplab x ide ben fejlesztek c18 as fordítóval. Szerintetek mitől lehet lassab jóval az időzítés ? A hozzászólás módosítva: Júl 30, 2015
Ha a 18F2550 órajele 48MHz, akkor 12 utasítást tud végrehajtani 1uS alatt...
Sziasztok,
(vigyázat, nagyon kezdő írása következik) Ma kezembe került egy PicKit2 a hozzávaló próbapanel társaságában, benne egy 16f690-es. Raktam a gépre MPLab IDE v8.91-et. Pár óra alatt sikerült egy Blink programot betöltenem, ez végre megy. Hirtelen felbuzdultam, hogy ez milyen egyszerű. Aztán jött a hidegzuhany. Épp van egy olyan igény, hogy egy feten keresztül kellene kapcsolni egy lámpát (12 volt) minden 3 percben 3-5 másodpercig. Gondoltam, meghosszabítom a LED KI időt 3 percre, a LED BE időt meg 3 mp.-re. Természetesen nem sikerült. Úgy látszik, aki elmúlt 60 és ma látott elöször ilyet annak nem is olyan egyszerű. Ráadásul láttam a neten, hogy van 8 lábú is ezekből, az is elég lenne erre a feladatra. Viszont ahhoz a 16f690-es kódja biztos nem lesz jó szerintem (bár azt se tudtam átírni). Tudna valaki segíteni, merre-hogyan induljak el? (Ha lehet, olyan *szájbarágós* módon) Köszönöm.
Üdv!
Először is minden elismerésem! Ha valaki a 0-ról ennyi idősen belevág az előtt le a kalappal! Kezdjük azzal, hogy programozási nyelven megy a próbálkozás?
A blink példaprogram ASM, tehát azzal próbálkoztam, de ezek szerint ehhez (se) értek. Igazság szerint megálltam a Basic nyelvnél, meg a Z80 assemblernél, de ez nem az az ASM.
A hozzászólás módosítva: Júl 30, 2015
Méregettem picit. Meghajtó fokozatom nincs a pickitre, de ment anélkül is. A felhúzókat 2,2k-ra cseréltem. Szóval az eredmény az, hogy ha a már sokat emlegetett flag bitet figyeli a rutin akkor mindkét láb kb 16 ms-re alacsonyra kerül, utána visszamegy magasra és annyi.
Ha a flag bit helyett egy pici várakozást iktatok be, akkor a mellékelt képen látható jelalakokat kapom.
Az ASM jó. Fel kellene tölteni ide azt a példaprogramot, hogy lássuk miről beszélünk.
Ez a prog lenne:
A hozzászólás módosítva: Júl 30, 2015
Legközelebb kéretik használni a "Kód" gombot és úgy beilleszteni, nem esik ennyire szét.
Nem tudom mennyi világos ebből eddig, de a lényeg az, hogy OndelayLoop és OffDelayLoop a várakoztató részek. Ha ezeket többször egymás után beszúrjuk akkor növekszik az általa késleltetett idő. Megjegyezném, hogy nagyon nem szép ez a megoldás, sem az eredeti, sem az általam javasolt megoldás, mert teljes mértékben leköti a processzort. Persze ha nincs más teendője akkor nem gond. Szóval egy lehetséges megoldás:
A hozzászólás módosítva: Júl 30, 2015
|
Bejelentkezés
Hirdetés |