Keresés: 
 Bejelentkezés
Nick:
 
Jelszó:
 
 
 
   
» Elfelejtettem a jelszavamat :'(
» Regisztráció
 Fórum témák
» Több téma
 Frissek
RSS hírforrások
  Hírek.rss
  Fórum.rss
  2012. Máj, 17. Csü
22:56:25
  Jelenleg 515 fő olvassa az oldalt
Fórum » Pontra menő témák » MikroPascal kérdések »
MikroPascal kérdések  
Témaindító: bozsokiandras, idő: Máj 15, 2006
Témakörök
Mikroprocesszorok » Microchip processzorok
Lapozás Méret:     19 / 20     
(#1105666) bbb válasza Rasiel hozzászólására (#1105616) Válasz • Nov 22, 2011
Szia!

Ugyan nem mikropascal, de pont most találtam egy cikket a hackaday oldalon, ami ezzel a kérdéssel foglalkozik.

(#1106137) Szpidi válasza gapati hozzászólására (#1105234) Válasz • Nov 23, 2011
Szia,
Én hónapokkal ezelőtt nézegettem, de akkor belső Vref-et használtam és nem érdekelt. Ha jól emlékszem, akkor van egy javított A/D könyvtár, amivel lehet külső referenciát használni. De most nem találom, pedig nekem is kellene...

(#1108508) gthomas Válasz • Nov 27, 2011
Sziasztok! Egy rádiós hőmérőt építek, TX-4MSIL adóval és BC-NBK vevővel. Az adó és vevő nélkül az adó out-ját a vevő in -jével összekötve tökéletesen működik a kapcsolás. Ha berakom az adót és a vevőt, nem jönnek a korrekt adatok. Szerintem a szinkronizálással lehet a baj. Készített már valaki ilyet? Esetleg egy példa program nincs nektek? Régebben már készítettem egy ilyet, akkor csak próbapanelen. Akkor a man_synchro -t kellett addig hívogatni, amíg egy megfelelő értékkel tér vissza. Ez akkor 62 volt. De most az akkor írt program sem működik. Beszúrom ide:[code=c] begin
ErrorCount := 0;
ANSEL := 0; // Configure AN pins as digital I/O
ANSELH := 0;
C1ON_bit := 0; // Disable comparators
C2ON_bit := 0;
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear LCD display
Lcd_Out(1,1,'Start');
delay_ms(200);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);

sync:=5;
Man_Receive_Init();


while TRUE do // Endless loop
begin

Lcd_Cmd(_LCD_FIRST_ROW); // Move cursor to the 1st row

while sync<>62 do
begin
delay_ms(200);
sync:=man_synchro;
bytetostr(sync,st);
lcd_out(1,1,st); // Initialize Receiver
end;
Lcd_Cmd(_LCD_CLEAR);


while TRUE do // Wait for the "start" byte
begin
temp := Man_Receive(error); // Attempt byte receive
if (temp = 0x0B) then // "Start" byte, see Transmitter example
break; // We got the starting sequence
//if (error <> 0) then // Exit so we do not loop forever
// break;
end;

repeat
begin
temp := Man_Receive(error); // Attempt byte receive
if (error <> 0) then // If error occured
begin
Lcd_Chr_CP('?'); // Write question mark on LCD
Inc(ErrorCount); // Update error counter
if (ErrorCount > 20) then // In case of multiple errors
begin
while temp<>62 do
temp := Man_Synchro(); // Try to synchronize again
//Man_Receive_Init(); // Alternative, try to Initialize Receiver again
ErrorCount := 0; // Reset error counter
end;
end
else // No error occured
begin
if (temp <> 0x0E) then // If "End" byte was received(see Transmitter example)
Lcd_Chr_CP(temp); // do not write received byte on LCD
end;
Delay_ms(10);
end;
until ( temp = 0x0E );






end; // If "End" byte was received exit do loop
end.

--------------------------------------------------------------
MI lehet a gond?

(#1109178) proli007 válasza gthomas hozzászólására (#1108508) Válasz • Nov 28, 2011
  1. begin
  2.   ErrorCount := 0;
  3.   ANSEL := 0; // Configure AN pins as digital I/O
  4.   ANSELH := 0;
  5.   C1ON_bit := 0; // Disable comparators
  6.   C2ON_bit := 0;
  7.   Lcd_Init(); // Initialize LCD
  8.   Lcd_Cmd(_LCD_CLEAR); // Clear LCD display
  9.   Lcd_Out(1,1,'Start');
  10.   delay_ms(200);
  11.   Lcd_Cmd(_LCD_CLEAR);
  12.   Lcd_Cmd(_LCD_CURSOR_OFF);
  13.  
  14.   sync:=5;
  15.  
  16.   Man_Receive_Init();
  17.  
  18.   while TRUE do // Endless loop
  19.   begin
  20.     Lcd_Cmd(_LCD_FIRST_ROW); // Move cursor to the 1st row
  21.   while sync<>62 do
  22.  
  23.   begin
  24.     delay_ms(200);
  25.     sync:=man_synchro;
  26.     bytetostr(sync,st);
  27.     lcd_out(1,1,st); // Initialize Receiver
  28.   end;
  29.  
  30.   Lcd_Cmd(_LCD_CLEAR);
  31.  
  32.   while TRUE do // Wait for the "start" byte
  33.   begin
  34.     temp := Man_Receive(error); // Attempt byte receive
  35.     if (temp = 0x0B) then // "Start" byte, see Transmitter example
  36.     break; // We got the starting sequence
  37.     //if (error <> 0) then // Exit so we do not loop forever
  38.     // break;
  39.   end;
  40.  
  41.   repeat
  42.     begin
  43.        temp := Man_Receive(error); // Attempt byte receive
  44.        if (error <> 0) then // If error occured
  45.        begin
  46.          Lcd_Chr_CP('?'); // Write question mark on LCD
  47.          Inc(ErrorCount); // Update error counter
  48.          if (ErrorCount > 20) then // In case of multiple errors
  49.          begin
  50.            while temp<>62 do
  51.            temp := Man_Synchro(); // Try to synchronize again
  52.            //Man_Receive_Init(); // Alternative, try to Initialize Receiver again
  53.            ErrorCount := 0; // Reset error counter
  54.          end;
  55.       end
  56.       else // No error occured
  57.       begin
  58.         if (temp <> 0x0E) then // If "End" byte was received(see Transmitter example)
  59.         Lcd_Chr_CP(temp); // do not write received byte on LCD
  60.      end;
  61.      Delay_ms(10);
  62.    end;
  63.    until ( temp = 0x0E );
  64.    end; // If "End" byte was received exit do loop
  65. end.


Valahogy így nem?

(#1110703) gthomas válasza proli007 hozzászólására (#1109178) Válasz • Nov 30, 2011
Így már sokkal jobb, de a lényegen mit sem változtat!

(#1111374) proli007 válasza gthomas hozzászólására (#1110703) Válasz • Dec 1, 2011
Hello!
Így igaz. De ha olvashatatlan a program formátuma, akkor kevésbé lesz valaki lelkes, ha segíteni akar..
üdv! proli007

(#1147185) zsoltee0001 Válasz • Jan 22, 2012
sziasztok

Ha nyomógombként deklarálom az egyik bemenetet
  1. nyomogomb : sbit at Gpio.2;

Viszont a nyomógomb pont minuszt kapcsol, hogy tudnám a programmal megértetni, hogy a Low érték tulajdonképpen az 1?
Üdv

(#1147205) vilmosd válasza zsoltee0001 hozzászólására (#1147185) Válasz • Jan 22, 2012
A programodban beolvasod a portbitet, es negalod a beolvasott bit erteket. Es maris ott az "1" ertek, ha a bemenet "0".

(#1147209) zsoltee0001 válasza vilmosd hozzászólására (#1147205) Válasz • Jan 22, 2012
ok, de ez hogy néz ki a gyakorlatba?

(#1147237) zsoltee0001 válasza zsoltee0001 hozzászólására (#1147209) Válasz • Jan 22, 2012
próbálkoztam mindennel.
nyomogomb := not(nyomogomb);
de nem segít, az a gáz, hogy erre a problémára még csak rá se tudok guglizni, holott szerintem egy pofonegyszerű dolog (annak aki csinált ilyet)

(#1147239) vilmosd válasza zsoltee0001 hozzászólására (#1147209) Válasz • Jan 22, 2012
Nem vagyok pascalos, de esetleg a mintapeldakbol leshetnel egy kicsit. C-ben igy csinalom
  1. inbit=~nyomogomb;
Persze a pascalnal nem tudom hogy jelzik a negalast.
Esetleg a telepitett mintapeldakba kellene belelesni, vagy a Mikroe oldalon szetnezni a nem keves irodalomban. A C-re pl van egy igen komoly leiras, gondolom basicra, es pascalra szinten irtak valami par soros ismertetot (par szaz oldal).

(#1147245) zsoltee0001 válasza vilmosd hozzászólására (#1147239) Válasz • Jan 22, 2012
sajnos ez uPascalba nem működik, már próbáltam.

(#1147269) vilmosd válasza zsoltee0001 hozzászólására (#1147245) Válasz • Jan 22, 2012
Szoval....
1.: Ha elkezdesz egy programnyelvvel programozni eloszor is meg kell ismerni a sajatossagai, operatorait, adattipusait, es ugy altalanosan mindent. E-nelkul ez nem programozas, hanem kinlodas, es a tobbiek molesztalasa.
2.:A MikroE oldalan talalhato egy 586 oldalas "User Manual" , kb 2.5 MB mintapeldat. Ezek letoltese es reszletes tanulmanyozasa nagyban fog segiteni az elorehaladasban.

(#1147711) m.joco válasza zsoltee0001 hozzászólására (#1147185) Válasz • Jan 22, 2012
Hello
Valahol a programodban nyilván vizsgálod a nyomogomb változó értékét. Nem értem, hogy miért gond a nyomogomb nullás értékét venni "megnyomott" állapotnak:
pl. if nyomogomb = 0 then ...
Egyébként a nyomogomb változót nem tudod invertálni, mert az egy bemenet (macro). Ha viszont neked mégis fontos, hogy 1 legyen a gomb állapotát jelző változó értéke megnyomáskor, akkor ezt tudom elképzelni megoldásnak: gomb:= not nyomogomb;
A gomb pedig egy bit típusú változó, és a programban ennek az értékét vizsgáld.
Üdv.

(#1148609) zsoltee0001 válasza m.joco hozzászólására (#1147711) Válasz • Jan 24, 2012
Szia
Nem rossz módszer, csak az a gond, hogy a ciklus elején meg kell értetni , hogy gomb:= not nyomogomb.
Én meg pont ezt akartam elkerülni, de azért köszi.
Üdv

(#1148728) Ktulu válasza zsoltee0001 hozzászólására (#1147185) Válasz • Jan 24, 2012
Szia.
Miért nem használod a beépített "Button" függvényt?
  1. if Button(GPIO, 2, 1, 0) then ...

Az oldalamon találsz rá példát.

(#1148818) zsoltee0001 válasza Ktulu hozzászólására (#1148728) Válasz • Jan 24, 2012
Szia
Szoktam használni, úgy tudom csak pergésmentesítésre használatos, ráadásul ennél nem lehet elnevezni a portot, csakis a gpio-val lehet rá hivatkozni.

Apropó, olyan függvényt nem tudsz véletlen, ami ennek gyakorlatilag az ellentettje, szóval x időn belül érkezik-e jel?
Üdv

(#1173625) zsoltee0001 Válasz • Feb 23, 2012
Sziasztok
Sípoltatni akarok piezzot. Valami jobb megoldás kellene, mert ez:
  1. Sound_Init(PORTD, 3);
  2.   Sound_Play(880, 5000);

Brutálisan nyeli a memóriát.
Üdv

(#1180213) Dave87 Válasz • Márc 3, 2012
Sziasztok!

3x4-es (matrix) keypad kezelésében tudna valaki segíteni? Egész pontosan a lenyomott gombot kéne kideríteni, de sajnos a mP beépített library-je nem jó, mert az külön porton lévő oszlop/sort nem kezeli, nekem meg a PORTC-n és D-n vannak Mellékeltem egy képet a bekötésről is, remélem tudtok segíteni, mert én sajnos nem vagyok elég tapasztalt ehhez
» A fájlok letöltéséhez be kell jelentkezned! «

(#1180297) zsoltee0001 válasza Dave87 hozzászólására (#1180213) Válasz • Márc 3, 2012
Szia
Valami hasonló módszer létezhet, mint az lcd lábkiosztásának deklarációjánál, bár példát én se láttam
rá.
Próbálgatni kell
  1. var keypadPort : sbit at rb1_bit;

(#1180349) Dave87 válasza zsoltee0001 hozzászólására (#1180297) Válasz • Márc 3, 2012
a keypadport magának a keypad-nek a portját adja meg, ahová a sorok és oszlopok lábai vannak kötve, külön külön nem lehet megadni, hogy 1-es sor RB.3, 2-es sor RB.5.. Már próbálkoztam saját rutint kitalálni, de elvesztem a sok 1 és 0 közt

(#1180421) m.joco válasza Dave87 hozzászólására (#1180349) Válasz • Márc 3, 2012
Hello
Szerintem muszáj lesz saját keypad-szkennelő rutint írnod.
A dolog úgy működik, hogy ha keypad-en pl. megnyomod a 7-es gombot, akkor keypad összeköti az 1-es és C lábát. Nos, a PIC 28:30 lábának bemenetnek kell lennie jelen esetben, a 23:26 -nak pedig kimenetnek.
A PIC 23:26 lábait 0-ra állítod. Ezután a keypad A lábára magasat kapcsolsz és megnézed, hogy a keypad 1, 2, 3 lába közül melyik van alacsony, vagy magas szinten. Amelyik magas szinten van, ott az a gomb van megnyomva. Így megtudod, hogy az első sorban melyik gombok vannak megnyomva. Ezután ugyanígy végigmész az összes soron. Ha már érzékeled, hogy meg van nyomva az egyik gomb, akkor a függvényed adja vissza az annak a gombnak megfelelő számot. Ilyen keypad-del csak egyszerre egy gomb lehet megnyomva.
Egyébként megkérdezhetem, hogy milyen programmal rajzoltad ezt a kapcsolási rajzot?
Üdv.

(#1180735) Dave87 válasza m.joco hozzászólására (#1180421) Válasz • Márc 3, 2012
Szia!

Köszönöm, én is kb ez alapján a logika alapján próbáltam megírni, a szkennelő rutint, csak nem sikerült, de neki esek mindjárt megpróbálom újból. A rajzot a "ISIS Professional" programmal csináltam, ezzel kompletten le lehet szimulálni a pic-be égetett program működését is.

(#1180917) m.joco válasza Dave87 hozzászólására (#1180735) Válasz • Márc 3, 2012
Ha nem működne, akkor tedd fel ide a kódot és meglesem.
Üdv.

(#1180965) Dave87 válasza m.joco hozzászólására (#1180917) Válasz • Márc 3, 2012
Szia!

Nos sikerült végül nagy nehezen megcsinálni, de a kód az gusztustalan lett, mindenesetre megosztom veled/veletek. Egyelőre ez így működik, de ha valaki le tudná ezt egyszerűsíteni, nagyon hálás lennék érte!

Tehát íme a kód:
  1. function read : char;
  2. var sor, portn: byte;
  3. label done;
  4. begin
  5.  result := 0;
  6.  
  7.  PORTC := PORTC xor %10000000; //RC.7 bekapcs
  8.  for portn := 4 to 6 do
  9.   begin
  10.    if PORTD.portn = 1 then
  11.     begin
  12.      result := chrs[portn-4];
  13.      goto done;
  14.     end;
  15.   end;
  16.  
  17.  if result<>0 then exit;
  18.  
  19.   PORTC := PORTC xor %11000000; //RC.7 kikapcs 6 be
  20.    for portn := 4 to 6 do
  21.     begin
  22.      if PORTD.portn = 1 then
  23.       begin
  24.        result := chrs[portn-1];
  25.        PORTC := PORTC xor %11000000;
  26.        goto done;
  27.       end;
  28.     end;
  29.  
  30.  if result<>0 then exit;
  31.   PORTC := PORTC xor %01100000; //RC.6 kikapcs 5 be
  32.    for portn := 4 to 6 do
  33.     begin
  34.      if PORTD.portn = 1 then
  35.       begin
  36.        result := chrs[portn+2];
  37.        goto done;
  38.       end;
  39.     end;
  40.  
  41.  if result<>0 then exit;
  42.   PORTC := PORTC xor %00110000; //RC.5 kikapcs 4 be
  43.    for portn := 4 to 6 do
  44.     begin
  45.      if PORTD.portn = 1 then
  46.       begin
  47.        result := chrs[portn+5];
  48.        goto done;
  49.       end;
  50.     end;
  51.  
  52. done:
  53.  PORTC.7 := 0;
  54.  PORTC.6 := 0;
  55.  PORTC.5 := 0;
  56.  PORTC.4 := 0;
  57. end;

(#1180993) Dave87 válasza Dave87 hozzászólására (#1180965) Válasz • Márc 4, 2012
Kis változás: Szimulációban működött jól, a valóságban csak az első oszlop (1,4,7,*) működik...

(#1200494) progee Válasz • Ápr 1, 2012
sziasztok!

16f pic után elkezdtem foglalkozni 12f675 pic-vel.
sajnos nem sikerült sok próbálkozás után sem megoldani egy darab led villogtatását gpio-n keresztül.
így próbálkoztam:

  1. TRISIO := 0;
  2.  
  3. while true do
  4.   begin
  5.       GPIO.2 := 1;
  6.       delay_ms(100);
  7.       GPIO.2 := 0;
  8.       delay_ms(100);
  9.    end;


korábbi hozzászólásokban olvastam, hogy a CMCON:=7; sorral még ki kell egészítenem az elején, de sajnos azzal sem működik.

tudnátok segíteni?

(#1200506) Dave87 válasza progee hozzászólására (#1200494) Válasz • Ápr 1, 2012
Ha jól látom, a lábak nincsenek átállítva digit. I/O-ba.
  1. ANSEL := 0;

(#1200514) progee válasza Dave87 hozzászólására (#1200506) Válasz • Ápr 1, 2012
már ezt is próbáltam. trisio elé és után is.
sajnos nem segített.

  1. TRISIO := 0;
  2.    CMCON:=7;
  3.    ANSEL := 0;


érdekesség, hogy a 3-as lábára rakott led, folyamatosan világít, bármilyen kódot is írok a pic-re.
nem tudom ezt mi okozhatja.

(#1200521) zsoltee0001 válasza progee hozzászólására (#1200514) Válasz • Ápr 1, 2012
3. láb világítása miatt, mi van beállítva oszcillátorként?
A project/edit menüpontban:
Internal rc no clock legyen beállítva oszcillátornak.
Üdv

Következő     19 / 20     
 HEStore.hu
 Hirdetés
TrainModules.hu