Program írás help

Ide kerültek azok a témák melyek nagyon összevissza voltak. Olvasni lehet őket, de írni hozzá már nem.
Lezárt
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

Hozzászólás Szerző: nobody_hun »

Nem csak a súgó van, a procnak van adatlapja is, amiben benne van amiről Robert írt. :wink:
Avatar
sz332
Újonc
Újonc
Hozzászólások: 8
Csatlakozott: 2006. december 14. csütörtök, 7:00

Hozzászólás Szerző: sz332 »

Sziasztok!

1 másodperces várakozást akarok, a következő kódhoz:

$crystal = 4000000
..

While Counter < 120
Cls
Lcd Counter

Counter = Counter + 1

' ide jönne a várakozás

Wend

wait 1 nem annyit vár, amennyit kellene :(

Amit találtam, az a következő kód:

$asm

ldi R17, 0xAF
ldi R18, 0x96
ldi R19, 0x36
_Delay5sb:
subi R17, $01
sbci R18, $00
sbci R19, $00
brne _Delay5sb

$end Asm

Itt a regiszterek értékét kellene változtatgatni.. van erre
valami ötleteket?

Üdv.

Zsolti
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Súgó, waitms parancs:

Kód: Egész kijelölése

_WaitMS:
_WaitMS1F:
Push R30 ; save Z
Push R31
_WaitMS_1:
Ldi R30,$E8 ;delay for 1 mS
Ldi R31,$03
_WaitMS_2:
Sbiw R30,1 ; -1
Brne _WaitMS_2 ; until 1 mS is ticked away
Sbiw R24,1
Brne _WaitMS_1 ; for number of mS
Pop R31
Pop R30
Ret
DE: az INT rutinok ezt kitolják!
ha precíziós időzítést akarsz, akkor a TIMER számlálót használod. Most kérdés mennyire kell pontosnak lennie.
Számolnod kell a INT rutinba be és kilépéssel. A bascom szimulátorban ezzel is számolva:

Mintaprogi (mellette az idők):

Kód: Egész kijelölése

'$sim                            '0msec
Print "start"                   '
Waitms 1000                 '0,239msec
Print "end"                    '1001,026msec
End
Azaz a Waitms 1000 utasítás ténylegesen (ha nem esik be INT), akkor 1001.026msec-0,239msec=1000,787msec.

Ha a waitms 1000 helyett waitms 999-et írsz, akkor ugyanez:
1000.525msec-0,239msec=1000,286

Na pontosítsunk: 998-al:
999,4915-0,239=999,2525 msec

És a maradékot kipótoljuk a waitus utasítással, mondjuk 500-al:
999,9915-999,4915=0,4235msec
Na írjunk 1000 us időt:
1000,491-999,4915=0,9995 msec

Szóval, ha waitms 998-at írunk, akkor:
999,2525 msecunk van. Ehhez kell adni ugye: 1000-999,2525=0,7475msec azaz 747,5 us időt.

Tesztelve a szimulátorban:
1000,239-0,239=1000 msec!

Nyertünk:)
A kód:

Kód: Egész kijelölése

waitms 998
waitus 747
Szóval a szimulátorban ez jött ki.
4MHz órajel, és 2313 chip esetén....

U.i.: a waitms közel percíz, a waitus idő nop ASM uitasításokból rakja ki, így pontatlanabb! A SÚGÓ erre külön kitér.

U.i.2.: Na, jó hosszú lett:) de legalább követhető...
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

nem idevág de nem találtam jobb topicot rá:
atmega8
PD1 és PD0 nem úgy viselkedik ahogy kéne neki
hiába mondom PD.1 nek hogy high nem történik semmi
de ha pl portd=255 akkor az is high lesz
pd0 viszont csak high ezt nem lehet lowra tenni
még a portd=0 val sem ez a két láb elviekben az RxD TxD
de fuse ba nem találtam olyan lehetőséget amivel ezt külön I/o-nak kéne
beállítani
PD1-en programozás közben villog a led úgy mint az STK200-on lévő led
bascom leírásban épített
lehet magát a vezérlőt kinyírhattam valamivel?
sémában a programozó és a csak ADC lábakat kerülve 16 led lóg föld felé.
Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00

