ATTiny13 kezdő kérdések

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

ATTiny13 kezdő kérdések

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

sziasztok !
kezdő vagyok programozás terén , angoltudásom közel 0 .
Egyszerű progikat már írtam ,jól is működnek .
Most akadt némi problémám:
Ez egy strobi vezérlő lenne , és a program írást a villogtatás (program ) sorrendjével kezdtem , de máris megakadtam ! Rövid időre villantaná föl a ledeket egy meghatározott program szerint , jelenleg data1 szerint .

Itt egy egyszerü progi: és nem értem miért villan fel kétszer rögtön egymás után valameik led ? Ha csak 4*4 adat van a 4-ik ha 2*4*4 akkor a 3-ik
Itt a progi 1 része
Segítségeteket kérném!
:x :?:
$prog &HFF , &H7A , &HFF , &H00
$regfile = "ATtiny13.dat"
$crystal = 9600000

Config Portb = Output

Dim A As Word
Dim S As Word
Dim X As Word
Do

Restore Data1
For X = 1 To 2

For S = 0 To 3

Read A : Portb.s = A
Waitms 100
Portb = 0

Read A : Portb.s = A
Waitms 100
Portb = 0

Read A : Portb.s = A
Waitms 100
Portb = 0

Read A : Portb.s = A
Waitms 100
Portb = 0

Next S
Next X



Loop


Data1:
Data 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1
[/list]
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

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

az S ciklusban ugyanazt az utasítást adod ki 4x
azaz az S nem változik viszont a read A minden utasítása a következő
data értéket fogja adni (autoincrement)

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

$prog &HFF , &H7A , &HFF , &H00 
$regfile = "ATtiny13.dat" 
$crystal = 9600000 

Config Portb = Output 

Dim A As Word 
Dim S As Word 
Dim X As Word 

Do 
Restore Data1
For X = 1 To 2 

For S = 0 To 3 
Read A 
[color=green]' itt azért én hagynék egy kis időt a readnak[/color]
waitms 10
Portb.s = A 
Waitms 100 
Portb = 0
Next S 
Next X

loop

Data1: 
Data 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 
itt a restore a do-loop közé raktad azaz minden 2*4 adat után az első adattól fogja ujrakezdeni a read
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Köszi ez is a cél , ugyanis 4 programja lenne az eszköznek 4 féle villogással!
Ez lenne az 1-es (data1), és még lenne 3
Amig nem váltok programot 1 nyomógombbal addig ez futna, egy külső léptető jel hatására olvasná be a következő 1*4 adatot a data sorból. Ja ás mutatná 1 db kijelző hanyas programot választottam a ny.gombbal.
E miatt van ott a restore ahol van.

Azt nem értem hogy a data sorok szerint elfutna a fény out0 tól out3 ig majd viszza .
E helyett össze vissza villog , látszólag 1 irányba!
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

átírtam a progit a javaslatod szerint .
Eredmény először öszzeviszza villog majd rendszereződik 1 futófénnyé !
20-30 kör után megint összevissza majd elölröl.

itt a progi :

$prog &HFF , &H7A , &HFF , &H00
$regfile = "ATtiny13.dat"
$crystal = 9600000

Config Portb = Output

Dim A As Word
Dim S As Word
Dim X As Word

Restore Data1

Do

For S = 0 To 3

Read A
Waitms 10
Portb.s = A
Waitms 100
Portb = 0

Next S
Loop

Data1:
Data 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

egyébként mik azok a frame , stack izék
:?:
:oops:
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Robert nincs itt véletlenül??
Ő tutira tudná mi a helyzet ezekkel!
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

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

kefeur írta:Robert nincs itt véletlenül??
Ő tutira tudná mi a helyzet ezekkel!
hát bocs hogy probáltam segíteni
$prog &HFF , &H7A , &HFF , &H00
egyébként a biztosíték biteket nem hagynám igy az tuti..
jobb az kézzel
meg csinálhatja az is a problémád mer ez a progi olyan egyszerű
hogy az ilyet nem csinálhat
lehetne igy is pl... csinálni a kiválasztást

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

.....

