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 ) Nálam ha jól emlékszem 47 pF-os van. Ha szabvány értékű kondikkal nem tudod beállítani a pontosságát, akkor rakj ide egy szabályozható kondit. Ez volt a pepecselős megoldás, a csúnyát inkább csak ötletként írom. A programba beírod, hogy: If hour mod 6 = 0 then minute:=minute-1. 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. Kb. 1 hete megy táp nélkül, az RTC egy 3V-os gombelemrol (CR2032) elvileg még mindig ketyeg, még 1 hétig hagyom, és ha pontos lesz akkor is, na az lesz a szuper
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 |









