Fórum témák
- • Sárga Kazettás Piaci Nintendo (8bit)
- • Ultrahangos párásító
- • Audiofil, High End Audio
- • Házilag építhető fémkereső
- • Elektronikai témájú könyvek újságok
- • Akkumulátoros fúró
- • Műhelyünk felszerelése, szerszámai
- • Analóg oszcilloszkóp javítása
- • Vásárlás, hol kapható?
- • Retro számítógépek
- • Tranzisztor teszter
- • Erősítő mindig és mindig
- • Inverteres hegesztőtrafó
- • Tranzisztorok helyettesítése
- • BEKO Mosó/Szárító gép
- • Arduino
- • Vezeték nélküli hangátvitel
- • Muzeális készülékek-alkatrészek restaurálása
- • Mobiltelefon hiba
- • Elektromos kerékpár akkumulátorának helyettesítése
- • Li-Ion saját akkucsomag készítése
- • FOK-GYEM TR9178 tápegység
- • Háromfázisú aggregátor
- • Autós erősítős kérdések, problémák
- • Távirányító javítás
- • Biciklilámpa / bringalámpa
- • Eredményjelző
- • RC távirányítás modellekhez
- • VF3 - 6 végerősítő
- • Lemezjátszó beállítása, javítása
- • LCD TV probléma
- • Sütő javítás
- • Padlófűtés vezérlés
- • Számítógépes áramkörszimuláló programok
- • Videoton EA-7386-s erösítő
- • Mosogatógép hiba
- • Kombikazán működési hiba
- • Felajánlás, azaz ingyen elvihető
- • Suzuki Swift elektronika
- • Páraérzékelő szenzor
- • VIDEOTON RT (RA) 6380S
- • Számítógép hiba, de mi a probléma?
- • Nextion érintőképernyős HMI, UART kommunikációval
- • Hangsugárzó építés, javítás - miértek, hogyanok
- • Alternativ HE találkozó(k)
- • GPS GSM modulok programozása
- • Digitális kapcsoló
- • Porszívó javítás
- • Szintetizátor javítás
- • Orsós magnók
- • Dobozolási technikák, műszerdobozok
- • USB bekötése
- • Elfogadnám, ha ingyen elvihető
- • Időzítő
- • Kemencevezérlés
» Több friss téma
|
- 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.
Gyakorlatilag egy stabilizátort csinálsz mint ez a vs-re megy az ellenőrizendő feszültséh, a Vz pedig a pic bemenetére.
Azért kell a zener, hogy ne tudjon a pic bemenetén nagyobb feszültség kialakulni, megfogja a zener feszültségénél. (Bár elméletileg a láb védő diódái megfogják, de azért erre nem illik rábízni.)
Hali.
Valaki tudna ajánlani valami jó könyvet (magyarul) a mikrokontrollerekről és azok programozásáról? Nyilván tudom, hogy nem fogok tudni programozni egy könyv elolvasása után és nyilván rengeteg nyelven lehet programozni, csak egyfajta rálátást szeretnék kapni, mert hiába olvasok össze-vissza mindenféle pdf-et nem tudom hol fogjam meg az elejét.
hmmmm....na akkor utána nézek jobban majd mert nekem csak annyit mondtak hogy a programot írjam át mert a dc-ewa11 kijelzőhöz nem jó.....majd írom a fejleményeket ...addig is köszönöm az infot0
Kicsit sokat fogyaszt ez a kapcsolás. 1-2 mA lenne jó, max.
Szia!
Képzeld működik a kijelző! Köszönöm a segítséget!!! csak egy kicsi szépség hiba van és nem tudom , hogy mi a baj. Köszönöm az eddigi segítségedet! A programban kommentként írtam hogyha kivesem azt a sort, akkor az LCD hülyeséget ír ki, ha benen hagyom, akkor pedig nagyábból láthatatan módon frissül, de kiírja amit akarok. Mi lehet a baj?
/*
LCD.c
Write to an HD44780 LCD in 4bit mode with no reading back data
*/
#include "Compiler.h"
#include "HardwareProfile.h"
#include <plib.h>
// Define constants for PINS
#define DB0 LATFbits.LATF0
#define DB1 LATDbits.LATD7
#define DB2 LATDbits.LATD6
#define DB3 LATDbits.LATD5
#define DB4 LATDbits.LATD4
#define DB5 LATDbits.LATD3
#define DB6 LATDbits.LATD2
#define DB7 LATDbits.LATD1
#define RS LATFbits.LATF1
//#define LCD_RW LATDbits.LATD9
#define EN LATEbits.LATE0
void setupLCD()
{
//Register pins
TRISFbits.TRISF1 = 0;
//TRISGbits.TRISG13 = 0;
TRISEbits.TRISE0 = 0;
//Data pins
TRISFbits.TRISF0 = 0;
TRISDbits.TRISD1 = 0;
TRISDbits.TRISD2 = 0;
TRISDbits.TRISD3 = 0;
TRISDbits.TRISD4 = 0;
TRISDbits.TRISD5 = 0;
TRISDbits.TRISD6 = 0;
TRISDbits.TRISD7 = 0;
//WAIT 20ns
Delayms(20);
EN = 0;
putsLCD(" "); // ENNÉL A RÉSZNÉL HA EZT KIVESZEM AKKOR HÜLYESÉGET ÍR ki a kijelző, ha benne hagyom akkor kicsi gondolkodás után kiirja amit akarok.
Delayms(20);
}
short const LCD_INIT_STRING[4] =
{
0x20| (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
0xc, // Display on
1, // Clear display
6 // Increment cursor
};
//----------------------------
void lcd_init(void)
{
short i;
//Set D0-4,D9-10 as a digital output, change if you change the pins
LATD |= 0x061F; TRISD &= 0xF9E0;
// works fine off 3.3V, in fact the following line kills the timing
//mPORTDOpenDrainOpen(BIT_0 | BIT_1 | BIT_2 | BIT_3 | BIT_4 | BIT_9 | BIT_10);
Delayms(30);
RS = LOW; // Register Select Command Register
//#ifdef USE_LCD_RW
//LCD_RW = LOW;
//#endif
EN = LOW; // Disable
Delayms(15);
for(i=0; i < 3; i++)
{
lcd_send_nibble(0x03);
Delayms(4);
}
lcd_send_nibble(0x02);
for(i=0; i < sizeof(LCD_INIT_STRING); i++)
{
lcd_send_byte(0, LCD_INIT_STRING[i]);
// If the R/W signal is not used, then
// the busy bit can't be polled. One of
// the init commands takes longer than
// the hard-coded delay of 60 us, so in
// that case, lets just do a 5 ms delay
// after all four of them.
//#ifndef USE_LCD_RW
Delayms(5);
//#endif
}
Delayms(5);
putsLCD("\f");
Delayms(5);
}
//-------------------------------------
void lcd_send_nibble(short nibble)
{
// Note: !! converts an integer expression
// to a boolean (1 or 0).
DB4 = !!(nibble & 1);
DB5 = !!(nibble & 2);
DB6 = !!(nibble & 4);
DB7 = !!(nibble & 8);
Delaytus(1);
EN = HIGH; // Enable
Delayus(2);
EN = LOW; // Disable
}
//----------------------------------------
// Send a byte to the LCD.
void lcd_send_byte(short address, short n)
{
RS = LOW;
// Need to investiage bit_test
//#ifdef USE_LCD_RW
//while(bit_test(lcd_read_byte(),7)) ;
//#else
Delayms(1);
//#endif
if(address)
RS = HIGH;
else
RS = LOW;
Delaytus(1);
//#ifdef USE_LCD_RW
//LCD_RW = LOW;
//Delaytus(1);
//#endif
EN = LOW;
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}
//-----------------------------
void putsLCD(char *s)
{
while( *s != '\0')
{
switch(*s)
{
case '\f': // Clear, go to First Line
{
lcd_send_byte(0,1);
Delayms(2);
break;
}
case '\n': // Next Line
{
lcd_gotoxy(1,2);
break;
}
case '\b':
{
lcd_send_byte(0,0x10);
break;
}
default:
{
lcd_send_byte(1,*s);
break;
}
}
s++;
Delayus(10);
}
}
//----------------------------
void lcd_gotoxy(short x, short y)
{
short address;
if(y != 1)
address = lcd_line_two;
else
address=0;
address += x-1;
lcd_send_byte(0, 0x80 | address);
}
//==========================
void Delayms( unsigned t)
// This uses Timer 1, can be changed to another timer. Assumes FPB = SYS_FREQ
{
OpenTimer1(T1_ON | T1_PS_1_256, 0xFFFF);
while (t--)
{ // t x 1ms loop
WriteTimer1(0);
while (ReadTimer1() < FPB/256/1000);
}
CloseTimer1();
} // Delayms
void Delayus( unsigned t)
{
OpenTimer1(T1_ON | T1_PS_1_256, 0xFFFF);
while (t--)
{ // t x 1ms loop
WriteTimer1(0);
while (ReadTimer1() < FPB/256/1000000);
}
CloseTimer1();
}// Delayus
void Delaytus( unsigned t)
{
OpenTimer1(T1_ON | T1_PS_1_256, 0xFFFF);
while (t--)
{ // t x 1ms loop
WriteTimer1(0);
while (ReadTimer1() < FPB/256/10000000);
}
CloseTimer1();
}// Delaytus
MAIN.c
int main()
{
//SYSTEMConfigPerformance(SYS_FREQ);
SYSTEMConfig(SYS_FREQ, SYS_CFG_ALL); //Inicializalas
setupLCD();
lcd_init();
init();
while(1)
{
LED_TOGGLE(LED1);
DelayMS(20);
DelayMS(20);
DelayMS(20);
putsLCD("\f");
putsLCD("Mukodik");
putsLCD("\n");
putsLCD("a kijelzo");
DelayMS(100);
}
}
A hozzászólás módosítva: Máj 21, 2014
(#) |
Baxi hozzászólása |
Máj 21, 2014 |
|
/ |
|
|
Hi Mesterek!
Olyan kérdésem lenne, hogy van nekem egy PT100-asom. Ezt hogy lehetne a pic A/D lábára kötni.
Keresgéltem de nem találtam semmit
Segítséget előre is köszönöm.
Üdv!
Pedig elég sok minden fellelhető róla. Csinálsz egy stabil 1mA-es áramgenerátort, ezt az 1mA-t áthajtod a PT100-on (ez lesz a mérő áram). A PT100-on eső feszültséget feletősíted, szűrüd, stb., majd a PIC A/D bemenetére vezeted.
Képlet a számításhoz:
R= R 0 + T X R 0 X 0,00385
ahol
R a hőérzékelő ellenálása
R 0 ugyan ez csak nulla °C-on ( PT100 esetén 100Ω)
T a kivánt hőmérséklet
Sziasztok!
Azt szeretném megkérdezni, hogy PIC32-nél az ADC-zést hogy állítim be a konfidurácionál.
CCS-nél: SETUP_ADC(ADC_CLOCK_INTERNAL);
SETUP_ADC_PORTS(AN0_TO_AN1|VSS_VDD);
C32-nél, mi a szintaktika?
Köszönöm szépen!!!!
ok, kösz. Kerestem itt a fórumon de csak PT1000 találtam. Nekilátok annak az áramgenerátornak A hozzászólás módosítva: Máj 21, 2014
Igazából teljesen mindegy, hogy PT100, vagy PT1000, vagy PT"akármi". Az összes platina szenzort ugyan ezzel a módszerrel kell illeszteni. Amit vilmosd linkelt, az egy jó kiindulási pont.
Helo!
Azt szeretném megkérdezni, hogy valaki ismeri e C32 programkódot, mert ccs-ben egy PIC18F4550 sikerült egy MCP9808 típusú hőmérséklet szenzort beállítani. és ugyanezt a szenzort most bekötöttem egy PIC32MX440F típusú PIC-hez. Valaki tudna egy kis segítségel szolgálni ,hogy hogy mi a CCS C-kód C32-es megfelelője: Itt tartok: #zero_ram
#include <h fileok/18F4550.h>
#DEVICE ADC=10
#include <h fileok/stdio.h>
#include <string.h>
#include <h fileok/float.h>
#use i2c(master,sda=PIN_B0, scl=PIN_B1)
#define SLAVE_ADDRESS 0x3F
#fuses HS,BROWNOUT,NOPUT,NODEBUG,NOWDT
#use delay(clock=24000000)
#include <lcd.c>
#include <h fileok/prototypes.h>
unsigned char felsosor[16];
unsigned char alsosor[16];
int8 a=0;
unsigned long beolvasas=0;
float hom=0;
float tullepes=0;
unsigned long fogadottadat=0;
unsigned long fogadottadat2=0;
unsigned long lofasz=0;
float Temperature=0;
while(1)
{
i2c_start();
i2c_write(SLAVE_ADDRESS & 0xFE);
i2c_write(0x05);
i2c_start();
i2c_write(SLAVE_ADDRESS | 0x01);
fogadottadat=i2c_read(1);
fogadottadat2=i2c_read(0);
i2c_stop();
fogadottadat = fogadottadat & 0x01; //Clear flag bits
if ((fogadottadat & 0x10) == 0x10){ //TA < 0°C
fogadottadat = fogadottadat & 0x0F; //Clear SIGN
Temperature = 256.0 - ((float)(fogadottadat *16 + fogadottadat2) / 16.0);
}else //TA >= 0°C
Temperature = fogadottadat * 16 + ((float)fogadottadat2/ 16.0);
lcd_putc("\f");
sprintf(felsosor,"TEMP: %3.2f " ,Temperature);
a=0;
while(a<=16)
{
lcd_putc(felsosor[a]);
a++;
}
Ez a program tökéletesen fut.
A C32-esben pedig itt tartok.:
int a=0;
unsigned long lofasz=0;
unsigned char felsosor[16];
unsigned char alsosor[16];
float Temperature=0;
unsigned long fogadottadat=0;
unsigned long fogadottadat2=0;
unsigned char SlaveAddress = 0x3F;
int main()
{
//SYSTEMConfigPerformance(SYS_FREQ);
SYSTEMConfig(SYS_FREQ, SYS_CFG_ALL); //Inicializalas
setupLCD();
lcd_init();
init();
while(1)
{
StartI2C1();
MasterWriteI2C1( SlaveAddress & 0xFE );
MasterWriteI2C1(0x05);
StartI2C1();
MasterWriteI2C1( SlaveAddress | 0x01 );
fogadottadat=MasterReadI2C1();
fogadottadat2=MasterReadI2C1();
StopI2C1();
fogadottadat = fogadottadat & 0x01; //Clear flag bits
if ((fogadottadat & 0x10) == 0x10){ //TA < 0°C
fogadottadat = fogadottadat & 0x0F; //Clear SIGN
Temperature = 256.0 - ((float)(fogadottadat *16 + fogadottadat2) / 16.0);
}else //TA >= 0°C
Temperature = fogadottadat * 16 + ((float)fogadottadat2/ 16.0);
putsLCD("\f");
sprintf(felsosor,"TEMP: %3.2f " ,Temperature);
a=0;
while(a<=16)
{
putsLCD(felsosor[a]);
a++;
}
Az elején van gondom , ezzel a két sorral:
fogadottadat=MasterReadI2C1();
fogadottadat2=MasterReadI2C1(); ezek megfelelőek?
Köszönöm a segítséget!! A hozzászólás módosítva: Máj 21, 2014
Sziasztok!
Megint egy kis segítségre lenne szükségem, még mindig 16f628a-val küzdök.
rs485 kommunikációt szeretnék megoldani, de nem jövök rá miért nem megy. Már egy hete kínlódok de nem megy.
A cél az hogy ha beérkezik egy "A" akkor bekapcsolja a relé1-et és visszaküldi: KapuOk
ha "B" érkezik kikapcsolja a relé1-et, és visszaküldi: KapuNok.............
Addig jó hogy be, ki kapcsol, az adat is megjelenik a pic tx lábán, de az SN75176a valamiért nem küldi át az adatot. Mellékelem a kódot is és a kapcsolási rajzot is hátha segít.
LIST P=16f628A
#INCLUDE "P16F628A.INC"
__CONFIG _BODEN_OFF&_CP_OFF&_WDT_OFF&_LVP_OFF&_MCLRE_ON&_INTOSC_OSC_NOCLKOUT
ERRORLEVEL 0, -302
CBLOCK 0X20
T1
T2
T3
T11
T12
T13
VETT
ENDC
ORG 0
NOP
GOTO INIT
ORG 4
NOP
GOTO INIT
INIT
#DEFINE RELAY1 PORTA,0
#DEFINE RELAY2 PORTA,1
#DEFINE RELAY3 PORTA,2
#DEFINE RELAY4 PORTA,3
#DEFINE LED PORTA,6
#DEFINE BEMENET PORTA,7
#DEFINE KULD PORTB,0
BANKSEL TRISA
MOVLW b'10000000' ;portA,7 bemenet
MOVWF TRISA
BANKSEL PORTA
CLRF PORTA
MOVLW b'00000111'
MOVWF CMCON
BANKSEL TRISB
MOVLW b'00000010' ;portB,1 bemenet
MOVWF TRISB
BANKSEL PORTB
BANKSEL SPBRG
MOVLW 0x19 ; 0x0C=19200 baud (0x19=9600 baud)
MOVWF SPBRG
MOVLW b'00100100'
MOVWF TXSTA
BANKSEL RCSTA
MOVLW b'10010000'
MOVWF RCSTA
START
CLRF PORTB
CALL RECEIVE
MOVFW VETT
SUBLW 0X41
BTFSC STATUS,Z
GOTO A1 ;vett adat: A
MOVFW VETT
SUBLW 0X42
BTFSC STATUS,Z
GOTO B1 ;vett adat: B
MOVFW VETT
SUBLW 0X43
BTFSC STATUS,Z
GOTO C1 ;vett adat: C
MOVFW VETT
SUBLW 0X44
BTFSC STATUS,Z
GOTO D1 ;vett adat: D
MOVFW VETT
SUBLW 0X45
BTFSC STATUS,Z
GOTO E1 ;vett adat: E
MOVFW VETT
SUBLW 0X46
BTFSC STATUS,Z
GOTO F1 ;vett adat: F
MOVFW VETT
SUBLW 0X47
BTFSC STATUS,Z
GOTO G1 ;vett adat: G
MOVFW VETT
SUBLW 0X48
BTFSC STATUS,Z
GOTO H1 ;vett adat: H
MOVFW VETT
SUBLW 0X49
BTFSC STATUS,Z
GOTO I1 ;vett adat: I
; CALL DELAY
GOTO START
RECEIVE
BTFSS PIR1,RCIF
GOTO RECEIVE
MOVF RCREG,W
MOVWF VETT
RETURN
TRANS
NOP
BSF LED
BANKSEL TXREG
MOVWF TXREG
BANKSEL TXSTA
WTHERE
BTFSS TXSTA,TRMT
GOTO WTHERE
BCF STATUS,RP0
BCF LED
RETURN
A1 ;relé1 bekapcsolás
NOP
BSF KULD
CALL REL1BE
BCF KULD
GOTO START
B1 ;relé1 kikapcsolás
NOP
BSF KULD
CALL REL1KI
BCF KULD
GOTO START
C1 ;relé2 bekapcsolás
NOP
BSF KULD
CALL REL2BE
GOTO START
BCF KULD
D1 ;relé2 kikapcsolás
NOP
BSF KULD
CALL REL2KI
GOTO START
BCF KULD
E1 ;relé3 bekapcsolás
NOP
BSF KULD
CALL REL3BE
GOTO START
BCF KULD
F1 ;relé3 kikapcsolás
NOP
BSF KULD
CALL REL3KI
GOTO START
BCF KULD
G1 ;relé4 bekapcsolás
NOP
BSF KULD
GOTO START
BCF KULD
H1 ;relé4 kikapcsolás
NOP
BSF KULD
GOTO START
BCF KULD
I1 ;bemenet lekérdezés
NOP
BSF KULD
CALL BEM
GOTO START
BCF KULD
REL1BE
BSF RELAY1
MOVLW 'K'
CALL TRANS
MOVLW 'a'
CALL TRANS
MOVLW 'p'
CALL TRANS
MOVLW 'u'
CALL TRANS
MOVLW 'O'
CALL TRANS
MOVLW 'k'
CALL TRANS
MOVLW 0x0D ; CR
CALL TRANS
MOVLW 0x0A ; LF
CALL TRANS
RETURN
REL1KI
BCF RELAY1
MOVLW 'K'
CALL TRANS
MOVLW 'a'
CALL TRANS
MOVLW 'p'
CALL TRANS
MOVLW 'u'
CALL TRANS
MOVLW 'N'
CALL TRANS
MOVLW 'O'
CALL TRANS
MOVLW 'k'
CALL TRANS
MOVLW 0x0D ; CR
CALL TRANS
MOVLW 0x0A ; LF
CALL TRANS
RETURN
REL2BE
BSF RELAY2
MOVLW 'K'
CALL TRANS
MOVLW 'K'
CALL TRANS
MOVLW 'a'
CALL TRANS
MOVLW 'p'
CALL TRANS
MOVLW 'u'
CALL TRANS
MOVLW 'O'
CALL TRANS
MOVLW 'k'
CALL TRANS
MOVLW 0x0D ; CR
CALL TRANS
MOVLW 0x0A ; LF
CALL TRANS
RETURN
REL2KI
BCF RELAY2
MOVLW 'K'
CALL TRANS
MOVLW 'K'
CALL TRANS
MOVLW 'a'
CALL TRANS
MOVLW 'p'
CALL TRANS
MOVLW 'u'
CALL TRANS
MOVLW 'N'
CALL TRANS
MOVLW 'O'
CALL TRANS
MOVLW 'k'
CALL TRANS
MOVLW 0x0D ; CR
CALL TRANS
MOVLW 0x0A ; LF
CALL TRANS
RETURN
REL3BE
BSF RELAY3
MOVLW 'S'
CALL TRANS
MOVLW 't'
CALL TRANS
MOVLW 'o'
CALL TRANS
MOVLW 'p'
CALL TRANS
MOVLW 'O'
CALL TRANS
MOVLW 'k'
CALL TRANS
MOVLW 0x0D ; CR
CALL TRANS
MOVLW 0x0A ; LF
CALL TRANS
RETURN
REL3KI
BCF RELAY3
MOVLW 'S'
CALL TRANS
MOVLW 't'
CALL TRANS
MOVLW 'o'
CALL TRANS
MOVLW 'p'
CALL TRANS
MOVLW 'N'
CALL TRANS
MOVLW 'O'
CALL TRANS
MOVLW 'k'
CALL TRANS
MOVLW 0x0D ; CR
CALL TRANS
MOVLW 0x0A ; LF
CALL TRANS
RETURN
BSF RELAY4
MOVLW 'L'
CALL TRANS
MOVLW 'á'
CALL TRANS
MOVLW 'm'
CALL TRANS
MOVLW 'p'
CALL TRANS
MOVLW 'a'
CALL TRANS
MOVLW 'O'
CALL TRANS
MOVLW 'k'
CALL TRANS
MOVLW 0x0D ; CR
CALL TRANS
MOVLW 0x0A ; LF
CALL TRANS
RETURN
BCF RELAY4
MOVLW 'L'
CALL TRANS
MOVLW 'á'
CALL TRANS
MOVLW 'm'
CALL TRANS
MOVLW 'p'
CALL TRANS
MOVLW 'a'
CALL TRANS
MOVLW 'N'
CALL TRANS
MOVLW 'O'
CALL TRANS
MOVLW 'k'
CALL TRANS
MOVLW 0x0D ; CR
CALL TRANS
MOVLW 0x0A ; LF
CALL TRANS
RETURN
BEM
BTFSS PORTA,7
GOTO NYIT
GOTO CSUK
RETURN
NYIT
MOVLW 'N'
CALL TRANS
MOVLW 'y'
CALL TRANS
MOVLW 'i'
CALL TRANS
MOVLW 't'
CALL TRANS
MOVLW 'v'
CALL TRANS
MOVLW 'a'
CALL TRANS
MOVLW 0x0D ; CR
CALL TRANS
MOVLW 0x0A ; LF
CALL TRANS
GOTO START
CSUK
MOVLW 'C'
CALL TRANS
MOVLW 's'
CALL TRANS
MOVLW 'u'
CALL TRANS
MOVLW 'k'
CALL TRANS
MOVLW 'v'
CALL TRANS
MOVLW 'a'
CALL TRANS
MOVLW 0x0D ; CR
CALL TRANS
MOVLW 0x0A ; LF
CALL TRANS
GOTO START
DELAY
MOVLW D'250'
MOVWF T1
DEL
MOVLW D'150'
MOVWF T2
DEL1
MOVLW D'50'
MOVWF T3
DEL2
DECFSZ T3,F
GOTO DEL2
DECFSZ T2,F
GOTO DEL1
DECFSZ T1,F
GOTO DEL
RETURN
DELAY1
MOVLW D'15'
MOVWF T11
DEL5
MOVLW D'15'
MOVWF T12
DEL6
MOVLW D'15'
MOVWF T13
DEL7
DECFSZ T13,F
GOTO DEL7
DECFSZ T12,F
GOTO DEL6
DECFSZ T11,F
GOTO DEL5
RETURN
END
Sziasztok!
C-ben tanulgatom a PIC programozást. Egy olyan kérdésem lenne, hogy a "?" -kérdőjel- operátor mire használatos programozás során?
Ez egy feltételes operátor, egyszerűbben írható, mint az if else szerkezet
Formája: feltétel ? igaz_kif : hamis_kif
Ha igaz a feltétel, igaz_kif, amúgy hamis_kif hajtódik végre
pl.
a>b? c=5: c=3; // ha 'a' nagyobb, mint 'b', akkor 'c' értéke 5 lesz, ellenkező esetben 3.
A hozzászólás módosítva: Máj 22, 2014
Köszönöm szépen!
Sziasztok.
Most fogtam neki PIC-el foglalkozni s egy belso RTCC modult szeretnek elinditani egy PIC18F25J11-en.
Barmit probalok beirni mindig ugyanazt olvasom ki a masodperc regiszerbol (72). Forditashoz mikroC-t hasznaltam. Orajel forrasnak kulso kvarc oszcillator van (32.768kHz) es ket 12pF-os kondi fold fele. A soros kommunikacio le volt tesztelve es az mukodik rendesen.
Csatolom az inicializalas kodot. void init_rtc(void)
{
RTCCFG = 0x00;
RTCCFG.RTCWREN = 1;
RTCCFG.RTCEN = 1; //enable RTC
RTCCFG.RTCOE = 1; //RTCC Output Enable bit
// CONFIG3L.RTCOSC = 1; //T1OSC as reference clock p.395 [set from project settings]
T1CON.TMR1CS1 = 1; //Timer1 T1OSC clock source
T1CON.T1OSCEN = 1; //enable timer1
RTCVALL = 0x00;
}
Itt probalom kiolvasni az erteket es kuldeni soros porton:
RTCCFG.RTCPTR1 = 0;
RTCCFG.RTCPTR0 = 0;
UART1_Write(RTCVALL);
Valakinek van otlete, hogy miert nem akar mukodni? A hozzászólás módosítva: Máj 23, 2014
Srácok készítek egy P18F452-es teszt nyákot.
Szeretném, ha leellenőriznétek a főbb áram, kvarc, szűrőkondik...stb kötéseimet, hogy azokat biztosan jó helyre és jól kötök.
A kvarc még nincs eldöntve, de szerintem a legnagyobb fog rákerülni amit csak említ a manuál az pedig ha jól emlékszem 16MHz. (bár ebben nem vagyok biztos)
Egyúttal szeretném megkérdezni, hogy mi alapján tudom megítélni, hogy mekkora kvarc-ra lesz majd szükségem?
Természetesen olyan esetre gondolok ahol más egyéb periféria nem köti ki annak minimális tartományát.
Illetve az is érdekelne, hogyan tudom kiszámolni mikor és milyen kvarcot kell alkalmaznom.
Utóbbi zavaros még.
Huuppsz lemaradtak a képek.
Előre is köszi... A hozzászólás módosítva: Máj 23, 2014
Kvarcra akkor van szükség, ha valami miatt nagypontosságú órajel kell, esetleg a kívánt frekvencia nem állítható elő a belső oszcillátorral. Ritka eset.
A nyáktervet nem néztem át. A hozzászólás módosítva: Máj 23, 2014
Szerintem nem jó az ICSP csatlakozó MCLR pontjának bekötése. Nem kell a csatlakozó és a láb közé ellenállás. Az ellenállást inkább a MCLR láb és a Vdd közé tedd.
Ez a 10K-os ellenállás az ICSP programozót védi elvileg? (vagy mire szolgál pontosan?)
A P18F4550-ennél is használtam és gondoltam ide sem árt ha ott van.
Ezt most rögtön javítom is.
Ahogy Hp41C fórumtárs is írta a 10k a MCLR és VDD láb közé kell, és az a célja, hogy az MCLR lábat felhúzza tápra, így megakadályozva, hogy az MCLR láb ne lebegjen és ne resetelje a PIC-et. Fenn a sárga sávban a 3. sor. A hozzászólás módosítva: Máj 23, 2014
Igen azt azonnal módosítottam.
Köszi.
Más hibát nem vétettem így elsőre? A hozzászólás módosítva: Máj 23, 2014
|
|