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:
Sziasztok!
Mikropascalban szeretnék egy LCD-t működtetni, de nekem meg sem szólal. A PIC 16F690 adatbitek PORTC 0,1,2,3 cmd bitek rs 4, enable 5. program Proba1; begin Lcd_Config(PORTC,3,2,1,0,PORTC,4,6,5); Lcd_Out(1, 1, 'HELLO'); end. Az áramkör egy próbapanelon van, asm-ben (MPLAB-ban) működik. Már vagy százszor lefordítottam ilyen-olyan változtatásokkal, de nem tudom miért nem indul el. A lcd unit ahogy látom, le van fordítva úgyhogy abba nem tudok belenézni. Mi lehet a gond, kol keressem a hibát?
Hello
Előszöris bizonyosodj meg róla, hogy az LCD-d HD44780 kompatibilis-e. Szerintem mielőtt kiiratnál valamit, adj egy: lcd_cmd(lcd_turn_on); utasítást, hogy biztosan bekapcsoljon az LCD. Üdv.
A kijelző EW162G0GLY - elvileg 44780 kompatibilis.
Lcd_Config(PORTC,3,2,1,0,PORTC,4,6,5); Lcd_Cmd(LCD_TURN_OFF); lcd_Cmd(LCD_TURN_ON); Lcd_Out(1, 1, 'HELLO'); így sem megy
Nos, először a ADCON0 := 0x07; utasítás legyen, mert a PIC c portján a lábakat át kell szerintem állítani digitálisra. Majd a trisc:=0; utasítással állítsd be kimenetnek a c portot. Ezután jöhet az lcd configja és a többi. Ellenőrizd, hogy jól van-e beállítva az LCD kontrasztja.
Üdv.
Habár, most nézem, hogy az ADCON:=0x07; nem is lesz jó. Inkább az ANSEL:=0; és a ANSELH:=0; utasításokat add, ezzel kapcsolod digitálisra az analóg lábakat.
Üdv.
Működik! Köszönöm a segítséget. Milyen doksit használsz? Kezdő vagyok és nem akarok folyton a fórumban kérdezősködni.
A PIC adatlapját, mert az a PIC számára a Biblia, Teremtés könyve, Korán, minden ilyesmi egyesítve :yes:
Ok, olvasgatom. Egy órát szeretnék készíteni. Milyen RTC-t válasszak, hogy ne legyen nagy a küzdelem? A unitok között a PCF8583 kezelését láttam. Szerinted?
Hali!
Pár hete csináltam egy LED-Cube-ot, amibe tettem idő kijelzést is. Én is PCF8583-at használtam, elég jó kis RTC. Pár hét alatt nem késik/siet 1 másodpercet sem. Cak ajánlani tudom!
Összeraktam az RTC-t (PCF8583) a pic-kel (16F690).
Letöltöttem egy mintapéldát, rögtön egy hibaüzenet: Identifier I2C_Start() was not definied. Gondolom valamelyik unit-ban van. Melyiket kell behúzni? Vagy ez egyáltalán a baja?
Hali!
Én az I2C_start után nem szoktam ()-et tenni, lehet hogy az a böki. Nem kell hozzá semmilyen unit. Itt van az én kódom, hátha segít: procedure Read_time; begin I2C_start; I2C_Wr($A0); //vagy $A2, az adress láb állapotától függően (Gnd-$A0 - Vcc-$A2) I2C_Wr(2); I2C_Repeated_Start; I2C_Wr($A1); Gsec :=I2C_Rd(1); while I2C_Is_Idle = 0 do nop; Gmin :=I2C_Rd(1); while I2C_Is_Idle = 0 do nop; Ghr :=I2C_Rd(1); while I2C_Is_Idle = 0 do nop; Gday :=I2C_Rd(1); while I2C_Is_Idle = 0 do nop; Gmn :=I2C_Rd(0); while I2C_Is_Idle = 0 do nop; I2C_Stop; readRTC:=0; end; procedure Transform_time; begin Gsec := ((Gsec and $F0) shr 4)*10 + (Gsec and $0F); Gmin := ((Gmin and $F0) shr 4)*10 + (Gmin and $0F); Ghr := ((Ghr and $F0) shr 4)*10 + (Ghr and $0F); Gyear := ((Gday and $C0)) shr 6; Gday := ((Gday and $30) shr 4)*10 + (Gday and $0F); Gmn := ((Gmn and $10) shr 4)*10 + (Gmn and $0F); end; Sok sikert!
Közben kipróbáltam, hogy az I2C_start után tettem ()-et, úgy is lefordította... Nézd meg nem-e cseréltél fel 2 betűt, nálam gyakori hiba amikor gyorsan írok
![]() A progimban ott van, hogy readRTC:=0, azt nem kell beírnod, nálam csak interruptnál kellett használnom egy boolean típusú változót....
Szia!
Köszi a kódot. Közben rájöttem valamire. Ha a projectben 16F877-es pic-et álítok be, akkor lefordul. Nekem 16F690-esem van, azzal nem fordul le. Ugyan az a I2C_start was not declarated. A PIC adatlapján a következő: RB4: I2C data I/O; RB6: I2C clock; Tehát tudja az I2C-t. Vagy Át kellene kapcsolni I2C com módba?
Akkor szerintem próbálkozz szoftveres I2C-vel. Én 16F716-tal jártam úgy, hogy az adatlap szerint van benn ADC, pascal szerint meg nem volt, és kiírta azt a hibaüzit, mint nálad.
Szoft_I2C-vel valahogy így nézne ki: procedure Read_time; begin soft_I2C_start; soft_I2C_Write($A0); soft_I2C_Write(2); soft_I2C_Start; I2C_Wr($A1); soft_I2C_Start; Gsec :=I2C_Rd(1); soft_I2C_Start; Gmin :=I2C_Rd(1); soft_I2C_Start; Ghr :=I2C_Rd(1); soft_I2C_Start; Gday :=I2C_Rd(1); soft_I2C_Start; Gmn :=I2C_Rd(0); soft_I2C_Stop; end; A főprogramban az I2C_Init helyett pedig Soft_I2C_Config(PortB,4,6); Ha esetleg nem jönne be a szoftveres megoldás, akkor szerintem válts PICet, vagy próbálkozz meg ASM-ben megírni a holmit.
Igen, ez lefordul azzal a változtatással, hogy
I2C_WR=soft_I2C_Write I2C_Rd=soft_I2C_Read Letölteni azonban majd csak este tudom, remélem jó lesz.
Kipróbáltam. Óra, perc :165.
A másodperc egy másodperc alatt hármat számol és 113-nél fordul át nullára. És miden ötödik lépésnél visszafelé is számol egyet. Így olvasok: procedure Read_time(var sec, min, hr, day, mn, year : byte); begin soft_I2C_start; soft_I2C_Write($A0); soft_I2C_Write(2); soft_I2C_Start; soft_I2C_Write($A1); soft_I2C_Start; Gsec :=soft_I2C_Read(1); soft_I2C_Start; Gmin :=soft_I2C_Read(1); soft_I2C_Start; Ghr :=soft_I2C_Read(1); soft_I2C_Start; Gday :=soft_I2C_Read(1); soft_I2C_Start; Gmn :=soft_I2C_Read(0); soft_I2C_Stop; end; Tipp?
Szia! Végre sikerül kezelni a PCF 8583-at. Tudom írni, olvasni. Egy kis szépséghiba, hogy kb. 6-7 óra alatt sietett egy percet. Lehet ez ellen valamit tenni?
Üdv!
Van 2 féle megoldás is, egy bevált pepecselős, megy egy csúnya egyszerű. ![]() A PCF8583 1-es lába és a Vcc közé tettél kondit? (először megszokásból Gnd-re kötöttem, akkor be sem indult ![]() ![]() ![]() ![]() Amúgy a szoftveres I2C-vel indult be, vagy sikerült meghajtani a hardvereset?
Én a két osc káb közé beraktam a kvarcot és kész. Most nézem a doksiban, hogy a Te megoldásod is ott van, a osc1-et kell valóban Vcc-re kötni egy kondival. A doksiban trimmer kondi van 5-25 pF-ig.
A "csúnya" megoldáson már én is gondolkodtam, de azért az nem az igazi. ![]() Végül is a szoftveres megoldás jött be. Lehúztam egy 16F877-esre megírt hardveres demót, amit átalakítottam szoftveresre, azzal indult be. Este feltöltöm, hátha valaki éppen ebbe a problémába fut bele. Köszi a segítséget!
Nagyon szívesen!
Esetleg képet tennél fel a kész óráról? Majd teszek fel én is a LED kockámról csak most épp tesztelés alatt van. ![]() ![]()
Van aki kipróbálta már az MMC libraryt? Igazából csak arra vagyok kíváncsi, érdemes-e vele foglalkozni. Egy CNC gépet építek, először csak nyák marásra szeretném használni. Arra gondoltam, az lenne a legegyszerűbb, ha a Gerber fájlt rámásolnám a kártyára, akár többet is, és menüből lehetne kiválasztani, melyiket akarom legyártani. Azonban, mivel tapasztalatok alapján a MikroPascal eléggé bug-os, nem szeretnék egy kártyát sem elrontani. Van valakinek tapasztalata ezzel kapcsolatban? remélem nem én leszek az első, aki megpróbálkozik vele
![]()
Olvastam valahol hogy hibás a mikropascal MMC library... bár lehet hogy csak az avr-es verzióra érvényes a dolog, mert én arra kerestem!
Nem tuti infó de jobb félni mint megijedni üdv ![]()
Üdv!
Kösz az infót! Megpróbálok szerezni valami olcsó, kis kapacitású használt karit, aztán majd azzal kiprószálom. Remélem nyomdahiba volt ![]()
Szia!
Egyenlőre még asztalon van próbapanelen a cucc. Az óra rész alakul, 15 pF-dal egy éjszaka alatt 0,5 sec-et késik. Úgyhogy 10-15 között lesz az érték valahol. Máskülönben még fejlesztést igényel, mert valójában egy fűtési kapcsolóóra lesz, heti, napi programokkal. Ha kész természetesen felrakom a képét.
Hello
Adó-vevő modulokkal (433,92 MHz) szeretnék kommunikációt és adatátvitelt megvalósítani két PIC között, és megpróbálkoztam Manchester kódoló-dekódoló programot írni. Sajnos nem nagyon akar működni, ezért gondoltam, hogy átírom. A vevő oldalon a vevő modulból jövő jelet én a PIC RB0 lábára vezettem, hogy ha jelet kap, akkor megszakításjöjjön létre (felfutó élre). Természetesen a megfelelő regisztereket beállítottam. Így ha érkezik adat, akkor a megszakításon belül dekódolja azt a PIC. Kezdetnek ez az elgondolás jó? Továbbá mennyi ideig tartson egy bit küldése? Én 1ms-ot használtam. Tehát egy bájtot 16 bittel próbáltam átküldeni, és még használtam 3 bitet a 16bites adat előtt, és 2 bitet pedig utána. Szóval ezek voltak a "címkék". Maga az adatátvitel úgy írtam meg, hogy 1ms-ként küldi az adó PIC az egyeseket és nullákat, a vevő oldalon pedig a PIC a megszakításon belül pedig ugyanígy 1ms-ként elmenti a vett jelszintet, majd dekódol. Van ebben valami hiba? Üdv.
Szia!
Készül a program. Meglepődve tapasztaltam, hogy a 8583 dátum, idő beállításakor a day of week nem állítódik be automatikusan. Ez így van, vagy én rontottam el valamit? Na mindegy még leprogramozom azt is. Azért fontos ez nekem, mert a kapcsolóórárban a day of week szerint lehet majd időprogramot írni. Más. Van itt valaki aki vállalkozik egy darabos nyák készítéssel? Megrajzolnám, ő elkészítené, elpostázná utánvéttel. Panelt nem igazán szeretek, tudok készíteni. Üdv: T. Idézet: „Ez így van, vagy én rontottam el valamit?” A józan ész azt diktálja, hogy így van. Azaz nincs benne örök naptár program, csak számlál - az általad beállított értékekből kiindulva. Majd azt is nézd meg, hogy a szökőévet tudja-e? Az sem triviális feladat. |
Bejelentkezés
Hirdetés |