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   27 / 29
(#) progee válasza miki144 hozzászólására (») Márc 17, 2014 /
 
Alapesetben így kell:
  1. program feltetel1;
  2. { Declarations section }
  3. begin
  4.  
  5.   trisa := %11111111;  // port A bemenet
  6.   trisb := %00000000;  // port B kimenet
  7.   trisc := %00000000;  // port C kimenet
  8.   trisd := %00000000;  // port D kimenet
  9.   trise := %11111111;  // port E bemenet
  10.  
  11.   while true do // a folyamat ismétlése
  12.   begin
  13.  
  14.     if porta.0 = 0
  15.     then
  16.     begin
  17.       portb.3 := 0;
  18.       portb.2 := 0;
  19.       portb.1 := 0;
  20.       portb.0 := 0;
  21.       portb.7 := 1;
  22.       portb.6 := 1;
  23.       portb.5 := 1;
  24.       portb.4 := 1;
  25.     end
  26.     else portb := not portb;
  27.    
  28.   end;
  29. end.


Nem árt még a porta.0-t pergésmentesíteni egy boolean változó beiktatásával.
A hozzászólás módosítva: Márc 17, 2014
(#) miki144 válasza progee hozzászólására (») Márc 17, 2014 /
 
Üdv. ( PIC16F887)

Szimulátorba betöltöttem, forditás után folyamatosan villognak a led-ek.
Nekem is ugyan ez a hiba jött ki.


Amikor én ezt megirtam, termlészetesen nem münködött .
Ezt használtam forrásnak. (csatolt fájl eredeti)
De ezzel sem ment.
Napersze átirtam benne amit kell.

asm-ben is megirom, aztán majd kiderül gyorsan hogy mi kell még hozzá hogy münködjön.

Ma este átteszem a programot PIC16F84-re is, és megnézem hogy ott mit csinál vele.


Hali
A hozzászólás módosítva: Márc 17, 2014

Button.mpas
    
(#) progee válasza miki144 hozzászólására (») Márc 17, 2014 /
 
Kapcsolásoddal lesz szerintem a baj.
Pl, ha minden porta és porte bemenet, akkor ezeknek a nem használt lábait nem árt 10k ellenállással testre, vagy tápra kötni.
A nyomógomb bekötésénél szintén kell a helyesen bekötött ellenállás.

adcon0 és adcon1 regisztereket állítsd még nullára.
A hozzászólás módosítva: Márc 17, 2014
(#) progee válasza miki144 hozzászólására (») Márc 17, 2014 /
 
ansel és anselh regisztereket is állítsd nullára.
Ezzel az AN lábakat analógról digitálisra váltod át.
(#) Ktulu válasza miki144 hozzászólására (») Márc 17, 2014 /
 
Szia, csatoltam a programot.
Nem írtad, hogy aktív alacsony vagy magas a gomb, én alacsonyra írtam. (tehát kell egy felhúzó ellenállás a PORTA0-ra)
Üdv.
A hozzászólás módosítva: Márc 17, 2014

uPascal.rar
    
(#) miki144 válasza Ktulu hozzászólására (») Márc 17, 2014 /
 
Sziasztok.

Az én progim-ból sok minden hiányzott még.

A PORTA0 lábon van egy 10K ellenállás.Bővebben: Gomb 10K ohm

asm-ben megirtam, ott egy kicsit könyebb volt a dolog.

De igy is jó.


Most nézem hogy mi micsoda az mpas-fájlban.

hali
(#) gthomas hozzászólása Márc 18, 2014 /
 
Sziasztok!
Használt már valaki tcp connectet?
Egy 18f67j60 at programozok mikropascalban : Net_Ethernet_Intern_connectTCP(ip, port_remote, port_local, socket) -tel próbálkozok kapcsolódni. Lehallgatva a hálózatot látszik, hogy ki megy a kérés a tcp szerver felé, a szerver válaszol is, de nem kapcsolódik valamiért a pic. Valakinek sikerült ezt használni?
(#) miki144 válasza Ktulu hozzászólására (») Márc 19, 2014 /
 
Sziasztok.

Találtam egy jó leirást.
Bővebben: Elte

Hali
(#) progee hozzászólása Ápr 7, 2014 /
 
Sziasztok!
Tanácstalan lettem a Sleep parancs használatával kapcsolatban.
Azt tapasztaltam, hogy ha alvó módba akarok tenni egy külső kvarcról (T1OSO/T1OSI lábak) üzemelő órát, akkor a programom fő része továbbra is fut, és frissíti az LCD szövegét.
Készítettem a hiba megtalálásához egy teszt kódot és Proteusz kapcsolást.
Itt beállítottam egy Timer1 időzítést és a főprogramban villogtatok egy ledet, majd azonnal alvómódba teszem a mikrokontrollert.
A Timer1-nek valójában nincs is köze a villogtatáshoz, annak csak a háttérben kellene futnia.
Ennek ellenére azt tapasztalom, hogy ha a Timer1 inicializálva van, akkor a led a sleep mód ellenére is villog, ha viszont kikapcsoloma Timer1-et, akkor megmarad az utolsó állapotában, tehát valóban "elalszik" a mikrokontroller (16F886).
Ennek így kell működnie, vagy én követek el valami hibát?
(#) Hp41C válasza progee hozzászólására (») Ápr 7, 2014 /
 
Idézet:
„INTCON.INTE := 1;”

A külső RB0 megszakítás bekapcsolva, az RB0 láb bemenet. Fix logikai szint van rá kapcsolva?
A hozzászólás módosítva: Ápr 7, 2014
(#) progee válasza Hp41C hozzászólására (») Ápr 7, 2014 /
 
Azzal szeretném felébreszteni a PIC-et, azért állítottam 1-re.
Ha testre kötöm akkor is fennáll a probléma.
Arra gyanakszok, hogy a többi lábára kapott impulzus miatt esik mindig ki az alvó módból, és mivel külső kvarcot használok órának, ezért az RC1/T1OSI lábra folyamatosan kapja a jeleket.
Ha átállítom a Timer1-et belső órára, és kiveszem a kvarcot az áramkörből, akkor mintha működne rendesen.
A hozzászólás módosítva: Ápr 7, 2014
(#) Hp41C válasza progee hozzászólására (») Ápr 7, 2014 /
 
A timer1 átfordulása felébreszti.
(#) progee válasza Hp41C hozzászólására (») Ápr 7, 2014 /
 
Mit lehet ez ellen tenni?
Nem lehet alvó módba tenni a PIC-et, ha használom a Timer1 órát?
(#) Hp41C válasza progee hozzászólására (») Ápr 7, 2014 /
 
Sleep módból a következők tudják felébreszteni a 16F88x -et:
Külső reset, watchdog, RB0 - INT bemenet, Timer1 átfordulás (aszinkron számláló), ECCP capture esemény, A/D konverzió vége, EEProm írás vége, komparátor kimenet változás, változás figyelő (IOC), Eusart break és I2C slave állapotváltás. Az teheti meg, amelyik működése engedélyezett és megszakítás engedélyező bitje is 1 értékű (kivéve watchdog és reset).
Lehet a timer1 -et használni sleep alatt: aszinkron szálmálóként letiltott megszakításkéréssel vagy a megszakítás kérésére újrainicializálva és űjra sleep állapotba küldeéssel. Az utóbbi esetben a főprogramnak meg kell különböztetni a timer1 átfordulást a tényleges felébresztéstől.
(#) janikukac hozzászólása Máj 10, 2014 /
 
Szép napot kedves fórumozók!
Van-e itt egy kedves társunk, aki programozó, és akad 10 perc szabadideje? Mert ha lenne egy ilyen kolléga, akkor kellene 1 kis segítség. Van egy program, amiben 1D tömb van, és nekem nehézséget okoz. Pascal-os program(mit tehetek, ezt tanítják), s ellenőrző lesz belőle, de sehogyan sem értem a működését az első ciklus után. Szóval kellene egy nagyon egyszerű nyelven fogalmazott magyarázat, hogy mi miért van, minek mi a szerepe, de jól érthetően!
A program szövege nagyon egyszerű:
Idézet:
„Beolvasni n elemét a tömbnek, sorbarendezni őket csökkenő sorrendben, s e rendezett elemeket kimutatni egy új sorban, elválasztva üres hellyel!”

Mellékeltem a Pascal filet, remélem mielőbb kapok segítséget. Sokatoknak ez rutinmunka, nekem életmentés! Üdv!

P44.PAS
    
(#) Hp41C válasza janikukac hozzászólására (») Máj 10, 2014 /
 
Szia!
Ez az un. buborék rendezés.
Működése röviden:
Kettős ciklussal a kisebb értékű elemet előrébb helyezzük. Ha lefut a kettő sciklus, az elemek nagyság szerint rendezett sorban lesznek a tömbben.
Részletesebben:
Egy ciklussal végigvizgáljuk a tömb elemeit a 0 indextól az (n-1) indexig (azért nem n -ig, mert a soron levő elem utáni elemeket is vizgáljuk). A belső ciklusban az első ciklus által kiválasztott elemet követő elemekre megvizsgáljuk, hogy kisebb-e, mint az első ciklus által kiválasztott elem. Ha kisebb az első ciklus által kiválasztott elemmel felcseréljük. Így a belső ciklus utolsó lefutása után a tömbben levő legkisebb értékű elem a tömb legelső indexű elemébe kerül. Ekkor a külső ciklus változóját növeljük - azaz a további feladat olyan, mintha az 1 indextől egy elemmel kisebb tömböt rendeznénk...
(#) janikukac válasza Hp41C hozzászólására (») Máj 11, 2014 /
 
Köszönöm, ez egy kicsit bonyolult még így is, de remélem meg fogom érteni...
(#) glaci hozzászólása Szept 10, 2014 /
 
Sziasztok!
18f4520-ra szeretnék több megszakítást csinálni. Az egyik a tmr0 1 sec megszakítással,ez adja az időzítéseknek a számlálandó impulzusokat. A másik, az ra5 és re0 lábakon levő nyomógombok együttes lenyomása adna egy megszakítást és belépne egy menübe, a harmadik az az rb0-rb1-rb2 lábakon létrejött szintváltozás adna megszakítást és attól függően, hogy melyik lábon történt változás (pl: zárlati esemény), az lcd-n megjelenik a kiváltó esemény.
A timer megszakítás működik, de a menübe lépés megszakítása még nem. Így azt úgy oldottam meg, hogy a timer megszakításba tettem az ra5 és re0 lábak figyelését és az esemény egy regiszter egy bitjét állítja át és ezt a bitet main programban vizsgálva tudok a menübe lépni, de úgy érzem ez nem elegáns, a zárlat figyelésről nem is beszélve .
(#) glaci válasza glaci hozzászólására (») Szept 10, 2014 /
 
itt az a progi ami nem működik




  1. section
  2.  
  3. var inter_flag:byte;
  4. .
  5. .
  6. .
  7. procedure pic_init()
  8. begin
  9. .
  10. .
  11. .
  12. .
  13.     intcon.rbie:=1; //rb port szintváltozás
  14.     inter_flag:=0;
  15.  
  16. end;
  17. procedure initTimer0();
  18. begin
  19.   T0CON         := 0x86;
  20.   TMR0H         := 0x48;
  21.   TMR0L         := 0xE5;
  22.   GIE_bit         := 1;
  23.   TMR0IE_bit         := 1;
  24. end;
  25.  
  26.  
  27. procedure interrupt_timer0(); iv 0x0008; ics ICS_AUTO;
  28. begin
  29.   if (TMR0IF_bit) then
  30.   begin
  31.     TMR0IF_bit := 0;
  32.     TMR0H         := 0x48;
  33.     TMR0L         := 0xE5;
  34.     //ide jön a programnak az a része ami a számlást végzi további felhasználásra
  35.     if portd.0=1 then portd.0:=0 else portd.0:=1;
  36.   end;
  37. end;
  38.  
  39. procedure Interrupt_menu_figyel(); iv 0x0018; ics ICS_AUTO;
  40. begin
  41.    if (rbIF_bit) then
  42.    begin
  43.       intcon.rbif:=0;
  44.       if (portb.5=0) and (portb.4=0) then
  45.       begin
  46.          inter_flag.0:=1;
  47.          intcon.rbie:=0;
  48.       end;
  49.    end;
  50. end;
  51.      
  52. begin
  53.   { Main program }
  54.   pic_init();
  55.   InitTimer0();
  56.   while (TRUE) do
  57.     begin
  58.       if inter_flag.0=1 then     //menübe lépés jelző bit vizsgálat
  59.       begin
  60.         inter_flag.0:=0;
  61.         intcon.rbie:=1;
  62.         menu();
  63.       end;
  64.  
  65.     end;
  66. end.
A hozzászólás módosítva: Szept 10, 2014
(#) vilmosd válasza glaci hozzászólására (») Szept 10, 2014 /
 
A port interrupt torleshez elobb egy port olvasast kell csinalni.
(#) glaci válasza vilmosd hozzászólására (») Szept 10, 2014 /
 
Szia!
Ezen pontosan mit ertsek? Mit olvasok és mit torlok?
Egy kis pelda jol jonne.
(#) gapati hozzászólása Szept 11, 2014 /
 
Sziasztok!

Szeretném megkérdezni, hogy foglalkozott-e már valaki grafikus kijelzővel. Valamiért nem sikerül használni az xGLCD unit függvényeit.

Köszönettel:gapati
(#) progee válasza glaci hozzászólására (») Szept 11, 2014 /
 
A nyomógombok állapotát ne az interrupt-ban vizsgáld, hanem a fő programrészben, pergésmentesítéssel.
Egyébként nem látok porta.5 és porte.0 lábakra hivatkozást a kódodban.
(#) vilmosd válasza glaci hozzászólására (») Szept 12, 2014 /
 
Azt kell erteni ezen, hogy mikor valtozas van a porton, es bebillen az IT flag (RBIF), elobb irni, vagy olvasni kell a portot, hogy torolhesd a flagot. mikropascal-ban nem programozok, tehat igy peldat sem tudok prezentalni. Viszont esetleg valami C forrast tudok feltenni holnap. Abbol lathato lesz hogyan is van ez. Talaltam egy peldat a mikroE oldalon:
  1. if (INTCON.RBIF == 1)
  2.      {
  3.        PORTD = 0xff;
  4.        delay_ms(500);
  5.        PORTD = 0x00;
  6.  
  7.        x = PORTB;
  8.        INTCON.RBIF = 0;
  9.        }
A lenyeg remelem lathato. Eloszor olvassuk a portot, majd toroljuk a flaget. Persze ezt at kell tenni pascalra, mivel ez C.
A hozzászólás módosítva: Szept 12, 2014
(#) gapati válasza vilmosd hozzászólására (») Szept 12, 2014 /
 
Sziasztok!

Én rögtön az elején törlöm, mivel ha fontos az időzítés, akkor így pontosan egyformák lesznek az idők. Aztán rutánna jöhet a többi tendő, persze az inerrupt a lehető legrövidebb legyen. (Bocs, hogy én nem a PORTB IT flag-re adok példát, de szerintem ott is mükszik.)


  1. procedure Interrupt();
  2.   begin
  3.     if (T0IF_bit) then              // rtcc interrupt?
  4.     begin
  5.       T0IF_bit := 0;               //  clr TMR0 int flag
  6.       TMR0     := 96;
  7.       //Enter your code here
  8.       if idb = 200 then               // 1 másodperc
  9.         begin
  10.           idb         := 0;
  11.           Time_Update := 1;
  12.           PORTA := PORTA Xor %00100000;                   //RA5
  13.           controllByte := controllByte xor %00001000;     //Villogó


A billentyü lekérdezést a főprogramba végezd:
  1. //Belépés az óra beállításba
  2.           if Button(PORTC, 2, 50, 1) then oldstate := 255;     //Óra gomb lenyomása
  3.           if oldstate and Button(PORTC, 2, 50, 0) then
  4.               begin
  5.                 if Gomb_set = 0 then
  6.                   begin
  7.                     //LED2 := 1;      //Zöld



Üdv:gapati
(#) glaci hozzászólása Okt 12, 2014 /
 
Sziasztok!
Szeretnék functiot írni, azzal a céllal, hogy a program különböző helyén keletkező szöveget, kiírassak lcd-re.

  1. function kiir(x:string[20];n1,n2:byte);
  2.    begin
  3.       lcd_out(n1,n2,x);
  4.    end;


fordításnál kiakad a fordító:

61 343 Complex type parameter must be passed by reference proba.mpas
61 304 Syntax error: Expected ")" but "n1" found proba.mpas
61 304 Syntax error: Expected ":" but "," found proba.mpas
61 337 Unknown type "n2" proba.mpas
61 304 Syntax error: Expected ";" but ":" found proba.mpas
61 304 Syntax error: Expected "begin" but "byte" found proba.mpas
61 373 Routine 'kiir' is missing implementation proba.mpas
61 304 Syntax error: Expected ";" but "byte" found proba.mpas
61 304 Syntax error: Expected "." but ")" found proba.mpas
0 102 Finished (with errors): 12 okt. 2014, 17:49:24 proba.mpppi

Hogy lehet ezt megoldani?
A hozzászólás módosítva: Okt 12, 2014
(#) progee válasza glaci hozzászólására (») Okt 12, 2014 /
 
A stringet külön deklaráld változóként, ill, ha értéket nem ad vissza a funkció, akkor egy procedure is elegendő;

  1. var x:string[20];
  2.  
  3. procedure kiir(var x:string[20]; n1,n2:byte);
  4.  begin
  5.    lcd_out(n1,n2,x);
  6.  end;
(#) glaci válasza progee hozzászólására (») Okt 12, 2014 /
 
Köszi tökéletes a megoldás.
(#) zenetom hozzászólása Jan 7, 2015 /
 
Hali!
Letöltöttem az ingyenes verziót, amiben 2k program korlát van. Mennyire optimalizál a fordítója?
(#) Prendick válasza zenetom hozzászólására (») Jan 7, 2015 /
 
Maximálisan. Csak programkorlát van benne, egyébként full verzió.
Következő: »»   27 / 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