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   18 / 29
(#) Szpidi válasza m.joco hozzászólására (») Aug 30, 2011 /
 
Szia!

Ez tűnik a megoldáshoz vezető útnak. Rögtön létezett interrupt. DE,
azonnal megbolondult a rendszer.
1; Ha a longinttostr(sec, masodperc); utasítást az interrupt által meghívott utasításba (secundum()) raktam, akkor nem fordította le, mert nem fért el a RAM-ban. Így meg a RAM 9%-át használja. Nem tudom miért.
2; az LCD_OUT(1,1,...) hatására is össze vissza írja ki a szöveget. Ezt sem értem, hogy miért.
Ha valaki tud válaszolni a miértekre, azt megköszönöm.
De legalább, már indult valami féle megszakítás. Most tudomásom szerint a leghosszabb megszakítási ciklust adtam meg, és így is gyakrabban vált, mint 1 sec. Hogy csináltok ti 1 sec-es impulzust? Két timert indítotok egymással, vagy számoljátok a megszakításokat? Esetleg jobban tudjátok beállítani a timert?
Működési freki 8MHz. (Nem akarom 31kHz-ről, mert mérnie, számolnia, beavatkoznia is kellene és nem lenne baj, ha gyorsan is csinálná.)
  1. program ora;
  2.  
  3. // LCD module connections
  4. var LCD_RS : sbit at RC2_bit;
  5. var LCD_EN : sbit at RC3_bit;
  6. var LCD_D4 : sbit at RC4_bit;
  7. var LCD_D5 : sbit at RC5_bit;
  8. var LCD_D6 : sbit at RC6_bit;
  9. var LCD_D7 : sbit at RC7_bit;
  10.  
  11. var LCD_RS_Direction : sbit at TRISC2_bit;
  12. var LCD_EN_Direction : sbit at TRISC3_bit;
  13. var LCD_D4_Direction : sbit at TRISC4_bit;
  14. var LCD_D5_Direction : sbit at TRISC5_bit;
  15. var LCD_D6_Direction : sbit at TRISC6_bit;
  16. var LCD_D7_Direction : sbit at TRISC7_bit;
  17. // End LCD module connections
  18.  
  19.  
  20. var sec: longint;
  21. var masodperc : string[11];
  22.  
  23. Procedure secundum();
  24.     begin
  25.        sec:=sec+1;
  26.     end;
  27.  
  28.  
  29.  
  30.  
  31. procedure interrupt;
  32.     begin
  33.     if PIR1.TMR1IF then begin
  34.       TMR1H := 0x00;
  35.       TMR1L := 0x00;
  36.       PIR1.TMR1IF := 0;
  37.       secundum();
  38.       end;
  39.     end;
  40.  
  41. begin
  42.  
  43.     TMR1H := 0x00;
  44.     TMR1L := 0x00;
  45.     T1CON :=%10110101;                   // Timer1 counts when gate is high), Timer1 is always counting, 1:8 Prescale Value, 0 = LP oscillator is off, Do not synchronize external clock input, Internal clock (FOSC/4), Enables Timer1
  46.     INTCON := INTCON or %11000000;       //GIE=1, PEIE=1
  47.     PIR1.TMR1IF := 0;
  48.     sec:=0;
  49.     PIE1 := PIE1 or %00000001;          //TMR1IE=1
  50.     Lcd_Init();                        // Initialize LCD
  51.       Lcd_Cmd(_LCD_CLEAR);
  52.       Lcd_Cmd(_LCD_CURSOR_OFF);
  53.  
  54.  
  55.     while true do
  56.     begin
  57.     longinttostr(sec, masodperc);
  58.     nop;nop;nop;nop;
  59.     LCD_Out(1,1,masodperc);
  60.     end;
  61.  
  62. end.
És a végeredmény felül 1/10 sec, alul 1/4 sec felvételi idővel. Jól látszik, hogy szaladnak a számok...

kijelző.JPG
    
(#) alienco válasza potyo hozzászólására (») Aug 30, 2011 /
 
Valóban, a procedure-ben lévő PIR1.TMR1IF :=0; természetesen a ...-ozott részbe kell.
(#) Szpidi válasza Szpidi hozzászólására (») Aug 30, 2011 /
 
A 3. de nem számozott kérdésemre én is megtaláltam a választ. Mégpedig, hogy hogyan kell 1 sec vagy hosszabb időzítésű megszakítást készíteni. A Timer 2 az pre és postscaller is és nem csak 1/8-as, hanem 1/16*1/16. Ha jól számolok, az 8s időzítésre is elég.
Bocsánat, hogy megint nem jól olvastam el az adatlapot. Már látom, hogy nem elég csak azt olvasni, amire szerintem szükségem van, hanem betéve kell(ene) tudni az adatlapot.

Azért az első két kérdésemre örülnék, ha valaki tudna válaszolni. Az nagyon Pascal (vagy programozás) specifikus lehet.
Addig is köszönök minden eddigi és jövőbeni segítséget.
(#) vilmosd válasza Szpidi hozzászólására (») Aug 30, 2011 /
 
En ugy szoktam hosszu idozitest csinalni, hogy pl a TMR0 eloosztoval, fix ertekkel feltoltok, ami pl 10 msec IT-t general. Amikor esemenyeket akarok idozitve vezerelni, csinalok minden esemenyhez egy szamlalot, es feltoltom a kivant ertekkel, es amit minden IT beuteskor dekrementalok. Pl Lcd_timer=100; Igy mikor eleri a 0 erteket pontosan 100x10, azaz 1 sec az eltelt ido. Ilyenkor beallitok egy jelzobitet, jelezven hogy eltelt egy sec. Majd a foprogramban figyelem ezt a jelzobitet es ha 1 akkor inditom a kijelzest, torlom a jelzobitet, es ujra toltom a szamlalot. Ezzel a modszerrel tobb idozitest is lehet parhuzamosan futtatni, es nem foglal jelentos processzoridot. Az igazsag az hogy en C-ben programozok, de a pascalban is hasonloan dolgozik a proci.
(#) Szpidi válasza vilmosd hozzászólására (») Aug 30, 2011 /
 
Köszi az ötletet.
Ami nagyon tetszik, hogy gyakorlatilag 1 időzítővel akárhány idővezérelt funkciót tudsz csinálni. Ez jó, nekem nem jutott eszembe!
Illetve odáig jutottam, hogy meg kell számolni a megszakításokat. Csak az nem, hogy ez az összes funkcióhoz használható egyszerre és nem kell minden idővezérléshez külön timer. Köszi!
(#) alienco válasza Szpidi hozzászólására (») Aug 31, 2011 /
 
A mellékelt fájl segítségével könnyen kiszámolható az interrupt, kódot is generál.
(#) Szpidi válasza alienco hozzászólására (») Aug 31, 2011 /
 
Szia!

Ezzel mennyivel egyszerűbb számolni. Este is kiszámoltam, papíron elég volt fél óra, ezzel 1 sec és még kódot is ír...

Amivel még mindig gondom van, hogy nem tudom megjeleníteni az időt. Létezik, hogy az LCD valamilyen időzítései használnák a timereket?

Szerintem mindent beállítottam, engedélyeztem, mégsem történik semmi. Illetve az LCD-n látható szöveg minden reset után máshol bukkan fel.

Ez milyen jelenség? Változók (helyfoglalása) vagy a timerek akadnak össze? Vagy mégis én rontok el valamit? Hogy tudnám az időt kiírni LCD-re? Egyenlőre még mindig 16F917-el próbálom megoldani.

  1. program ora;
  2.  
  3. // LCD module connections
  4. var LCD_RS : sbit at RC2_bit;
  5. var LCD_EN : sbit at RC3_bit;
  6. var LCD_D4 : sbit at RC4_bit;
  7. var LCD_D5 : sbit at RC5_bit;
  8. var LCD_D6 : sbit at RC6_bit;
  9. var LCD_D7 : sbit at RC7_bit;
  10.  
  11. var LCD_RS_Direction : sbit at TRISC2_bit;
  12. var LCD_EN_Direction : sbit at TRISC3_bit;
  13. var LCD_D4_Direction : sbit at TRISC4_bit;
  14. var LCD_D5_Direction : sbit at TRISC5_bit;
  15. var LCD_D6_Direction : sbit at TRISC6_bit;
  16. var LCD_D7_Direction : sbit at TRISC7_bit;
  17. // End LCD module connections
  18.  
  19. var oracounter : integer;
  20. var sec : bit;
  21. var szamlalo: integer;
  22. var szamtext : string[6];
  23.  
  24.  procedure szamol();
  25.     begin
  26.          szamlalo:=szamlalo+1;
  27.          inttostr(szamlalo, szamtext);
  28.          lcd_out(2,5,szamtext);
  29.     end;
  30.  
  31. procedure interrupt ();
  32.     begin
  33.     if PIR1.TMR1IF then begin
  34.  
  35.        TMR1H := $3C;     // preset for timer1 MSB register
  36.        TMR1L := $B0;     // preset for timer1 LSB register
  37.        PIR1.TMR1IF := 0;
  38.        oracounter:=oracounter-1;
  39.        if oracounter = 0 then begin
  40.          oracounter := 10;
  41.          sec:=1;
  42.          end;
  43.       end;
  44.     end;
  45.    
  46.  Procedure Set_timer1();
  47.     begin
  48.          // Timer1 Registers:
  49.          // Prescaler=1:4; TMR1 Preset=15536; Freq=10,00Hz; Period=100,00 ms
  50.          T1CON.T1CKPS1 := 1;// bits 5-4  Prescaler Rate Select bits
  51.          T1CON.T1CKPS0 := 0;
  52.          T1CON.T1OSCEN := 1;// bit 3 Timer1 Oscillator Enable Control: bit 1=on
  53.          T1CON.T1SYNC  := 1;// bit 2 Timer1 External Clock Input Synchronization Control bit: 1=Do not synchronize external clock input
  54.          T1CON.TMR1CS  := 0;// bit 1 Timer1 Clock Source Select bit: 0=Internal clock (FOSC/4) / 1 = External clock from pin T1CKI (on the rising edge)
  55.          TMR1H := $3C;     // preset for timer1 MSB register
  56.          TMR1L := $B0;     // preset for timer1 LSB register
  57.          pie1.tmr1ie   := 1;
  58.          intcon.peie   := 1;
  59.          intcon.gie    := 1;
  60.          T1CON.TMR1ON  := 1;// bit 0 enables timer
  61.          pir1.tmr1if   := 0;
  62.      end;
  63.      
  64. BEGIN
  65.  
  66.     sec:=0;
  67.     oracounter:=10;
  68.     szamlalo:= 0;
  69.     szamtext:=' kezdo';
  70.     Lcd_Init();                        // Initialize LCD
  71.     Lcd_Cmd(_LCD_CLEAR);
  72.     Lcd_Cmd(_LCD_CURSOR_OFF);
  73.     Set_timer1();
  74.     Lcd_Out(1,5,'ido:');
  75.  
  76.     while true do
  77.     begin
  78.          if sec=1 then
  79.             begin
  80.                   szamol();
  81.                   sec:=0;
  82.             end;
  83.     end;
  84.  
  85. END.

ido.JPG
    
(#) forma1 hozzászólása Aug 31, 2011 /
 
Ezt a MikroPascal programozót (vagy mi ez) érdemes megvenni?
(#) alienco válasza forma1 hozzászólására (») Aug 31, 2011 /
 
Ha találsz egy akciósat, mindenképp!
Minden mikrokontrollert tud kezelni.
(#) Szpidi válasza Szpidi hozzászólására (») Aug 31, 2011 /
 
Megint kiderült hogy én vagyok a hiba oka...
Ráadásul megint ugyanazzal.
A probléma megoldása: LCDCON:=0;
(#) gthomas hozzászólása Szept 13, 2011 /
 
Sziasztok!

Szeretnék PIC-kel sms-t küldeni egy HUAWEI usb-s modemen keresztül. Csinált már ilyet valaki? Keresgéltem a neten, de amit találtam az mind rs232 kommunikáció. Ez a modem pedig kicsi, és az ára is jó. Melyik pic-kel lehetne ezt összehozni?
Köszi!
(#) icserny válasza gthomas hozzászólására (») Szept 13, 2011 /
 
minimum PIC24 vagy PIC32, mert USB host képességű vezérlő kell hozzá. S törheted a fejed, hogy meghajtóprogramot honnan szerzel hozzá... Szerintem ezen nehézségek miatt választják inkább az RS-232 kapcsolatot mások.
(#) gthomas válasza icserny hozzászólására (») Szept 13, 2011 /
 
Gondoltam, hogy nem véletlen hogy mások is ez irányban haladnak. És akkor nézzek egy soros modemet, vagy ez az usb-s is jó? Esetleg egy usb->rs232 átalkítóval?
(#) icserny válasza gthomas hozzászólására (») Szept 13, 2011 /
 
Az USB-RS232 átalakító nem járható út számodra, mert a modemed is USB device, meg az átalakító is az. Ezek tehát nem köthetők össze közvetlenül. A helyedben soros modemet keresnék, az tűnik az egyszerűbb megoldásnak.
(#) Rasiel hozzászólása Nov 6, 2011 /
 
Üdv Mindenki, egy kis segítségre lenne szükségem ezzel a francos mikropascallal kapcsolatban. Lehet én rontok el valamit, de nálam a példaprogramot sem akarja build-olni, ha megpróbálom a saját vezérlőmre lefordítani (PIC16F627A) szerintetek mi a hiba? (belső oszcillátorral szeretném futtatni) Mellékelek képeket. Ha valaki tudja mi lehet a baj, legyen szíves mondja, mert nagyon kellene dolgozgatnom vele
(#) kaqkk válasza Rasiel hozzászólására (») Nov 6, 2011 /
 
Nem ismerem a mikropascalt , de a 16f627 nek nincs se c-se d portja . szerintem nevezd át a ki-bemeneteket és működni fog
(#) vilmosd válasza Rasiel hozzászólására (») Nov 6, 2011 /
 
A 16F627A 1-nel kevesebb ANSEL regisztert tartalmaz. Adatlap mit mond?
(#) El_Pinyo válasza Rasiel hozzászólására (») Nov 6, 2011 /
 
Ha legalább elővetted volna a kontroller adatlapját, akkor tudnád, hogy nincs sem ANSEL, sem ANSELH regisztere. Ha ki akarod kapcsolni a komparátort, akkor a CMCON-ba kell 0x07-et beírni.
Ha portolni akarsz egy másik kontrollerre írt kódot, az az első, hogy megnézed az adatlapban, a lényegi különbségeket.
(#) Rasiel hozzászólása Nov 6, 2011 /
 
Köszöntem! Sorry nem tudtam hogy ennyire típusfüggőek a kódok még így is. ez az első Pices szárnybontogatásom. Köszi a segítséget, így működik!
(#) icserny válasza Rasiel hozzászólására (») Nov 7, 2011 /
 
A szánybontogatást az adatlap gondos áttanulmányozásával kell kezdeni, mert különben honnan tudnád, hogy MIT akarsz működtetni, és az HOL van, melyik lábon jön ki?

A mikrovezérlő nem általános célú számítógép, itt a program arra való, hogy az adott mikrovezérlő adott perifériáját egy adott kapcsolásban a kívánalmaknak megfelelően működtesse. Bármit megváltoztatsz, az eredeti program már használhatatlan, módosítani kell rajta!
(#) gthomas hozzászólása Nov 11, 2011 /
 
Sziasztok!

Egy 18F4550 piccel és egy nokia 6230 -as telefonnal szeretnék sms küldeni, fogadni. Először a telefont egy PC-vel szeretném összekötni, hogy tanuljam a kommunikációt, aztán jöhet a PIC. Sajnos nem akar a kommunikáció létrejönni. Csatolom a rajzot az áramkörről amit építettem, szerintetek jó? A neten keresgéltem leírást, elvileg 9600 8N1 -gyel mennie kellene. DockLight-tal szólongatom, egy AT++ sorozattal. Erre vissza kellene küldeni egy OK-t, de semmi válasz. Valaki készített már ilyet?

Üdv: T.
(#) gapati hozzászólása Nov 11, 2011 /
 
Sziasztok!

Azt szeretném megkérdezni, hogy a mikropascal-hoz is létezik-e valami soros letöltő, amivel a lefordított progit bele lehet írni a prociba? Én ezidáig az MPLAB-ot használtam ICD2-vel, vagy a Kónya féle soros letöltőt. A mikropascal menüjében látom hogy lenne erre mód, de milyen hardware és milyen soft. kell a prociba? Ezeket hol keressem a neten? Tudnátok valami kiinduló linket mondani?

Köszönettel: gapati.
(#) Fery válasza gapati hozzászólására (») Nov 11, 2011 /
 
Szia. Én nagyon régen a PICKIT 2-őt használom. A saját progija figyeli a hexet, úgy hogy ahogy lefordítom a progit, beavatkozás nélkül azonnal bele is veri a PIC bucijába...

Így nem kell külön égetni, automatikusan megy....

Mivel ez bevált évek óta, így nem kerestem mást....

Annyit hallottam, hogy a Mikropascal forgalmazójának a saját égetője aranyárban van....

Fery
(#) gapati válasza Fery hozzászólására (») Nov 11, 2011 /
 
Az égető gondolom hogy drága, (van ICD2-m) én a MikroBootloaderre gondoltam. Ahogy nézem a hardware nem lehet túl bonyolult, de nem tudom milyen softtal kommunikálna.
Üdv: gapati
(#) TNPsoft válasza Fery hozzászólására (») Nov 11, 2011 /
 
Sziasztok!
Bizony aranyár:40000Ft.
Nem éri meg!!!
Én is mplab pickit2 kombinációt használok.
Az mplab-ba csak egyszer kell a meló elején beimportálni a hex-et. Utána csak a programozás gombra kell kattingatni. Az importálással csak a hex helyét mutatod meg, mindig frissül.
(#) Fery válasza gapati hozzászólására (») Nov 11, 2011 /
 
(#) Fery válasza TNPsoft hozzászólására (») Nov 11, 2011 /
 
Szia

Negyven Ropi...??? Az tényleg durva egy tetves égetőért...
Jó hogy lehet kapni
(#) gapati válasza Fery hozzászólására (») Nov 12, 2011 /
 
Sziasztok!

Én az ICD2-t építettem meg, mindenképpen 10ezer alatt volt az egész. USB-s, és az is sok PIC-et és eepromot ismer(talán az öszeset még egy darabig), tud debuggolni, szóval mindenképpen hasznos dolog.

Jövö héten belevetem magam a mikropascalba, ezidáig asm-be írtam a progikat, ott nem volt semmi gond a letöltö kulcs használatával. Megpróbálom használni ugyanazt a kulcsot, és a hozzávaló progit, hiszen az is csak egy HEXfilét tölt be a PICbe.

Üdv: gapati
(#) gapati hozzászólása Nov 21, 2011 /
 
Sziasztok!

Ismerkedek a mikropascallal. és az ADC-vel kapcsolatban volna egy két kérdésem. Azt meg tudom mondani valahogy a PIC-nek hogy külső referenciát szeretnék használni? Az ADC_Read(...) függvény csak belső referencia mód estén használható? Az ADNON1-be én beállítottam RA3-ra a külső referenciát, de nem veszi figyelembe,a belső 5V-val számol.
A másik a kérdés a konverziós függvényekkel kapcsolatos.
A FloatToStr(...) függvény használata nekem kb 700 byte-val növeli a lefordított kódot. Itt nerm lehet valamit megadni fordítónak, hogy kisebb kódot generáljon?

Köszönettel: gapati
(#) Rasiel hozzászólása Nov 22, 2011 /
 
Üdv !

Egy Mpascal guru segítségét szeretném kérni. tudna valaki egy egyszerű példaprogramot írni ahol 2 folyamat fut egy időben egymás mellett? (pl egy procedure ami figyeli a bemeneteket és annak megfelelően magasra állítja a kimenetet, a másik pedig felváltva kapcsolgat 2 kimenetet) egy motorvezérlő programhoz kellene a PWM miatt. Előre is köszönöm.
Következő: »»   18 / 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