Fórum témák

» Több friss téma
Fórum » PIC BASIC
 
Témaindító: hinar_, idő: Máj 7, 2008
Témakörök:
Lapozás: OK   1 / 23
(#) szena81 hozzászólása Júl 16, 2007 /
 
Hello mindenkinek!

Problémám a köv.:
PicBasic fordítot használok 16F877A programozáshoz. Valamiért nem működnek benne az időzítéssel kapcsolatos parancsok (PAUSE, SLEEP, stb). Simulátorban nézve, ha program eléri ezeket a parancsokat egyszerűen csak egy végtelen ciklusként működik, és a program nem megy tovább az adott idő leteltéve. Egy egyszerű példában:

Define CONF_WORD = 0x3f72
Define OSC 20

i var Byte

TRISB = 0

loop:
For i = 0 To 255
PORTB = i
PAUSE 70
Next i
Goto loop

A PAUSE parancsnál "beragad". Mit csinálok rosszul?
(#) dpeti válasza szena81 hozzászólására (») Júl 16, 2007 /
 
nem értek a picbasic-hez, de az oszcillátoros beállításnál nem 20 000 000-nek kellene lennie 20 helyett? gondolom 20 MHz-eset használsz
(#) dpeti válasza dpeti hozzászólására (») Júl 16, 2007 /
 
utánnanéztem, tényleg 20, bocsi
(#) bbatka válasza szena81 hozzászólására (») Júl 16, 2007 / 4
 
Én sem látok hibát, bár még nem programoztam Picbasic-ben. Próbáld meg kisebb idözítéssel mondjuk PAUSE 1

Nemtom mit takar a számszerűsített config bellításod. Lehet hogy ott kell keresni a hibát?
(#) szena81 válasza bbatka hozzászólására (») Júl 16, 2007 /
 
Köszönöm mindenkinek a segítséget. Valóban a program jó , a hardverrel volt a gond , a simulátornál meg az idővel (türelmetlen voltam)
(#) hinar_ hozzászólása Máj 7, 2008 /
 
Keresek a Pic programozáshoz MPLAB hoz Basic fordított, de nem találok.
Tud valaki segíteni ?
Ajánlati esetleg olyan programot amivel Basic nyelven tudnák chipeket programozni?
(#) vizor válasza hinar_ hozzászólására (») Máj 7, 2008 / 4
 
http://www.mikroe.com/en/download/

Basic, Pascal és C fordítójuk is van. A pascalt kipróbáltam, nagyon egyszerű volt használni. Bár én maradtam az assemblynél, hiszen igazán megtanulni a pic programozást azzal lehet.
(#) eSDi válasza hinar_ hozzászólására (») Máj 7, 2008 /
 
Üdv!

Oshonsoft PIC Simulator IDE

Ez nem csak BASIC fordító hanem egy egész fejlesztő környezet. Igaz nem ingyenes, de 7e Ft-ot megér. Én ezt használom egy jó ideje és szerintrem nagyon jó.

Bővebben: Link
(#) watt hozzászólása Máj 7, 2008 /
 
Majd akkor látjátok meg mennyit ér a Basic, meg a Pascal, mikor elakadtok és kérdeztek! Alig van, aki ilyen nyelven nekiállna PIC-et programozni kezdő szintnél magasabb szinten...
(#) Tomekk válasza hinar_ hozzászólására (») Máj 7, 2008 /
 
Én egy Mikrobasic nevű progit használok.Egész korrekt és van asm fordítója is.Igaz az mplabal nem tudod megnyitni utánna de a hex fájt amit generál azt már be tudod égetni a pic-be.
Keress rá a goglin biztos kidob pár letölthető verziót.
(#) Moderátor hozzászólása Tomekk hozzászólására (») Máj 7, 2008
 
Vizor éppen ezt a progit linkelte be ebben a hozzászólásában.
(#) zsuscsinyo hozzászólása Máj 12, 2008 /
 
Sziasztok! A segítségeteket szeretném kérni egy igen egyszerű probléma megoldásához. Most kezdtem foglalkozni a PIC programozással, először Assembly nyelven kezdtem el tanulgatni, de ez számomra még nagyon távolinak tűnik használni mivel a program struktúra is közrejátszik, ezért találtam egy jónak tűnő Basic fordítót a Mikro Basic-et. Előszöris PIC16F628-as mikrokontrollert használok, a PortB-t kimenetre a PortA-t viszont bevitelre alkalmaznék. A kivitellel semmi problémám nincsen már szépen ki tudom küldeni az adatot, viszont amikor figyelni kell egy bemenetet itt mégha bele is szakadok sem sikerül. Kapcsolási rajzot nem csinálok mert igen egyszerű:

RA0 : 1-es gomb 17-es láb
RA1 : 2-es gomb 18-as láb

Alapba felengedett állapotban fel van huzva egy 2.2K-val a tápra, lenyomva közveten a földre húzza.

Már 4 órája megállás nélkül ezzel a problémával kisérletezek és már kezdek fáradni, ezért is kérdezlek titeket. Ha tudnátok valami ötletet adni megköszönném!

üdv: Zsuscsinyo
(#) potyo válasza zsuscsinyo hozzászólására (») Máj 13, 2008 /
 
Az adatlapban az 5. fejezetben levő Note1-et olvasd el, illetve az 5.1 cím alatti negyedik bekezdést, különös tekintettel az utolsó mondatára.


Idézet:
„de ez számomra még nagyon távolinak tűnik használni”


Pedig jobb lenne, és a Basic-et pedig elfelejthetnéd örökre a kontrollerek terén.
(#) zsuscsinyo válasza potyo hozzászólására (») Máj 13, 2008 /
 
Köszönöm a segítséget!!!
Sikerült megoldani!
(#) gyerek67 hozzászólása Máj 13, 2008 /
 
Bizony, a Basic-et el kell felejteni!
"Egyszerűbb" dolgokhoz jó, de engem nagyon megszívatott.
PicBasicPro-val dolgoztam és megpróbáltam "összeházasítani" egy timer interruptot egy eeprom kezeléssel. Külön külön mindkét progi darabka remekül működött, együtt meg sehogy.
A szkóp mutatta meg, hogy a megszakítás kiszolgálása teljesen meghülyítette az eeprom órajelét!
Nem lehet tudni, hogy egy utasítás végrehajtásakor mi zajlik a háttérben.
Basic ment a levesbe, most C-ben bütykölök és minden a helyére került.
(#) bbatka válasza gyerek67 hozzászólására (») Máj 13, 2008 /
 
És a C-ben nem fordulhat elő úgyanez az eset? A nyelv milyenségétől függ hogy a programozó környezet fejlesztője hanyag munkát végzett?
(#) gyerek67 válasza bbatka hozzászólására (») Máj 13, 2008 /
 
Ebben igazad van, nem a nyelv fajtája a meghatározó.
A bajom viszont azzal volt, hogy Basic-ben egyátalán nem tudtam ezt a feladatot megoldani.
Két elfecsérelt nap, eredmény 0...
Kaptam C-t, tanulgatom, a fenti problema már rég leküzdve...
(#) Matt hozzászólása Jún 9, 2008 /
 
Hali!

Vak a következő PIC basices program, amit ha leszimulálok pl. Oshon-al akko tökéletesen működik, de ha a hardverkörnyezet összerakom, akkor nem azt csinálja amit kéne. PORTB7-en egy kapcsoló van, amit ha bekapcsolok akkor bekapcsol a 2 relé. Ha kikapcsolom, akkor a PORTA0-án lévő relé kikapcsol, majd kis idő múlva pedig a másik. Az e változót az eepromba tárolom. Szerintetek a hardverben van a hiba? Csatolom a kapcsirajzot is..

device=16f627
xtal=4

Dim i As Byte
Dim e As Byte
dim pwd as byte
dim be as byte
dim auth as byte
dim auth2 as byte

i=0
pwd=150

TRISA = %00000
TRISB = %10000010
OPTION_REG = %10000111
CMCON = 7
INTCON.5=1

ON INTERRUPT GOTO int

disable

loop:
i = 0
TMR0 = 0
If PORTB.7 = 1 Then
PORTA.0 = 1
PORTA.1 = 1
Endif

If PORTB.7 = 0 And PORTA.0 = 1 Then
PORTA.0 = 0
e=eRead 0
TMR0 = 0
enable
While i <> e
If PORTB.7 = 1 Then
disable
TMR0 = 0
i = 0
Goto loop
Endif
Wend
disable

PORTA.1 = 0
Endif
Goto loop
End

int:
i=i+1
INTCON.2=0
resume

Előre is köszönöm.

Bye

kapcsrajz.JPG
    
(#) zsuscsinyo hozzászólása Szept 10, 2008 /
 
Sziasztok!

Egy ötlet érdekelne engem, ugyanis Propeller clock-ot építek és mikrobasic-kel irom a programot. Odáig eljutottam hogy kimaszkoltam a számokat pontosan így:

(ez az 1-nek a maszkja)


PORTA = %000100
PORTB = %00001100
delay_us(600)
PORTA = %001111
PORTB = %00111100
delay_us(600)
PORTA = %000000
PORTB = %00001100
delay_us(600)
PORTA = 0
PORTB = %00000100
delay_us(1200)


A kérdésem a következő, hogyan tudnám megoldani azt hogy ha egy változó folyamatosan növekszik, akkor annak az értékének megfelelően ugrik az ilyen programrészekhez. Mondjuk GOSUB utasítással lenne a legjobb de hogy tudnám rávenni arra, ha a 'perc' változó épp 3-at mutat akkor a 3-as szám maszkjához ugorjon? A rengeteg if...then-be belehalna ez a csöpp kis 16F628-as (Fogy a memória)

Amúgy a "Select case" utasítás felkeltette az érdeklődésemet hogy hátha ezzel megoldható, de sajnos még nem teljesen tiszta hogy is működik

Ez egy kicsivel komplikáltabb mint a multiplexelt 7 szegmens, de nagyon kitartó vagyok és nem adom fel, ha esetleg valakinek akad egy jó ötlete azt szívesen fogadom. A válaszokat köszönöm!
(#) Báddzsó válasza zsuscsinyo hozzászólására (») Szept 10, 2008 /
 
nézegesdd a branch utasítást, az szerintem segíthet, én is azt használtam
és akko r avégén sorban küldöd ki a karakter 5-6 elemét, amit korábban betöltöttél egy tömbböl a 5-6 változóba.
(#) Báddzsó válasza Báddzsó hozzászólására (») Szept 10, 2008 /
 
már nem tudom módosítani az előző hsz-omet...:
így gondoltam:


  1. branch kikar,[ A, B, C, D, E, F, G, H, I, J
...
A: reszA=$3F : reszB=$44 : reszC=$44 : reszD=$44 : reszE=$3F : goto betukiir
B: reszA=$7F : reszB=$49 : reszC=$49 : reszD=$49 : reszE=$36 : goto betukiir
C: reszA=$3E : reszB=$41 : reszC=$41 : reszD=$41 : reszE=$22 : goto betukiir
D: reszA=$7F : reszB=$41 : reszC=$41 : reszD=$22 : reszE=$1C : goto betukiir

és a kor a betükiir értelemszerűen kiküldi az 5db resz* változókat egymás után egy portra.
(#) zsuscsinyo válasza Báddzsó hozzászólására (») Szept 10, 2008 /
 
Oké sikerült megoldani valóban a branch-ot kellett nézni, úgy csináltam hogy kiolvastam az óra változóit, utána kiküldtem gosub-bal hogy return-nal visszatérhessen, így oldottam meg:

...
kijelzo = tora
gosub kijelzes
kijelzo = eora
gosub kijelzes
kijelzo = tperc
gosub kijelzes
kijelzo = eperc
gosub kijelzes
...

kijelzes:

select case kijelzo
case 0
PORTA = %000111 '1
PORTB = %00110100
delay_us(600)
PORTA = %001000 '2
PORTB = %00001100
delay_us(1200)
PORTA = %000111 '3
PORTB = %00110100
delay_us(600)
PORTA = 0
PORTB = %00000100
delay_us(1200)
case 1
PORTA = %000100
PORTB = %00001100
delay_us(600)
PORTA = %001111
PORTB = %00111100
delay_us(600)
PORTA = %000000
PORTB = %00001100
delay_us(600)
PORTA = 0
PORTB = %00000100
delay_us(1200)

case 2
...
case 3
...
case 4
...
case 5
...
case 6
...
case 7
...
case 8
...
case 9
PORTA = %000110 '1
PORTB = %00000100
delay_us(600)
PORTA = %001001 '2
PORTB = %00001100
delay_us(1200)
PORTA = %000111 '3
PORTB = %00110100
delay_us(600)
PORTA = 0
PORTB = %00000100
delay_us(1200)

end select

return


Köszi a megerősítést, tényleg ezzel kellett babrálni
(#) Báddzsó válasza zsuscsinyo hozzászólására (») Szept 11, 2008 /
 
érdekes, .. ez a select case és nem a branch utasítás, .. de mind1, lényeg hogy megy...
(#) zsuscsinyo válasza Báddzsó hozzászólására (») Szept 11, 2008 /
 
Use the select case statement to pass control to a specific program branch, based on a certain condition. The select case statement consists of a selector expression (a condition) and a list of possible values.

azért van benne "valami" amúgy köszi a segítséget, ugyanezen az elven működik.

Ez PicBasic nyelven van amit küldtél?
(#) zsuscsinyo hozzászólása Okt 5, 2008 /
 
Ismét én vagyok Most az a gondom hogy Soft_uart-tal küldök adatot egy 8-bites shift regiszternek (74LS164N), közben pörög a 32.768-as kvarc oszcillátor, félő az a gyanúm hogy ez avatkozik bele, ugyanis ha megszakítás érkezik vagyis engedélyezve van a TIMER1 megszakítás, akkor számok helyet 0-át ír ki a 2. és a 3. kijelzőre. Viszont ha kikapcsolom a külső megszakítást akkor normálisan megy minden...

Szerintem amikor küldi az adatot akkor történik a megszakítás, és nem bírja végiküldeni azt a 8 bitet.

Szerintetek hogy tudnám megoldani a helyzetet, szükséges minden alkalommal amikor küldi az adatot akkor tiltsam a megszakítást? minden megoldást várnék

üdv
(#) kobold válasza zsuscsinyo hozzászólására (») Okt 5, 2008 /
 
Minden megszakításhoz tartozik engedélyező bit is (globálisan GIE, perifériákra PEIE stb.). Adatlapból keresd ki a kívánt bit nevét, soros küldés előtt töröld, aztán kapcsold vissza.
(#) kissanyi válasza bbatka hozzászólására (») Okt 5, 2008 /
 
Szerintem is jobb, ha az ember egyenesen bináris kódokat pötyögtet.
Így, minden pillanatban fel lehet találni a kereket, meg a melegvizet.
(#) zsuscsinyo válasza kobold hozzászólására (») Okt 5, 2008 /
 
Amilyen egyszerűnek tűnik annyira nem könnyű :no: Ez nem jött össze, perpillanat még fogalmam sincs hogy oldjam meg
(#) Báddzsó válasza zsuscsinyo hozzászólására (») Okt 5, 2008 /
 
és mivan ha adatkiküldésenként figyelnéd a timer 1-et? megszakitás nélkül?
Mi lenne ha usart-ot használnál?
nézd ezeket meg:
12-16F megszakításkezelő picbasichez
18F megszakításkezelő picbasichez
(#) zsuscsinyo válasza Báddzsó hozzászólására (») Okt 5, 2008 /
 
Nah, megint összehoztam valamit, bár nemtudom hogy mennyire lesz pontos

A lényeg annyi hogy "próba kemence" képpen kivettem az interrupt ciklust (gondoltam felesleges másodpercenként 32768-szor előhívódnia és csak a TIMER1 IF-et figyelnie )

Ezért úgy döntöttem hogy igaz Pollinggal figyeltetem a TIMER1 IF-et, de minden soros kiírásnál, a léptető programrészt is kijelzés utánra tettem. Nemnagyon szeretem hogy a kvarc rutinjában delay-ok futnak, mert nembiztos hogy időben fog interruptolni, nah meg főleg Pollinggal Ha nem lesz másik mód akkor ezt kell fényesre csiszoljam, lehet megeszi a memóriát de talán 2K elég egy szimpla órának

Remélem azért nagyjából lehet érteni amit elmondtam

üdv
Következő: »»   1 / 23
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