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:
Lapozás: OK   6 / 29
(#) gthomas hozzászólása Feb 15, 2009 /
 
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?
(#) m.joco válasza gthomas hozzászólására (») Feb 15, 2009 /
 
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.
(#) gthomas hozzászólása Feb 15, 2009 /
 
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
(#) m.joco válasza gthomas hozzászólására (») Feb 15, 2009 /
 
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.
(#) m.joco válasza gthomas hozzászólására (») Feb 15, 2009 /
 
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.
(#) gthomas válasza m.joco hozzászólására (») Feb 15, 2009 /
 
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.
(#) potyo válasza gthomas hozzászólására (») Feb 15, 2009 /
 
A PIC adatlapját, mert az a PIC számára a Biblia, Teremtés könyve, Korán, minden ilyesmi egyesítve :yes:
(#) gthomas hozzászólása Feb 15, 2009 /
 
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?
(#) pako válasza gthomas hozzászólására (») Feb 15, 2009 /
 
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!

(#) gthomas hozzászólása Feb 15, 2009 /
 
Hol vásároltad? Mennyibe kerül? Neten rendelhető?
(#) pako válasza gthomas hozzászólására (») Feb 16, 2009 /
 
L0m3x-nél 368Ft, rendelhető.
(#) gthomas hozzászólása Feb 19, 2009 /
 
Ö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?
(#) pako válasza gthomas hozzászólására (») Feb 20, 2009 /
 
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!
(#) pako válasza gthomas hozzászólására (») Feb 20, 2009 /
 
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....
(#) gthomas hozzászólása Feb 20, 2009 /
 
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?
(#) pako válasza gthomas hozzászólására (») Feb 20, 2009 /
 
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.
(#) gthomas válasza pako hozzászólására (») Feb 20, 2009 /
 
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.
(#) gthomas hozzászólása Feb 20, 2009 /
 
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?
(#) gthomas válasza pako hozzászólására (») Feb 25, 2009 /
 
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?
(#) pako válasza gthomas hozzászólására (») Feb 25, 2009 /
 
Ü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?
(#) gthomas válasza pako hozzászólására (») Feb 25, 2009 /
 
É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!
(#) pako válasza gthomas hozzászólására (») Feb 25, 2009 /
 
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
(#) pako hozzászólása Feb 25, 2009 /
 
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
(#) Istike88 válasza pako hozzászólására (») Feb 25, 2009 /
 
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
(#) pako válasza Istike88 hozzászólására (») Feb 25, 2009 /
 
Ü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
(#) gthomas válasza pako hozzászólására (») Feb 26, 2009 /
 
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.
(#) gthomas hozzászólása Feb 26, 2009 /
 
Ha valakinak kellene...

PIC 16F690 - PCF8583 RTC - 2x16 LCD
(#) m.joco hozzászólása Feb 27, 2009 /
 
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.
(#) gthomas válasza pako hozzászólására (») Márc 5, 2009 /
 
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.
(#) icserny válasza gthomas hozzászólására (») Márc 5, 2009 /
 
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.
Következő: »»   6 / 29
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem