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   56 / 1210
(#) cNobody válasza Seclusion hozzászólására (») Márc 9, 2010 /
 
én a lomex -re tippelek
(#) potyo válasza Hp41C hozzászólására (») Márc 10, 2010 /
 
Persze, a 40MHz valóban nem állítható elő a belső oszcillátorral. De a 40MHz-es kvarc meg kívül esik a kvarcmeghajtó specifikációján, tehát külső oszcillátor kell neki, az meg nem túl olcsó. Hacsak valami nagyon extrém okból nem ragaszkodik a 40MHz-hez, akkor én inkább 32 vagy 48MHz-en járatnám egy sima 4MHz-es kvarccal.

Hogy soros vagy párhuzamos, az jó kérdés. De eddig még amit adtak a boltban, mindig jó volt a frekvencia. Most így fejből nem tudom, de gondolom az a jóval elterjedtebb, amire a PIC kvarcmeghajtója tervezve van.
(#) zenetom válasza icserny hozzászólására (») Márc 10, 2010 /
 
Kicsit sikerült átírni, Proteusban hibátlanul működik (a futófényes program), kicsit leegyszerűsítettem hogy csak a PortB 0. bitjén villogjon a LED.
(#) icserny válasza zenetom hozzászólására (») Márc 10, 2010 /
 
I/O portok írásánál a LATB regisztert használd a PORTB helyett! Az indoklás ezen az oldalon is megtalálható.
(#) Seclusion válasza potyo hozzászólására (») Márc 10, 2010 /
 
Annyira hű, de nagyon nem ragaszkodom a 40 Mhz-hez, a 48 is megfelel. A lényeg, hogy 40 Mhz körüli legyen a sebesség.
(#) Seclusion válasza cNobody hozzászólására (») Márc 10, 2010 /
 
Igen, ez volt az. Köszi!
(#) icserny válasza Seclusion hozzászólására (») Márc 10, 2010 /
 
Idézet:
„Annyira hű, de nagyon nem ragaszkodom a 40 Mhz-hez, a 48 is megfelel.”

Az oszcillátor frekvenciája, a CPU órajelének frekvenciája és a USB SIE (soros illesztőegység) órajele az három, különböző dolog.

Az oszcillátor frekvenciája 4 MHz egész számú többszöröse kell, hogy legyen, amit belül az előosztóval 4 MHz-re kell leosztani. Ebből csinál a PLL frekvenciatöbbszöröző 96 MHz-et, s ennek fele lesz az a 48 MHz-es jel, ami USB 2.0 használata esetén a SIE számára kötelező (tekintsünk most el attól a (per)verziótól, hogy külső oszcillátor adja a 48 MHz-es jelet!).

A CPU órajele lehet ettől független is, de különleges igényektől eltekintve (pl. kis fogyasztás, gyors elindulás) sok értelme nincs, tehát legegyszerűbb, ha a CPU is a 96 MHz-es PLL kettővelleosztott jelét kapja. Ekkor Fosc = 48 MHz, az utasítésfrekvencia pedig ennek negyede, azaz Fcy = 12 MHz, vagy másképpen: másodpercenként 12 millió utasításciklus.

A legáltalánosabban használt 20 MHz-es kvarccal az órajelkonfigurációja így néz ki:

  1. #pragma config PLLDIV = 5     //Divide by 5 (20 MHz oscillator input)
  2.   #pragma config CPUDIV = OSC1_PLL2   //CPU clock =96 MHz PLL/2
  3.   #pragma config USBDIV = 2  //USB clock: 96 MHz PLL/2
  4.   #pragma config FOSC = HSPLL_HS  //HS oscillator, PLL enabled, HS used by USB


4 MHz-es kvarc esetén PLLDIV = 1 és FOSC = XTPLL_XT kell.

Csak érdekességképpen: elvileg 40 MHz-es kvarchoz is be lehet konfigurálni a PIC18Fx550 mikrovezérlőket, de nincs rá gyártói garancia, hogy ezen a frekvencián még üzembiztosan működik az oszcillátor. Bővebben: Link
(#) zenetom válasza icserny hozzászólására (») Márc 10, 2010 /
 
Tehát e helyett a rész helyett:
Idézet:

MOVLW B'00000001' ;Betöltjük a W-be (akkumulátorba) a kirandó adatot
MOVWF PORTB ;Akkumulátorból kiírjuk a PORTB-re
CALL DELAY ;Várunk
MOVLW B'00000000' ;Újra betöltjük a W-be az új adatot
MOVWF PORTB ;stbstb.
CALL DELAY”


ez megfelelőbb:

BSF LATB, 7
CALL DELAY
CLRF LATB
CALL DELAY

Illetve a CLRF utasítással közvetlenül lehet I/O port (itt LATB) regiszeterét is törölni?
(#) icserny válasza zenetom hozzászólására (») Márc 10, 2010 /
 
A CLRF minden regiszterre egyformán használható, így a LATB-re is.

Bitmanipuláció: BSF LATB,7 nem RB0-át fogja 1-be állítani, hanem RB7-et, így az általad megadott kódot BSF LATB,0 helyettesíti. A bit törlésére a BCF utasítás is használható.

De mégegyszerűbb így:
  1. CIKLUS:  
  2.      BTG LATB,0
  3.      CALL DELAY
  4.      GOTO CIKLUS
(#) zenetom válasza icserny hozzászólására (») Márc 10, 2010 /
 
Igen, a "LATB, 7"-et elnéztem...
A BTG utasítás mit csinál?
(#) Seclusion válasza icserny hozzászólására (») Márc 10, 2010 /
 
Így már tiszta... Köszi a részletes leírást!
(#) icserny válasza zenetom hozzászólására (») Márc 10, 2010 /
 
Idézet:
„A BTG utasítás mit csinál?”

Ezt szépen leírja az adatlap, a PIC 18C MCU Family Reference Manual (DS39500) és nem utolsósorban én is leírtam már a PICCOLO projekt idevágó fejezetében. Ne légy lusta olvasni!
(#) Hp41C válasza dinokal hozzászólására (») Márc 10, 2010 /
 
Szia!

DDS jelgenerátor egy 18F242/18F252-n alapul (évekkel ezelőtt terveztem, akkor még nem volt dsPIC) 1/16Hz - 500kHz -ig 1/16Hz lépéssel, USB illesztéssel. Mivel a jel generálása és az USB külön - külön is leviszi egy kontroller kapacitását, valamint a galvanikus leválasztás miatt, két kontroller van benne - az USB-t egy 18F2550 kezeli. Közöttük egy 100Kbit/s optocsatolt soros vonal van. HID eszközként kezelhető. 18F242-vel 55, 18F252-vel 119 féle jelalak, köztük letölthető is.

Szia.

DDS.jpg
    
(#) zenetom válasza icserny hozzászólására (») Márc 10, 2010 /
 
Köszi :hide:
(#) zenetom válasza zenetom hozzászólására (») Márc 10, 2010 /
 
A NOP parancs is négy órajel periódusig tart? Tehát egy 4MHz-es kristállyal 1x10-6másodperc?
(#) t-dani válasza zenetom hozzászólására (») Márc 10, 2010 /
 
Igen.

4 órajel-ciklus, másképp írva 1 gépi ciklus.
(#) zenetom válasza t-dani hozzászólására (») Márc 10, 2010 /
 
Köszi.
(#) dinokal válasza Hp41C hozzászólására (») Márc 11, 2010 /
 
Szia!
Nagyon felcsigáztál! Valami ilyesmin gondolkodom én is, de egyenlőre tök kuka vagyok a pic programozásához. Még csak most kezdem. Bár a generátor részt analóg ic-vel gondoltam megcsinálni, és azt vezérelném egy 18F4550-nel. A tied sokkal jobb, főleg a letölthető jelalakok miatt.
Elkunyerálhatnám a kapcsolási rajzot és a programokat? Elsősorban a sweep megoldása izgat, egy a hangfrekvenciás sávot egyben átfogó frekvenciával.
(#) reagenross hozzászólása Márc 12, 2010 /
 
Sziasztok!

Sikerült hozzájutnom egy PIC16F877A-I/P jelű mikrokontrollerhez. De teljesen kezdő vagyok a témában...Tudnátok ehhez egy működő felprogramozó kapcsolást ajánlani?
(#) vicsys válasza reagenross hozzászólására (») Márc 12, 2010 /
 
Keress rá a pickit2-re. A szilva féle változat az egyik kedvencem.
(#) reagenross válasza vicsys hozzászólására (») Márc 12, 2010 /
 
Néztem de a PICkit 2 nél csak 14 lábat számoltam oldalanként, az én PIC emnek viszont 20 lába van oldalanként.
(#) potyo válasza reagenross hozzászólására (») Márc 12, 2010 /
 
Tehát csak néztél, de utánaolvasni semminek sem próbáltál magadtól, hanem várod a sült galambot...
(#) Hp41C válasza dinokal hozzászólására (») Márc 12, 2010 /
 
Szia!

- Annyira nem szép a helyzet, amint ahogy látszik... A parancsok vétele illetve a beállítások módosítása (a frekvencia léptetése) alatt a jelgenerálás szünetel, így a sweep csak kicsi sebességgel megy... (Nagy prioritású timer IT növeli a növekményt...)
- A kapcsolási rajz sajnos nincs meg elektronikusan... A megadott oldalon levőt dolgoztam át pic18F242/252-re. Az erősítés szabályzó 4 bites D/A helyett PWM kimenetet használtam fel. A kapcsolást kiegészítettem (a második PWM kimenettel) állítható DC offszet lehetőséggel. A soros illesztés (2 db tranzisztor) helyett az optocsatolt USB került...

Szia

DDSGEN.jpg
    
(#) vicsys válasza reagenross hozzászólására (») Márc 12, 2010 /
 
Amiből csak 5db-ot fogsz bekötni a programozáskor. A maradék 35 lábat majd másra fogod használni...
Szilva féle pickit2 klón
Ezt pedig olvasd végig (mind a 3 részt!)
Bővebben: Link
(#) reagenross válasza vicsys hozzászólására (») Márc 12, 2010 /
 
Köszi
(#) dinokal válasza Hp41C hozzászólására (») Márc 13, 2010 /
 
Szia!
Amint sikerül a konyharegenerálás, megpróbálok nekiugrani, de 18F4550-re gondoltam megoldani. Ha el tudnád küldeni a programjait, nagyon szépen megköszönném, mert a programozáshoz még kezdő vagyok, és lenne miből kiindulni. A sweepnek amúgy is alacsony sebességen kéne mennie erősítő mérésénél, mert különben plusz torzításokat hozhat magával. Az USB kapcsolat megoldása amúgy is nagyon fontos lenne számomra, mert tervbe van véve egy digitális tároló megoldás analóg szkóphoz. Van neki az egyes csatornától egy egyvoltos kimenete, amiről a jelet rögzítené, és a kettesen lehetne visszanézni. Ha pc-re is át tudnám vinni a jelalakot az maga a pompa. Köszönöm a képet!
(#) Amjad hozzászólása Márc 13, 2010 /
 
Helo
Meg tudná mondani valaki, hogy ez miért a második karakter pozícióba írja ki az 'S't az első helyett?
RB1-E , RB3 -RS , Data -RD



LATD=0b00001100;
Nop(); Nop(); Nop(); Nop();Nop(); Nop(); Nop(); Nop();Nop(); Nop();Nop(); Nop();Nop(); Nop();
LATB=0b00000010;
Nop(); Nop(); Nop(); Nop();Nop(); Nop(); Nop(); Nop();Nop(); Nop();Nop(); Nop();Nop(); Nop();
LATB=0b00000000;
Nop(); Nop(); Nop(); Nop();Nop(); Nop(); Nop(); Nop();Nop(); Nop();Nop(); Nop();Nop(); Nop();


LATD=0b01010011;
Nop(); Nop();Nop(); Nop(); Nop(); Nop();Nop(); Nop(); Nop(); Nop();Nop(); Nop();Nop(); Nop();
LATB=0b00001010;
Nop(); Nop();Nop(); Nop(); Nop(); Nop();Nop(); Nop(); Nop(); Nop();Nop(); Nop();Nop(); Nop();
LATB=0b00001000;
Nop(); Nop();Nop(); Nop(); Nop(); Nop();Nop(); Nop(); Nop(); Nop();Nop(); Nop();Nop(); Nop();
(#) Amjad hozzászólása Márc 15, 2010 /
 
Helo
Előre is elnézést, hogy még mindig ezzel az LCDvel zavarkodok. Xlcd-vel szeretnék írni a kijelzőre. A portokat sikerült átírnom az általam használtra, de a kiküldött karaktersornak csak az első karaktere látszik folyamatosan, a többi csak bevillan itt-ott. Meg tudná mondani valaki, hogy hol keressem a hibát?

#include "p18cxxx.h"
#include "delays.h"
#include "xlcd.h"

#pragma config LVP = OFF
#pragma config WDT = OFF
#pragma config XINST = OFF
#pragma config OSC = XT

void DelayFor18TCY( void )
{
Nop(); Nop(); Nop(); Nop();
Nop(); Nop(); Nop(); Nop();
Nop(); Nop(); Nop(); Nop();
Nop(); Nop();
}
void DelayPORXLCD( void )
{
Delay1KTCYx(15); //Delay of 15ms
return;
}
void DelayXLCD( void )
{
Delay1KTCYx(5); //Delay of 5ms
return;
}
void main( void )
{

ADCON1 = 0x0F;

OpenXLCD( FOUR_BIT & LINES_5X7 );


putrsXLCD("abcdefgh");
}
(#) vilmosd válasza Amjad hozzászólására (») Márc 15, 2010 /
 
Hali
Probalj meg varni a kuldesek kozott 200-500 mS-t.
Udv Vili
(#) icserny válasza Amjad hozzászólására (») Márc 15, 2010 /
 
A főprogramba kellene egy végtelen ciklus!
Következő: »»   56 / 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