Fórum témák
- • Klíma szervizelés, javítás
- • Muzeális készülékek-alkatrészek restaurálása
- • Felajánlás, azaz ingyen elvihető
- • Villanyszerelés
- • Aktív USB kábel készítése
- • Elektromos távirányítós kapunyitó
- • Sztereó erősítő olcsón
- • Borhűtő vezérlő panel
- • Érdekességek
- • Hegesztő inverter javítás
- • Mosógép vezérlők és általános problémáik
- • Li-Ion saját akkucsomag készítése
- • Kombikazán működési hiba
- • Rádióamatőrök topikja
- • Erősítő mindig és mindig
- • Szárítógép problémák
- • Toroid transzformátor
- • Oszcilloszkóp vétel, mit gondoltok?
- • Forrasztási 1×1 forrasztástechnikai miértek
- • Elektronikai témájú könyvek újságok
- • Lézer érzékelő
- • Logikai analizátor
- • VF2 végerősítő
- • Autós fejegységek kapcsolási rajza
- • Számítógép hiba, de mi a probléma?
- • Rádió javítás
- • Áramlökés határoló lágyindító
- • Boombox javítás
- • Elfogadnám, ha ingyen elvihető
- • Hibrid erősítő
- • Porszívó javítás
- • Fejhallgató erősítő
- • Autórádió építés, szerelés
- • Transzformátor készítés, méretezés
- • Elektromos sütő
- • MIka 6E kazán paraméter lista
- • Mobiltelefon hiba
- • ESR mérő
- • Hangsugárzó építés, javítás - miértek, hogyanok
- • TV hiba, mi a megoldás?
- • Műhelyünk felszerelése, szerszámai
- • Arduino
- • Hangszóró készítése
- • FET vezérlése
- • Napelem alkalmazása a lakás energia ellátásában
- • Általános antennás kérdések, válaszok
- • Kapcsolóüzemű táp 230V-ról
- • RP2040
- • Klíma beszerelése, fűtés-hűtés házilag
- • Flexibilis nyák
- • Robot porszívó - Roomba
- • Kondenzátor
- • Alternativ HE találkozó(k)
- • Rádió adó építése
- • PROM (TBP18S030N)
» 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.
Bementre állítást a TRISB regiszterrel kell megoldani.
ADATLAP kukkolás !!!!!!!
Ebben az esetben meg kell várjam hogy lefusson a ciklus tehát ebben nincs megszakítás még nem használtam és nem is tudom hogyan kell ebben szeretném a segítségedet.
Igazad van azt ki is javítottam TRISA0 = 0XFF; mert erre kötöttem a gombot
(#) |
doup hozzászólása |
Nov 12, 2011 |
 |
/ |
 |
|
Valami ilyesminek kellene lenni de én nem az INT-re kötném a gombot hanem az A0-ra a 16f877a esetén
void interrupt (){
if (INTCON.INTF){
button_pressed = 1;
INTCON.INTF = 0;
}
}
ez így jó?
(#) |
doup hozzászólása |
Nov 12, 2011 |
 |
/ |
 |
|
Sajna ez így nem működik
void interrupt (){
if (PORTA.RB0 == 0){
button_pressed = 1;
PORTA.RB0 = 1;
}
}
Nem kell azt a megszakító rutinba tenni, jó helyen van a főprogramban. Egyébként törekedj arra, hogy az IT rutin amennyire csak lehet rövid futamidejű legyen, ez így egészséges. Itt egy részlet a BUTTON függvény helpjéből.
if (Button(&PORTA, 0, 1, 1)) { // Detect logical one
oldstate = 1; // Update flag
}
if (oldstate && Button(&PORTA, 0, 1, 0)) { // Detect one-to-zero transition
PORTC = ~PORTC; // Invert PORTC
oldstate = 0; // Update flag
Ami pergésmentesen kezeli, ebben az esetben 1msec idővel.
A gombbal viszont földre szeretném húzni a lábat így is jó ez a kódrészlet?
Ha értelmeznéd a progit, akkor látnád, hogy igen jó.
PORTA után első érték a port pin lába, a második a prellidő msec-ben, a harmadik az aktív szint.
if (Button(&PORTA, 0, 1, 1)) { // ha nincs nyomva
if (oldstate && Button(&PORTA, 0, 1, 0)) //ha nyomva van
Csak nekem mindig az else ágban van a progi akár nyomok akár nem.
// LCD beállítás
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
//~
//Változók deklarálásának listája
unsigned short read_ ds1307(unsigned short address );
void write_ ds1307(unsigned short address, unsigned short w_data );
unsigned short sec;
unsigned short minute;
unsigned short hour;
unsigned short day;
unsigned short date;
unsigned short month;
unsigned short year;
unsigned short dat;
char time[9];
char tim[9] = {'1','8',':','3','0',':','0','0','\0'};
char ddate[11];
const unsigned short TEMP_RESOLUTION = 9;
char *text = " 00.0", text_sign;
unsigned temp;
int homerseklet = 0, k = 0, i = 0, j = 0, gomb = 0;
char text2[12] = {'T','h','e','m','p','e','r','a','t','u','r','e'};
char textsign[2] = {'°', 'C'};
char oldstate = 0;
unsigned char BCD2UpperCh(unsigned char bcd);
unsigned char BCD2LowerCh(unsigned char bcd);
//~
void interrupt (){
}
void Display_Temperature(unsigned int temp2write) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
char temp_whole;
unsigned int temp_fraction;
//--- Hőmérséklet negatív részének vizsgálata
if (temp2write & 0x8000) {
text[0] = '-';
temp2write = ~temp2write + 1;
}
//--- Egész rész
temp_whole = temp2write >> RES_SHIFT ;
//--- Egész rész karakterré konvertálás
if (temp_whole/100)
text[0] = temp_whole/100 + 48;
text[1] = (temp_whole/10)%10 + 48; //--- Tizes digit
text[2] = temp_whole%10 + 48; //--- Egyes digit
//--- Előjel nélküli egészre konvertálás
temp_fraction = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x000F;
temp_fraction *= 625;
//--- Konvertálás karakterré
text[4] = temp_fraction/1000 + 48; //--- Ezres digit
//--- Hőmérséklet kiírása az LCD-re
for(k = 0; k < strlen(text); k++)
{
Lcd_Chr(2, 5+k, text[k]);
Delay_ms(150);
}
for(k = 0; k < 2; k++)
{
Lcd_Chr(2, 10+k, textsign[k]);
Delay_ms(150);
}
}
void Homerseklet_lekerdezes()
{
//--- Hőmérséklet értékének kiolvasása
Ow_Reset(&PORTD, 0);
Ow_Write(&PORTD, 0, 0xCC);
Ow_Write(&PORTD, 0, 0x44);
Delay_ms(1000);
Ow_Reset(&PORTD, 0);
Ow_Write(&PORTD, 0, 0xCC);
Ow_Write(&PORTD, 0, 0xBE);
temp = Ow_Read(&PORTD, 0);
temp = (Ow_Read(&PORTD, 0) << 8) + temp;
Display_Temperature(temp);
}
unsigned short cnt;
void main(){
I2C1_Init(100000);
PORTB = 0;
TRISB = 0;
TRISA = 0XFF;
PORTA = 0x00;
TRISD = 0;
PORTD = 0;
TRISC = 0xFF;
Lcd_Init();
Lcd_Cmd(_Lcd_CLEAR);
Lcd_Cmd(_Lcd_CURSOR_OFF);
write_ ds1307(0, 0x80); //Reset second to 0 sec. and stop Oscillator
write_ ds1307(1, 0x34); //write min 27
write_ ds1307(2, 0x10); //write hour 14
write_ ds1307(3, 0x02); //write day of week 2:Monday
write_ ds1307(4, 0x12); // write date 17
write_ ds1307(5, 0x11); // write month 6 June
write_ ds1307(6, 0x11); // write year 8 --> 2008
write_ ds1307(7, 0x10); //SQWE output at 1 Hz
write_ ds1307(0, 0x00); //Reset second to 0 sec. and start Oscillator
while(1)
{
if (Button(&PORTA, 0, 1, 1)) { // Detect logical one
oldstate = 1; // Update flag
}
if (oldstate && Button(&PORTA, 0, 1, 0)) { // Detect one-to-zero transition{
//IDŐ MEGJELENÍTÉSE
for(i = 0; i <=29; i++)
{
sec=read_ ds1307(0); // másodperc kiolvasása
minute=read_ ds1307(1); // perc kiolvasása
hour=read_ ds1307(2); // óra kiolvasása
day=read_ ds1307(3); // nap kiolvasása
date=read_ ds1307(4); // dátum kiolvasása
month=read_ ds1307(5); // hónap kiolvasása
year=read_ ds1307(6); // év kiolvasása
time[0] = BCD2UpperCh(hour);
time[1] = BCD2LowerCh(hour);
time[2] = ':';
time[3] = BCD2UpperCh(minute);
time[4] = BCD2LowerCh(minute);
time[5] = ':';
time[6] = BCD2UpperCh(sec);
time[7] = BCD2LowerCh(sec);
time[8] = '\0';
ddate[0] = '2';
ddate[1] = '0';
ddate[2] = BCD2UpperCh(year);
ddate[3] = BCD2LowerCh(year);
ddate[4] ='.';
ddate[5] = BCD2UpperCh(month);
ddate[6] = BCD2LowerCh(month);
ddate[7] ='.';
ddate[8] = BCD2UpperCh(date);
ddate[9] = BCD2LowerCh(date);
ddate[10] = '\0';
Lcd_Out(1,5,time);
Lcd_Out(2,4,ddate);
Delay_ms(1000);
if(i == 29)
{
for(k = 0; k < 13; k++)
{
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Delay_ms(100);
}
Lcd_Cmd(_LCD_CLEAR);
}
}
//~
//HŐMÉRSÉKLET MEGJELENÍTÉSE
for(j = 0; j <= 10; j++)
{
for(k = 0; k < 12; ++k)
{
Lcd_Chr(1, 3+k, text2[k]);
Delay_ms(150);
}
Homerseklet_lekerdezes();
if(j == 10)
{
for(k = 0; k < 13; k++)
{
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Delay_ms(100);
}
Lcd_Cmd(_LCD_CLEAR);
}
}
//~
oldstate = 0;
}
else
Lcd_Out(1,1,"Setup");
}
}
unsigned short read_ ds1307(unsigned short address )
{
I2C1_Start();
I2C1_Wr(0xd0);
I2C1_Wr(address);
I2C1_Repeated_Start();
I2C1_Wr(0xd1);
dat=I2C1_Rd(0);
I2C1_Stop();
return(dat);
}
unsigned char BCD2UpperCh(unsigned char bcd)
{
return ((bcd >> 4) + '0');
}
unsigned char BCD2LowerCh(unsigned char bcd)
{
return ((bcd & 0x0F) + '0');
}
void write_ ds1307(unsigned short address, unsigned short w_data )
{
I2C1_Start();
I2C1_Wr(0xD0);
I2C1_Wr(address);
I2C1_Wr(w_data);
I2C1_Stop();
}
Felhúzó ellenállás van a PortA.0-on? Pl. 10kohm a VCC-re.
Egyszer sem történik meg a gomb utáni program futása?
Próbáld kizárni a programod hibáját. Mondjuk a...
if (oldstate && Button(&PORTA, 0, 1, 0)) {
sor utáni rész helyett, egy egyszerű
PORTD ~= PORTD;
sorra cseréld le. Így a portd mutatja a gomb jó kezelését.
Utánna szép sorba vissza kerülhet a kódod.
Helló! Tudna nekem valaki segíteni, hogy hogyan kell bekötni egy 16F627A PIC-et áramkörbe? Az lenne a legjobb ha egy kapcsolást mutatnátok róla. 5 voltra akarom kötni, adapterre. A lehető legegyszerűbb kapcsolásra lenne szükségem. Az RB2 re fogok kötni ledet de a többit nem tudom pontosan, hova kell kötni. Nagyon kezdő vagyok.
Ez így tényleg nehéz lesz. A doksit azért nem árt odakészítened.
Egy biztos, kell neki táp, oszci.
VSS 5.láb -> GND
VDD 14.láb -> +5V
osci 15 és 16.láb
Reset 4.láb -> egy 4.7Kohm a +5V-ra.
Az Osci kötelező? Nincs beépített? Mire használja a PIC azt?
Én így kötném be. A kvarc kötelező különben mihez képest időzítenél pl led villogtatás? Ja és a kvarcnál azok kerámia kondenzátorok. A configurációs biteket mikor állítod be figyelj oda hogy milyen kvarcot használsz mert 4Mhz-ig XT, 4-20MHZ-ig pedig már HS a configurációs bit.
Szerintem én még utánanézek ennek a megszakításoknak mert nem igazán értem. Majd később ha nem megy visszatérek a fórumhoz.
Köszi  Meg is építem... Megpróbálom
Nem feltétlen, hiszen van belső RC oszcija is, ha jól nézem a doksit. Azzal a megkötéssel, hogy megelégszünk a 4MHz órajellel. Neked ez tökéletesen megfelel. Így oda nem kell kötni, lehet másra használni a lábakat.
És miben írod a programot? Illetve mivel égeted?
Tehát az Osci nem kell. Oda nem is kötök semmit. a többi pedig jó doup ábrája szerint gondolom. Azt úgy bekötöm.
A programot microPascal PRo ban írom, mivel a pascalt jól ismerem. és az égetőmhöz adtak software-t valami MicroPro DiY K149_BC a neve.
Én inkább a C-t vágom, de ha nem tudlak lebeszéni róla, akkor amit szeretsz azt használod. A progizó látom nem incircuit , így viszont ajánlom valami szimulátorban a program tesztelését amennyire lehetséges, mert így nincs a sok IC ki-be rakosgatás, kinlódás.
Jah használok többet is...ISIS ben is tesztelem és PIC Simulator ban is. De a programokkal jobban bánok, mint az áramkör összerakással, de nagyon érdekel.
Az ISISt én is kedvelem. Az jó lesz, azzal nagyon könnyen megy a szimuláció.
Javaslom olvasd el a topik tetején levő összefoglalást, nem véletlenül került az oda. A felhúzó ellenállás meg 10k legyen. A táplábak közé 100nF kerámia is kell.
Az adapter nem biztos, hogy nyerő ötlet, nem mindegyik stabilizált, a kontrollernek meg nem árt a stabil tápfeszültség.
Mit jelent, hogy a táplábak közé 100nF kerámia kell? Mármint értem, de azt hogy kell bekötni?
Összeraktam a kapcsolásodat, de nem akar működni. :S A program jó amit írtam. a kapcsolásban mindent leellenőriztem úgy raktam össze, ahogy írtad, de nem megy :S
Módosítva!:
Mégis megy, csak nagyon halványan világít a led. Alig látni.
|
|