www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Programiranje v bascom avr
Pojdi na stran Prejšnja  1, 2, 3 ... 22, 23, 24 ... 36, 37, 38  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Bascom sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Vlado
Član
Član



Pridružen-a: Sre 03 Mar 2004 21:35
Prispevkov: 561
Aktiv.: 2.53
Kraj: Ljubljana

PrispevekObjavljeno: Sob Jul 09, 2011 3:24 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rok
Član
Član



Pridružen-a: Pet 13 Mar 2009 16:31
Prispevkov: 365
Aktiv.: 1.99
Kraj: Dravograd

PrispevekObjavljeno: Sob Jul 09, 2011 4:17 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Vlado
Član
Član



Pridružen-a: Sre 03 Mar 2004 21:35
Prispevkov: 561
Aktiv.: 2.53
Kraj: Ljubljana

PrispevekObjavljeno: Sob Jul 09, 2011 5:27 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
rok
Član
Član



Pridružen-a: Pet 13 Mar 2009 16:31
Prispevkov: 365
Aktiv.: 1.99
Kraj: Dravograd

PrispevekObjavljeno: Sob Jul 09, 2011 10:07 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.09
Kraj: Dragomer

PrispevekObjavljeno: Sob Jul 09, 2011 10:43 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.09
Kraj: Dragomer

PrispevekObjavljeno: Sob Jul 09, 2011 10:47 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2066
Aktiv.: 9.30
Kraj: Ljubljana

PrispevekObjavljeno: Ned Jul 10, 2011 8:47 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Član
Član



Pridružen-a: Sre 03 Mar 2004 21:35
Prispevkov: 561
Aktiv.: 2.53
Kraj: Ljubljana

PrispevekObjavljeno: Ned Jul 10, 2011 9:21 am    Naslov sporočila:   Odgovori s citatom

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!



overlay.jpg
 Opis:
 Velikost datoteke:  110.37 KB
 Pogledana:  19 krat

overlay.jpg


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dkone
Član
Član



Pridružen-a: Sre 07 Mar 2007 18:53
Prispevkov: 2104
Aktiv.: 10.13
Kraj: Krško

PrispevekObjavljeno: Sre Jun 06, 2012 9:58 am    Naslov sporočila:   Odgovori s citatom

Ž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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.09
Kraj: Dragomer

PrispevekObjavljeno: Sre Jun 06, 2012 11:10 am    Naslov sporočila:   Odgovori s citatom

Č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:
Koda:
dim  beseda as 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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
xzibitx
Neznanec
Neznanec



Pridružen-a: Sre 13 Jun 2012 16:02
Prispevkov: 6
Aktiv.: 0.04
Kraj: slovenija

PrispevekObjavljeno: Sre Jun 13, 2012 4:11 pm    Naslov sporočila:  Pomoč pri programiranju. Funkcija xor nor in or Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo AIM - AOL Instant - naslov Yahoo Messenger - naslov MSN Messenger - naslov
Vlado
Član
Član



Pridružen-a: Sre 03 Mar 2004 21:35
Prispevkov: 561
Aktiv.: 2.53
Kraj: Ljubljana

PrispevekObjavljeno: Sre Jun 13, 2012 4:51 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1712
Aktiv.: 7.71
Kraj: Ig

PrispevekObjavljeno: Sre Jun 13, 2012 4:53 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
xzibitx
Neznanec
Neznanec



Pridružen-a: Sre 13 Jun 2012 16:02
Prispevkov: 6
Aktiv.: 0.04
Kraj: slovenija

PrispevekObjavljeno: Sre Jun 13, 2012 5:28 pm    Naslov sporočila:  odgovor Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo AIM - AOL Instant - naslov Yahoo Messenger - naslov MSN Messenger - naslov
rudiP
Član
Član



Pridružen-a: Tor 07 Avg 2007 15:30
Prispevkov: 1234
Aktiv.: 6.09
Kraj: KOPER

PrispevekObjavljeno: Čet Jun 14, 2012 6:32 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Bascom sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3 ... 22, 23, 24 ... 36, 37, 38  Naslednja
Stran 23 od 38

 
Pojdi na:  
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