......
if gomb =1 then 
futofeny=futofeny+1
   select case futofeny
             case 1
             restore data1
             case 2
             restore data2
             case 3
             restore data3
             case 4
             restore data4
    end select
if futofeny > 4 then futofeny=1

.....

do 

....

loop

gombmegszakit:
gomb =1

amugy meg ugy csinálod ahogy tetszik csak ötleteket próbáltam adni...
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Köszönöm a segítséget !
Minden hozzászólásból tanulok valamit.
Bocsánat ha félreérthetően fogalmaztam vagy sértőn , nem volt szándékos.
Nekem is gyanús valami ,mert ez tényleg egyszerű rövid progi , nem értem mi kavarja el a dolgokat.
case utasítást még nem ismerem . de utána nézek.
Még egyszer köszönöm.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Nem (csak) én vagyok itt. Sőt! A Többiek (így nagybetűvel) szintén tudásuk legjavát próbálják átadni.... Mindenkinek egy kicsit más a programozási stílusa, mást tart fontosabbnak, mást valósít meg másképpen. De - legtöbbször - az eredmény számít. Vö: egy hegycsúcsra 1000 féleképp is fel lehet jutmi....

Az, amit herc1234 próbált mondani - érdemes megfogadni, mert az alapbuktatókon ő is átesett - így van némi tapasztalata! Ha a $prog esetén hülyeség van ott, és automatikusan programozol, akkor egy csőnyi halott/tetszhalott chip lehet az eredmény. És ekkor _nem_ a fordítóban/programozóban van a hiba!
A program optimalizálása (sebesség, hely, futásidő) nem elhanyagolható szempont, valamint az sem hogy amit Ő adott javaslatot (vezérfonalat) a mellett könnyebben el lehet indulni...

A 0 angol állapot. Erre való a http://avrhelp.mcselec.com oldal, összeházasítva a http://www.webforditas.hu/ oldallal....


Frame stack izék: memóriahelyek, melyek a program működéséhez szükségesek. Most írom ezt a fejezetet és még nincsen kész:
- szubrutinok belső változói,
- paraméterátadások helyei
- print utasítás plus igényelt memóriahelyei
- összeadások/karakterlánc összefűzés ideiglenes helyei....

Ha a stack és hasonlók a kérdés: A Tiny13 nem biztos, hogy a legjobb kezdés a kis memória SRAM miatt (64 byte). A Bascom alapműködéshez itt nálad ~30-40 byte le kell hogy foglalódjon. Ha ezek rosszul vannak beállítva, akkor szintén okoznak misztikus hibákat....
(erről egy kivonat lassan kikerül az oldalra...)



De az eredeti problémára vissza:
herc1234 javaslata nem rossz, sőt! A program alapelágazása így jól kézbentartható, és az egyes villogásrutinok a data1, data2, data3, data4 részbe _függetlenül_ beírhatóak...
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Érthető a dolog , és köszönöm !
Amit herc1234 írt új volt nekem , most már ismerek 1 pár (nekem )új utasítást az ő jóvoltából : köszönöm .
Már értem mire is akart engem rávezetni .
Amit írt ,a végén van :

gombmegszakit:
gomb =1
ez még magas nekem , nem tudom mire utal
Talán a gombfigyelés leállítása a futás idejére?
Majd még átnézem a kapcsolatos dolgokat .
Átgondolom hogy az eredeti működési elképzelés miként párosítható az ötletekkel.

Köszönöm a segítséget
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Tipp: Gombmegszakít: Interruptot generálsz, azaz egyből odaugrik, bárhol is jársz a programban. Ekkor egy változó 1-es értéket vesz fel.

A főprogramban meg nézed, hogy ez tényleg megváltozott->irány a következő datasor....

Az Interrutpról az INT fejezetben van némi infó...
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Köszönöm a segítséget !
Átírtam a progit , de ez az adatolvastatás nem megy nekem , valamit nem jól csinálok.
Valami alapvető értelmezési hiba lehet !
Itt a progi :

Config Portb.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Input
Config Portb.4 = Input


Dim A As Word
Dim P As Word
Dim X As Word
Dim Strob As Word

Portb.3 = 1
Portb.4 = 1
'főprogram
Do

