|
- 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.
Sziasztok . Nagyon kezdő vagyok ,de szeretnék venni programozot és elkezdeni probálkozni. Tudtok ajánlani programokat és megtudjáok mondani milyen nyelven érdemes kezdeni ?
A nyelv kérdése örök vitatéma. Sokan az assembly-re esküsznek (én is ) vannak akik a C-re vagy valamelyik hasonlóra. Biztos kicsit részrehajló vagyok, de szerintem az elmúlt időkben több példát is láttam/láttunk, ami C-ben és társaiban majdnem megoldhatatlan, legalábbis ugyanazon a PIC-en biztosan. A 12F/16F/18F szériás PIC-ek adatlapjaiban az utasításkészlet és a mintapéldák is assembly nyelven vannak. A hozzászólás módosítva: Nov 29, 2015
Köszönöm. Assembly hez program iró szoftver esetleg?
Köszönöm. Elvileg akkor ezzel a progival Assembly ben megírom a programot es azt fel tudom egyből írni PIC re vagy még át kell kosolnpm egy másikkal?
En meg FAR commander editoraval ( F4). Az is jo kis perverzio, de azt szoktam meg. A feher alap nem jon be
Szia! Köszönöm a segítséget, végül sikerült működésre bírni a DAC-ot. A mikroC saját SPI függvényeivel. Nem tudom miért, de a fordító is produkált furcsaságokat, a projektbe amivel több napja szórakoztam nem lehetett már új változót deklarálni. Egy új projekt nyitása megoldotta a problémát.
Először így sem ment, aztán mégis megjavult valahogyan...
Chip_Select = 1; // Deselect DAC
Chip_Select_Direction = 0; // Set CS# pin as Output
SPI1_Init();
Chip_Select = 0; // Select DAC chip
value=0b00011011;
SPI1_Write(value); // Send high byte via SPI
value=0;
SPI1_Write(value); // Send low byte via SPI
Chip_Select = 1; //!CS off
LATA4_bit=0; //!LDAC adatbetöltés
delay_ms(1);
LATA4_bit=1;
Üdv.
Mi a memória bank fogalma és mi az utasítás végrehajtás lépései ?
Örülök, hogy megoldódott. Ezek a jelalakok már sokkal szimpatikusabbak!
Sziasztok!
A PIC analóg bemenete megharagszik, ha nem 10k poti megy rá hanem 4.7k poti?
A bemenetnek teljesen mindegy.
Sziasztok. Ujra kérdezek. esetleg nem létezik valami pic emulátor program amivel elkezdhetnék bibelödni mig nem jön meg a programozom? Pickit2 az nekem elég ugye?
Vagy van az MPLAB belső szimulátora, de ez csak változó szinten működik, ha látványosabb kell akkor vagy a proteus isis vagy a tina, de mind kettő fizetős, ha jól emlékszem.
Pl a Proteus mennyire pontos ? Ha ott valamit megcsinálok akkor az élőben is ugyan ugy müködik?
Gondolom most kezded az ipart.
Idézet: „Pickit2 az nekem elég ugye?”
Én amire használtam hibátlan volt kezdésnél nem hiszem, hogy "hazudni" fog, de nekem az "összetettebb" dolgokkal se volt vele problémám(LCD, I2C, SPI, hőmérő stb..).
Igen most szeretném, nagyon érdekel a pic ,de bevallom fingom nincs hogy hogy kezdjem
Olvasd el az itteni pic-es cikkeket. Led villogó, gombok, karakteres lcd kb ez legyen a sorrend.
Proteus nagyon jó.
Nekem 99%-ban minden működött élesben is amit a szimulátorban megírok
Sziasztok!
Azt szeretném megkérdezni, hogy tudna e nekem valaki segíteni, a tized és a 100-ad másodperceket Timer1-el vhogy létrehozni, mert a real time clockban, csak a másodpercig vannak benne a dolgok.
A dátum és az idő rendesen működik. csak kellene nekem még százodmásodpercig az óra. Itt a kódom:
#include "p32mx440f512h.h" //A processzor h file-ja a proc mappából
#include "plib.h" //A periferiak h file-jai
#include "stdio.h"
#include "ctype.h"
#include "string.h"
#include "math.h"
#include "GenericTypeDefs.h"
#include "HardwareProfile.h"
#include "delays.h"
#include "Compiler.h"
#include "rtcc.h"
//PIC alap beállításai FRC
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1 //80Mhz-es orajel beallitasa
#pragma config POSCMOD = HS, FNOSC = PRIPLL , FPBDIV = DIV_1 //Bels? kivalasztasa 8Mhz
#pragma config DEBUG = OFF //Debug kikapcs
#pragma config ICESEL = ICS_PGx2 //PGC1 es PGD1
#pragma config PWP = PWP512K //Program Flash Write Protect teljes 512k írás védett
#pragma config OSCIOFNC = OFF //CLKO enable kikapcs, a kristaly laba (ha on a bels? órát kirakja az OSC2/CLK0/RC15 lábra)
#pragma config IESO = OFF //Two-speed start-up disabled
#pragma config FSOSCEN = OFF //Secondary oscillator kikapcsol (RTCC hez)
#pragma config CP = OFF //Code-protect kikapcsol
#pragma config BWP = ON //Boot flash write protect bekapcsol
#pragma config UPLLEN = ON //USB PLL Enable
#pragma config UPLLIDIV = DIV_2 //USB PLL Div by
#pragma config FCKSM = CSECMD //Clock Switching & Fail Safe Clock Monitor
#pragma config FWDTEN = OFF , WDTPS = PS131072
#define SYS_FREQ (80000000L)
#define SLAVE_ADDRESS 0x3F //0X3E is lehet
#define led _LATE5
unsigned char felsosor[16];
unsigned char alsosor[16];
unsigned char kozep[16];
unsigned char data1[16];
unsigned char data2[16];
unsigned char data3[16];
int a=0;
unsigned long fogadottadat=0;
unsigned long fogadottadat2=0;
float Temperature=0;
int solanngattimer1;
/*
{
RtccInit();
RtccEnable();
while (RtccGetClkStat()!=RTTC_CLK_ON);
RtccSetCalibration(0);//them xung clock cho moi phut
}
*/
int PIC32RTC_ConvertBCD (unsigned long int n )
{
//ham nay se doi so decimal ve so BCD, su dung trong ham set ngay gio
int n1,sohangchuc, sohangdonvi;
sohangchuc=n/10;//chia lay nguyen de lay so hang chuc
sohangdonvi=n%10;//chia lay du de lay so hang don vi
n1=sohangchuc<<4;//dua len vi tri 4 bit cao
n1=n1|sohangdonvi;//ghep thanh so BCD
return n1;
}
void PIC32RTC_SetTime (unsigned char hour, unsigned char min, unsigned char second )
{
unsigned long int n1,n2;
hour= PIC32RTC_ConvertBCD (hour );
min= PIC32RTC_ConvertBCD (min );
second= PIC32RTC_ConvertBCD (second );
n1=hour<<24;
n2=min<<16;
n1=n1|n2;
n2=second<<8;
n1=n1|n2;
RtccSetTime(n1);
}
int PIC32RTC_ConvertDec (unsigned long int n )
{
//doi tu ma BCD sang decimal, su dung trong cac ham get ngay gio
int n1;
unsigned char n_cao,n_thap;
n_cao=(n>>4)&0x0f;
n_thap=n&0x0f;
n1=n_cao*10+n_thap;
return n1;
}
unsigned char PIC32RTC_GetHour ()
{
unsigned long int n1;
n1=RtccGetTime();
n1=n1&0xff000000;//chi lay gio
n1=n1>>24;
return PIC32RTC_ConvertDec (n1 );
}
unsigned char PIC32RTC_GetMin ()
{
unsigned long int n1;
n1=RtccGetTime();
n1=n1&0x00ff0000;//chi lay phut
n1=n1>>16;
return PIC32RTC_ConvertDec (n1 );
}
unsigned char PIC32RTC_GetSec ()
{
unsigned long int n1;
n1=RtccGetTime();
n1=n1&0x0000ff00;//chi lay giay
n1=n1>>8;
return PIC32RTC_ConvertDec (n1 );
}
void PIC32RTC_SetDate (unsigned char year, unsigned char month, unsigned char date, unsigned char week_date )
{
unsigned long int n1,n2;
year= PIC32RTC_ConvertBCD (year );
month= PIC32RTC_ConvertBCD (month );
date= PIC32RTC_ConvertBCD (date );
week_date= PIC32RTC_ConvertBCD (week_date );
n1=year<<24;
n2=month<<16;
n1=n1|n2;
n2=date<<8;
n1=n1|n2;
n2=week_date;
n1=n1|n2;
RtccSetDate(n1);
}
unsigned char PIC32RTC_GetYear ()
{
unsigned long int n1;
n1=RtccGetDate();
n1=n1&0xff000000;
n1=n1>>24;
return PIC32RTC_ConvertDec (n1 );
}
unsigned char PIC32RTC_GetMonth ()
{
unsigned long int n1;
n1=RtccGetDate();
n1=n1&0x00ff0000;
n1=n1>>16;
return PIC32RTC_ConvertDec (n1 );
}
unsigned char PIC32RTC_GetDate ()
{
unsigned long int n1;
n1=RtccGetDate();
n1=n1&0x0000ff00;
n1=n1>>8;
return PIC32RTC_ConvertDec (n1 );
}
unsigned char PIC32RTC_GetWeekDate ()
{
unsigned long int n1;
n1=RtccGetDate();
n1=n1&0x000000ff;
return PIC32RTC_ConvertDec (n1 );
}
void OSC_config (void)
{
OSCTUNbits.TUN=0x1f;//tan so max
SYSKEY = 0x12345678; //write invalid key to force lock
SYSKEY = 0xAA996655; //write key1 to SYSKEY
SYSKEY = 0x556699AA; //write key2 to SYSKEY
OSCCONbits.COSC=1; //FRC PLL
OSCCONbits.NOSC=1; //FRC PLL
OSCCONbits.FRCDIV=0;
OSCCONbits.UFRCEN=1;//cho phep FRC USB Clock
SYSKEY = 0x12345678; //write invalid key to force lock
}
void TimerSetup(void)
{
OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_256,0xffff);
ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_2);
INTEnableSystemMultiVectoredInt();
}
void init()
{
//LCD INIT
setupLCD();
//LED1 TRIS (lásd HardwareProfile.h)
mPORTESetPinsDigitalOut(BIT_5);
LED_OFF(LED1);
mPORTESetPinsDigitalOut(BIT_6);
mPORTESetPinsDigitalOut(BIT_7);
//Gomb
mPORTESetPinsDigitalIn(BIT_2);
mPORTESetPinsDigitalIn(BIT_3);
mPORTESetPinsDigitalIn(BIT_4);
//I2C
mPORTDSetPinsDigitalOut(BIT_9 | BIT_10);
mPORTDClearBits(BIT_9 | BIT_10);
I2CConfigure(I2C1, I2C_ENABLE_SLAVE_CLOCK_STRETCHING|I2C_ENABLE_HIGH_SPEED); //I2C4 felkonfigural 400kHz-es orajellel
I2CSetFrequency(I2C1, 80000000, 10000);
I2CEnable(I2C1, TRUE);
//Timer a riasztashoz (Led villogtatas)
// OpenTimer1( T1_ON | T1_IDLE_CON | T1_SOURCE_INT | T1_PS_1_256, 0xFFFF ); //Timer1 256-os eloosztoval, 65535-os inditoertekkel 0.2 masodpercenként lep
// ConfigIntTimer1( T1_INT_ON | T1_INT_PRIOR_3 | T1_INT_SUB_PRIOR_0 ); //3-as prioritassal, 0-s subprioritassal
}
void __attribute__ ((interrupt(ipl4))) __attribute__ ((vector(4))) Timer1_Event (void)
{
mT1ClearIntFlag();
solanngattimer1++;
if(solanngattimer1==5)
{
solanngattimer1=0;
led=~led;
}
}
void main()
{
// SYSTEMConfigPerformance(72000000L);
// SYSTEMConfig(SYS_FREQ, SYS_CFG_ALL); //Inicializalas
init();
SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
// init the RTCC
// could wait here at most 32ms
unsigned char n=0;
PIC32RTC_SetTime (0, 0, 0); //Set time
// PIC32RTC_SetTime(0,0,0); //set time
PIC32RTC_SetDate (0xF, 0xC, 0x1, 0x3); //set date
while(1)
{
while(1)
{
if((!mPORTEReadBits(BIT_2)))
{
RtccInit();
while(RtccGetClkStat()!=RTCC_CLK_ON); // wait for the SOSC to be actually running and RTCC to have its clock source
}
LCDClear();
sprintf (felsosor, "%3.2d", PIC32RTC_GetHour ());
LCDWriteString(felsosor,2,1);
sprintf (kozep, ":%3.2d", PIC32RTC_GetMin ());
LCDWriteString(kozep,2,3);
sprintf (alsosor, ":%3.2d", PIC32RTC_GetSec ());
LCDWriteString(alsosor,2,6);
sprintf (data1, "%3.2d", PIC32RTC_GetYear ());
LCDWriteString(data1,1,1);
sprintf (data2, ":%3.2d", PIC32RTC_GetMonth () );
LCDWriteString(data2,1,3);
sprintf (data3, ":%3.2d", PIC32RTC_GetDate ());
LCDWriteString(data3,1,6);
DelayMS(10);
if((!mPORTEReadBits(BIT_3)))
{
RtccShutdown ();
}
}
}
}
Sziasztok!
Az előző kód itt található a fájlban.
Nem tudom, hogy a 32 bites processzorokban, hogy van az órajel ütemezés (hány órajel egy utasítás). De a timer1-nek van egy PR1 periódus regisztere ha ebbe a megfelelő számot írod akkor minden megszakításánál meg kapod a század másodperceket és ha megszámolsz egy másik változóban 10 ilyen megszakítást akkor kapsz tizedmásodpercet.
Sziasztok!
Olvasgatva az oldal cikkei közt megakadt a szemem ezen . Tudnék viszonylag olcsón szerezni nixie csövet, viszont a pic-kel bajban vagyok. Milyen áramkör, és milyen programok kellenek, hogy egy pic16f628a-ba beégessem a programot? Még sose csináltam ilyesmit, van esetleg valami leírás?
Köszönöm! A hozzászólás módosítva: Dec 6, 2015
Szia!
Ha csak a nixie csöves óra pic-éhez kellene a programozó, és van a gépeden LPT port, akkor szerintem ez a legalkalmasabb: Bővebben: Link A hozzászólás módosítva: Dec 6, 2015
Ha továbbiakban nem akarsz PIC-ezni akkor felesleges ilyennel foglalkozni, ha meg akarsz PIC-ezni akkor vagy egy PK2 klónt kell építeni vagy venni PK2-öt vagy PK3-at. Vagy ha nem akarsz PIC -ezni csak ez az óra érdekel, küldök neked egy felprogramozott PIC -et hozzá.
Ha küldenél egy felprogramozottat, azt megköszönném, egyenlőre még nem szeretnék ezen kívül foglalkozni a PIC-kel
Sziasztok. A PIC18F sorozatnál mit jelent a "J", vagy "K", vagy nincs ilyen betűjel? Pld.: Pic18F23K20.
Köszönöm.
Hasonlítsd össze az adatlapokat! A legfőbb eltérést a megengedett maximális tápfeszültségnél találod meg.
Kezdetben volt a hagyományos PIC18 család.
A PIC18 J család 3 V-os tápfeszültségre, nagyobb kiépítésre (több periféria) készült.
A PIC18 K családban vannak 3 V-on és 5 V-on egyaránt maximális frekvencián használható típusok (pl. PIC18F14K50) és vannak 64 MHz-es típusok is.
|
|