Fórum témák
» Több friss téma |
Fórum » MikroPascal kérdések
Témaindító: bozsokiandras, idő: Máj 15, 2006
Témakörök:
Szia. Lehet, hogy késő a válasz ,próbáld meg a package managert.
Delphi háttérrel most tanulom a mikropascal-t. Szeretnék a hozzáértőktől segítséget kérni.
Feszűlséget mérek az AN2-n és a mért értéket ki akarom írni egy kijelzőre és jelezni akarom azt is, hogy a változás emelkedő, vagy csökkenő, vagy stagnál. A beolvasott értékek word típusúak. Ha nem változtatok a bemeneti értéken, akkor is változik a mért érték. Mivel lehet megoldani a helyzetet. //---------------------------------Fesz mérés------------------------------- Procedure fesz_meres; Begin adc_0 := ADC_read(2); Delay_ms(100); adc := ADC_read(2); End; Procedure fesz_kiir; Begin text2:='stagnal'; if (adc_0-adc)>20 then text2:='csokken'; if (adc-adc_0)>20 then text2:='no'; LCD_Out(1,1,' '); LCD_Out(1,1,text2); Ez a kérdéses kódrészlet. Köszi a segítséget.
Másik kérdés.
Mi az abszolut érték számítás kódja mikropascalban?
biztos van beépített függvény a math libben, de ha nincs:
function abs(ertek: integer): integer; begin result:=ertek; if ertek<0 then result:=ertek*-1; end; ![]() A hozzászólás módosítva: Nov 8, 2012
Sziasztok!
Bináris órát csinálok PIC 16F877-essel. Timer1 időzitőt szeretnék használni, ami másodpercenként megszakitja a főprogramot. Az RC0, RC1 lábon 32.768 KHz-es kristály. Ezt kéne 1 sec-re csökkenteni, csak az a gond,hogy ezt pic micro pascalban nem vágom,hogy hogyan is működik. Erre kérnék szépen valamiféle progirészletet, hogy hogyan kell konfigurálni a timer1 bitjeit, és egyáltalán hogy hozom bele a programba, mivel közben a proci Sleep üzemmódban lesz. Köszi előre is,ha tudtok segiteni. Üdv: F. Gábor
Kedves Kollégák!
Adva van egy programrészlet, amit mikropascal pro-ban programoztam. LCD kijelzőre íratok ki szöveget és általam készített jeleket amik, bizonyos folyamatok jelzésére szolgának. Mondjuk a hőmérséklet emelkedik az előző méréshez képest. Mivel az LCD kijelző alapból nem tudja az ékezetes karaktereket, csináltam egy 'á' betűt is. Ha kiíratom az egyik jelző karaktert, akkor azok a jelző karakterek is átíródnak az új jelzésre, amik nem változnak, sőt az általam fabrikált 'á' betű is átíródik az új jelzésre. Hogy lehet ezen javítani?
Szia
Ismerős a probléma. Szükséges a karakterek váltása közben frissíteni a kijelzőt? Üdv
Csak az adott karaktert írnám át.
Hogy kell használni a mikropascal Tools menü Lcd Custom Character, saját karakter készítőjét.
Ha elindítom, elkészítem a kívánt karaktert, csinálhatok egy kódot, aztán ezt hogy kell használni, mit kell vele tenni, hogy aztán a programban , az LCD-n kitudjam ezt a karaktert íratni?
Szia
Elkészíted a kívánt karaktert, majd copy to clipoboard Ezt a kódot bemásolod a programba. A character nevű tömbbe kerül eltárolásra a karakter pontjai. Ha jól sejtem, ahány egyedi karakter annyi tömb kell (eléggé zabálja a memóriát). A számmal való hivatkozás se működik a kijelződön? Pl:
Ez a celsius utáni kis karika. A kijelző adatlapját átnézted? üdv Most
Nem, ezt még nem próbáltam, de du. megpróbálom.
Köszi!
Nem tudom hogyan probalod, de ugy kellene, hogy megszerkeszted az user karaktereket, majd eloszor ezeket feltoltod a LCD CGRAM teruletere. Egyszerre 8 karaktert tudsz feltolteni. Utana a kikuldendo karakter cimet kell kikuldeni, amikor ki akarod iratni, vagyis nem a karaktert. Tehat pl a karakter az 'é' es Te a CGRAM 2. helyere irtad be akkor az 'é' helyett a 02 kodot kell kikuldeni a LCD-nek.
A kovetkezo keppen csinaltam: elkeszitem a karaktereket. Van bennuk 'á' betu ezt a CGRAM 0. helyere tettem a
procedure abetu_proc(pos_row, pos_char: Byte); var i: Byte; begin Lcd_Cmd(64); for i := 0 to 7 do Lcd_Chr_CP(abetu[i]); Lcd_Cmd(_LCD_RETURN_HOME); Lcd_Chr(pos_row, pos_char, 0); end; proceduraval meg meeg harom masik jel. az utolso procedure nem_valt_proc(pos_row, pos_char: Byte); var i:byte; begin Lcd_Cmd(64); for i := 0 to 7 do Lcd_Chr_CP(nem_valt[i]); Lcd_Cmd(_LCD_RETURN_HOME); Lcd_Chr(pos_row, pos_char, 3); end; ezek a procedurak a pic_init-ben irjak a CGRAM-ot majd a program egy helyen ki akarom iratni az 'á' betut a LCD_chr(1,11,0); utasitassal es nem 'a' betut ir, hanem az utolsonak bevitt karaktert, ami a CGRAM 3. helyen van. A hozzászólás módosítva: Dec 9, 2012
mivel az elozo nem jol adta vissza, igy elkuldom kodban
és a pic_init-ben igy lett inditva
A hozzászólás módosítva: Dec 9, 2012
A fentebb levő kérdésre se kaptam választ, de azért próbálkozok.
Van egy másik kérdés is. 2 db ds18b20 hőmérőt szeretnék1 vezetéken használni, a következő kóddal szeretném az azonosító adatokat a pic eeprom-jában tárolni, hogy ne kelljen minden pic induláskor a hőmérőket azonosítani. A baj az, hogy az eeprom-ba az azonosítók helyett csupa '00' van. segítsetek megjavítani a programot. Mikropaskalban van a kód, de a magyarázat lehet más nyelven is.
A hozzászólás módosítva: Dec 12, 2012
Szia.
Először is a kód elejét nem értem. Mi haszna annak, hogy "bekérsz" valamit, majd egy gombnyomásra úgyis továbbmész? A pergésmentesítés így nem fog működni. Az első gombnyomással végigszalad mindkét teszten. Még ha működne is, a koncepció hibás, ugyanis addig várna, amíg egymás után lenyomod (és felengeded) mindkét gombot. A szenzorral kapcsolatban van néhány követelmény. Ezeket betartottad? Idézet: „OneWire enabled devices should have open collector drivers (with single pull-up resistor) on the shared data line” Idézet: „Oscillator frequency Fosc needs to be at least 8MHz in order to use the routines with Dallas digital thermometers.” Idézet: „This library implements time-based activities, so interrupts need to be disabled when using OneWire library.” Reszetnél nem ártana értelmezni a függvény által visszaadott értéket: Idézet: „0 if the device is present 1 if the device is not present” Régen használtam már a BS18B20-at, de hirtelen az adatlapban ezt találtam: Idézet: „READ ROM [33h] This command can only be used when there is one slave on the bus.” esetleg nézz szét az oldalamon, van néhány MikroPascalos forráskód: Bővebben: Link
Megoldódott. A dolgot úgy kell csinálni, hogy a sajátkarakter készítő ablakban középtájon van egy CGRAM ablakocska, amiben a bevitelre szánt karakter sorszámát és hogy melyik szabad oszlopba kerüljön az általam készített karakter, be kell írni. A már gyárilag foglalt oszlop karakterét átírni nem lehet.
Most viszont van egy másik gond.
Az LCD kijelzőre, ki akarom íratni egy változó értékét, mondjuk egy hőmérsékletet. Az érték kiíratását egy "text" felhasználásával akartam megoldani. A hőmérséklet 2 számjegyű a "bytetostr" converter viszont 3 helyi értéken adja meg a konverziót, és így az első helyiérték értéktelen és nem tudom eltüntetni és ezért értékes helyet foglal el az LCD-n. Segítsetek megoldani, hogy az első értéktelen karaktertől megszabaduljak.
Ez is megoldódott. A kiírandó értéket a mod és a div műveletekkel helyiértékekre bontottam és a kapott karaktert az
Lcd_Chr(row: byte; column: byte;out_char: byte); paranccsal írtam ki.
Sziasztok!
van 2db PIC16F877-es ic-m összekötve I2C kommunikációval amíg össze vannak kötve I2C-n addig szépen megy minden, ha leveszem a slave-et a master lefagy amikor ráfut az I2C részre, mivel nincs válasz a slave-től, és WDT újraindítja állandóan. A felhúzó ellenállások benne vannak, az I2C lábakon. Ha a programból kiveszem az I2C kommunikációt akkor nincs gond, nem fagy le. Valakinek van valami ötlete mi lehet a gond? programrész: I2C_Start; I2c_Wr($A0); I2c_Wr(adat1); I2c_Wr(adat2); I2c_Wr(adat3); I2c_Wr(adat4); I2C_Stop; delay_ms(50); I2C_Start; I2c_Wr($A1); vetel1:=I2c_rd(1); vetel2:=I2c_rd(0); I2C_Stop;
Szándékosan kérsz nyugtázást (ACK, acknowledge) az első adat beolvasásakor?
Első körben kipróbálnám így:
Lehet hülyeséget kérdezek, de a Mikropascal AVR lehetőséget ad arra hogy a 8 bites port blockot egyszerre kezeld, például Porta:=0xFF; A kérdés az , hogy tudok ugyan ilyen módon olvasni?
Szia!
AVR-t nem használok, de gondolom nincs ebben különbség a pichez. Tehát fordítva is működik: változó:= PortA;
var
hexstr:String[6]; Begin DDRB:=0x00; PortB:=0x00; Repeat IntToStr(PortB,HexStr); Lcd_Out(2,1,'Port B:'+HexStr); Until True; End; folyamatosan 0 hiába van rátéve a jumper bármelyik B pin és a + vagy test közé. Az LCD megfelelően le van kezelve, csak nem akartam feleslegesen bemásolni ide a sok sallangot.
Mint írtam az AVR nem megy. Tehát én nem tudok többet segíteni sajnos
![]() A súgót nézted, elég jó van neki, sőt! Biztosan lelsz benne példát.
Azért köszönöm.
![]()
MPS légyszíves próbálj már ki valamit nekem a pic-keden.
mondjuk az A jelzésű portok legyenek kimenetek, a B jelzésűek bemenetek. a program pedig ennyi: Begin repeat PortA:=PortB; Until true; End. kíváncsi vagyok mi lesz a fejlemény. köszi előre is. |
Bejelentkezés
Hirdetés |