If Pinb.4 = 0 Then Strob = Strob + 1 'programválasztás
If Strob > 3 Then Strob = 0
If Pinb.3 = 0 Then Goto Lep 'ugrik ha van léptető jel
Select Case Strob
Case 0
Restore Data1
Case 1
Restore Data2
Case 2
Restore Data3
Case 3
Restore Data4
End Select
Waitms 50
Loop

Lep:

'végrehajtás

For P = 0 To 2 'beolvassa és kiírja az adatokat
Read A
Waitms 10
Portb.p = A
Next P

Waitms 500 'erre az időre villan fel a led

For X = 0 To 3 'törli a kimeneteket
Portb.x = 0
Next X

Return

Data1:
Data 0.0.1.0.1.0.1.0.0
Data2:
Data 1.0.0.0.1.0.0.0.1
Data3:
Data 1.0.1.0.1.0.1.0.1
Data4:
Data 1.1.1.1.1.1.1.1.1

a kimeneten nem az következik aminek kellene sajnos..
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

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

megmondom én mi baj :D
minden változód wordbe van elég nekik a byte

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

Config Portb.0 = Output 
Config Portb.1 = Output 
Config Portb.2 = Output 
Config Portb.3 = Input 
Config Portb.4 = Input 


Dim A As bit 
Dim P As byte 
Dim Strob As byte 

Portb.3 = 1 
Portb.4 = 1 
strob= 0

'főprogram 
   Do 
       If Pinb.4 = 0 Then Strob = Strob + 1 'programválasztás 
       If Strob > 3 Then Strob = 0 
       If Pinb.3 = 0 Then Gosub Lep 'ugrik ha van léptető jel 
   loop

lep:

Select Case Strob 
Case 0 
Restore Data1 
Case 1 
Restore Data2 
Case 2 
Restore Data3 
Case 3 
Restore Data4 
End Select 

'végrehajtás 

For P = 0 To 2 'beolvassa és kiírja az adatokat 
Read A 
Waitms 10 
Portb.p = A 
Next P 

Waitms 500 'erre az időre villan fel a led 
'mondjuk ez fél sec nem egy villanás 

For p = 0 To 3 'törli a kimeneteket 
Portb.p = 0 
Next p 

Return 

Data1: 
Data 0.0.1.0.1.0.1.0.0 
Data2: 
Data 1.0.0.0.1.0.0.0.1 
Data3: 
Data 1.0.1.0.1.0.1.0.1 
Data4: 
Data 1.1.1.1.1.1.1.1.1
az if lep sorban nem gosubot adtál meg hanem goto-t aminek nincs
return értéke,word lefoglalás pazarlás elég a byte ,a select case -nek meg szerintem felesleges a do loop ciklusban lennie (igy gyorsabb a gombod is)
különben meg szerintem ha READ A word akkor a Data is word
azaz ha databól ki akarsz olvasni valamit akkor a változót is abban határozd meg mint amilyen adatot olvasni akarsz jelen esetben bitet
pl stringet nem tudsz beolvasni stringen kivül semmibe beolvasni beolvassa hibát nem fogsz látni csak értelmetlen lesz a kiolvasott érték
aztán lehet hogy word bit között ennek kéne müködnie de szerintem nem
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Az első programban a case rész kereng csak.
Do-Loop részből sosem mész tovább.


A Word/byte tényleg probléma.
Olvasáskor a data 1,0 sor byteként:
a=1,
majd a köv érték olvasása:
a=0

ha az A word, akkor:
a=1*256+0=256!

második olvasásra meg a következő DATA sorra ugrik rossz esetben....
Avatar
kefeur
Tranzisztorgyógyász
Hozzászólások: 187
Csatlakozott: 2008. február 17. vasárnap, 7:00

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

Dim A As Bit :
'error 31 invalid data type ' a válasz rá
dehát ha csak 0 és 1 van benne az ugye bit
Na mostmár végképp nem értem .

:(
vagy lehet hogy a HW stack(32), Soft Stack (8) , Framesize(16) nem van jól beállítva a complier ablakban ?
A hozzászólást 1 alkalommal szerkesztették, utoljára kefeur 2008. április 6. vasárnap, 12:31-kor.
Válasz küldése