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   691 / 1209
(#) kissi válasza Pali79 hozzászólására (») Júl 30, 2015 /
 
Nem tudom bankot váltasz-e közbe, mert ezek nem egy bankban "őrölnek" !
(#) Pali79 válasza kissi hozzászólására (») Júl 30, 2015 /
 
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.
(#) fotomen32 hozzászólása Júl 30, 2015 /
 
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.
(#) Pali79 válasza fotomen32 hozzászólására (») Júl 30, 2015 / 1
 
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.
(#) ktamas66 válasza Pali79 hozzászólására (») Júl 30, 2015 /
 
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).
(#) Pali79 válasza ktamas66 hozzászólására (») Júl 30, 2015 /
 
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.
(#) Pali79 válasza fotomen32 hozzászólására (») Júl 30, 2015 / 1
 
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.
(#) ktamas66 válasza Pali79 hozzászólására (») Júl 30, 2015 /
 
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.
(#) Pali79 válasza ktamas66 hozzászólására (») Júl 30, 2015 /
 
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.
(#) nedudgi válasza Pali79 hozzászólására (») Júl 30, 2015 /
 
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
(#) zilahi hozzászólása 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.
  1. #include "C:\Usersdám\Desktop\Autó\autó 12.h"
  2. int16 i;
  3. int16 j;
  4. #int_RTCC
  5. void  RTCC_isr(void)
  6. {
  7. j=j+1;
  8. if (j == 1000)
  9. {
  10. output_toggle (pin_a2);
  11. j=0;
  12. }
  13. }
  14.  
  15. #int_EXT
  16. void  EXT_isr(void)
  17. {
  18. output_high (pin_a3);
  19. }
  20.  
  21.  
  22.  
  23. void main()
  24. {
  25.    i=0;
  26.    j=0;
  27.    setup_adc_ports(NO_ANALOGS|VSS_VDD);
  28.    setup_adc(ADC_OFF);
  29.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
  30.    setup_timer_1(T1_DISABLED);
  31.    setup_timer_2(T2_DISABLED,0,1);
  32.    setup_ccp1(CCP_PWM);
  33.    set_pwm1_duty(0);
  34.    setup_comparator(NC_NC);
  35.    setup_vref(FALSE);
  36.    enable_interrupts(INT_RTCC);
  37.    enable_interrupts(INT_EXT);
  38.    enable_interrupts(GLOBAL);
  39.    setup_oscillator(OSC_4MHZ);
  40.  
  41.    
  42.    while (TRUE)
  43.    {
  44.  
  45.    }}
(#) proli007 válasza fotomen32 hozzászólására (») Júl 30, 2015 / 1
 
Hello! Azért lehet így is..
(#) Pali79 válasza nedudgi hozzászólására (») Júl 30, 2015 /
 
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?
(#) usane válasza Pali79 hozzászólására (») Júl 30, 2015 /
 
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.
(#) Pali79 válasza usane hozzászólására (») Júl 30, 2015 /
 
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
(#) Hp41C válasza Pali79 hozzászólására (») 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
(#) Pali79 válasza Hp41C hozzászólására (») Júl 30, 2015 /
 
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.
(#) cross51 válasza Pali79 hozzászólására (») Júl 30, 2015 /
 
Az MPLAB sw szimulátora nem állítja be az SSPIF bitet.
(#) Hp41C válasza cross51 hozzászólására (») Júl 30, 2015 /
 
Elírtam... A sebességet az SSPADD -dal kell beállítani.
(#) Pali79 válasza Hp41C hozzászólására (») Júl 30, 2015 /
 
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.
(#) Hp41C válasza Pali79 hozzászólására (») Júl 30, 2015 /
 
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.
(#) kt hozzászólása Júl 30, 2015 /
 
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
(#) Hp41C válasza kt hozzászólására (») Júl 30, 2015 /
 
Ha a 18F2550 órajele 48MHz, akkor 12 utasítást tud végrehajtani 1uS alatt...
(#) sunside hozzászólása Júl 30, 2015 /
 
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.
(#) Pali79 válasza sunside hozzászólására (») Júl 30, 2015 /
 
Ü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?
(#) sunside válasza Pali79 hozzászólására (») Júl 30, 2015 /
 
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
(#) Pali79 válasza Hp41C hozzászólására (») 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.

I2C.jpg
    
(#) Pali79 válasza sunside hozzászólására (») Júl 30, 2015 /
 
Az ASM jó. Fel kellene tölteni ide azt a példaprogramot, hogy lássuk miről beszélünk.
(#) sunside válasza Pali79 hozzászólására (») Júl 30, 2015 /
 
Ez a prog lenne:

  1. #include <p16F690.inc>
  2.         __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOD_OFF & _IESO_OFF & _FCMEN_OFF)
  3.  
  4.         cblock 0x20
  5. Delay1                  ; Define two file registers for the
  6. Delay2                  ; delay loop
  7.  
  8.         endc
  9.        
  10.         org 0
  11. Start
  12.         bsf     STATUS,RP0      ; select Register Page 1
  13.         bcf     TRISC,0         ; make IO Pin B.0 an output
  14.         bcf     STATUS,RP0      ; back to Register Page 0
  15. MainLoop
  16.         bsf     PORTC,0         ; turn on LED C0
  17. OndelayLoop
  18.         decfsz  Delay1,f        ; Waste time.  
  19.         goto    OndelayLoop     ; The Inner loop takes 3 instructions per loop * 256 loopss = 768 instructions
  20.         decfsz  Delay2,f        ; The outer loop takes and additional 3 instructions per lap * 256 loops
  21.         goto    OndelayLoop     ; (768+3) * 256 = 197376 instructions / 1M instructions per second = 0.197 sec.
  22.                                 ; call it a two-tenths of a second.
  23.  
  24.         bcf     PORTC,0         ; Turn off LED C0
  25. OffDelayLoop
  26.         decfsz  Delay1,f        ; same delay as above
  27.         goto    OffDelayLoop
  28.         decfsz  Delay2,f
  29.         goto    OffDelayLoop
  30.         goto    MainLoop        ; Do it again...
  31.         end
A hozzászólás módosítva: Júl 30, 2015
(#) Pali79 válasza sunside hozzászólására (») 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:
  1. #include <p16F690.inc>
  2. __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOD_OFF & _IESO_OFF & _FCMEN_OFF)
  3.  
  4. cblock 0x20
  5. Delay1  ; Define two file registers for the
  6. Delay2  ; delay loop
  7.  
  8. endc
  9.  
  10. org 0
  11.  
  12. Start
  13.         bsf             STATUS,RP0      ; select Register Page 1
  14.         bcf             TRISC,0 ; make IO Pin B.0 an output
  15.         bcf             STATUS,RP0      ; back to Register Page 0
  16.  
  17. MainLoop
  18.         bsf             PORTC,0 ; turn on LED C0
  19.         call    DelayLoop
  20.         bcf             PORTC,0
  21.         call    DelayLoop
  22.         goto    MainLoop
  23.        
  24.        
  25. DelayLoop
  26.         decfsz  Delay1,f         
  27.         goto    OndelayLoop    
  28.         decfsz  Delay2,f       
  29.         goto    OndelayLoop    
  30.         return
  31.        
  32.  
  33. end
A hozzászólás módosítva: Júl 30, 2015
Következő: »»   691 / 1209
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