|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.53 Kraj: Ljubljana
|
Objavljeno: Sob Jul 09, 2011 3:24 pm Naslov sporočila: |
|
|
Rok,
ukaz "INSTR" ni najbolj posrečena varijanta, poglej v Help kaj dobiš z njim.
Drugo "T1" imaš deklarirano kot string*4, to ne bo v redu, če je tvoj string dolg 4 znake, potem moraš T1 deklarirati kot string*5. String se vedno konča z H00, tako da je dolžina stringa vedno večja za en bajt.
Svoje spremenljivke A1, A2, A3 dimenzioniraj kot overlay čez string T1. Na ta način boš dobil vrednost karakterja, da bi dobil številčno vrednost od tega odštej 48 in boš imel pravo vrednost, ali pa uporabi ukaz "Val". Moraš pa dodati še eno spremenljivko A4, ker ti bo pri temperaturi večji od 10 stopinj A3 imel vrednost karakterja "," (10,5 ( a1 bo 1, A2 bo 0 A3 bo vrednost karakterja "," in a4 bo 5)).
Pa kot ti je Vilko že povedal, uporabi terminal za kontrolo tvojega programa.
|
|
Nazaj na vrh |
|
|
rok Član
Pridružen-a: Pet 13 Mar 2009 16:31 Prispevkov: 365 Aktiv.: 1.99 Kraj: Dravograd
|
Objavljeno: Sob Jul 09, 2011 4:17 pm Naslov sporočila: |
|
|
Vlado je napisal/a: |
Rok,
Drugo "T1" imaš deklarirano kot string*4, to ne bo v redu, če je tvoj string dolg 4 znake, potem moraš T1 deklarirati kot string*5. String se vedno konča z H00, tako da je dolžina stringa vedno večja za en bajt.
Svoje spremenljivke A1, A2, A3 dimenzioniraj kot overlay čez string T1. Na ta način boš dobil vrednost karakterja, da bi dobil številčno vrednost od tega odštej 48 in boš imel pravo vrednost, ali pa uporabi ukaz "Val". |
Kako to misliš "overlay"? Torej če želim iz stringa dobiti neko uporabno informacijo (v mojem primeru od 0 do 9) moram od dobljene številke odšteti 48?
Še nekaj: kakšen format dobim iz senzorja ko se le ta vpiše v spremenljivko? Izmeril je recimo 25.6 stopinj, zapisano v T pa imam 25,6?
No, v spodnji kodi mi sedaj vneprej deklarinano spremenljivko lepo izlušči (T = 24.1;
D1 = 2, D2 = 4) le zadnja cifra je duplikat druge (D3=4). Kaj je narobe?
Po pravici poveda, sem izgubljen v teh stringih, overlajih,....
Koda: |
Do
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
1wreset
1wwrite &HCC
1wwrite &HBE
T = 1wread(2)
T2 = Str(t)
D3 = Right(t2 , A1)
D2 = Mid(t2 , A2 , A1)
D1 = Left(t2 , A1)
B1 = Val(d1)
B2 = Val(d2)
B3 = Val(d3)
B4 = Val(d4)
If B3 > 9 Then
B3 = B4
End If
If B3 > 9 Then
D4 = Right(t2 , A1)
End If
For E = 0 To 5
For D = 0 To 170
Portb.1 = 1
Portd = Lookup(b1 , Prikaz)
Waitus 850
Portb.1 = 0
Portb.2 = 1
Portd = Lookup(b2 , Prikaz)
Waitus 850
Portb.2 = 0
Portb.3 = 1
Portd = Lookup(b3 , Prikaz)
Waitus 850
Portb.3 = 0
Next
Next
Loop
|
Lep pozdrav,
Rok
_________________ I live in a world where vacuum tube is king!! |
|
Nazaj na vrh |
|
|
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.53 Kraj: Ljubljana
|
Objavljeno: Sob Jul 09, 2011 5:27 pm Naslov sporočila: |
|
|
Rok, za overlay poglej malo v Help.
Ko spremenljivko deklariraš kot overlay, potem se ta spremenljivka nahaja na istem naslovu kot spremenljivka prek katere jo prepisuješ.
dim T as string*5
dim D1 as byte at s overlay, d2 as byte at s+1 overlay . . .
Preizkusi tole v simulatorju, mogoče ti bo bolj pomagalo:
Koda: |
$regfile = "m644pdef.dat"
$crystal = 12000000
$baud = 9600
$baud1 = 9600
$framesize = 16
$hwstack = 32
$swstack = 16
Dim S As String * 5 , D1 As Byte At S Overlay , D2 As Byte At S + 1 Overlay
Dim D3 As Byte At S + 2 Overlay , D4 As Byte At S + 3 Overlay
S = "24,5"
Print D1
Print D2
Print D3
Print D4
End |
Drugič ko pripneš svoj program, kodo, daj zraven da se vidi kako si deklariral spremenljivke.
|
|
Nazaj na vrh |
|
|
rok Član
Pridružen-a: Pet 13 Mar 2009 16:31 Prispevkov: 365 Aktiv.: 1.99 Kraj: Dravograd
|
Objavljeno: Sob Jul 09, 2011 10:07 pm Naslov sporočila: |
|
|
Pozdrav!
Vlado, tvoja pripeta koda ne deluje. Bascom mi javi cel kup napak.
Že od začetka me je motila zadeva z stringi,ipd zato sem začel malo računati.
Odločil sem se, da številke za decimalno piko sploh ne potrebujem.
Spisal sem program, ki preverjeno meri in razstavi temperaturno vrednost na 2 cifri (pred d. piko). Tega sem zapekel na minipin ploščo in preko LCD zaslona lepo izpisuje izmerjeno temperaturo ter 1 in drugo cifro posebej. Ko pa ta isti program prenesem v tinny2313 pa nič. Vsakič, ko se meritev in zaslon osvežita, prikazujeta 00.0 (ničla za d. piko mora biti).
Če priklopim DELUJOČ termometer, spet nič. Medtem ko isti program in isti termometer "gate trgata" na minipinu. Začel sem sumiti tinny2313. Podatkovno linijo sem poizkusil prestaviti na več drugih pinov, a brez uspeha (PINB.0, PIND.0, PINB.4).
Ni mi jasno, ali je spet napaka v programu, ali počasi spušča dušo mikrokontroler? Na liniji imam tudi pull-up 4,7k.
Koda: |
$regfile "attiny2313.dat"
$crystal = 7372000
Config Portd = Output
Config Portb = Output
Dim B As Byte
Dim A1 As Byte
Dim A2 As Byte
Dim A3 As Byte
Dim T As Byte
Dim D1 As Byte
Dim D2 As Byte
Dim D3 As Byte
Dim T1 As Integer
Dim T2 As Integer
Dim T3 As Byte
Config 1wire = Pinb.0
Do
Disable Interrupts
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HBE
T = 1wread(2)
1wreset
1wwrite &HCC
1wwrite &HBE
Wait 1
T = 1wread(2)
T = T / 2
T1 = T / 10
T2 = T Mod 10
T2 = T2 * 100
T2 = T2 / 100
T1 = A1
T2 = A2
A3 = 0
For B = 0 To 255
Portb.1 = 1
Portd = Lookup(a1 , Prikaz)
Waitms 5
Portb.1 = 0
Portb.2 = 1
Portd = Lookup(a2 , Prikaz)
Waitms 5
Portb.2 = 0
Portb.3 = 1
Portd = Lookup(a3 , Prikaz)
Waitms 5
Portb.3 = 0
Next
Loop
Prikaz:
Data 192 , 249 , 36 , 48 , 25 , 18 , 2 , 248 , 0 , 16
|
Lep pozdrav,
Rok
_________________ I live in a world where vacuum tube is king!! |
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.09 Kraj: Dragomer
|
Objavljeno: Sob Jul 09, 2011 10:43 pm Naslov sporočila: |
|
|
rok je napisal/a: |
Poskušal sem pretvoriti integer v string a mi ni uspelo. |
To gre tako:
Koda: |
Dim ii as integer
Dim Ss as string * 10
' pretvorba integer v string:
Ss = str(i)
|
|
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.09 Kraj: Dragomer
|
Objavljeno: Sob Jul 09, 2011 10:47 pm Naslov sporočila: |
|
|
rok je napisal/a: |
Vlado, tvoja pripeta koda ne deluje. Bascom mi javi cel kup napak.
|
To je običajno, kadar odgovarjamo in damo kako kodo, ker opuščamo definicije, ki so samoumevne.
Če recimo napišmo v kodi
CLS
in nismo definirali Config lcd, ker smo to prepustili avtorju, ki edini ve, kako je vezan LCD, bo seveda Bascom prevajalnik zajamral.
|
|
Nazaj na vrh |
|
|
int47 Član
Pridružen-a: Pon 15 Dec 2003 0:10 Prispevkov: 2066 Aktiv.: 9.30 Kraj: Ljubljana
|
Objavljeno: Ned Jul 10, 2011 8:47 am Naslov sporočila: |
|
|
Citiram: |
in nismo definirali Config lcd, ker smo to prepustili avtorju, ki edini ve, kako je vezan LCD, bo seveda Bascom prevajalnik zajamral. |
Ne.
Prevajalnik ima svoje nastvitve za pine (Options -> Compiler -> LCD). Če v programu ni config LCD, "prevajalnik" uporabi, kar ima v *.cfg datoteki (Options->Compiler-> Podpiranje_lenobe & ustvarjanje_problemov_pri_ponovni uporabi_kode).
Nič ne bi imel proti bližnjicam in čarovnikom, če bi se vnešeno na koncu pojavilo v *.bas datoteki.
|
|
Nazaj na vrh |
|
|
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.53 Kraj: Ljubljana
|
Objavljeno: Ned Jul 10, 2011 9:21 am Naslov sporočila: |
|
|
Rok, kateri Bascom uporabljaš, verzija?
v prilogi imaš sliko z mojega simulatorja.
Rok, če si v mojem primeru spremenil .dat v attiny2313.dat, potem remaj (ali odstrani) "$Baud1", ker tinny ima samo en com port in ne bo napak pri prevajanju!
Opis: |
|
Velikost datoteke: |
110.37 KB |
Pogledana: |
19 krat |
|
|
|
Nazaj na vrh |
|
|
dkone Član
Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2104 Aktiv.: 10.13 Kraj: Krško
|
Objavljeno: Sre Jun 06, 2012 9:58 am Naslov sporočila: |
|
|
Živjo,
Kako bi v Bascomu naredil, da bi iz I2C prebral dva različna 1-bytna registra, ki sta na različnih naslovih(&H01 in &H02) in nakoncu zlepil v enega 16-bitni register(Word) -vrednost= makeint(ValueLSB,valueMSB)?
Koda: |
Sub Read_ad(byval Adress As Byte , Value As Byte)
I2cstart 'start
I2cwbyte Write_ad
I2cwbyte Adress
I2cstart
I2cwbyte Read_ad
I2crbyte Value , Ack
I2cstop
End Sub |
Gre se pa za AD7150
_________________ Denis |
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.09 Kraj: Dragomer
|
Objavljeno: Sre Jun 06, 2012 11:10 am Naslov sporočila: |
|
|
Če sta bajta na različni naslovih v I2C ramu ali romu, in nista skupaj, potem je potrebno čitati vsakega posebej.
Težko si sicer predstavljam, da predstavljata ta dva byta word informacijo, da je eden gornji del besede in drugi spodnji del besede, toda če je že tako, je najenostavneje, da v bascomu definiraš spremeljivko tipa word:
in potem definiraš spodnji in zgornji bajt preko te word spremenljivke
Koda: |
dim spodnja as byte at beseda overlay
dim zgornja as byte at beseda + 1 overlay |
Sedaj bereš i2c v spremenljivki spodnja in zgornja, in že imaš v spremenljivki word vsebino.
_________________ Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati. |
|
Nazaj na vrh |
|
|
xzibitx Neznanec
Pridružen-a: Sre 13 Jun 2012 16:02 Prispevkov: 6 Aktiv.: 0.04 Kraj: slovenija
|
Objavljeno: Sre Jun 13, 2012 4:11 pm Naslov sporočila: Pomoč pri programiranju. Funkcija xor nor in or |
|
|
Lep pozdrav. V šoli programiramo s programo bascom AVR. Stvari nekako razumem neznam pa funkcije or , xor in nor. Zato bi prosu nekoga da mi napiše program za zgornje funkcije da se ih bom lahko naučil. Programiramo čip ATMEGA32 sprogramirati pa ga moramo tako da se ob pritisku na tipko naprimer D.4 prižge ledica na portu C.5.(Porti so:A,B,C,D ledice so 0,1,2,3,4,5,6,7 tipke pa so ravnotako 0,1,2,3,4,5,6,7).
tako recimo izgleda program za funkcijo AND :
Koda: |
$regfile = "m32def.dat"
$crystal = 400000
Config Pinc.1 = Input
Config Pinc.6 = Input
Config Pind.2 = Output
Do
If Pinc.1 = 0 and Pinc.6 = 0 Then
Pind.7 = 0
Else
Pind.7 = 1
End If
Loop
End |
in še en program :
Koda: |
$regfile = "m32def.dat"
$crystal = 4000000
Config Porta = Output
Config Portd.0 = Input
Porta = 255
Config Debounce = 80
Dim Led As Byte
Dim Tipka As Byte
Main:
Do
If Pind.0 = 0 Then
Porta = &B00000000
Wait 2
Porta = &B11111111
Wait 2
Porta = &B00000000
Wait 2
Porta = &B11111111
Wait 2
Porta = &B00000000
Wait 2
Porta = &B11111111
Wait 2
If Pind.0 = 0 Then
Porta = Led
Led = Not Led
Else
End If
End If
Loop |
[slovenščina je zame španska vas] upam da se bo najdu kdo k bi mi to lahko naredu oz razložu kako pa kaj nardit ker res noben u razredu tega nezna. Hvala LP
_________________ u can only die once. Make sure it is worth it |
|
Nazaj na vrh |
|
|
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.53 Kraj: Ljubljana
|
Objavljeno: Sre Jun 13, 2012 4:51 pm Naslov sporočila: |
|
|
Koliko nalog se je nabralo v tako kratkem času.
Na MCS-ovem forumu ti je Jean Pierre Duval lepo pojasnil, napisal tabele in ne vem kaj ti ni jasno.
Zdaj prosiš da ti nekdo napiše program.
Nisem se poglabljal v tvoj program ki si ga pripel, mogoče celo deluje prav, samo nimaš tako hitrega očesa da bi to opazil.
Citiram: |
Do
If Pinc.1 = 0 and Pinc.6 = 0 Then
Pind.7 = 0
Else
Pind.7 = 1
End If
Loop
End |
Če v tvojem programu za ukazom
"If Pinc.1 = 0 and Pinc.6 = 0 Then"
"Pind.7 = 0"
daš zakasnitev (waitms 500), boš videl da se LED prižge/ugasne.
Drugače Bascom podpira tudi logične ukaze (AND, OR, XOR . . .) in lahko delaš tudi z njimi.
Odpri Help ter malo preberi katere ukaze podpira, kaj naredi kak ukaz.
Naloge pa ti sigurno ne bo napisal nobeden s tega foruma, pomagamo pa lahko čeprav ne podpiramo lenobe.
Sem pa pozabil, ker imaš tipke na PortC, IZKLOPI JTAG!
LP
Nazadnje urejal/a Vlado Sre Jun 13, 2012 4:56 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
RGorazd Član
Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1712 Aktiv.: 7.71 Kraj: Ig
|
Objavljeno: Sre Jun 13, 2012 4:53 pm Naslov sporočila: |
|
|
Hjah....če razumeš Bascom tako, kot sem jaz razumel tvoje vprašanje, pol verjamem da nimava pojma o tem ne jaz ne ti...
Kaj ne razumeš?
OR je ali. Če imaš med preverjanjem dveh tipk vmes OR, se pravi
IF Tipka1 = 1 OR Tipka2 = 1 then... to pomeni da se bo vse kar sledi tej kodi
zgodilo, če bo ena izmed tipk pritisnjena (tipka1 ali tipka2)
Če je vmes NOR (neali) potem bo to delalo ravno obratno.
Če imaš vmes XOR bodo pogoji izpolnjeni samo takrat, ko bota stanji na tipkah različna (tipka1 = 0 in tipka2 =1 ali tipka1=1 in tipka2=0). Malce si poglej pravilnostne tabele omenjenih funkcij pa ti bo vse jasno.
LP G
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
|
xzibitx Neznanec
Pridružen-a: Sre 13 Jun 2012 16:02 Prispevkov: 6 Aktiv.: 0.04 Kraj: slovenija
|
Objavljeno: Sre Jun 13, 2012 5:28 pm Naslov sporočila: odgovor |
|
|
Da ne podpirate lenobe je čis prov sam res nimam pojma kako bi lahko to naredu. To z OR nism prepričan če je prov ker mi je ob zamenjavi AND funkcije z funkcijo OR led dioda skos gorela. Pravilnostne tabele sem pogledal in vem kaj morem naredit nimam pa pojma kako bi to naredil. Ko sem zamenjal funkcijo OR in vstavil XOR mi pa niti ledica ni več gorela ampak sem dobil ogromno napak napak [slovenščina je zame švedska vas] da res nimam pojma kako bi se to nardil.
_________________ u can only die once. Make sure it is worth it |
|
Nazaj na vrh |
|
|
rudiP Član
Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 6.09 Kraj: KOPER
|
Objavljeno: Čet Jun 14, 2012 6:32 am Naslov sporočila: |
|
|
Tvoj način pisanja je nepregleden:
Koda: |
Do
If Pinc.1 = 0 and Pinc.6 = 0 Then
Pind.7 = 0
Else
Pind.7 = 1
End If
Loop
|
pregledno napisano izgleda tako:
Koda: |
Do
If Pinc.1 = 0 and Pinc.6 = 0 Then
Pind.7 = 0
Else
Pind.7 = 1
End If
Loop |
Ko bereš tako napisan program veliko lažje najdeš napake.
_________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 48 dni
Powered by phpBB © 2001, 2005 phpBB Group
|