Fórum témák
- • Számítógép hiba, de mi a probléma?
- • Elektronikai témájú könyvek újságok
- • MIG/MAG/Co2 hegesztő készülékek házilag
- • Kapcsolási rajzot keresek
- • Klíma beszerelése, fűtés-hűtés házilag
- • PROM (TBP18S030N)
- • MyElecParts alkatrész kereső és készlet nyilvántartó
- • Hűtőgép probléma
- • Mikrovezérlős cambus-os izzító relé
- • VF2 végerősítő
- • Indukciós főzőlap, sütő bekötése, kábelek kiépítése
- • Kazettás magnó (deck) javítása
- • Szárítógép problémák
- • Arduino
- • Általános antennás kérdések, válaszok
- • Fejhallgató erősítő
- • Klíma szervizelés, javítás
- • Napelem kivitelező keresése / kiválasztása
- • Lézer érzékelő
- • Sprint-Layout NYÁK-tervező
- • Mosogatógép hiba
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • NYÁK-tervező programok
- • Napelem alkalmazása a lakás energia ellátásában
- • Hörmann kapuk
- • Videomagnó problémák
- • PIC programozás assemblyben
- • Vásárlás, hol kapható?
- • Oszcilloszkóp vétel, mit gondoltok?
- • Vicces - mókás történetek
- • Kapcsolóüzemű táp 230V-ról
- • Oszcilloszkóp, avagy hogyan kell használni?
- • Kutya macska (vad) riasztó
- • Hangsugárzó építés, javítás - miértek, hogyanok
- • Hegesztő inverter javítás
- • FET vezérlése
- • Érdekességek
- • Erősítő mindig és mindig
- • Áramlökés határoló lágyindító
- • Hibrid erősítő
- • Egyfázisú villanymotor fordulatszám szabályozása
- • Transzformátor készítés, méretezés
- • IMI villanymotor
- • Műhelyünk felszerelése, szerszámai
- • Robotfűnyíró vagy fűnyíró robot
- • Kombikazán működési hiba
- • Villanyszerelés
- • Rádiótechnika számok keresése
- • Porszívó javítás
- • Rendelés külföldről (eBay - Paypal)
- • Szobatermosztát bekötése
- • Sárga Kazettás Piaci Nintendo (8bit)
- • Muzeális készülékek-alkatrészek restaurálása
- • Toroid transzformátor
- • LCD TV probléma
» 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.
Kicseréltem az RC tagot. 338Hz és a led villog 500 msec.
Csak azt mondjátok el, hogy miért jó most így.
Flow Code-ban tudok megadni egy órajel sebességet. Azt az órajelet adjam meg amit az RC ad?
Watchdog le van tiltva? Ha nincs letiltva és gyorsan ketyeg a CPU, a WDT hamarabb túlcsordul (és újraindítja a programot) mielőtt elérnél a LED átkapcsolásához.
Tudok olyat a flow-ban hogy watchdog automatikus törlése.
up1.: megtaláltam, Watchdog timer OFF-ra raktam.
Kipróbálom. A hozzászólás módosítva: Máj 24, 2013
Még nem ismerem pontosan e fogalmakat de ha jól értem a kérdést akkor a válasz az hogy a PIC saját programját változtatná. Bizonyos USB-n kapott jelek esetén az utána jövő usb-n rutinnal egyszerűen felülírna a saját programmemóriája egy részét. Ez egy részbeli újraprogramozás már ha lehetséges ilyen.
Nincs eldöntve hogy egy pic csinálja e önmagával vagy két ill több egymást módosítja e majd mert a döntés sokminden függvénye. És még csak most kezdem megismerni a lehetőségeket.
Az lesz amit az összes szempont után a legelőnyösebbnek találok.
Szuper! Most az RC 338Hz-et ad, Flow-ban ezt adtam meg és a watchdog-ot kikapcsoltam.  Műkszik... Kipróbálok valamit futófényt vagy valamit...
HM  Műkszik, csak az időzítések nem okésak. Amit a flow-ban 5 másodpercnek írok, a valóságban 3 sec...
Még mindig jobb annál, mint ha 3 nap lenne az esztendő... Korrigáld a beírt frekvencia értékét!
Ha szerzek egy 40Mhz-s kvarcot akkor gondolom megoldódik ez a probléma.
Kihez beszélsz?
Hallottad a nagy hírt? feltalálták a 'Válasz' gombot...
Akkor felejtsd a 40MHz-es quartz-ot.
"Operating speed: DC - 20 MHz clock input"
4MHz-est akartál mondani?
Rendben. Köszi a segítséget...
Bocsi a sok bugyuta kérdésért...
Ezért mondtam a felső sárga mezőt!
Idézet: „A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!”
Én a helyedben mikro for pic-cel kezdeném. Nemrég kezdtem énis a porgramírói pályafutásom de ebben a programban mindent meg tudtam valósítani amit eddig akartam. És a proteus-sal tudom szimulálni is ami abban fut az a valóságban is 99% hogy futni fog.
Sziasztok,
Hogyan lehet úgy definiálni makrókat egyik .c állományban, hogy azokat egy másik .c állományban levő függvények is használni tudják?
Megírtam a saját alfanumerikus LCD vezérlő függvényeimet és most szertném különálló .c és .h állományokba menteni, hogy más programokban is könnyedén tudjam importálni.
főprogram.c
#include "lcd.h"
void main() {
TRISB = 0x00;
PORTB = 0x00;
delay_ms(100);
LcdInit();
delay_ms(500);
LcdCMD(CURSOR_ON);
LcdWrite(1,4,"Hello!");
while(1)
{
}
}
lcd.c
/*******************************************************************************
* 4 bit PC1602 LCD (ST7066 chip) driver *
*******************************************************************************/
#include "lcd.h"
unsigned char CURSDISP = 0x0C;
void LcdInstData(unsigned char lcd_data, char dflag, char mode)
{
delay_ms(5);
if(dflag == 1) LCD_RS = 1;
else LCD_RS = 0;
LCD_D7 = (lcd_data & 0x80) >> 7;
LCD_D6 = (lcd_data & 0x40) >> 6;
LCD_D5 = (lcd_data & 0x20) >> 5;
LCD_D4 = (lcd_data & 0x10) >> 4;
LCD_E = 1;
delay_us(2);
LCD_E = 0;
delay_us(1);
if(mode == 1)
{
LCD_D7 = (lcd_data & 0x08) >> 3;
LCD_D6 = (lcd_data & 0x04) >> 2;
LCD_D5 = (lcd_data & 0x02) >> 1;
LCD_D4 = (lcd_data & 0x01);
LCD_E = 1;
delay_us(2);
LCD_E = 0;
delay_us(1);
}
}
void LcdInit(void)
{
LCD_RS_DIR = 0;
LCD_E_DIR = 0;
LCD_D4_DIR = 0;
LCD_D5_DIR = 0;
LCD_D6_DIR = 0;
LCD_D7_DIR = 0;
delay_ms(50);
LcdInstData(0x30,0,0);
delay_ms(5);
LcdInstData(0x30,0,0);
delay_us(150);
LcdInstData(0x30,0,0);
LcdInstData(0x20,0,0);
LcdInstData(0x28,0,1);
LcdInstData(0x08,0,1);
LcdInstData(0x01,0,1);
LcdInstData(0x0C,0,1);
}
void LcdWrite(char line, char column, unsigned char *output)
{
char i, j, shift = 0x40*(line-1)+column-1;
LcdCMD(DISPLAY_OFF);
LcdInstData(0x02,0,1);
for(i = 0; i < shift; i++)
{
LcdInstData(0x14,0,1);
}
j = 0;
while(j < strlen(output))
{
LcdInstData(output[j],1,1);
j++;
}
LcdCMD(DISPLAY_ON);
}
void LcdWriteChar(char line, char column, unsigned char output)
{
char i, shift = 0x40*(line-1)+column-1;
LcdCMD(DISPLAY_OFF);
LcdInstData(0x02,0,1);
for(i = 0; i < shift; i++)
{
LcdInstData(0x14,0,1);
}
LcdInstData(output,1,1);
LcdCMD(DISPLAY_ON);
}
void LcdWriteCp(unsigned char *output)
{
char i = 0;
while(i < strlen(output))
{
LcdInstData(output[i],1,1);
i++;
}
}
void LcdWriteCharCp(unsigned char output)
{
LcdInstData(output,1,1);
}
void LcdCMD(unsigned char command)
{
switch(command)
{
case CLEAR: {LcdInstData(0x01,0,1); break;}
case RETURN_HOME: {LcdInstData(0x02,0,1); break;}
case DISPLAY_ON: {LcdInstData((CURSDISP |= 0x04),0,1); break;}
case DISPLAY_OFF: {LcdInstData((CURSDISP &= 0xFB),0,1); break;}
case CURSOR_ON: {LcdInstData((CURSDISP |= 0x02),0,1); break;}
case CURSOR_OFF: {LcdInstData((CURSDISP &= 0xFD),0,1); break;}
case CURSOR_BLINK_ON: {LcdInstData((CURSDISP |= 0x01),0,1); break;}
case CURSOR_BLINK_OFF: {LcdInstData((CURSDISP &= 0xFE),0,1); break;}
case CURSOR_LEFT: {LcdInstData(0x10,0,1); break;}
case CURSOR_RIGHT: {LcdInstData(0x14,0,1); break;}
case SCREEN_LEFT: {LcdInstData(0x18,0,1); break;}
case SCREEN_RIGHT: {LcdInstData(0x1C,0,1); break;}
default: break;
}
}
lcd.h
/************* LCD header file ****************/
#ifndef _LCD_H
#define _LCD_H
// User defined pin connection
#define LCD_RS PORTB.B1
#define LCD_E PORTB.B3
#define LCD_D4 PORTB.B4
#define LCD_D5 PORTB.B5
#define LCD_D6 PORTB.B6
#define LCD_D7 PORTB.B7
#define LCD_RS_DIR TRISB.B1
#define LCD_E_DIR TRISB.B3
#define LCD_D4_DIR TRISB.B4
#define LCD_D5_DIR TRISB.B5
#define LCD_D6_DIR TRISB.B6
#define LCD_D7_DIR TRISB.B7
// Basically defined commands
#define CLEAR 0x00
#define RETURN_HOME 0x01
#define DISPLAY_ON 0x02
#define DISPLAY_OFF 0x03
#define CURSOR_ON 0x04
#define CURSOR_OFF 0x05
#define CURSOR_BLINK_ON 0x06
#define CURSOR_BLINK_OFF 0x07
#define CURSOR_LEFT 0x08
#define CURSOR_RIGHT 0x09
#define SCREEN_LEFT 0x0A
#define SCREEN_RIGHT 0x0B
// Function headers
void LcdInstData(unsigned char, char, char);
void LcdInit(void);
void LcdWrite(char, char, unsigned char*);
void LcdWriteChar(char, char, unsigned char);
void LcdWriteCp(unsigned char*);
void LcdWriteCharCp(unsigned char);
void LcdCMD(unsigned char);
#endif
Ez így eddig tökéletesen működik, de ha az lcd.h-ból ezeket #define LCD_RS PORTB.B1
#define LCD_E PORTB.B3
#define LCD_D4 PORTB.B4
#define LCD_D5 PORTB.B5
#define LCD_D6 PORTB.B6
#define LCD_D7 PORTB.B7
#define LCD_RS_DIR TRISB.B1
#define LCD_E_DIR TRISB.B3
#define LCD_D4_DIR TRISB.B4
#define LCD_D5_DIR TRISB.B5
#define LCD_D6_DIR TRISB.B6
#define LCD_D7_DIR TRISB.B7
áthelyezem a főprogramba akkor az lcd.c-ben levő függvények már nem találják őket.
Hogyan lehetne megoldani, hogy így is működjenek?
MikroC-ben írtam PIC16F628A-ra, eddig csak Proteusban teszteltem és működött. Tudom, hogy a mikroC tele van függvényekkel, de jobban szeretném a sajátomat használni, mert ezeket majd kisebb módosításokkal pl MPLAB-ban is tudnám használni 
Előre is köszönöm!
Miért távolítod el az lcd.h-ból? Ha zavar, hogy ott van, csinálj egy konfig.h nevű fájlt, és oda tedd. De a konfig.h-t minden hova be kell tenni, include dirkektívával. A fordító minden c fájlt külön kezel, a fordítás végén el kell felejtenie mindent.
Idézet: „ha az lcd.h-ból ezeket áthelyezem a főprogramba akkor az lcd.c-ben levő függvények már nem találják őket.” Hagyd ott az lcd.h-ban, vagy hozz létre egy hw_config.h állományt, és tedd abba (ezt minden olyan *.c állományba be kell linkelni, amelyikben szükség van a makrókra).
Szia,
Vettem egy HC-SR04-et. (1700Ft+postaköltség.)
Rákötöttem a egy PIC16F690-re. Teljesen jól működik, kb 1 centis felbontással tudok távolságot mérni vele, 2 cm-től kb. 3 méterig. Víz felszínéről is tökéletesen visszajön a jel, szóval egyébként teljesen alkalmas a dolog a víztartályomban a vízszint mérésére.
Köszönöm az ötletet!
Persze egy probléma azért van valóban. A tartályban ,bár tiszta vízről, ivóvízről van szó, azért elég párás minden. Még nem tudom, hogyan fogja bírni hosszabb távon a HC-SR04 a párás környezetet.
L.
Idézet: „Vettem egy HC-SR04-et. (1700Ft+postaköltség.)” Az 1,5 - 2.5 USD árat talán keveselletted (+ ingyenes házhozszállítás)?
Idézet: „Még nem tudom, hogyan fogja bírni hosszabb távon” Én mindesetre valami vízzáró burkolatot tennék rá, amiból csak a két "szeme" lenne szabadon.
Értem, köszönöm mindkettőtöknek, akkor így fogom hagyni, csak úgy szerettem volna, hogy a két lcd-s állomány mindig érintetlen maradjon, csak include-olnám és kész, a főprogramban csak definiálni kellene a pineket mint ahogyan alapból így kell csinálni a mikroC-s lcd könyvtárnál is. Így is jó csak gondoltam hátha van megoldás arra is
Idézet: „a főprogramban csak definiálni kellene a pineket” Ez csak az olyan gagyi fejlesztői környzeteknél/programozási stílusnál lehetséges, ahol az összes *.c forrásfájlt becsatolják a main.c-be, s így gyakorlatilag csak egy fordítási egység van. Ez nem lehet követendő példa.
Ezzel tisztában vagyok, és ezután külön is választok mindent (csak nem úgy mint a microchip-es példákban, mert ott a hardver kompatibilitások miatt már túlzásba viszik), mert amúgy is át akarok térni az MPLAB-ra. A mikroC szép és jó de túl egyszerű benne programot írni a sok beépített függvénye miatt (amikhez természetesen nem lehet hozzáférni pl .h állományokból, hogy meglesd a függvény felépítését), természetesen vannak benne olyan dolgok is amik MPLAB-ban nincsenek, de hát ez már csak így van...
sziasztok!
Olyanba tudnátok esetleg nekem segíteni, hogy hexa fájlt hogyan tudok visszafordítani assemblyre???..esetleg MP-labbal???
Igen Idézet: „esetleg MP-labbal”
A File menüpontban importálod a hex-et és a View menüpontban meg tudod nézni a Disassembly listing-et ( nem egy könnyű olvasmány  ! ).
Szia!
Mplab indítása, Configure / Select device - beállítani a típust. File import - az állomány betöltése. View / Program memory - Machine mód kiválsztása. Már láthatod is. De jobb gomb / Output to file -vel állományba is mentheted...
Szia, disassembler néven keress programokat, azt hiszem erre az icprog és a winpic800 is képes, betöltöd a hex-et mintha beprogramozni szeretnéd de nem programozod, hanem keresel a menüben valahol olyant, hogy disassemble vagy assembler view. Az így visszakapott assembly kód kissé bonyolult lesz, de ha türelmes vagy szépen vissza tudod alakítani
Hex-ből vagy assembly-ből C-be már szinte lehetetlen.
|
|