Fórum témák
» Több friss téma |
Sziasztok!
Szeretném megépíteni azt a pic-es hőmérőt amit itt az oldalon találtam! De valamiért a fejlesztő progi hibát jelez a következőkre: a program elején: #define LCD_2X16 ;Ezt is hibásnak jelöli Valahol a programba: movwf LCD_TEMP swapf LCD_TEMP,W andlw B'00001111' addlw -0x0a ; Ezt a sort jelzi hibásnak btfsc STATUS,C addlw 0x07 addlw 0x3a movwf LCD_ASCHEXHI movf LCD_TEMP,W andlw B'00001111' addlw -0x0a ; Ezt a sort is hibásnak jelzi btfsc STATUS,C addlw 0x07 Elég kezdő vagyok a témában! Mi lehet a baja?
addlw -0x0a
én azt a "-" jelet kivenném próbáld meg hátha segít. Bár lehet az kell oda mert mínusz számokkal is dolgozik? defene-s rész meg valószínű azért rossz mert nincs olyan filéd a main mellet...
Köszi máris megnézem!
Egyébként ez lenne a szóban forgó hőmérő
Csináltam képeket a hibákról! Meg tennétek, hogy megnézitek, mi lehet a baja?
Akkor most a definie-s résszel mit tudok csinálni?
Miért akarod újrafordítani ( ha nem vagy biztos a dolgokban!)?
Úgy láttam fent van a hex ?! Steve
Bocs, most látom, hogy az azonosító kódot is át kell írnod !
![]() Steve
Szia!
Nekem lefordult, csatolom a projektet, ebben írd át az azonosítókat ( a *.mcp-t indítsd el !) ! Steve
Köszönöm, már elméletben tisztább a dolog
![]()
Egy nagyon egyszerű programról lenne szó. Mindössze annyit kell csinálnia hoyg egy nyomógomb segítségével egy ledet kell bekapcsolni , majd a nyomógomb újboli megnyomásával pedig kikapcsolni. Megcsináltam és az a problémám hogy : alapból a program szerint nem kell világíttani a lednek. rátöltöttem a Pic-re (16F690) megnyomtam a gombot és ahogy annak működnie kell fel is kapcsolódott a led. És itt van a probléma mert ha mégegyszer megnyomom akkor le kéne kapcsolódnia és nem kapcsolódik le.
Kipróbáltam ugy is hoyg ha a led alapból világítt és a nyomogomb lenyomásával először le kéne hogy kapcsolja , és ezt sem csinálja. Akár mit csinálok vele mindig csak felkapcsolni tudja a ledet . A program szerintem jol van megírva , szerintem a beállításokkal lehet a probléma a konfigurációs biteknél . De nem tudom, ehhez szeretnék segítséget kérni valakitől . ha kell leírom a progit amit írtam hátha láttok benne valami hibát. A segítséget előrre is köszi...
Mellékletként csatold be a programot és a kapcsolási rajzot (ha a PICkit2 Starter Kit-ről van szó, akkor nem kell a rajz)!
Idézet: „Kipróbáltam ugy is hoyg ha a led alapból világítt és a nyomogomb lenyomásával először le kéne hogy kapcsolja , és ezt sem csinálja.” Sokminden okozhatja ezt, de nekem nagyon ugy tunik mintha perges kezelesevel lenne a problema -- pl ha jo sokszori probalkozasra 1x - 2x sikerul lekapcsolni akkor szinte biztos errol van szo... Ha nem akkor azert latni kellene mit csinaltal, hogyan kototted be a dolgokat stb...
PIC18 ban használok Bank15 elérésű regisztert. Movff a,b utasítással szeretném (a) értékét másolni a cél (b) regiszterbe, de Bank0 környezetben vagyok jelenleg. Kell hozzá bankot váltanom?
Szia!
Nem kell, mert a movff mindkét cím 12 bitjét tartalmazza. Azért nem árt vigyázni, ugyanis sok kontrollrenek gondja volt / van bizonyos esetekben a movff utasítással megszakítás esetén. Sokaknál akkor jött elő, ha a megszakítás elfogadása elött végrehajtott movff azokba a resziterekbe mozgatott adatot, amiket a kontroller automatikusan ment (WREG, STATUS, BSR) vagy az INTCON regiszterbe írt.
Sziasztok!
Hétvégén összehoztam egy egyszerű kis áramkört, egy feszültségosztón eső feszültséget mérem 16F877 ADC-n keresztül, az eredményt pedig egy LCD mutatja. Közben multiméterrel ellenőrzöm az eredményt. A programot mikroC-vel írtam, és valami miatt akkor lesz helyes az eredmény, ha a felét veszem a mért értéknek. (ertek = Adc_Read(0)/2 ![]() Ez miért van így?
A feszültségosztód osztását jól vetted figyelembe ( ha a programodat hibátlannak tételezem fel! ) ? Ha igen, akkor a programban van a hiba ( mivel nem mellékelted, nehéz kitalálni, hogy mit írtál --> így csak a "ráolvasás" segíthet
![]() Steve
Inkább bemásolom a kódot. Kicsit elbíztam magamat, pedig lehet hogy tényleg itt van valahol a hiba...
void main() { unsigned int ertek; char * kiir[4]; TRISD = 0; TRISA = 1; ADCON0 = 0b11000101; ADCON1 = 0b10001110; Lcd_Config(&PORTD,0,1,2,3,4,5,6); Lcd_Cmd(LCD_CURSOR_OFF); while(1){ ertek = Adc_Read(0)/2; IntToStr(ertek,kiir); Lcd_Out(1,1,kiir); Delay_Ms(200); } } (Még nem volt időm megcsinálni hogy megjelenjen a tizedes vessző.)
Azt elfelejtettem írni, hogy a feszültségosztó igazából csak egy potméter, a két szélső lába megy VDD-re, és VSS-re, a középső pedig a PIC ADC-re, és egy multiméterre. Szóval ez csak ilyen próbaáramkör "hogy is működik a pic A/D konvertere címmel"
![]()
ertek = Adc_Read(0)/2 helyett (ha az int 16 bites):ertek =(unsigned int) (Adc_Read(0)) >>1;
Az ADCON1 -et hamarabb kellene beállítani, mint a ADCON0 -t. A GO bitet jóval később, a ciklusban kell beállítani. Az indítás után meg kell várni, hogy a GO bit 0 -ra álljon.
Üdv.
Teljesen amatőr vagyok ebben a témában, most kezdtem el nézegetni a pickit2 és 3-at. A klón megépítését is néztem, de nem minden világos. Maga a programozóhoz még miket kell hozzá csatlakoztatni, mert pl az a klón leírásánál nem láttam, de a pickit3 debug express Bővebben: Linkképénél is látok + 1 panelt, de ott hova kell rakni a felprogramozandó pic-et? A HQvideónál Bővebben: Linkláttam olyat ahol csak 1 doboz volt azon volt 1 foglalat, az is ua. ezt tudja? Bocs ha hülyeségeket kérdezek de nem tudom. Esetleg ha lenne 1 olyan link ahol le van írva részletesen minden (kezdők is értsék, magyarul), azt meg köszönném. Köszi
A Debug Express csomagban látott kártya már a PIC mikrovezérlőt tartalmazó céláramkör (amin a programot futtatod).
Szia!
Nézd meg a PICKit2 klón építése topikba. Van ott feltölve programozó adapter. Az SMD tokozású kontrollerek elterjedésével nem igazán járható az adapter módszer - egy százlábú tok már kezelhetetlen. Ezért terjedt el a 6 pólusú In Circuit Serial Programing csatlakzó, amivel a kész felhasználói panelre felforrasztott kontroller programozható.
Köszönöm a segítséget! Legközelebb pénteken tudom kipróbálni ezekkel a módosításokkal, remélem hogy úgy jó lesz majd
![]()
az unsigned int 32 bites, azaz (4294967295 (0xffffffff))
tartomány, miért kell ilyen őrültnagy számmal dolgozni egy 10 bites ad konverzión? Üdv
Az az (unsigned) long, amire te gondolsz. Az int csak 16 bites, amire szükség is van mert a 8 bites változó kevés lenne.
[OFF]Ezt akkor benéztem, mondjuk akkor ez itt el van írva: Bővebben: Link
A C -ben nincs definiálva, hogy a típusok milyen hosszúak bitben, csak ez:
long_hossza_bitben >= int_hossza_bitben >= char_hossza_bitben. Szokásos hosszak 8 bites kontrolleren: 32 vagy 16, 16, 8 16 bites kontrolleren: 32, 16, 8 32 bites processzoron: 64 vagy 32, 32, 8 Miután a 80386 és újabb processzorok a 8 és a 32 bites műveleteket támogatják (még újabbak a 64 bitest...).
Nincs elírva szerintem, csak más hardverről és fordítóról van benne szó.
|
Bejelentkezés
Hirdetés |