Hozzászólás Szerző: norbi »

vedd k ia programbol a $baud=sebesseg utasitast:)

en is szivtam mar emiatt 8)
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

kipróbálom igazad lehet mi a francot keres az ott..
Avatar
padum
Biztosítékgyilkos
Hozzászólások: 60
Csatlakozott: 2007. június 14. csütörtök, 6:00

Hozzászólás Szerző: padum »

Üdv mindenkinek!

Még új vagyok a fórumon, így ha választ kapok az egyik kérdésre, már jön is a következő probléma :oops:
Már régóta szeretném nagyszabású, világmegváltó ötleteimet végre megvalósítani az AT család segítségével ':roll:'
Eddig a megfelelő prog.nyelv kiválasztása késleltetett.
Két nyelv az ASSEMBLY és a BASIC jöhetett számításba, mivel hobbi szinten már irtam ezeken progikat. Hosszas latolgatás után a BASCOM mellet döntöttem, egy ATmega16-os mikrovezérlővel a műtőasztalon :wink:
Mivel nem vagyok nagyratörő, a portok programozásával kezdtem, perifériaként ledekkel és nyomógombokkal meg spékelve. Kisebb nehézségeim voltak a C-porton, de rájöttem a JTAG kapcsolhatóságára :lol: Amiben a segítségeteket kérem: a B1, B2 portokon lévő nyomógombokat a szimulátor érzékeli, de programozás útán a panelen nincs reakció. Multiméterrel ellenőriztem az 1., 2. lábakat és a feszültség szint OK. Hol a hiba???
Előre is köszi
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Látatlanban:

Port és PIN utasítás keverése. 38. fejezetben magyarázat ott van (kezdők problémái:)). A programrészlettel amúgy elölrébb sikerülne lenni:)...

config portirány megadása után:

Kód: Egész kijelölése

Porta=valami 'kiírás a portra
valami=pinb 'a port lábállapotának beolvasása
valami=porta 'a kiírt adat visszaolvasása (lábállapottól függetlenül)
Avatar
padum
Biztosítékgyilkos
Hozzászólások: 60
Csatlakozott: 2007. június 14. csütörtök, 6:00

Hozzászólás Szerző: padum »

Nagyon köszönöm robert!

Eltaláltad, nem ismertem a PIN és a DDR használatát :lol:
Most, hogy megirtam első pár, tucat gyakorlóprogimat, újabb kérdésekkel zaklatnám a publikumot. :twisted: Sok dologban nem tudom eldönteni, hogy
ugyanazt az utat járom e ugyanazon cél eléréséig é, vagy csak a primitív programjaimból nem süt a lényegi külömbség :roll:
Anno gépikódú progik írásánál keményen rákényszerültem a végcél figyelése mellett, a minél pörgősebb, tisztább rövidebb kód írására 8)
Tehát a kérdéseim: 1. A DDRb=0 azonos a CONFIG PORTb Inputtal? mikor jobb az egyik vagy a másik?
2. Alábbi programban a végeredmény ugyanaz. Vajon
lényegében is ugyanaz történik?
Íme:

$regfile = "m16def.dat"
$crystal = 16000000
$baud = 9600

Ddrb = 0
Ddrc = 255
Ddrd = 255

Dim A As Byte
Dim X As Byte
Dim Y As Byte
Dim Z As Byte

Do

Lekerdez:
A = Pinb
If A = 254 Then
Goto 19
End If

If A = 253 Then
Goto 1hijan20
End If
Goto Lekerdez


19:
For X = 0 To 7
Set Portd.x
Waitms 300
Reset Portd.x
Next X
Goto Lekerdez

1hijan20:
Y = 1
Portd = 1
Waitms 100
For X = 0 To 7
Y = Y * 2
Portd = Y
Waitms 100
Next X

Loop
End


3. A port túl írásánál miért lép a következőre és tovább?
PL:

$regfile = "m16def.dat"
$crystal = 16000000
$baud = 9600

Ddrb = 0
Ddrc = 255
Ddrd = 255

