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   1043 / 1210
(#) don_peter válasza ktamas66 hozzászólására (») Szept 3, 2018 /
 
A timer-ek külön mennek, nincs gond.
PWM is jól megy, bár tegnap tesztelgettem a kiköltést és valami nem volt kerek, de arra ma is ránézek.

kissi: igen én is így tudtam, hogy 1 vagy 0 a PWM, de még is valamiért nem okoz megszakítást.
VCC 4.79, szerintem ez rendben lesz, valami más lesz a hiba amit nagyon nem veszek észre..
Ma újra átnyálazom az egészet.

pajti2: nincs kapcsolási rajzom, csak agyalgatok egyelőre és tesztelgetek, hogy meg e tudom oldani ezzel a kis PIC-el a dolgot. Egy kiszuperált panelt használok erre célre, hogy élesben is tudjam tesztelni. Nincs befolyáoló tényező, a PIC lábain nincs más.

Tehát:
Belső órajelről járatom, 1MHz-en a 16F684-es PIC-et.
  1. OSCCON  = 0b01000001;

PWM-et beállítottam 1KHz-re 50% kitöltessél (pin5, RC5 CCP1)- ezt mérem és jó
  1. CCPR1L  = 0b01111100;   // 124
  2.         CCP1CON = 0b00111100;
  3. // Hozzá a Timer2
  4. PR2     = 0b11111001;           // 249
  5.         T2CON   = 0b00000100;

PWM jelet, be engedem egy az egyben most A3-es lábra (pin3 RA4),
  1. ADCON0  = 0b10001100;           // Right justified, VDD Ref, A3 chanel, A/D enabled
  2.         ADCON1  = 0x00;                         // FOSC/2
  3.         ADON    = 1;                            // AD enabled

+ a megszakítást kezelő lábra is ráengedem (pin11 RA2 INT) és beállítom a megszakítást
  1. INTEDG  = 1;                    // Felfutó élre
  2.         INTF    = 0;                    // INT flag
  3.         INTE    = 1;                    // INT engedélyezése

Termesztésen a szükséges beállításokat elvégzem az elején:
  1. TRISC   = 0x00;                         // kimenet
  2.         TRISA   = 0x14;                         // A4 bemenet
  3.         ANSEL   = 0b00001000;           // AN3 analog többi láb digitális
  4.         CMCON0  = 7;                            // Comparator kikapcsolva
  5.         PEIE    = 1;                            // Peripheral interrupt engedélyezése
  6.         GIE             = 1;                            // Globális interrupt engedélyezése

Így nem lehetne akadálya a megszakításnak.
Ezek után már jöhet is a megszakítást kezelő rutin:
  1. if(INTF==1){
  2.                 ADC             = read_ADC(3);
  3.                 LED3    = !LED3;
  4.                 INTF    = 0;
  5.         }

A while ciklusban pedig csak annyit teszek, hogy kiíratom LCD-re a vett eredményt.

ui: amit most észre is vettem, hogy leírtam, hogy az INT lábat nem tettem bemenetre..
Ez javítom is... És úgy fest lehet jó is lett.., de jó, hogy van ez a fórum, az ember mire leírja a gondját meg is oldja..
A hozzászólás módosítva: Szept 3, 2018
(#) don_peter hozzászólása Szept 3, 2018 /
 
Kész, nem tudom mi lehet a gond.
Van valakinek esetleg egy kis ideje, hogy tesztelje a kódot?
16F684-es PIC-re kellene tölteni, PWM jelet vissza vezetni az külső megszakításba, majd egy LED-et villogtatni, esetleg ADC-t mérni illetve számolni a megszakítást és while ciklusban kiíratni 2x16-os kijelzőre. Utóbbi nem kell, ha tudja valaki debugolni, de fontos, hogy a counter számolja a megszakításokat, ebből lehet tudni, hogy rendesen fut a program.
A kódokat csatoltam, már az is sokat segítene, ha valaki rápillantana.
Előre is köszi..., ha esetleg jobb lenne, akkor ki is teszem ide a teljes kódot.
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 /
 
Van szkópod, a PWM megy rendesen ?!
(#) don_peter válasza kissi hozzászólására (») Szept 3, 2018 /
 
Igen, a PWM rendesen megy.
Sajnos megint resetel a PIC, olyan mint ha reset hurokba kerülne a beállításokkal.
Fesz nem ingadozik, stabil.
A hozzászólás módosítva: Szept 3, 2018
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 /
 
Otthon megnézem majd, ha van ilyen PIC-em, akkor kipróbálom Neked...!

Addig is próbáld meg "beszakaszolni" a hibát: ha kikapcsolod az INT-et, AD-t ( egyesével!), akkor a többi megy rendesen ?

szerk.: RESET lehet tápfesz, WDT, verem túl,ill. alulcsordulás ( ennél a PIC-nél nem néztem!) !
A hozzászólás módosítva: Szept 3, 2018
(#) don_peter válasza kissi hozzászólására (») Szept 3, 2018 /
 
Ha az INT-et, kikapcsolom már is minden a helyére kerül.
Viszont szükségem lenne a megszakításra az AD méréshez.

Reset: tápfesz stabil, nem ingázik, WDT ki van kapcsolva, remélem ezt a PIC is értelmezi, verem passz...
A hozzászólás módosítva: Szept 3, 2018
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 /
 
és ha az INT-ben csak a LED villogtatást hagyod ?
(#) don_peter válasza kissi hozzászólására (») Szept 3, 2018 /
 
Ugyan ez a hiba, ha van INT akkor jön a reset hurok, újra indulgat folyamatosan.
Ha nincs INT akkor gond sincs.. Ettől független PWM működik.
A hozzászólás módosítva: Szept 3, 2018

build.PNG
    
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 /
 
Most néztem a zip-et, ott is kivetted a megszakításból az AD-t...
A LED-nél nincs valami árulás ( rövidzár, kicsi ellenállás), ami a működtetésnél tápfeszcsökkenést okoz ?!
(#) don_peter válasza kissi hozzászólására (») Szept 3, 2018 /
 
Kipróbálom, de nem hiszem, hogy lenne.
Most ellenőriztem csak a PWM-et még egyszer. Freki rendben van és a kitöltési tényező is rendesen megy. A LED-es témát ellenőrzőm, hátha....

Fesz továbbra is stabil, 820Ohm-os ellenállással használom a LED-et.

Most már csak a PWM és a külső megszakítás játszik.. Azonnal reset-be hajszolja PIC-et ha engedélyezem a megszakítást. (amúgy tényleg olyan mint ha verem vagy wdt túlcsordulás lenne)
A hozzászólás módosítva: Szept 3, 2018
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 /
 
WDT nem lehet, mert akkor int nélkül is menne... !
Szerintem a LED környéke gyanús, szemed mennyire jó ?!
(#) don_peter válasza kissi hozzászólására (») Szept 3, 2018 /
 
Nagyon jó a szemem.
Arra gondoltam, hogy ADC bemenete húzza esetleg le a PWM jelet és ezért lehet valami gubanc, de most levettem PIC-ről teljesen az ADC bemenetéről, így a PWM jel szabadon járhat, de a megszakítás továbbra is resetbe tartja a PIC-et.

LED-et leveszem most, hogy azt is kizárjuk.
Szerk: Sajnos továbbra is ugyan az a helyzet.
A hozzászólás módosítva: Szept 3, 2018
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 /
 
Idézet:
„Nagyon jó a szemem.”


Az ADC ( ha jó !) nem csinálhat ilyet !

Várom a LED-es eredményt!

szerk: !
A hozzászólás módosítva: Szept 3, 2018
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 /
 
Csak az INTE-t kapcsold már nullába, a PEIE, GIE maradjon!
(#) don_peter válasza kissi hozzászólására (») Szept 3, 2018 /
 
Egyből működik, kijön resetből.
While ciklusban számolgat szépen...
A hozzászólás módosítva: Szept 3, 2018
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 /
 
A #define LED3 RC4 jó ( én nem használom a HI-TECH fordítót !) ?!
(#) don_peter válasza kissi hozzászólására (») Szept 3, 2018 /
 
Igen, ez így jó.
Kicsit furcsa a HI-TECH, de ez így helyes.
Ebben a típusban nincs LATx regiszter, csak a PORT regiszter használható szint állításra.

Szerk: most leveszem LCD kijelzőt is, hátha az kavar be. Tesztelem.
A hozzászólás módosítva: Szept 3, 2018
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 /
 
Az OK, csak nincs benne a PORTC ( pl. C18-ban PORTCbits.RC4 lenne, persze ez attól lehet helyes, mert RC4 csak ott van ... ! ) !
(#) don_peter válasza kissi hozzászólására (») Szept 3, 2018 /
 
Jaja ez sajna nem C18, a regiszterek beállítása kicsit másabb.
RC4 most jelenleg azt jelenti, hogy LATCbits.LATC4.
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 /
 
Itt nincs árnyékregiszter ( LAT ), tehát inkább azt, amit írtam !

szerk.: egyelőre kifogytam az ötletekből ( a kijelzőnek nem szabadna befolyásolni, ha egyébként működött és nem érinti ezt a lábat a beállítása!) !
A hozzászólás módosítva: Szept 3, 2018
(#) don_peter válasza kissi hozzászólására (») Szept 3, 2018 /
 
Nem érinti és még is.. Most levettem kijelzőt és úgy fest nem resetel, legalább is remélem, mert most nem látom a megfelelő értékeket. Áhh ez így nem lesz egyszerű..

Lehetséges magyarázat:
LCD nem tud olyan gyorsan frissíteni, ahogyan annak kellene, ezért a megszakítások torlódhatnak egyes esetekben olyan az ütközés, hogy resetelik hardvert.
Vélemény?

ui: úgy teszteltem, hogy egy számomra is látható és szabályos villogtatást állítottam be megszakításba.. Ha kijelző ment akkor látható volt, hogy szabálytalan a villogás, de ha nincs inicializálva az LCD akkor szabályos a villogás.
A hozzászólás módosítva: Szept 3, 2018
(#) don_peter hozzászólása Szept 3, 2018 /
 
Még sem a kijelző a probléma.
A programban van valami.
While ciklusban ha kiíratás előtt bármilyen olyan műveletet akarok csinálni ami az int típust char-re változtatja azonnal resetel.
Szerintem az lehet a baja, hogy nincs elég ideje elvégezi a műveletet a megszakítások miatt, így téveszt, vagy túlcsordúl.
Pl. ennél már ki is akad.
  1. Lcd4_Set_Cursor(1,0);
  2.                 itoa(i++, tomb, 10);
  3.                 Lcd4_Write_String(tomb);

Ha csak egyszerű kiírás van benne, vagy is nincs benne az itoa, akkor nincs semmi baja.
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 /
 
A kiakad számomra azt jelenti, hogy pl. a kijelző lefagy, de ez nem RESET !
Most akkor mi van ?!
(#) don_peter válasza kissi hozzászólására (») Szept 3, 2018 /
 
Rosszul fogalmaztam. Resetel továbbra is a fentebb leírtak szerint.
A resetet úgy azonosítom be, hogy a program indulásánál egy adott szöveget ír ki, majd a cikluson belül már csak számolnia kellene, a számolás nem megy, azonban a kezdőszöveg szemmel láthatólag újra és újra betölt.
(#) benjami válasza don_peter hozzászólására (») Szept 3, 2018 /
 
Számomra az lcd_bcd_digit nem tiszta:
- miért extern?
- miért long típusú az első paramétere, ha a hívó oldalon int típussal van meghívva?
- a decimal tömb miért long, ha utána a tömb elemei karakterként vannak használva?
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 /
 
Küldd már át a hex-et ( az LCD-t vedd ki belőle, mert szimulálni akarom...!)!
(#) don_peter válasza kissi hozzászólására (») Szept 3, 2018 /
 
Parancsolj, LCD nincs benne.
Tehát 16F684, 1MHz belső, 1KHz PWM, Analóg beállítva vételre, LED RC4, villogása 500KHz-enként. Kitöltés 25%
A hozzászólás módosítva: Szept 3, 2018

teszt.hex
    
(#) don_peter válasza benjami hozzászólására (») Szept 3, 2018 /
 
Az most nem érdekes, nem én írtam én csak gyorsan használni akartam valamit, de mivel nem kell és nem is érdekel az LCD driver, nem is igen néztem át, csak annyira, hogy működjön.
Tehát nettről kotort anyag.
A hozzászólás módosítva: Szept 3, 2018
(#) kissi válasza don_peter hozzászólására (») Szept 3, 2018 /
 
A szimuláció szerint jól működik, periodikusan bemegy a megszakításba, valahol máshol van a hiba...!
(#) don_peter válasza don_peter hozzászólására (») Szept 3, 2018 /
 
Villogás csak INT, külső megszakításba bevezetett PWM esetén fog működni.
Ez lemaradt az előzőből.
Következő: »»   1043 / 1210
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