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.
Adott egy 18F452 és egy 16F876A. I2C-n szeretném működésre bírni. A 16F felé tudok adatot küldeni, ellenkező irányba nem akar menni a dolog. 18F452 kódrészlete:
16F kódjai:
És maga a főprogramrész: [code"=c] If TestBit(PIR1, SSPIF) = 1 then begin //Nekünk címeztek valamit I := SSPBUF; //Get rid of Address ClearBit(PIR1, SSPIF); CommandByte := ReceiveByteI2C; If CommandByte = CMD_GETSTATUS then begin SetBit(SSPCON, CKP); //Release clock WaitForPIR1SSPIFset; //Wait for RepeatStart I := SSPBUF; //Get rid of Address ClearBit(PIR1, SSPIF); SendByteI2C(10); //OK ![]() ClearBit(PIR1, SSPIF); //Clear interrupt flag SetBit(SSPCON, CKP); end; [/code] Hol szúrom el a dolgot? Segítségeteket előre is köszönöm!
Sziasztok!
Az volna a kérdésem hogy az alábbi hibákat miért kapom mikor próbálom lefordítani? Még nem teszt jelleggel fordítom, csak szintaktika miatt. Csináltam új projektet, beállítottam 8MHz-vel ATiny45-öt.
megoldódott
![]() ![]() Csak azt nem értem hogy ez miért nem megy atiny45-el? át állítom Atmega8ra és lefordul simán de ha Atiny45ön van akkor sok kódot mintha nem ismerne
Sziasztok!
Hogy lehet mikropascalban balra shiftelést végezni egy byte-on? Próbálkoztam az SHL függvénnyel de azt írja hibának hogy SHL was not declared Pedig még autómatikusan kiemeli kék színnel :nemtudom: Előre is köszi!
Ha mindegy neki a kis- és nagybetű (azaz nem shl kellene), akkor lehagytad, hány bittel léptessen, pl.:
Idézet: --> ez két bitet léptet. „var1 := var2 shl 2”
Megmentőm vagy! Köszönöm szépen!
Én úgy emlékeztem hogy így működik: Shl(data); A te verziód működik! Üdv
Ismét én!
![]() Írtam egy programot mikropascalban nokia 3410 lcd vezérlésre, de sehogy sem akar működni! Mellékelem a forrás kódot, hátha találtok benne olyat amit én nem vettem észre. Az egészet egy C program forráskódjának az átírásával csináltam, vagyis nem saját kútfő. A kijelző meg se akar mukkanni. Attiny 45-el próbáltam. Kínomban már egy ledet kötöttem az SCK lábra hogy figyeljem van-e órajel, de az se világított! ![]()
hopsz! nem csatoltam a fájlt
Az adatbitek kiküldésének az időzítését nem látom benne. Milyen tempóban tudja a kijelző fogadni az adatokat, s hogyan akarod a kiküldés sebességét korlátozni?
Az már elsőre is biztos, hogy a kijelző Reset lába alacsony szinten marad, vagyis állandó Reset-ben van, úgy nem is ír ki semmit.
Az Attiny-t nem ismerem, abban nincs olyan, hogy a portok irányát (ki / bemenet) be kell állítani? vagy ez volna a Idézet: ? Ha igen, jó ez az érték? Már csak azért, mert ha kivezérlés sincs, talán valami ilyesmi hiányzik még. „ddrb:=$FF;”
Nemtudom hogy a 3410-nek milyen kijelzője van, én a 3310, 5110-esét próbáltam már. Van hozzá egy komplett bekötési rajzom, és egy forrás, amit a zippben megtalálsz. Egy próbapanelen szinte mindig ezt a kijelzőt használom ha látnom kell az infókat a fejlesztés alatt. Remélem hasznát veszed.
Helló!
Ezen a részen is elgondolkoztam, láttam néhány c forrás kódot de azon se láttam olyat. Valahol mint ha azt olvastam volna hogy a kijelző 4Mbit/s sebességgel képes fogadni az adatokat!
úgyhiszem jó az érték, ez állítja kimenetnek a portját. A resetet közben én is észre vettem és javítottam. sőt kipróbáltam azt hogy nem így adok értéket egy lábnak:
pinb4:=1; hanem setbit(portb,4); De így se semmi, kivéve hogy mostmár látom a leden az órajelet.
Ugyan az a kijelzője van, csak nagyobb felbontású, de a vezérlő ic ugyanaz benne!
Nagyon szépen köszönöm a forrást! Szerintem ezzel sikerül már valamire jutnom! Üdv
Amikor lefordítod, készít belőle asm file-t? Ha igen, azt lehetne még megnézni, hogy alakul benne a kódod.
Közben azon gondolkodom, ott van pl. ez a rész:
Helyet foglal data2-nek, de nem is használja; szimulátorban megnézted, hogy a balra léptetésnél tényleg léptet-e? Ha nem, akkor azért, mert a függvény paraméterét nem módosíthatja (pl. basic esetében az érték szerint átadott változók ilyenek). És akkor talán a rutin elején egy Idézet: sor, majd a data2 használata szükséges. „data2 := data”
Igen, csinál asm fájlt, csatoltam is.
Bár asm-hez nem konyítok. a data2 azért volt ott mert elősször abba akartam tárolni a shiftelt fájlt, de úgy gondoltam egyszerűbb ha a saját helyére számoltatom ki azaz a data-ba, a data2 megmaradt véletlen. Hogy sikerül e a shift azt nem tudom, mert nem tudtam rendesen megnézni a watch-al. Turbo pascalban kicsit máshogy volt ![]() Nem mutatta hogy mikor ugrik erre az eljárásra, pedig a write_data eljárással az is meg volt hívva a főprogramban. Annyit tudtam kivenni belőle hogy: data: inaccessible ![]()
Tegyél töréspontot (breakpoint) a függvényre, akkor megáll a programvégrehajtás a szimulátorban, és utána lépésenként át tudod nézni, mi történik. Kicsit ismerkedni kell a debug lehetőségeivel.
Szia!
Esetleg még megpróbálhatnád azt is, hogy a write_dorc és a write_cmd eljárásokat nem érték, hanem változó paraméterekkel paraméterezed. Tehát amire gondolok:
...
... Üdv.
Megvan! Sikerül neki shiftelni, és úgy nézem hogy jó is a végeredmény, majd még átfutok rajta meg azon is ahonnan írtam az egészet.
Akkor tépném csak a hajamat ha kiderülne hogy a kijelző a rossz! Jaja, van még mit tanulnom ![]() ![]() üdv
Hello!Udv mindenkinek!Segitseget kernek
"MikroPascal V.8.001" ugyben,valami javito progira lenne szuksegem...Elore is kosz! ![]()
Megvan az error
![]() Íráskor és olvasáskor máshogy kell megcímezni a slave-t ![]()
Üdv!
Észrevettem egy hibát a kódodban. Idézet: „Procedure write_dorc(data:byte); var i,data2:byte; Begin for i:=8 downto 0 do Begin SCLK:=0; if ((data and $80)=0) then SDA:=0 else SDA:=1; SCLK:=1; data:=data shl 1; End; End;” Ha a for ciklus 8-tól megy 0-ig, az 9 bitet jelent. Helyesen 7-től kell mennie 0-ig. Én így csináltam volna: Procedure write_dorc(data:byte); var i:byte; Begin for i:=7 downto 0 do Begin SCLK:=0; if data.i=0 then SDA:=0 else SDA:=1; SCLK:=1; End; End;
Helló!
Ez sajnos nem jött be, nem enged konstans értéket beírni!
Helló!
Igaz, át is írtam hogy 7-0ig menjen. És ez a data.i megoldás is egyszerűbbé teszi a dolgot! De van még egy problémám! Ha így akarom megváltoztatni a kimenet értékét hogy pl: SCLK:=1; Akkor az nem működik, de ha ezt: setbit(portb,3); írom akkor ugyan beáll a kimenet, de szerintem a clearbit(portb,3); nem csinál semmit ha utána meghívom Nem lehet hogy valami regiszterrel kellene szórakozni hogy menjen?
Atmelekhez nagyon nem értek még. Próbáld meg ASM parancsokkal kapcsolgatni a lábakat. Megnéztem az adatlapját ennek az atmel csodabogárnak
![]() setbit helyett: Asm SBR PortB,3 end; clearbit helyett: Asm CBR PortB,3 end; Ha nem lesz jó, akkor passzolom ![]()
Az adatlap szerint a szerint a DDRB regiszter 6. és 7. bitje csak olvasható, próbáld meg $FF helyett $3F-re állítani. Nem biztos hogy segít, de egy próbát megér.
Ezzel kapcsolatban akár kérdezhetsz az http://www.hobbielektronika.hu/forum/topic_861.html témában is
Hi!
mikroPascalban írogatok egy programot, nagy része működik, de van pár problémám: - A DS1820-as szenzorral kommunikál (azonosítókat beolvassa, kiküldi, de valamiért a szenzor nem válaszol, vagy a kontroller hibásan dolgozza fel. - RS-232 porton keresztül nem hajlandó kommunikálni... A segítséget előre is köszi! A forrás: ----- Még egy pár kiegészítés: a szenzorok (1-Wire) a PORTA.0-n vannak, a nyomógombok a megfelelő (bemenetre állított) portokon. Az LCD része, nyomógobmkezelés, szenzoradatok beolvasása tökéletesen működik... A mikrovezérlő PIC16F877 20/P (HS 20,000 MHz).
Szia!
http://users.edpnet.be/rosseel01/DRO/PIC/index.htm Itt foglalkoznak a dologgal. Van hozzá valami LIB is
Köszi, megnézem!
![]()
Én első rápillantásra két dolgot látok:
Usart_Init(4800); - kivenném a ciklusból, mert nem valószínű, hogy pár uS alatt - a lekérésig jönne be adat. Lehet, hogy rosszul emlékszem de a szenzornak kevés a 100mS mérési idő. |
Bejelentkezés
Hirdetés |