Dim X As Byte


Do

X = X + 1

Portd.x = 1

Loop
End
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A config portb és a DDRB ugyanaz...

Az optimalizálás, végcél nem mindig fontos. Itt az időzítés ami érdekes lehet, az ASM - fejben optimalizálva - jobb. DE: most egy LCDkezelés, Sorosport ASMben ~ 1 hét, Bascomban 1 óra...


A program/fordító a hülyeségeket nem tudja kivédeni...

Hogy hogy optimalizálod? Ez a gyakorlattal jön majd úgyis elő. Illetve ha a chip megvan, és a flash kevés:))))
A Bascom ASM C arány
tömörségre:
10 7 8

fejlesztési időre
1 5 2-3

Szóval marad a Bascom:)
Avatar
padum
Biztosítékgyilkos
Hozzászólások: 60
Csatlakozott: 2007. június 14. csütörtök, 6:00

Hozzászólás Szerző: padum »

Robert köszi a jótanácsot!

A távoli jövőben ey messzi messzi galaxisban... :P vagyis, ha nagy leszek-mint most- szeretnék megvalósítani egy univerzális, CAN hálózatos autóba szerelhető hálózati dekódert, amit aztán pl. hagyományos távkapcs. nélküli riasztók vezérlésére vagy diagnosztikára is lehetne használni. Most főként a riasztós oldala érdekel a dolognak. Az azonosított adacsomagokhoz kéne egy kimeneti csatornát hozzárendelnii, mint rádióadókhoz a hifi nyomógombjait.
Előre is köszi az ötleteket. 8O

UI.:tetszik az oldal, csak nem valami nyüzsgő a fórum. Lehet, hogy egyedűl vagyok a talán ciki kérdéseimmel :?:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Spec terület az elektronikán belül, és kevesen is foglalkoznak vele, pláne HUN nyelven. És még a Bascom is szűkít:).

Amúgy azért fut a fórum, bár most vizsgaidőszak illetve nyár van. Normális ember a vízparton, vagy a hegyekben északon van:).
A CANra a 90S128CAN illetve a MCP chipek RS232-CAN átalakítóját láttam használni. Én még a RS485-nél járok csak:).

Kérdezz nyugodtan, azért az elmúlt 2 évben elég nagy tapasztalat halmozódott itt fel, nem is beszélve a sok-sok megvalósított projektről (lsd pl. a Versenyeket...)
Avatar
padum
Biztosítékgyilkos
Hozzászólások: 60
Csatlakozott: 2007. június 14. csütörtök, 6:00

Hozzászólás Szerző: padum »

Üdv!

CAN project vissza a polcra, de már itt is van a következő feladat.
ADC-s jelfeldolgozásról olvastam a Bascom könyv 15. fejezetében, de ez a téma, csak egy másic IC I2C kapcsolatára épülő köret. Tudom, először a kis ujjad, majd az egész ADC :wink: Mégis, nagy lökést adna a rogramozásban. Ha már van ilyen téma, akkor bocsi :roll:

Köszi!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Jó hírem van. Most írom a fejezette a hétvégén kerül ki az alapja az oldalra.....

De a Tinychipeknél (T13) van kinn egy minta szintén...
Avatar
7kaz
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2006. szeptember 26. kedd, 6:00

Hozzászólás Szerző: 7kaz »

Sziasztok!

M32-re kötöttem SD-foglalatot. Van egy 256MB-os kártya is, de valahogy nem akar összejönni a dolog. Nem a kapcsolással van baj, hanem a Bascommal nem boldogulok.

1:
1.11.8.1-es Bascom van. Ebben elvileg benne kéne lennie az AVR-DOS-nak, ugye?
2:
Hiába olvasgatom a help-et, nekem abból nem tiszta, hogy mit kell a programba írnom ahhoz, hogy az AVR kezelje végre a kártyát.

Ha valaki megszánna egy programrészlettel, ami elvezet addig, hogy beállít mindent, ami a DOS-hoz kell, és mondjuk végrehajtja a DISKSIZE utasítást, azzal sokat segítenétek!

Köszi!
Lezárt