www.elektronik.si
Programiranje v bascom avr

www.elektronik.si -> Bascom sekcija

Avtor: PobesneliKraj: Ajdovščina PrispevekObjavljeno: Ned Apr 13, 2008 2:48 pm    Naslov sporočila:  Programiranje v bascom avr
----------------------------------------------------------------------------
Živjo!


Začel sem se učit programirat v bascom avr.Kot čip uporabljam Attiny 2313,ker sem te imel doma.
Imam pa nekaj vprasanj.
Kako bi zgledala koda,ali vsaj kateri ukaz naj uporabim za :

Vezje z eno tipko ki bi ob vsakem pritisku naredila nekaj.


Recimo če bi imel tipko in led diodo.1.pritisk ...dioda gori
2. pritisk dioda utripa
3.pritisk dioda ugasne.

Kje bi dobil seznam ukazov?v kakšni tabeli z kakšno majhno razlago zravn?

Še eno vprašanje.A se s tem čipom da naredit da led dioda recimo postopoma prizge?da bi izhod višal napetost?

Naredil sem si enostaven programator,na katerem sem povezal pine LPT-ja na pine čipe.In dela odlično.Zanima me če lahko z njim sprogramiram tudi atmega8,ker jih mam tudi nekaj doma.

Programator

vcc = 2, 3, 4, 5
reset = 7
sck = 8
mosi = 9
miso = 10

Programiram pa z AVRdude

Avtor: int47Kraj: Ljubljana PrispevekObjavljeno: Ned Apr 13, 2008 3:13 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Citiram:
Vezje z eno tipko ki bi ob vsakem pritisku naredila nekaj.

-V zanki zaznavaš, če je tipka pritisnjena.
-Vsak pritisk tipke poveča nek števec
-Po potrebi resetiraš števec.
-Glede na vrednost števca izvršiš ustrezno kodo.

Citiram:
Kje bi dobil seznam ukazov?v kakšni tabeli z kakšno majhno razlago zravn?
Ali ni nobene dokumentacije zraven (help / priročnik..) ?

Citiram:
Še eno vprašanje.A se s tem čipom da naredit da led dioda recimo postopoma prizge?da bi izhod višal napetost?

Izhodi so digitalni. V določene trenutku je izhod lahko '0' ali '1'.
Efekt počasnega prižiganja je (med drugim) mogoče doseči s PWM modulacijo. (Na linku je razložen princip. Ni potrebna izdelava vezja z linka. Dovolj je uC nekaj kode).

Avtor: pato90Kraj: Logatec PrispevekObjavljeno: Ned Apr 13, 2008 3:18 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Če bi naredil vezje z eno tipko bi to šlo tako da v program vstaviš eno spremenljivko in ob vsakem pritisku ji povečaš vrednost potem pa z if-end if zankami narediš kaj ob določeni vrednosti spremenljivke dela. ko pa nevem dosežeš zadnjo stopnjo pri tvojem primeru tri resetiraš spremenljivko tako da jo ponovno postaviš na nulo in gre od začetka. za ukaze jih imaš vse napisane v bascom avr helpu in so tudi razloženi v angleščini.
AT mega8 lahko tudi programiraš z takim programatorjem.


L.P.

Avtor: cimerKraj: Ljubljana PrispevekObjavljeno: Ned Apr 13, 2008 3:36 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Zdravo

Bascom AVR ima pregleden in uporaben help.
Za primere kode pa pogledaš v mapo EXAMPLES. Priporočam, da najprej pregledaš primere, pa se potem znova oglasiš.
Pomembno je, da pravilno nastaviš vhodne/izhodne pine. Tam kjer krmiliš LED moraš konfigurirati pin kot output, kjer pa čitaš tipko pa kot intput. Pri čitanju tipke je smiselno tudi priključiti pull up upor na vhodni pin.

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: Ned Apr 13, 2008 3:47 pm    Naslov sporočila:  
----------------------------------------------------------------------------
seznam ukazov v Bascomu dobiš s pritiskom na eno tipko:

do
If F1 = 1 then
Print HELP
End if
loop

Tole je primer kode, ki ti ciklično preverja, če je bila pritisnjena tipka F1 (help) in ti posledično odpre Help okno, kjer imaš vse lepo obrazloženo.

Kako bi delala koda, za katero si ti spraševal je pa tako:

skok:
Do
Debounce tipka, 0, nekaj
loop

nekaj:
incr števec
if števec = 10 then
števec=0
end if
go to izbira

izbira:

select case števec
case 1 = goto program1
case 2 = goto program2...

itd

goto skok

Tole pišem tako na pamet...za vsak slučaj stisni tipko F1 in si preberi, kaj počnejo vsi ti ukazi, in kakšna je pravilna sintaksa. Prej ali slej boš odkril, da je stvar zelo enostavna. Aja, pa spremenljivke je treba deklarirat, pa aliase naštimat (tipka alias p3.2 ali pač na kateri pin imaš priključeno tipko)

LP G

Avtor: PobesneliKraj: Ajdovščina PrispevekObjavljeno: Ned Apr 13, 2008 4:19 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Uf,nisem pričakoval takega odziva,[slovenščina je zame španska vas] hvala za nasvete.Bom preizkusil Smile

Hvala zaenkrat Smile

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Ned Apr 13, 2008 7:36 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Debounce tipka, 0, nekaj

Kaj tale ukaz je nekakšna krajšava?

Ali je ta ukaz podoben temu:

If tipka = 0
Goto nekaj
End If
...

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: Ned Apr 13, 2008 8:41 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Citiram:
If tipka = 0
Goto nekaj
End If


Ja, precej, vendar je prav namenjen tipkam. V bistvu je nekaj takega:

if tipka = 0 then
waitms 10
if tipka = 0 then
goto nekaj
end if
end if

V bistvu počaka nekaj milisekund, da mine prehodni pojav, potem še enkrat testira pin, če je še vedno na nuli, (če je tipka še vedno pritisnjena) potem komaj skoči tja, kamor mora. To je zaradi preprečevanja motenj, ki jih povzroči odskakovanje mehanskega kontakta tipke.

LP G

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Ned Apr 13, 2008 8:54 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Aha, to razumem, hvala.

Samo zapis mi ni šel v glavo, te vejice pa to...
Se pravi ukaz debounce zapišemo tako:

Debounce Portx.x , stanje (0 ali1) , podprogram ali Portx.x = 1 ali 0

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: Ned Apr 13, 2008 9:35 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Jaz sem tole na pamet govoril. Poglej v Help. Trenutno se nahajam za Apple računalniom, kjer nimam inštaliranega Bascoma, na onem PCju, kjer pa je bascom nimam pa neta, pa se mi ne da skakat z ene sobe v drugo Smile

LP G

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Ned Apr 13, 2008 10:05 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala. Sem pogledal v help in tam res vse lepo piše. Še konfiguriraš lahko ukaz Debounce.

Config Debounce = čas, ki ga naj preverja debounce (ms)

Debounce preverja pritisnjenost vsakih 5 ms

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Ned Apr 13, 2008 10:09 pm    Naslov sporočila:  
----------------------------------------------------------------------------
A ima kdo idejo kako in kaj bi naredil iz 1wire IR senzorja (iz starih mišk na kuglico)? Naprimer, da bi lahko s televizijskim pilotom prižigal ledice...

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: Ned Apr 13, 2008 11:01 pm    Naslov sporočila:  
----------------------------------------------------------------------------
V helpu si poglej temo na RC5. Stvar deluje, samo ne z vsemi daljinci. RC5 če se ne motim, je standard, ki ga uporablja Philips, zatorej so najbolj prikladni Philipsovi daljinci, ali pa kak poceni univerzalni daljinec iz Spara. Mislim, da je v Helpu tudi vezalna shema.

Vse kar rabiš je Ir sprejemni modul, na katerega pripelješ 5V, GND in iz njega dobiš že izluščen signal, ki ga pelješ na en pin. To je to. Stvar deluje. S pomočjo tega vezja sem naredil vklop/izklop ter zatemnjevanje luči v moji sobi, vklapljal sem še ventilator. Originalnih načrtov več nimam, niti kode, ker mi je šel na starem PCu disk rakom žvižgat in z njim tudi precej take šare, ki je predstavljala prve korake v programiranju uCjev...

LP G

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pon Apr 14, 2008 7:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
RGorazd je napisal/a:
seznam ukazov v Bascomu dobiš s pritiskom na eno tipko:

do
If F1 = 1 then
Print HELP
End if
loop

...

LP G


Kaj prek UARTa lahko kar napišeš, katero tikpo iščem (naprimer Space, F1, F2) in ko jo bom pritisno mi bo računalnik povedal da je pritisnjena...?

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Apr 23, 2008 8:56 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni!

Kakšno vlogo za vraga ima pin AREF pri AD pretvorniku?

Avtor: int47Kraj: Ljubljana PrispevekObjavljeno: Sre Apr 23, 2008 9:30 pm    Naslov sporočila:  
----------------------------------------------------------------------------
1) Odpreš kompleten PDF od uC-ja.
2) Poiščeš "AREF"
3) Po par klikih sem v PDF-ju za atmega 16 našel tole:

Koda:
AREF:
AREF is the analog reference pin for the A/D Converter.

Operation:
The ADC converts an analog input voltage to a 10-bit digital value through successive approximation. The minimum value represents GND and the maximum value represents the voltage on the AREF pin minus 1 LSB. Optionally, AVCC or an internal 2.56V reference voltage may be connected to the AREF pin by writing to the REFSn bits in the ADMUX Register. The internal voltage reference may thus be decoupled by an external capacitor at the AREF pin to improve noise immunity.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Apr 23, 2008 9:41 pm    Naslov sporočila:  
----------------------------------------------------------------------------
To sem si že dvakrat prebral v datasheetu. Ampak kaj mi lahko kdo v slovenščini poenostavneje razloži kaj je to? Je to mogoče izhodna napetost za ADC? Anleščina mi ne gre najbolje...Sad

Avtor: MadMax PrispevekObjavljeno: Sre Apr 23, 2008 11:56 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Referenčna napetost, s katero potem žival primerja vhodni analogni signal.
Ker je tako natančno in stabilno napetost včasih težko zagotoviti (ali pa se prek tega delajo recimo temperaturne kompenzacije), je proizvajalec pustil možnost, da si sam "narediš" to napetost.

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Čet Apr 24, 2008 2:45 pm    Naslov sporočila:  Debounce je več kot if tipka
----------------------------------------------------------------------------
Debounce je več kot if tipka = 0

Debounce ukaz testira, ali se je tipka ravnokar pritisnila, se pravi skočila iz 1 na 0.
To potrebuješ recimo, če hočeš spremeniti stanje števca za vsak pritisk tipke. Ko tipko pritisneš, bo šel števec za eno naprej, in če hočeš, da gre spet za eno naprej moraš tipko najprej spustiti in potem ponovno pritisniti. Če boš držal tipko pritisnjeno, se števec ne bo povečeval.
Če pa bi bil debounce to, kar je bilo napisano, samo if tipka in potem wait, bi v slučaju, da je tipka pritisnjena dalj časa, števec tekel navzgor, kaj ne?

No seveda pa je v debounce tudi zakasnitev, da se preskoči odskakovanje kontakta. Vsako stikalo je mehanski kontakt na vzmeti, in ko ga pritisnemo, kotva kar nekajkrat odskoči, predno se umiri v novem položaju. Za mikroprocesor, ki je hiter kot zlomek, bi to bilo, kot da smo nekakrat prav na hitro pritisnili in spustili tipko in spet pritisnili, in bi števec za en pritisk s prstom na tipko štel dva ali tri pritiske, v odvisnosti od mehanike stikala. Zato je v debounce vgrajena tudi zakasnitev, ki tako odskakovanje 'preskoči'.

kapiš?

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Čet Apr 24, 2008 2:57 pm    Naslov sporočila:  In še odgovor za AREF
----------------------------------------------------------------------------
AREF je referenčna napetost, ki jo mikroprocesor deli z delilniki toliko časa, da je deljena napetost enaka vhodni merjeni. Merjena napetost bo torej vedno nižja od referenčne. Mora biti, sicer je meritev napačna.
In rezultat ki ga dobiš, ni v voltih, temveč v 256-inkah referenčne napetosti če je ad pretvornik 8 bitni.
če torej daš kot referenčno napetosti recimo 5V in si na vhod priklopil napetost 2.5V boš za rezultat dobil v 8 bitnem konverterju &H80 = 128
To vrednost moraš pomnožiti z referenčno napetostjo in deliti z 256 in dobiš rezultat v voltih. In ne pozabi da delaš računske operacije s celimi števili, kjer se ne da predstaviti števila 2.5. Če torej hočeš rezultat na desetinko volta natančno, boš izmerjeno vrednost pomnožil še z 10 predno boš delil z 256, da dobiš rezultat 25, kar ti mora pomeniti 2.5V

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Čet Apr 24, 2008 9:06 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Torej kako naj nastavim tukaj nastavitve (kopirano iz Bascom helpa), če bi imel:
1. Fotoupor vezano med Vcc in pinom PX.n
2. Fotoupor vezan med AREF pinom in pinom PX.n

Koda:

'Config Adc = Single , Prescaler = Auto, Reference = Internal

'The reference param may be :

'OFF      : AREF, internal reference turned off

'AVCC     : AVCC, with external capacitor at AREF pin

'INTERNAL : Internal 2.56 voltage reference with external capacitor ar AREF pin



Aja, pa na feri so mi pravli, da je v enem primeru rezultat ADC-ja izražen v mili voltih. Je to res?

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Čet Apr 24, 2008 11:12 pm    Naslov sporočila:  Moje
----------------------------------------------------------------------------
Moje izkušnje so do adc pretvornika PCF8591
Kot po navadi, sem, lahko napačno, predvideval, da je povsod enako.
Na AVR-ih še nisem meril napetosti z AD pretvornikom, in ti bo verjetno odgvoril kdo drug.

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Pet Apr 25, 2008 8:10 am    Naslov sporočila:  
----------------------------------------------------------------------------
Več o A/D-ju si preberi tukaj, imaš tudi primer kode.

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Pet Apr 25, 2008 9:07 am    Naslov sporočila:  
----------------------------------------------------------------------------
program_er je napisal/a:
Aja, pa na feri so mi pravli, da je v enem primeru rezultat ADC-ja izražen v mili voltih. Je to res?


Ja, če imaš npr. 10 bitni ADC in referenčno napetost 1,023V Wink
In tako dalje (z malo matematike) ...

LP, Grega

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Pet Apr 25, 2008 9:10 am    Naslov sporočila:  Odlična spletna stran, Dkone!
----------------------------------------------------------------------------
Odlična spletna stran, Dkone!

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pet Apr 25, 2008 5:48 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Torej, uporabljam ATmega16.

Vnjegovem datasheetu med drugim piše:
Koda:

– 8-channel, 10-bit ADC
      8 Single-ended Channels
      7 Differential Channels in TQFP Package Only
      2 Differential Channels with Programmable Gain at 1x, 10x, or 200x

Mene pa zanima samo to:
Koda:

– 8-channel, 10-bit ADC
      8 Single-ended Channels


Čeprav mi matematika zelo gre, tistega od @vilkota ne razumem.
To je iz Bascom helpa:
Koda:

ADC
 Running mode. May be SINGLE or FREE.
 
PRESCALER
 A numeric constant for the clock divider. Use AUTO to let the compiler generate the best value depending on the XTAL
 
REFERENCE
 The options depend on the used micro. Some chips like the M163 have additional reference options. In the definition files you will find : ADC_REFMODEL = x

This specifies which reference options are available. The possible values are listed in the table below.
-----------------------------------------------------------------------------------------------
'The newer has options for the reference voltage

'For those chips you can use the additional param :

'Config Adc = Single , Prescaler = Auto, Reference = Internal

'The reference param may be :

'OFF      : AREF, internal reference turned off

'AVCC     : AVCC, with external capacitor at AREF pin

'INTERNAL : Internal 2.56 voltage reference with external capacitor ar AREF pin

Mi lahko kdo izračuna ali razloži ali pove še enkrat, kako naj v Bascomu to naredim, izračunam. Lahko bi kdo prilepil kak "kos" programske kode...

Čip napajam z 5.05 volta, ampak se mi zdi, da ta podatek ni pomemben. Saj referenčno izhodno napetost lahko nastavljam z ADC_REFMODEL = milivolti ? Ali ne?

Torej, koliko in kako moram nastaviti referenčno napetost, da bom na 10-bitnem ADC-ju dobil v rezultat milivolte? Če ne gre spreminjat referenčne napetosti, pa lahko kdo prilepi malo kode z nekaj primeri deljenja števcev in množenja, če je to v programu potrebno. Iz strani, ko jo je dal @dkone sem si potegnil primer kode, samo kaj mi pomaga, če to naložim v uC, če je ne razumem...

Hvala za odgovore!!!

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Pet Apr 25, 2008 6:44 pm    Naslov sporočila:  Poizkusi tako, kot piše v help-u
----------------------------------------------------------------------------
Poizkusi tako, kot piše v help-u:

Koda:
'configure single mode and auto prescaler setting
'The single mode must be used with the GETADC() function
'The prescaler divides the internal clock by 2,4,8,16,32,64 or 128
'Because the ADC needs a clock from 50-200 KHz
'The AUTO feature, will select the highest clockrate possible

Config Adc = Single , Prescaler = Auto

'Now give power to the chip
Start Adc
'With STOP ADC, you can remove the power from the chip
'Stop Adc

Dim W As Word , Channel As Byte
Channel = 0

'now read A/D value from channel 0
Do
  W = Getadc(channel)
  Print "Channel " ; Channel ; " value " ; W
Loop



Glede na že povedano, predvidevam, da boš dobil v spremenljivki W napetost izraženo v napetostnih enotah VREF/1024
torej, če bo napetost 5V in referenčna napetost tudi 5V potem boš dobil rezultat 1024. Če hočeš to napisati v voltih z desetinkami moraš to računsko popraviti, da boš dobil 50 kar naj bi predstavilo 5.0V
Račun, ki ga moraš dodati pred Loop ukazom bo potemtakem:

Koda:
Dim W2 as word
w2 = w * 50
w2 = w2 / 1024
print W2


Ampak kot rečeno, ne pripovedujem to iz lastnih izkušenj, temveč ker mislim, da bi nekako tako moralo delovati
Tisti Prescaler se mi zdi manj pomemben

In če hočeš napisati rezultat kot 5.0V potem moraš še ločiti desetinke od celih voltov v dve ločeni spremenljivki

Koda:
dim volti as word
dim desetinke as word

volti = W2 / 10
desetinke = W2 mod 10
print "Napetost je ";volti;".";desetinke;"V  "


Najbolje je, da probaš.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pet Apr 25, 2008 7:06 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Finta je v tem, da trenutno ne morem probavat, ker nimam delujočega programatorja. SadSad

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Pet Apr 25, 2008 8:14 pm    Naslov sporočila:  A, ti nas tako, hipotetično ..
----------------------------------------------------------------------------
A, ti nas tako, hipotetično ..

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Apr 26, 2008 10:06 am    Naslov sporočila:  Re: A, ti nas tako, hipotetično ..
----------------------------------------------------------------------------
vilko je napisal/a:
A, ti nas tako, hipotetično ..


NE, jaz se samo učim zaj. Saj mam programator, pa se mi je pokvaro. Zaj pa čakam na AvrUSB prog od @VolkD.

Sem malo premišlejval pa mislim da razumem zaj to tvojo enačbo.
Če mam 8-bitni ADC moram delit potem z 256, kaj pa če imam 10-bitni?

Sem malo preračunaval pa sem ugotovil, kako dobim iz tvojega računa direktno mV. Če je referenčna napetost 5V, na vhod pa pripeljem 2,5V bo moj račun takšen:
&H80 = 128 (če mi to vrže v programu)
128 x 5 = 640
640 x 1000 (ne 10) = 640000
640000 : 256 = 2500 (in dobim rezultat v mV)

Pa jaz v primeru od @Dkone (spletne strani, ki jo je dal) ne vidim ukaza &H80... Ali to cifro shrani program v spremenljivko W (v tem primeru) in je pol v praktiki ta cifra (v našem primeru 128-) shranjena v spremenljivki W?

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Sob Apr 26, 2008 11:09 am    Naslov sporočila:  Točno
----------------------------------------------------------------------------
Točno, le da ne smeš imeti byte spremenljivke ampak odgovarjajoče večje, da bo tudi največje število, ki nastopa v računu šlo v spremenljivko.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Apr 26, 2008 11:41 am    Naslov sporočila:  
----------------------------------------------------------------------------
Pa sem iskal v helpu, pa nisem našel kake tabele ali pa kaj, kjer bi pisalo, katera spremenljivka lahko ima koliko števk. Ker jaz ponavadi dam kar nekaj "na blef" pol pa preizkušam, kako daleč gre... A ima kdo to tabelo?

Pa če pri 8-bitnem ADC-ju delim z 256, z koliko morem delit pri 10-bitnem ADC-ju?

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Sob Apr 26, 2008 5:42 pm    Naslov sporočila:  Eh,
----------------------------------------------------------------------------
v Helpu piše med 'Language fundametals' tudi sledeče:
Citiram:
Data Types

Every variable in BASCOM has a data type that determines what can be stored in the variable. The next section summarizes the elementary data types.

Elementary Data Types

Bit (1/8 byte). A bit can hold only the value 0 or 1. A group of 8 bits is called a byte.
Byte (1 byte). Bytes are stores as unsigned 8-bit binary numbers ranging in value from 0 to 255.
Integer (two bytes). Integers are stored as signed sixteen-bit binary numbers ranging in value from -32,768 to +32,767.
Word (two bytes). Words are stored as unsigned sixteen-bit binary numbers ranging in value from 0 to 65535.
Long (four bytes). Longs are stored as signed 32-bit binary numbers ranging in value from -2147483648 to 2147483647.
Single. Singles are stored as signed 32 bit binary numbers. Ranging in value from 1.5 x 10^–45 to 3.4 x 10^38
Double. Doubles are stored as signed 64 bit binary numbers. Ranging in value from 5.0 x 10^–324 to 1.7 x 10^308
String (up to 254 bytes). Strings are stored as bytes and are terminated with a 0-byte. A string dimensioned with a length of 10 bytes will occupy 11 bytes.


Odgovor na zadnje vprašanje je 1024

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Apr 26, 2008 9:13 pm    Naslov sporočila:  Re: Eh,
----------------------------------------------------------------------------
vilko je napisal/a:
Odgovor na zadnje vprašanje je 1024


Aha, se pravi da je pri 10-bitnem ADC-ju račun takšen:
&H80 = Zy <--neka cifra (če mi to vrže v programu)
Zy x referenčna napetost = Rz
Rz x 1000 (ne 10) = Kp
Kp : 1024 = mV

V tem primeru sem dal kar neke spremenjlijke, ker nisem vedel točnih cifer. Zahvala, da zdaj to razumem (delno) gre @vilkotu! Hvala.

Avtor: videosonyKraj: Maribor PrispevekObjavljeno: Sre Apr 30, 2008 4:17 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Da ne odpiram nove teme bom kar tu vprašal.
Kako v bascomu napisat program da bo bral podatke iz SPI vodila enega drugega vezja ki pošilja binarne podatke 0 do 1023.
Pogledal sem literaturo o SPI pa mi je približno jasno delovanje, samo meni program noče delat-brat.
Rad bi prebral prek hardware SPI in izpisal na LCDju.

Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portd.6 , Rs = Portd.4
Dim I As Byte
Config Lcd = 16 * 2
Initlcd
Cls
Spiinit
Do
Waitms 50
Spiin I , 1
Cls
Lcd I
Loop
End

probal sem tudi ta prog:
'------------------------------------------------------------------
' SPI-SLAVE.BAS
' (c) MCS Electronics
' sample shows how to create a SPI SLAVE
' use together with sendspi.bas
'------------------------------------------------------------------
' Tested on the STK500. The STK200 will NOT work.
' Use the STK500 or another circuit
$regfile = "m16def.dat"


Dim B As Byte , Rbit As Bit , Bsend As Byte

'First configure the MISO pin
Config Pinb.6 = Output ' MISO

'Then configure the SPI hardware SPCR register
Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = No , Polarity = Low , Phase = 0 , Clockrate = 128
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portd.6 , Rs = Portd.4
'Then init the SPI pins directly after the CONFIG SPI statement.
Spiinit

Cls
'specify the SPI interrupt
On Spi Spi_isr Nosave

'enable global interrupts
Enable Interrupts

'show that we started
Lcd "start"
Wait 1
Spdr = 0 ' start with sending 0 the first time
Do
If Rbit = 1 Then
Lcd "r" ; B
Reset Rbit
Bsend = Bsend + 1 : Spdr = Bsend 'increase SPDR
End If
' your code goes here
Waitms 100
Cls
Loop



'Interrupt routine
'since we used NOSAVE, we must save and restore the registers ourself
'when this ISR is called it will send the content from SPDR to the master
'the first time this is 0
Spi_isr:
push r24 ; save used register
in r24,sreg ; save sreg
push r24
B = Spdr
Set Rbit ' we received something
pop r24
!out sreg,r24 ; restore sreg
pop r24 ; and the used register
Return

Avtor: rene_9Kraj: Maribor PrispevekObjavljeno: Tor Maj 06, 2008 10:18 pm    Naslov sporočila: icon_question Štetje pristiskov tipke
----------------------------------------------------------------------------
Zdravo
Da ne bom nove teme odpiral bom kar tu vprašal.Pgogram bi naj štel število pritiskov tipke in ob vsakem pritisku naredil določeno stvar. Bascom pa mi javo 2 napaki in ne vem kaj bi blo narobe, pa sem gledo help pa nisem najdo rešitve za napaki:

Error:7 Line:67 IF THEN expectet[67]
Error:269 Line:67 END SELECT expectet

Program ja je sledeč:

$regfile = "m8515.dat"
$crystal = 12000000
Config Debounce = 40


Dim Stevec As Byte
Config Porta = Input
Config Portb = Output
Tipka1 Alias Pina.0
Led1 Alias Portb.0
Led2 Alias Portb.1



Zacetek:
Do
Debounce Tipka1 , 0 , Vklop
Loop


Vklop:
Incr Stevec
If Stevec = 3 Then
Stevec = 0
Goto Izbira


Izbira:

Select Case Stevec
Case 0 : Goto Prog1
Case 1 : Goto Prog2
Case 2 : Goto Prog3

Prog1:
Set Led1

Prog2:
Do
Reset Led1
Wait 1
Set Led1
Wait 1
Set Led2
Loop

Prog3:
Do
Set Led2
Wait 1
Set Led1
Wait 1
Loop

Goto Zacetek

Avtor: igo PrispevekObjavljeno: Tor Maj 06, 2008 11:36 pm    Naslov sporočila: icon_question Re: Štetje pristiskov tipke
----------------------------------------------------------------------------
rene_9 je napisal/a:
Error:7 Line:67 IF THEN expectet[67]
Error:269 Line:67 END SELECT expectet

Program ja je sledeč:

$regfile = "m8515.dat"
$crystal = 12000000
Config Debounce = 40


Dim Stevec As Byte
Config Porta = Input
Config Portb = Output
Tipka1 Alias Pina.0
Led1 Alias Portb.0
Led2 Alias Portb.1



Zacetek:
Do
Debounce Tipka1 , 0 , Vklop
Loop


Vklop:
Incr Stevec
If Stevec = 3 Then
Stevec = 0
End If
Goto Izbira ' tega ni treba

Izbira:

Select Case Stevec
Case 0 : Goto Prog1
Case 1 : Goto Prog2
Case 2 : Goto Prog3

Prog1:
Set Led1
Goto Zacetek

Prog2:
Reset Led1
Wait 1
Set Led1
Wait 1
Set Led2
Goto Zacetek

Prog3:
Set Led2
Wait 1
Set Led1
Wait 1
Goto Zacetek
V "Vklop: " si pozabil na "End If" . Pa preden vprašaš, zakaj se program povsem zaplete, kar tega popravljenega uporabi. Pa še kak "Reset Led2 in Led1 " dodaj, da bo vedno definirano, kaj naj se zgodi.
LP,
Igor

Avtor: PobesneliKraj: Ajdovščina PrispevekObjavljeno: Sre Maj 07, 2008 12:01 am    Naslov sporočila:  
----------------------------------------------------------------------------
za tem delom

Select Case Stevec
Case 0 : Goto Prog1
Case 1 : Goto Prog2
Case 2 : Goto Prog3

manjka tudi End select

Avtor: PobesneliKraj: Ajdovščina PrispevekObjavljeno: Sre Maj 07, 2008 12:05 am    Naslov sporočila:  
----------------------------------------------------------------------------
Sedaj mam pa še jaz eno vprasanje..in sicer z 1wire DS1820.Zanima me kako se preveri koliko senzorjev je na vodilu in kako se potem prebere vsakega posebaj.
rabim kak namig Wink

Zanima me če ima kdo tiste primere iz Bascom seminarja (pdf),glede teh senzorjev.
Ker v pdfju jih ni.

Avtor: rene_9Kraj: Maribor PrispevekObjavljeno: Sre Maj 07, 2008 12:45 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala.
Bom popravo, kaj se pa tiče pdf-ja iz Bascom seminarja pa ti ga lahko na e-mail pošljem.

Avtor: PobesneliKraj: Ajdovščina PrispevekObjavljeno: Sre Maj 07, 2008 6:49 pm    Naslov sporočila:  
----------------------------------------------------------------------------
seminar iz bascoma že imam.rabim le tiste primere ki naj bi pokazali delovanje 1wire

Kopirano iz Pdf-ja:

Program DS1820-5 je primer branja temperature konkretnega termometra
Program DS1820-6 je primer branja temperature iz treh termometrov.

če ima kdo ?

Avtor: tozirKraj: Celje PrispevekObjavljeno: Sre Maj 07, 2008 10:40 pm    Naslov sporočila:  
----------------------------------------------------------------------------
http://datasheets.maxim-ic.com/en/ds/DS18S20.pdf

na začetku, pod drugo točko:
Koda:
Each device has a unique 64-bit serial code stored in an onboard ROM


na strani 5 imaš pa zgradbo tega registra razloženo. npr. jaz bi šel preverjat koliko različnih vrednosti teh registrov pa imam, ter bi iz tega sklepal koliko senzorjev je priključeno. samo ideja Wink

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Čet Maj 08, 2008 12:52 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Programi, ki smo jih uporabili na seminarju ...

LP, Grega

Avtor: PobesneliKraj: Ajdovščina PrispevekObjavljeno: Čet Maj 08, 2008 10:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
o hvala,to sem potreboval Wink

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pet Maj 09, 2008 8:13 am    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni, spet jaz! Laughing

Zdaj tisto z ADC-jem razumem! Ampak tisto deluje samo, če mam naprimer fotoupor vezan men neko točno določeno npetostjo in enim pinom uC-ja.

Kaj pa če si jaz hočem narediti merilec napetosti baterij, in le to prikazovati na dveh 7-segmentnih prikazovalnikih ali LCD-ju?

To pa potem mora biti drugače zasnovano... Kaj lahko odgovori kdo, ki se ukvarja z Bascomom in AVR-ji (ATmega16) in to točno ve?

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Pet Maj 09, 2008 8:37 am    Naslov sporočila:  
----------------------------------------------------------------------------
Kontroler verjetno napajaš preko 7805. Če imaš referenčni pin za ADC (torej pin, s katerim kontrolerju poveš maksimalno vrednost) vezan na +5 to pomeni, da je vrednost ADCja, ko je vhod sklenjen na maso 0, ko je vhod sklenjen na +5V pa maksimalni vrednosti (odvisno od resolucije; npr. pri 8 bitnem ADC je to 255, pri 10 bitnem 1023 itd).
Torej, če želiš meriti napetost baterij moraš najprej določiti maksimalno napetost, ki jo boš meril. Nato izračunaš uporovni delilnik na AD vhodu tako, da bo najvišja merjena napetost znotraj ADC območja.
Od tu naprej je vse skupaj en košček torte ... Wink Predpostavljam seveda, da znaš pisati na LCD ali uporabljati 7 segmentni zaslon.

LP, Grega

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Pet Maj 09, 2008 9:36 am    Naslov sporočila:  Seveda lahko meriš
----------------------------------------------------------------------------
Seveda lahko meriš napetosti kateregakoli izvora, le masa - nula mora biti skupna.

Pri vsakem merjenu se meritev izvaja tako, da mikroprocesor primerja vhodno napetosto na vhodnem pinu mikroprocesorja, z napetostjo na referenčnem pinu mikroprocesorja, in ta referenčna napetost mora biti višja od merjene.

če pa imaš na viru, ki ga želiš meriti višjo napetost, potem jo enostavno z uporovnim delilnikom, ki ga narediš sam, in potemtakem njegovo delitev napetosti poznaš, deliš tako, da bo izhod iz uporovnega delilnika nižja od referenčne.

Mikroprocesor ti bo seveda izmeril napetost na izhodu delilnika, potem pa v programu dodaš še množenje z faktorjem uporovnega delilnika in rezultat tega računa prikažeš na displeju oziroma daš tja, kjer pač ta podatek rabiš.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Maj 10, 2008 6:34 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja, pravite, da mora biti na AREF vedno višja napetost. Hmm, kaj pa v tem primeru:
Imam sklop baterij (skupaj 5V). So celotno napajanje vezja z mojim uC-jem na čelu. Imam tudi LCD za prikazovanje podatkov. In ob pritisku določene tipke, hočem jaz izvedeti, koliko voltov (x,xxV) baterij še imam! Torej bi bila napetost na ADC-ju vedno (ob vsakem merjenju) enaka napetosti na AREF pinu.

Mogoče bi se to dalo rešiti z uporom, ki bi napetost baterij za malenkost zmanjšal, pa jo potem izmeril, jaz pa bi v programu zato prištel tisto napetos nazaj?

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Maj 10, 2008 6:36 pm    Naslov sporočila:  Re: Seveda lahko meriš
----------------------------------------------------------------------------
vilko je napisal/a:

če pa imaš na viru, ki ga želiš meriti višjo napetost, potem jo enostavno z uporovnim delilnikom, ki ga narediš sam, in potemtakem njegovo delitev napetosti poznaš, deliš tako, da bo izhod iz uporovnega delilnika nižja od referenčne.


Ima kdo kakšen načrt za uporovni delilnik in kako ploh deluje? Ali ni to enako kot en enostaven upor?

Avtor: MadMax PrispevekObjavljeno: Sob Maj 10, 2008 6:48 pm    Naslov sporočila:  
----------------------------------------------------------------------------
http://en.wikipedia.org/wiki/Voltage_divider

Avtor: Sokrat PrispevekObjavljeno: Sob Maj 10, 2008 9:36 pm    Naslov sporočila:  Re: Seveda lahko meriš
----------------------------------------------------------------------------
program_er je napisal/a:

Ima kdo kakšen načrt za uporovni delilnik in kako ploh deluje? Ali ni to enako kot en enostaven upor?


Ni ... to je [kot] dva enotavna upora Wink

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Maj 10, 2008 10:24 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pa to je najboljše, da sta oba dva upora enake vrednosti ali je boljše da ima prvi več upornosti, pa drugi manj ali obratno? Ker tam ne piše kakih primerov vrednosti.

Avtor: MadMax PrispevekObjavljeno: Ned Maj 11, 2008 1:18 am    Naslov sporočila:  
----------------------------------------------------------------------------
Matematika, fant, pa malce zdrave kmečke logike vklopi.
Ni težko, ko "ti potegne"...

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Maj 14, 2008 3:55 pm    Naslov sporočila: icon_shocked Poredni LCD-ji
----------------------------------------------------------------------------
Imam eno težavo. Dobil sem LCD prikazovalnike in enega priključil na mojo ATmega16. Napisal sem ta program v Bascomu:

Koda:
$regfile = "m16def.dat"
$crystal = 1000000

Config Portc.6 = Output

Config Lcd = 16 * 2
Config Lcdbus = 4
Config Lcdpin = Pin , Db7 = Portc.0 , Db6 = Portc.1 , Db5 = Portc.2 , Db4 = Portc.3 , E = Portc.4 , Rs = Portc.5
Cursor Off

Osvetlitev Alias Portc.6

Do
Cls
Osvetlitev = 1
Waitms 200
Lcd "Podravljen!"
Lowerline
Waitms 500
Lcd "LCD deluje!"
Wait 1
Osvetlitev = 0
Waitms 500
Osvetlitev = 1
Waitms 500
Osvetlitev = 0
Loop

End


Pa sem ga naložil v dve megi, pa v dobeni nič. uC drugače deluje odlično, vsi drugi programi z ledicami in podobnim mi grejo, pa tudi osvetlitev mi lepo prižiga. Aja pa na ekranu (če nastavim kontrast) je zgornja vrstica čisto črna (ko je pod napetostjo) spodnja pa malo manj. Pa to pri izvajanju programa in pri že majhnem kontrastu.

Kaj bi bilo tukaj narobe? Ali mogoče uC ne podpira LCD na vratih C?

Avtor: int47Kraj: Ljubljana PrispevekObjavljeno: Sre Maj 14, 2008 4:10 pm    Naslov sporočila:  
----------------------------------------------------------------------------
LCD ni (pravilno) inicializiran. Problem je lahko v SW, ali HW.
-Mogoče je v Basic-u potrebno uporaiti ukaz za inicializacijo LCD-ja?
-Poglej, če je vse prav zvezano. Kam je priklopljen R/W LCD-ja?
-Poglej, če si pravilno definiral signale.
-Preveri, če je nastavljena hitrost uC-ja pravilna.
-Preveri, če je napajalna napetost v (za LCD) ustreznih tolerancah.

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Sre Maj 14, 2008 4:19 pm    Naslov sporočila:  Lahko
----------------------------------------------------------------------------
Lahko je tudi vrag v mikroprocesorjivih krmilnih bitih fuse bitih in jtag bitih.
Le ti lahko nekatere portpine odvzamejo in dajo portpinom čisto druge funkcije.
Oglej si datasheet. Izvleček!

Port Pin Alternate Function
PC7 TOSC2 (Timer Oscillator Pin 2)
PC6 TOSC1 (Timer Oscillator Pin 1)
PC5 TDI (JTAG Test Data In)
PC4 TDO (JTAG Test Data Out)
PC3 TMS (JTAG Test Mode Select)
PC2 TCK ( J TAG Te s t Cl ock )
PC1 SDA (Two-wire Serial Bus Data Input/Output Line)
PC0 SCL (Two-wire Serial Bus Clock Line)

vse te 'alternativne' funkcije je potrebno onemogočiti, (disablirati po slovensko)

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Maj 14, 2008 5:14 pm    Naslov sporočila:  
----------------------------------------------------------------------------
int47 je napisal/a:
LCD ni (pravilno) inicializiran. Problem je lahko v SW, ali HW.
-Mogoče je v Basic-u potrebno uporaiti ukaz za inicializacijo LCD-ja?
-Poglej, če je vse prav zvezano. Kam je priklopljen R/W LCD-ja?
-Poglej, če si pravilno definiral signale.
-Preveri, če je nastavljena hitrost uC-ja pravilna.
-Preveri, če je napajalna napetost v (za LCD) ustreznih tolerancah.


- Kaj misliš z inicializacijo? kaj je to?
- R/W je na GND. Sem petkrat pogledal. Vse je pravilno zvezano.
- Pravilno.
- Nastavljena hitrost je pravilna. Mege imajo notranji 1 MhZ oscilator
- Napetost tudi pravilna.

Z temi nastavitvami je včasih LCD deloval! Ko sem programiral z starim računalnikom, je vse vredu šlo! Nevem kaj je zdaj narobe!

vilko je napisal/a:
Lahko je tudi vrag v mikroprocesorjivih krmilnih bitih fuse bitih in jtag bitih.
Le ti lahko nekatere portpine odvzamejo in dajo portpinom čisto druge funkcije.
Oglej si datasheet. Izvleček!

Port Pin Alternate Function
PC7 TOSC2 (Timer Oscillator Pin 2)
PC6 TOSC1 (Timer Oscillator Pin 1)
PC5 TDI (JTAG Test Data In)
PC4 TDO (JTAG Test Data Out)
PC3 TMS (JTAG Test Mode Select)
PC2 TCK ( J TAG Te s t Cl ock )
PC1 SDA (Two-wire Serial Bus Data Input/Output Line)
PC0 SCL (Two-wire Serial Bus Clock Line)

vse te 'alternativne' funkcije je potrebno onemogočiti, (disablirati po slovensko)


Sem prebral. Samo kaj mi pomaga, ko pa ne vem, kako se onemogočijo v Bascomu! Ima do nasvet? Zdaj ga bom poizkusil dati na port A, ki ima kot drugo funkcijo samo ADC-je.

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Sre Maj 14, 2008 7:37 pm    Naslov sporočila:  Običajno ima programator
----------------------------------------------------------------------------
Običajno ima programator na PC-u možnost upravljanja s temi biti.
Moj programator AVR ISP izgleda na PC-u tako:

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Maj 14, 2008 7:42 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Že, pri STK200! Jaz pa uporabljam stk500, ki ti, ko stisneš na program odpre samo CMD in ti ga naloži. Jaz bi bil srečn če bi imel to okno!

Avtor: PobesneliKraj: Ajdovščina PrispevekObjavljeno: Sre Maj 14, 2008 8:29 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Nevem če je krivo...samo meni se zdi da ima ukaz waitms največjo vrednost 255 ?

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Maj 14, 2008 9:37 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pobesneli je napisal/a:
Nevem če je krivo...samo meni se zdi da ima ukaz waitms največjo vrednost 255 ?


To ni krivo. Saj sem rekel, osvetlitev dela odlično - se prižiga pa ugaša po sekundah. Samo na LCD-ju ni nič.

Avtor: PobesneliKraj: Ajdovščina PrispevekObjavljeno: Sre Maj 14, 2008 9:49 pm    Naslov sporočila:  
----------------------------------------------------------------------------
poskusi zbrisat še Config Lcdbus = 4 ven.
Ker v help-u piše Config Lcdbus :Use this statement together with the $LCD = address statement

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Sre Maj 14, 2008 10:15 pm    Naslov sporočila:  to je vsekakor res
----------------------------------------------------------------------------
to je vsekakor res

waitms in wait parameter je bajt, torej ima največjo vrednost 255, toda to ne more ogroziti delovanje LCD-a
Poizkusi LCD vezati na kak drug port, če ne moreš krmiliti FUSE and LOCK bitov.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Maj 14, 2008 11:23 pm    Naslov sporočila:  
----------------------------------------------------------------------------
LCD sem vezal na port A in deluje odlično!

Glede waitms: včasih sem imel wait ukaze nastavljene tudi do Waitms 1250 pa je vse normalno delovalo. Še dokaj točno je blo!

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Čet Maj 15, 2008 5:32 am    Naslov sporočila:  HA
----------------------------------------------------------------------------
Waitms in wait ima kot parameter en bajt.
vsaj če govorimo o bascomu, je tako.

Če je delalo odlično, potem velja tisto Murphyjevo pravilo:
Če dela vse perfektno, potem si nekaj spregledal.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Čet Maj 15, 2008 6:42 am    Naslov sporočila:  
----------------------------------------------------------------------------
Heh, mogoče, glavno da deluje!

Opazil sem, da LCD sicer dela, ampak kar nekaj! Ko jaz nekaj napišem na LCD, pa grem v spodnjo vrstico, pa še tam nekaj napišem, mi hkrati piše v obe vrstici! Pa ukazi za sekunde sploh niso tako dolgi, kot so včasih bili. Sem preverih hitrost pa imam pravilno nastavljeno! Najbolj pa me jezi, da mi je enak program (zelo podoben) včasih deloval na enakem čipu in enakem LCD-ju!

Avtor: stursc PrispevekObjavljeno: Čet Maj 15, 2008 7:57 am    Naslov sporočila:  
----------------------------------------------------------------------------
program_er je napisal/a:
LCD sem vezal na port A in deluje odlično!

Glede waitms: včasih sem imel wait ukaze nastavljene tudi do Waitms 1250 pa je vse normalno delovalo. Še dokaj točno je blo!


Ko boš pravilno nastavil Fuse-byte bo delovalo tudi na C-portu

LP

Avtor: int47Kraj: Ljubljana PrispevekObjavljeno: Čet Maj 15, 2008 8:47 am    Naslov sporočila:  
----------------------------------------------------------------------------
Na začetku je potrebno LCD-ju "povedat" par parametrov. Med drugim tudi, število vrstic.

Predvidevam, da to naredi
Koda:
Config Lcd = 16 * 2

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Čet Maj 15, 2008 3:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hja, zdaj sem spremenil programator na stk500 extended in mi pokažeto, kaj sem prilepil spodaj.

Vse sem stisnil Read pa mi je pokazalo, kar vidite. In kako naj jaz iz teh dveh številk pri Fuse Bits izvem kaj?

Avtor: int47Kraj: Ljubljana PrispevekObjavljeno: Čet Maj 15, 2008 7:40 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Gre tudi s kalkulatorjem:

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Čet Maj 15, 2008 8:28 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja, razumem. Samo keri bit kaj pomeni? Meni trenutno nič ne pomaga 11100111 ali pa kaj podobnega.

Avtor: PobesneliKraj: Ajdovščina PrispevekObjavljeno: Čet Maj 15, 2008 8:29 pm    Naslov sporočila:  
----------------------------------------------------------------------------
malo poglej po datashetih ne?

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Čet Maj 15, 2008 8:53 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Točno glej, na to pa vedno pozabim!

Hvala!

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pet Maj 16, 2008 3:44 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja, sem probal s kalkulatorjem, pa sem ugotovil, da moj kalkulator (Vista) nima te možnosti:

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Pet Maj 16, 2008 3:48 pm    Naslov sporočila:  Sicer
----------------------------------------------------------------------------
Sicer nimam Viste, a prepričan sem, da ima tak pogled tudi Vistin kalkulator, le na 'pulldown' meniju Pogled moraš izbrati šestnajtiški pogled.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pet Maj 16, 2008 3:50 pm    Naslov sporočila: icon_question Nokia 3310 LCD-ji in Bascom
----------------------------------------------------------------------------
Dobil sem LCD-je od Nokie 3310. Pa sem se znašem pred nekaj težavami, kajti jaz sem mislil, da se bo to podobno priključilo kot 16*2 LCD.

Gledal sem tole spletno stran in videl, da sta na mikrokontroler povezana samo 2 ali 3 pini.

V Bascom Helpu pa piše, da ma grafični LCD cele porte za delovanje (kontrolni pa še en port). Tu pa samo 2 pina. A mi lahko kdo pomaga? Pa s čem lahko potem rišem po takem grafičnem LCD-ju? Z LCD-simulatorjem ravno ne morem...

Prosim pomoč ali kak kos kode, s katerim bi lahko narisal poljubno slikico na Nokia 3310 LCD? Pa shema, kako ga vežem bi bila dobrodošla.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pet Maj 16, 2008 3:53 pm    Naslov sporočila:  Re: Sicer
----------------------------------------------------------------------------
vilko je napisal/a:
Sicer nimam Viste, a prepričan sem, da ima tak pogled tudi Vistin kalkulator, le na 'pulldown' meniju Pogled moraš izbrati šestnajtiški pogled.


Aha, deluje! Šestanjstiško pa vpišem E1, pol pa binarno pa je OK vse.

Hvala.

Avtor: chaosKraj: Zagorje ob Savi PrispevekObjavljeno: Pet Maj 16, 2008 4:43 pm    Naslov sporočila: icon_question Re: Nokia 3310 LCD-ji in Bascom
----------------------------------------------------------------------------
program_er je napisal/a:
Dobil sem LCD-je od Nokie 3310. Pa sem se znašem pred nekaj težavami, kajti jaz sem mislil, da se bo to podobno priključilo kot 16*2 LCD.

Gledal sem tole spletno stran in videl, da sta na mikrokontroler povezana samo 2 ali 3 pini.


Če se prav spomnim, ima LCD od 3310 serijsko komunikacijo, i2c ali pa mogoče spi.

Če v google vpišeš "microcontroller 3310 lcd", boš našel cel kup shem in programov ...

EDIT: tudi na tem forumu so se že ukvarjali s tem, npr:
http://www.elektronik.si/phpBB2/viewtopic.php?t=11080

LP!

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pet Maj 16, 2008 5:06 pm    Naslov sporočila:  
----------------------------------------------------------------------------
@chaos hvala!

Imam pa še eno vprašanje. Na tej strani sta uporabljena dva 4,7 uF kondenzatorja. Pa na mojem LCD-ju sta tudi dva kondenzatorja.

Na sliki spodaj sta vidna ta dva kondenzatorja, pa me zanima če sta to taprava in na kera dva pina sta vezana?

Hvala!


Nazadnje urejal/a program_er Sob Jul 04, 2009 5:10 pm; skupaj popravljeno 2 krat

Avtor: int47Kraj: Ljubljana PrispevekObjavljeno: Pet Maj 16, 2008 5:19 pm    Naslov sporočila:  
----------------------------------------------------------------------------
šestnajstiško = HEX
dvojiško = BIN

Edit: Izbrisna slika.
Vidim, da si že našel.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pet Maj 16, 2008 5:24 pm    Naslov sporočila:  
----------------------------------------------------------------------------
int47 je napisal/a:
šestnajstiško = HEX
dvojiško = BIN

Edit: Izbrisna slika.
Vidim, da si že našel.


To sem že ogotovil. Pa vseeno hvala. Mene zdaj bolj LCD en post nazaj zanima.

Avtor: int47Kraj: Ljubljana PrispevekObjavljeno: Pet Maj 16, 2008 5:47 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Na sliki nista dva 4,7uF elektrolitska kondenzatorja.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pet Maj 16, 2008 6:15 pm    Naslov sporočila:  
----------------------------------------------------------------------------
int47 je napisal/a:
Na sliki nista dva 4,7uF elektrolitska kondenzatorja.


Kaj pa potem? Pa kakšno zvezo imata z LCD-jem, da sta prilimana nanj?

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pet Maj 16, 2008 6:49 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pobesneli je napisal/a:
malo poglej po datashetih ne?


Spodaj je izrezek datasheeta, kjer piše o Clockih.

Kot pa je že en prej napiasl, pa sta pri meni 2 cifri: High in Low.
Raz bi imel zunanji kristal 11059200 hZ. Kaj mi lahko kdo pove kakšni binarni cifri naj prevedem v računalu in ju vstavim kot HEX in sicer kako pod low in kako pod high? Slike kako izgledajo moje nastavitve pri stk500 so na prejšnji strani.

Hvala!

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pet Maj 16, 2008 8:13 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Jojj, nekaj sem zasuštral!

Nastavil sem fuse bits: High: EA -- Low: 99

Pa mi uC sploh več ne zazna pa nič. Ne morem ga nazaj sprogramirat ker ga ne zazna. Kar ugasnil je. Prosim poglejte na datasheet zgoraj pa mi povejte kaj je rešitev! Hvala!

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Pet Maj 16, 2008 9:58 pm    Naslov sporočila:  Ne vem
----------------------------------------------------------------------------
ne vem sicer, kaj si zašuštral, toda slišal sem, da se da mikroprocesor tako temeljito zakleniti ( = zašuštrati) da se ga da odkleniti le z paralelnim programatorjem, serijski menda za to ni dober.
Ali lahko prebereš kaj iz spomina mikroprocesorja? Če je odgovor da, potem zagotovo si nisi zaklenil mikroprocesorja. Če je odgovor ne, potem pa seveda obstaja možnost, da je zaklenjen.

Jaz na mojem programatorju nastavljam bite z $prog ukazom tako:

$prog &HFF , &HEF , &HD1 , &H00

Kaj to pomeni, ne vem, toda programator mi je generiral ta ukaz, ko sem nastavljal bit po bit moje zahteve.

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Sob Maj 17, 2008 11:18 am    Naslov sporočila:  
----------------------------------------------------------------------------
Bojan,probaj namesto kvarca uporabiti oscilator(oni kvadratni,ki ima 4 pine),ter ga priključi na eden pin izmed XTAL 1 ali XTAL2. Potem ti bi ga moralo zaznati. Če pa ne pa probaj ga zbuditi z drugim mikrokontrolerjem tako,da mu generiraš pravokotne signale(en bit postavljaš na 1),ter isti signal pripelji eden izmed teh XTAL.

Če pa še to ne bo zaleglo,potem pa te res reši samo še pararelni programator.

Program za generiranje:

Koda:

config portb.0=output
ddrb=255
do
portb.0 = 1
waitms 1      'spreminjaš dolžino intervala
portb.0=0
loop

Avtor: int47Kraj: Ljubljana PrispevekObjavljeno: Sob Maj 17, 2008 2:02 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Citiram:
Nastavil sem fuse bits: High: EA -- Low: 99


E (hex) = 1110 (bin). OCD, JTAG in SPI so onemogočeni.
9 (hex) = 1001 (bin). = cksel3...0.

Zakaj imam občutek, da si zamenjal high in low fuse?

Avtor: int47Kraj: Ljubljana PrispevekObjavljeno: Sob Maj 17, 2008 2:13 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Citiram:
Če pa še to ne bo zaleglo,potem pa te res reši samo še pararelni programator.


Paralelni programator ni nujno potreben. V najslabšem primeru je potrebno sprogramirat dva fuse byta v paralelnem režimu programiranja.

Ker časovno trajanje signalov ni ravno kritično, se to da narediti tudi na proto-boardu.
Razen proto-boarda in PDF-ja rabiš še vir +5 in +12V, par (pull-up) uporov in žičk, ter nekaj zdrave kmečke logike.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Maj 17, 2008 2:43 pm    Naslov sporočila:  
----------------------------------------------------------------------------
No, zdaj sem problem rešil tako, da sem zamenjal mego. K tistemu problemu se bom vrnil drugič in ga rešil.

Zdaj pa spet nazaj ka našemu staremu dobremu ADC-ju. Laughing

Napisal sem to kodo:
Koda:

$regfile = "m16def.dat"
$crystal = 1000000

Config Portd.6 = Output

Config Lcd = 16 * 2

Config Lcdpin = Pin , Db7 = Portd.0 , Db6 = Portd.1 , Db5 = Portd.2 , Db4 = Portd.3 , E = Portd.4 , Rs = Portd.5
Cursor Off
Osvetlitev Alias Portd.6


Config Adc = Single , Prescaler = Auto , Reference = Internal

Start Adc

Dim W As Word , Channel As Byte

Channel = 0

'now read A/D value from channel 0

Do

W = Getadc(channel)
Cls
Home U
Lcd "ADC:" ; Channel ; " = " ; W
Wait 1
Incr Channel

If Channel > 4 Then Channel = 0

Loop

End



'The new M163 has options for the reference voltage

'For this chip you can use the additional param :

'Config Adc = Single , Prescaler = Auto, Reference = Internal

'The reference param may be :

'OFF      : AREF, internal reference turned off

'AVCC     : AVCC, with external capacitor at AREF pin

'INTERNAL : Internal 2.56 voltage reference with external capacitor ar AREF pin



'Using the additional param on chip that do not have the internal reference will have no effect.


End


Med pine PORTA.0 (ADC 0), PORTA.1 (ADC 1) in PORTA.2 (ADC 2) in + polom napajanja sem dal upore tako po vrsti: 100k, 10k in 1k.

In ko sem imel te upore gor, mi je na LCD-ju skos kazalo 1023, se pravi kot da imam polno elektriko. Na ADC 4, kjer pa nisem imel nič pa je skozi kazalo malo drugačno cifro, okoli 500.

Zdaj pa imam vse pine ADC-ja prazne in mi lepo kaže različne vrednosti. Shocked Laughing

Ima kdo rešitev? Tale reference me ***

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Maj 17, 2008 3:19 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Malo sem spremenil kodo:
Koda:

$regfile = "m16def.dat"
$crystal = 1000000

Enable Adc

Config Portd.6 = Output

Config Lcd = 16 * 2

Config Lcdpin = Pin , Db7 = Portd.0 , Db6 = Portd.1 , Db5 = Portd.2 , Db4 = Portd.3 , E = Portd.4 , Rs = Portd.5
Cursor Off
Osvetlitev Alias Portd.6
Osvetlitev = 1

Config Adc = Single , Prescaler = Auto , Reference = Off

Start Adc

Dim W As Word , Rz As Word , Kp As Word , Rezultat As Single , Channel As Byte

Channel = 0

'now read A/D value from channel 0
'Aha, se pravi da je pri 10-bitnem ADC-ju račun takšen:
'&H80 = W <--neka cifra (če mi to vrže v programu)
'W x referenčna napetost = Rz
'Rz x 1000 (ne 10) = Kp
'Kp : 1024 = Mv
Do

 W = Getadc(channel)
 Rz = W * 5.05
 Kp = Rz * 1000
 Rezultat = Kp / 1024

 Gosub Prikaz
 Incr Channel
 If Channel > 3 Then Channel = 0

Loop

Prikaz:
Cls
Home U
Lcd "ADC:" ; Channel ; " = " ; Rezultat
Wait 1
Return

End



'The new M163 has options for the reference voltage

'For this chip you can use the additional param :

'Config Adc = Single , Prescaler = Auto, Reference = Internal

'The reference param may be :

'OFF      : AREF, internal reference turned off

'AVCC     : AVCC, with external capacitor at AREF pin

'INTERNAL : Internal 2.56 voltage reference with external capacitor ar AREF pin



'Using the additional param on chip that do not have the internal reference will have no effect.


Pin AREF sem povezal z + 5V
Zdaj pa mi kaže kup decimalk.

Pa ista pesem. Če imam upore mi kaže vedno isto, 3.xxxxxxxx (ne vem točno) če pa so pini nepovezani, pa mi kaže različno

Avtor: eddieKraj: Severna primorska PrispevekObjavljeno: Sob Maj 17, 2008 6:33 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Če si upore vezal vsakega iz +5V pa na en pin ADC-ja nisi naredil prav nič! Napetost na vseh pinih je 5V.
Vzemi en potenciometer, zunanja pola veži na +5V in maso, srednji odcep pa na enega od vhodov adc-ja!
Tako boš videl spreminjanje vrednosti, ko boš vrtel potenciometer od 0 do maksimalne(zato ker bo napetost na pinu od 0 do 5V)!
Pini, ki so "v zraku" vedno kažejo neko vrednost, ki se spreminja.
Kanale, ki jih ne potrebuješ vežeš na maso in je.


Lp

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Maj 17, 2008 9:01 pm    Naslov sporočila:  Re: Poizkusi tako, kot piše v help-u
----------------------------------------------------------------------------
Hvala vam, deluje!

vilko je napisal/a:
...
In če hočeš napisati rezultat kot 5.0V potem moraš še ločiti desetinke od celih voltov v dve ločeni spremenljivki

Koda:
dim volti as word
dim desetinke as word

volti = W2 / 10
desetinke = W2 mod 10
print "Napetost je ";volti;".";desetinke;"V  "


Najbolje je, da probaš.


Tudi to odlično deluje, od 0.0 do 5.0 V.

Tu pa je moj kos računske kode:
Koda:

Config Adc = Single , Prescaler = Auto , Reference = Internal


Start Adc

Dim W As Word , Rz As Word , Kp As Word , Rezultat As Word , Channel As Byte , Volti As Word , Desetinke As Word

Channel = 0

Do

 W = Getadc(0)
 Rz = W * 5.45
 Kp = Rz * 10
 Rezultat = Kp / 1023

 Volti = Rezultat / 10
 Desetinke = Rezultat Mod 10

 Gosub Prikaz

 Loop

Prikaz:
 Cls
 Home U
  Lcd "ADC = " ; Volti ; "." ; Desetinke ; " V"
 Lowerline
  Lcd "ADC izvir:" ; W
 Waitms 500
Return

End


@Vilko, a lahko prosim pogledaš moj primer in mi poveš, kako bi naredil prikaz z dvema decimalkama, torej od 0.00 do 5.00 V.

Hvala!

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Maj 17, 2008 9:10 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ah, sem že "pogruntal". Dela mi odlično!

Imam pa en problem. Referenčne napetosti nimam vedno točno take, kot imam v programu napisano.

Ali obstaja kakšna nastavitev, da bi mi program avtomatsko množil moj račun - ne z 5.45 zgoraj - ampak z napetostjo, ki bi jo pripeljal na AREF pin, se pravi + okoli 5V. Tako bi imel vedno točen rezultat.

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Sob Maj 17, 2008 9:13 pm    Naslov sporočila:  no
----------------------------------------------------------------------------
No, analogno.

Če si desetinke dobil kot
Koda:
dim volti as word
dim desetinke as word

volti = W2 / 10
desetinke = W2 mod 10
print "Napetost je ";volti;".";desetinke;"V  "
potem boš vrednostnos s stotinkami dobil kot

Koda:
dim volti as word
dim stotinke as word

volti = W2 / 100
stotinke  = W2 mod 100
print "Napetost je ";volti;".";stotinke;"V  "

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Ned Maj 18, 2008 10:38 am    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala vam! Vse mi dela. Nebi si mislil, da je to taka lahka stvar. Zdaj ko sem pogruntal mi je to nekaj najlažjega! Cool

Sem že naredil sledibota, sem dal fotoupor med ADC in +, pa še 10k upor med ta isti ADC in minus. Namesto motorjev pa sem dal ledice. Very Happy
Moja koda:
Koda:

Do

 W = Getadc(0)
 Rz = W * 5.45
 Kp = Rz * 10
 Rezultat = Kp / 1023
' Rezultat = Rezultat * 10

 Volti = Rezultat / 10                                      ' Rezultat / 100
 Desetinke = Rezultat Mod 10                                'Mod 100

 If W > 600 Then Portc.7 = 0
 If W < 600 Then Portc.7 = 1

 Gosub Prikaz

 If W > 600 Then Portc.7 = 0
 If W < 600 Then Portc.7 = 1

Loop

Prikaz:
 Home U
  Lcd "ADC = " ; Volti ; "." ; Desetinke ; " V"
 Lowerline
  Lcd "ADC izvir:" ; W
 Waitms 300
Return

End

Kot se vidi, imam If ukaze pred in po rutini Gosub Prikaz. Zakaj? Ko sem imel to samo pred tem ukazom, je bil odzivni čas uC-ja 300ms, ker subrutina Prikaz traja 300ms. To me je motilo. Zato pa imam vprašanje, če obstaja kaka zanka ali ukaz, ki bi vedno ponavljal ta ukaz, ampak med tem bi jaz v glavnem programu delal nekaj drugega. Z Do-Loop ne gre, ker je lahko v programu samo ena taka zanka. Ker ne morem jaz za vsakim Wait ukazom spet napisati ta dva ukaza ponovno. Ja, pa pomembno je, da bi se ta zanka izvajala med Wait ukazi!


Ne razumem pa, zakaj moj uC nikoli ni hotel poganjati servotov. Vse sem pravilno zvezal, kot piše v helpu, pa ne gre. Mogoče pa servo ne podpira krmiljenja preko uC? Uporabljam Standard HITEC HS-311 servo.

Hvala za odgovore!

Avtor: pouleKraj: Ljubljana PrispevekObjavljeno: Ned Maj 18, 2008 9:02 pm    Naslov sporočila:  
----------------------------------------------------------------------------
pozdravljeni,...končno sem se tudi jaz lotil s programiranjem,.....in prva težava.

uporabljam minipin in attiny2313.

ko hočem naložiti program mi javi napako:


ko jo potrdim mi javi še tole:


čip imam definiran takole:


programiram preko sample programatorja (LPT)


čip imam definiran tudi na začetku programa ($regfile = "ATTiny2313.dat")


Nekje sem najbrž nekaj spregledal v nastavitvah,da se mi ne poveže. Hvala za vsak nasvet.

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Ned Maj 18, 2008 10:20 pm    Naslov sporočila:  
----------------------------------------------------------------------------
To ti javlja,da nimaš pravilno povezan uC ter programator. Preveri še enkrat povezave,nastavitve imaš pravilno izbrane. Tako da je verjetno napaka na programatorju. Preveri če si pravilno poveza tiste signale miso,mosi,sck.....ter če si pravilno naredil programator.

Avtor: pouleKraj: Ljubljana PrispevekObjavljeno: Ned Maj 18, 2008 10:37 pm    Naslov sporočila:  
----------------------------------------------------------------------------
povezano imam (preverjeno) takole:


mi pa isto napako izpiše, če imam programator iztaknjen iz računalnika. Kako lahko preverim, če LPT sploh deluje?

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Ned Maj 18, 2008 10:43 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Poglej rajši v Help bascoma,tam imaš lepo razloženo o tem sample programatorju,pa še za LPT konektor imaš lepo napisane številke Pina.

Avtor: juremKraj: Ljubljana PrispevekObjavljeno: Ned Maj 18, 2008 10:57 pm    Naslov sporočila:  
----------------------------------------------------------------------------
V BIOS-u poglej vse možne LPT naslove in jih enega za drugim preizkusi v nastavitvah za Sample programmer.

Lp
Jure

Avtor: pouleKraj: Ljubljana PrispevekObjavljeno: Ned Maj 18, 2008 10:59 pm    Naslov sporočila:  
----------------------------------------------------------------------------
v help-u je napisano takole,

, v dokumentaciji za razvojno plato pa imam napisano:

konektor K6:
RST pin3
MOSI pin 8
MISO pin9
SCKpin10
GND pin2

Kako je pravilno?

Avtor: juremKraj: Ljubljana PrispevekObjavljeno: Ned Maj 18, 2008 11:21 pm    Naslov sporočila:  
----------------------------------------------------------------------------
poule je napisal/a:
v dokumentaciji za razvojno plato pa imam napisano:

konektor K6:
RST pin3
MOSI pin 8
MISO pin9
SCKpin10
GND pin2

Kako je pravilno?


K6 je IDC konektor, ne LPT.

Lp
Jure

Avtor: pouleKraj: Ljubljana PrispevekObjavljeno: Pon Maj 19, 2008 6:33 am    Naslov sporočila:  
----------------------------------------------------------------------------
Itak da je IDC, saj je vidno iz slike, par prispevkov višje. Na eni strani flat kabla je 10 pin IDC, na drugi 25pin D-sub (LPT).

Avtor: pouleKraj: Ljubljana PrispevekObjavljeno: Pon Maj 19, 2008 6:52 pm    Naslov sporočila:  
----------------------------------------------------------------------------
a moram kaj nastaviti tudi tukaj, oz. kako lahko s tem potipam, če je živ?



Avtor: juremKraj: Ljubljana PrispevekObjavljeno: Tor Maj 20, 2008 8:04 am    Naslov sporočila:  
----------------------------------------------------------------------------
Oj,

ali si dal resonator ali kvarc v ustrezno podnožje na MiniPin-u?

Lp
Jure

Avtor: pouleKraj: Ljubljana PrispevekObjavljeno: Tor Maj 20, 2008 11:00 am    Naslov sporočila:  
----------------------------------------------------------------------------
da

Avtor: pouleKraj: Ljubljana PrispevekObjavljeno: Tor Maj 20, 2008 4:51 pm    Naslov sporočila:  
----------------------------------------------------------------------------
A je kdo iz Ljubljane, ki uporablja minipin in sample programator in bi mi naklonil nekaj minut ob kavi, da prečekirava moje nastavitve in programator.

Avtor: pouleKraj: Ljubljana PrispevekObjavljeno: Tor Maj 27, 2008 7:19 am    Naslov sporočila:  
----------------------------------------------------------------------------
takole, sposodil sem si drug minipin, katerega z mojim Sample programatorjem brez problema sprogramiram. Ko sprogramiran čip vtaknem v mojo, lahko delam vse (vhodi in izhodi OK)
Kaj sedaj? Kaj na minipinu bi lahko šlo, da mi komunikacija ne deluje? Nazadnje sem jo uporabljal na tečaju v Škofji L. ,kjer je še delal (na progyja).

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Tor Maj 27, 2008 7:29 am    Naslov sporočila:  Mini pin
----------------------------------------------------------------------------
Stari Minipin, tisti, ki nima ekstra konektorja za programator, ima pri konektorju za P1 ki je tudi za programator en jahač, jumer, ki mora biti postavljen na RST, tako veže en pin P1 konektoraj na Reset, kar je potrebno pri programiranju,. Morda je zajec v tem grmu.

Avtor: juremKraj: Ljubljana PrispevekObjavljeno: Tor Maj 27, 2008 7:57 am    Naslov sporočila:  
----------------------------------------------------------------------------
poule je napisal/a:
A je kdo iz Ljubljane, ki uporablja minipin in sample programator in bi mi naklonil nekaj minut ob kavi, da prečekirava moje nastavitve in programator.


Pridi v AX elektroniko, ti bomo pogledali vse skupaj. Prej pokliči na 01-54-914-00 Bojana ali Jureta in se zmeni za obisk.

Lp
Jure

Avtor: PobesneliKraj: Ajdovščina PrispevekObjavljeno: Tor Maj 27, 2008 8:36 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ima kdo kako shemo kako povezat GSM (siemens c35,c45) na avr?
Mogoče tudi če kdo ve,kje dobit konektor za ta gsm,da ne bi cinu po njemu in razdiral napajalnega konektorja

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Tor Maj 27, 2008 9:08 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni!

Hotel sem narediti tale projekt, pa sem naletel na težavo, da je tam uporabljen PIC, jaz pa programiram AVR-je v Bascomu.

A se da v Bascomu kaj podobnega naret z timerji? Me lahko kdo nauči? Ker timerjev še nikoli nisem uporabljal!

Hvala!

Avtor: juremKraj: Ljubljana PrispevekObjavljeno: Tor Maj 27, 2008 9:19 pm    Naslov sporočila:  
----------------------------------------------------------------------------
program_er je napisal/a:

A se da v Bascomu kaj podobnega naret z timerji? Me lahko kdo nauči? Ker timerjev še nikoli nisem uporabljal!

Hvala!


Pred časom smo imeli Bascom začetni seminar. Zelo verjetno bomo nekaj podobnega ponovili. Na seminarju smo imeli tole literaturo.

Lp
Jure

Avtor: pouleKraj: Ljubljana PrispevekObjavljeno: Čet Jun 05, 2008 5:41 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Nekaj vprašanj.
Ali moraš AVR-ju (tiny2313) obvezno dodati resonator, ko ga uporabiš v aplikaciji, ali je dovolj interni oscilator? Kaj pa na minipin-u? Lahko delaš brez oscilatorja?

Je potrebno interno frekvenco definirati v programu ($crystal = xxx) ?

Namreč na mojem minipin-u imam resonator 12M, v programu imam nastavljen $crystal = 12000000 .V aplikaciji pa resonatorja ne bi imel. Čudno se mi zdi, da imam resonator, ki je v minipinu definiran, časi pa niti približno niso taki, ki bi jih pričakoval.
Npr. za Waitms 100 , mi čaka cca 1s in ne 100ms.

Je mogoče vzrok, da imam v programu vpisano $crystal = 12000000, v bistvu pa on uporablja interno, 4Mhz? Fuse in Lockbitov nisem nič nastavljal...vse je še default. Kateri oscilator torej on bere?

Avtor: strobosKraj: Brežice PrispevekObjavljeno: Čet Jun 05, 2008 5:55 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ko ga kupiš, kontroler prvo dela na interni rc oscilator 1MHz. Če hočeš uporabljati zunanjega ali pa uporabiti katero drugo frekvenco notranjega oscilatorja, moraš to nastavit.

Lp

Avtor: pouleKraj: Ljubljana PrispevekObjavljeno: Čet Jun 05, 2008 6:03 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Torej če vpišem v program $crystal = 1M , fusebite pa pustim pri miru, bi morala zakasnitev waitms 100 trajati cca. 100 ms?

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Čet Jun 05, 2008 7:16 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tako je!

Avtor: PobesneliKraj: Ajdovščina PrispevekObjavljeno: Čet Jun 12, 2008 7:29 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Kje bi dobil jaz fajl attiny2313.dat?

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Čet Jun 12, 2008 9:00 pm    Naslov sporočila:  
----------------------------------------------------------------------------
V moji prišponki! Prekopiraj jo v mapo, kjer je bascavr.exe ali pač kako se reče tvojemu bascomu.

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Čet Jun 12, 2008 9:12 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pobesneli je napisal/a:
Kje bi dobil jaz fajl attiny2313.dat?


Vsak bascom AVR jo ima. Poglej v izvorni mapi bascoma.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Čet Jul 10, 2008 12:10 am    Naslov sporočila:  
----------------------------------------------------------------------------
Imam težavo. Rad bi nastavil mojo mego8 na zunanji kvarčni kristal, pa mi ne uspe. Ko sem to hotel narediti na megi16, sem jo s tem zaklenil oz. uničil.
Uporabljam AVRUSB programator (v Bascomu-AVR STK500 extended)

Ko odprem okno za programiranje, mi se poleg ostalega prikaže tudi to:


Ko priključim ATmega8 in pri vsem kliknem Read, mi potem kaže to:


V datasheetu od mege pa piše med drugim to:


Kot se vidi pri 1. sliki, sta pri Fuse bits dva prostorčka oz. kvadratka. Zanima me, kateri kvadratek so CKSEL 3...0 biti. Prvi ali drugi? Če je eden CKSEL, iz česa je potem sestavljen drugi?

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pon Jul 14, 2008 10:25 am    Naslov sporočila:  
----------------------------------------------------------------------------
Dobil sem eno idejo. Po RS232 protokolu komuniciramo z računalnikom zgolj po 2 žicah (in GND), Rx in Tx.

Včeraj pa sem "oskubil" en USB kabel in pomislil, zakaj pa ne gre isto komuniciranje preko USB? Preko USB-ja namreč napajam mojo Experimentalno ploščico, ker je točno prava napetost. In zakaj nebi mogel na Rx in Tx mege8 povezati še Rx in Tx priključkov USB-ja (ki mi zdaj bingljajo vstran) in megi v programu reči, kot da komuniciram serijsko (Print ukaz)?

Ali je to možno? Obstajajo kaki gonilniki za računalnik, da bi sprejel podatke preko USB?

Avtor: juremKraj: Ljubljana PrispevekObjavljeno: Pon Jul 14, 2008 10:56 am    Naslov sporočila:  
----------------------------------------------------------------------------
program_er je napisal/a:

Obstajajo kaki gonilniki za računalnik, da bi sprejel podatke preko USB?


Seveda, uporabi tale adapter, naloži FTDI driverje s spleta in si zmagal.

Lp
Jure

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pon Jul 14, 2008 12:19 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Aja, sem mislil kar tako narediti, direkno (ali pa z MAX232), kot pri serijski komunikaciji. Bom probal pa pišem, kako se bo računalnik odzval.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pon Jul 14, 2008 1:23 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Heh, sem že naredil. Na RXD mege8 sem priključil Data+ (zelen kabel) na TXD mege8 pa Data- (bel kabel). Računalnik je zaznal nekaj ampak je napisal USB Naprava ni prepoznavna. V Device Managerju je prikazana pod drugo, z vprašajem. samo driverje bi mogo naložit (Update driver), ker ko zdaj stisnem Driver details napiše da driverjev sploh nima, kar je logično. Laughing Wink

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Tor Jul 29, 2008 12:22 am    Naslov sporočila:  
----------------------------------------------------------------------------
Dobil sem 1-wire termometre in sem naletel na težavo.

Matram se s tem programom. Sem nekaj nakracal skupaj:
Koda:

'                              BOJAN POTOČNIK
'*******************************************************************************
'--------------- MERITEV TEMPERATURE Z DS18B20+ IN IZPIS NA LCD ----------------
'*******************************************************************************

'******************************* Mikrokontroler ********************************
$regfile = "m8def.dat"
$crystal = 1000000

'************************************* LCD *************************************
Config Lcd = 16 * 2

Config Lcdpin = Pin , Db7 = Portb.6 , Db6 = Portb.7 , Db5 = Portd.5 , Db4 = Portd.6 , E = Portd.7 , Rs = Portb.0
Cursor Off
Config Portb.0 = Output
Config Portb.1 = Output
Osvetlitev Alias Portb.1

Deflcdchar 0 , 226 , 229 , 226 , 224 , 224 , 224 , 224 , 224       ' replace ? with number (0-7)

Cls

'*******************************************************************************
Dim T1 As Byte , T2 As Byte , T3 As Byte , Temp As Integer , Temp2 As Single , , Temp3 As String * 10

'*******************************************************************************
Config 1wire = Portb.2

'*******************************************************************************

'//////////////////// UVOD:
Osvetlitev = 1
Cls
'/////////////////////////////// GLAVNI PROGRAM ////////////////////////////////
Do
 T1 = 0
 T2 = 0
 T3 = 0
 Temp = 0

1wreset
 1wwrite &HCC
 1wwrite &H44
  Wait 1
 1wwrite &HCC
 1wwrite &HBE
  T1 = 1wread()
  T2 = 1wread()
1wreset

If Err > 0 Then
 Locate 1 , 1
 Lcd "NAPAKA"
End If

Temp = Makeint(t1 , T2)

Gosub Prikaz

Loop

Prikaz:
Locate 1 , 1
Lcd "Temperatura je:"
Locate 2 , 1
Lcd Temp ; Chr(0) ; "C"
Return

End

Ko program nložim v mojo mego8 in zaženem, mi vedno pokaže -1 °C.

Kaj mogoče ve kdo kaj je narobe, kako lahko to popravim?

Pa še to me zanima. To je 1-wire z nastavljivo natančnostjo, Ampak kako nastavljam naančnost. Nastavil bi na najvišjo možno natančnost.

EDIT: Z ločljivostjo sem uredil. Termometer je že orginalno avtomatsko nastavljen na 12-bitno resolucijo. To zahteva 750ms dolgo merjenje in omogoča natančnost do 0.0625°C. Jaz pa bi zaenkrat imel samo do natančnosti 0,1, tako da mi moral to nekako programsko urediti.

EDIT 2: Mogoče pa bi bilo še boljše 11-bitna ločljivost. Čas merjenja je bistveno krajši, le 375ms. Ločljivost pa je kljub temu meni čisto dovolj, 0,125°C. Glede na to, da jaz rabim samo 0,1°C ločljivosti, bi bilo to boljše, bi se hitreje osveževalo.

Prosim za odgovore in rešitve. Hvala!

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Tor Jul 29, 2008 7:07 pm    Naslov sporočila:  
----------------------------------------------------------------------------
A zgleda da ni rešitve? Laughing

Avtor: HighlagKraj: Črnuče PrispevekObjavljeno: Tor Jul 29, 2008 9:47 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pa dejansko imaš Ds1820, ki podpira tako visoko resolucijo?

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Tor Jul 29, 2008 10:12 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Highlag je napisal/a:
Pa dejansko imaš Ds1820, ki podpira tako visoko resolucijo?


Ja, imam čip DS18B20+, ki ima nastavljivo natančnost.

V priponki nejgov datasheet.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Tor Jul 29, 2008 10:30 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Saj vesel bi bil že, če bi se vsaj spreminjal rezultat, ko zagrejem (primem z prsti) ali ohladim čip.

Ker zdaj stoji vedno pri miru. Rolling Eyes Confused

Vem da vas je že veliko to delalo in sigurno ima nekdo rešitev. Hvala!

Avtor: alyKraj: Kranj - struževo PrispevekObjavljeno: Sre Jul 30, 2008 11:26 am    Naslov sporočila:  
----------------------------------------------------------------------------
rezultat -1 pomeni da se čip ne odzove = prebere FFFFh.
Bascoma ne poznam.
Točen seznam ukazov kako zadevo spraviti v življenje imaš v datasheetu.
Prebrati moraš cel scratchpad in iz njega izluščiti podatke za temperaturo.

Pri 1-wire je zelo pomemben timing. Če imaš časovne vrednosti narobe nastavljene, ne bo delalo nič.

In še vizualen komentar glede USB in RS232 direktne povezave: d'oh! :bonk:
Uporabi FTDI232 ali vmesnik iz trgovine.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Jul 30, 2008 1:01 pm    Naslov sporočila:  
----------------------------------------------------------------------------
aly je napisal/a:

Pri 1-wire je zelo pomemben timing. Če imaš časovne vrednosti narobe nastavljene, ne bo delalo nič.

Ja kako pa naj v bascomu nastavim časovne vrednosti? Imam samo ukaz Config 1wire = Port.pin

aly je napisal/a:
In še vizualen komentar glede USB in RS232 direktne povezave: d'oh! :bonk:


To je bil hec. Samo iz radovednosti sem malo poizkušal.

Avtor: iskraKraj: Lokev ,Boa , KOPER PrispevekObjavljeno: Sre Jul 30, 2008 1:16 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Delujoč program:
1.8 MERILNA SONDA DS1820
Za merjenje temperature skrbi senzor DS1820 proizvajalca Dallas Semiconductor.
Deluje po unikatnem 1-wire protokolu, ki rabi samo eno linijo za komunikacijo.
Senzor DS1820 ne potrebuje nobenih zunanjih komponent, lahko se napaja
neposredno iz podatkovne linije (prek pull-up upora 4,7KE. Merilno območje
senzorja je od -55 pa tja do 125°C. Temperatura je prebrana kot 9-bitna digitalna
vrednost. Vsaka komponenta posebej ima sebi lastno serijsko številko. Zaradi te
lastnosti lahko na isti port mikrokontrolerja brez težav priključimo več
temperaturnih senzorjev. V mojem primeru sem uporabil samo enega, tako da ta
lastnost ni bila uporabljena. Bi prišla prav, če bi uporabil več senzorjev.
Vsaka izmed 1-wire komponent ima vpisan unikaten 64-bitni naslov
naslednjega formata:
8-bitna CRC koda 48- bitna serijska številka 8-bitna koda družine vezij



Program za čitanje adrese DS-a
Koda:
'///////////////////////////////////////////////////////////////////////////////
$regfile = "m8def.dat"
$crystal = 4000000
'$crystal = 11000000

    $hwstack = 32                                           ' default use 32 for the hardware stack
$swstack = 10                                               'default use 10 for the SW stack
$framesize = 40                                             'default use 40 for the frame space

Config 1wire = Portc.5
Dim Ar(8) As Byte , A As Byte , I As Byte
   Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portb.5 , Rs = Portb.3
Config Lcd = 16 * 2
'$sim
Cursor Off Noblink
Cls
Do
Reset Portc.6
Wait 1
1wreset                                                     'reset the device
1wwrite &H33                                                'read ROM command
For I = 1 To 8
Ar(i) = 1wread()                                            'place into array
Next
For I = 1 To 8
Lowerline
Lcd I
Lowerline
Locate 2 , 2
Lcd ":"
Lcd Ar(i);
Wait 5
Cls
Next
Loop
End

To moramo prvo napraviti saj drugače ne bomo mogli meriti temperature.
Še primer programa , kako izmerimo temperaturo z dvema DS na isti liniji in z znanimi adresami čipa. (kasneje bom še natančno razložil matematiko in vsak korak programiranja.)
Koda:
   '///////////////////////////////////////////////////////////////////////////////
'DS1820 Thermo - merjenje temperature z dvema senzorjema
' Za Šolo Programiranja pri OZS .
'
'///////////////////////////////////////////////////////////////////////////////
$regfile = "m8def.dat"
$crystal = 4000000
'$crystal = 4000000

'Dim Ar(8) As Byte , A As Byte ,                             'I As Byte
   Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portb.5 , Rs = Portb.3
Config Lcd = 16 * 2
'$sim

Declare Sub Read1820
Declare Sub Temperature
Declare Sub Temp1
Declare Sub Temp2
Dim T2 As Integer , T4 As Integer
Dim Bd(9) As Byte
Dim I As Byte , Tmp As Byte
Dim T As Integer , T1 As Integer , Tn As Byte
Dim Tz As Byte
Dim Ar(8) As Byte
T = 0
Config 1wire = Portc.5
Cursor Off Noblink
Cls
Reset Portc
Locate 1 , 1 : Lcd "DS1820 "
Locate 2 , 1 : Lcd " Temp"
Wait 2
Do
Temp1
Temperature
Locate 1 , 1 : Lcd "N"
Tn = T4
Lcd T                                                       'vpis celega dela
Lcd Chr(46)                                                 'vpis pike
Lcd T1                                                      'vpis decimalnega
Lcd Chr(223)                                                'vpis stopinj
Lcd "C"
If Err = 1 Then                                             'ce ni senzorja
Locate 1 , 3 : Lcd "-- "                                    'je na LCDju "-- "
End If                                                      'izpis praznega prostora
Temp2
Temperature
Locate 2 , 1 : Lcd "Z"
Tz = T4
Lcd T
Lcd Chr(46)
Lcd T1
Lcd Chr(223)
Lcd "C"
If Err = 1 Then                                             'ce ni senzorja
Locate 2 , 3 : Lcd "-- "                                    'je na LCDju "-- "
End If
                                                                   'Prizgi diodo
If T <= 2 Then                                              'Ob vrednosti prizgi LED
Reset Portd.5
Wait 1
Elseif T > 2 Then
Set Portd.5
Wait 1
End If
Loop
End
Rem ///////
                                                                     ' read address 1
Sub Temp1                                                   'branje adrese 1
For I = 0 To 8
Ar(i + 1) = Lookup(i , Dta1)
Next
End Sub
Rem /////////////////////////
                                                            ' read address 2
Sub Temp2                                                   'branje adrese 2
For I = 0 To 7
Ar(i + 1 ) = Lookup(i , Dta2)
Next
End Sub
Dta1:
Data 16 , 80 , 46 , 140 , 0 , 8 , 0 , 50                    'naslov 1 Dallasa
Dta2:
Data 16 , 168 , 26 , 140 , 0 , 8 , 0 , 122                  'naslov 2 Dallasa
'///////////////////////////////////////////////////////////////////////////////
Sub Temperature                                             'merjenje temperature
1wreset
1wwrite &H55
1wwrite Ar(1) , 8                                           '1Wire ukaz
1wwrite &H44
Wait 1
Read1820                                                    'read 9 bytes
End Sub
Sub Read1820                                                'bere senzor 'T za 0.1 C
1wreset                                                     'reset
1wwrite &H55                                                '1Wire ukaz
1wwrite Ar(1) , 8
1wwrite &HBE
Bd(1) = 1wread(9)
1wreset
Tmp = Bd(1) And 1                                           '0.1C natancnost
If Tmp = 1 Then
Decr Bd(1)
End If
T = Makeint(bd(1) , Bd(2))
T4 = T / 2                                                  'T4 lahko uporabimo, ce zelimo temp. kot celo stevilo
T = T * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100       'za to matematiko je potrebno pogledati datashet
T1 = T1 / Bd(8) : T = T + T1 : T = T / 10                   'tam je formula in opis vseh podatkov ki jih beremo
T1 = T
T = T / 10                                                  ' bom kasneje še razložil vsako vrstico posebej
T2 = T * 10
T1 = T1 - T2
T1 = Abs(t1)
End Sub                                                     ' to je primer branja temperature iz več DS-ov , s tem , da moramo prvo prebrati njihove naslove
' gornji program.

Nastavi pa pravilno tvoj LCD.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Jul 30, 2008 2:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Bom poizkusil tvojo kodo.

Moram pa opozoriti, da uporabljam čip DS 18 B 20 ki ima tovarniško nastavljeno 12-bitno resolucijo in čas merjenja 750ms!

Pomembni podatki o tem v zgornjem datasheetu na strani 8 in na strani 3 pod poglavjem OPERATION—MEASURING TEMPERATURE.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Jul 30, 2008 2:30 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hej, čakaj malo! Kako naj ta dva programa stlačim v enega. Pa jaz imam samo en senzor!

Kode se nebom sprabil spreminjat, ker bom še kaj zaj*bal!

Avtor: iskraKraj: Lokev ,Boa , KOPER PrispevekObjavljeno: Sre Jul 30, 2008 2:39 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ko prečitaš kodo , prvega več ne rabiš . Če pa veš naslov DS-a pa prvega sploh ne potrebuješ.
Ovezno pa spremeni to
Koda:
Config Lcdpin = Pin , Db7 = Portb.6 , Db6 = Portb.7 , Db5 = Portd.5 , Db4 = Portd.6 , E = Portd.7 , Rs = Portb.0


S tem ti LCD ne bo delal
Koda:
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portb.5 , Rs = Portb.3
Config Lcd = 16 * 2

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Jul 30, 2008 2:43 pm    Naslov sporočila:  
----------------------------------------------------------------------------
A, torej najprej bom v mego naložil prvi program, on mi bo naslov mojega čipa napisal na LCD-ju, jaz si bom to zapisal na list.

Potem pa enostavno zaženem drugi program? Kam v kodo vpišem naslov??

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Jul 30, 2008 2:51 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Prvi program deluje, in na LCDju mi pokaže:

1:255
2:255
3:255
4:255
5:255
6:255
7:255
8:255


Meni se zdi da to nebi smelo biti tako. Imam 5 čipov, sem vse zaenjal. Pa pri vsakem sem probal z nogico na Vcc, pa v zraku (parazitno napajanje). In data linije imam na Vcc 4,7k upor. Čip imam na PORTB.2, kar sem v kodi popravil.

Avtor: alyKraj: Kranj - struževo PrispevekObjavljeno: Sre Jul 30, 2008 2:52 pm    Naslov sporočila:  
----------------------------------------------------------------------------
1820 in 18 B 20 imata drugače razporejene registre, kjer je zapisana temperatura Exclamation

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Jul 30, 2008 3:05 pm    Naslov sporočila:  
----------------------------------------------------------------------------
program_er je napisal/a:
Bom poizkusil tvojo kodo.

Moram pa opozoriti, da uporabljam čip DS 18 B 20 ki ima tovarniško nastavljeno 12-bitno resolucijo in čas merjenja 750ms!

Pomembni podatki o tem v zgornjem datasheetu na strani 8 in na strani 3 pod poglavjem OPERATION—MEASURING TEMPERATURE.


Saj sem že rekel.

Avtor: iskraKraj: Lokev ,Boa , KOPER PrispevekObjavljeno: Sre Jul 30, 2008 3:14 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja boš moral še malo dodelati program : http://www.mcselec.com/index.php?option=com_content&task=view&id=75&Itemid=57

Avtor: robikaKraj: ajdovščina PrispevekObjavljeno: Sre Jul 30, 2008 3:31 pm    Naslov sporočila:  
----------------------------------------------------------------------------
program_er je napisal/a:
Pa pri vsakem sem probal z nogico na Vcc, pa v zraku (parazitno napajanje).


Če ga napajaš parazitno potem Vcc veži na maso. Jaz imam na dvožični liniji dolžine >40 metrov (zvezda vezava) vezanih 7 senzorjev pa vse teče po pravilih.

Avtor: anatomKraj: PO PrispevekObjavljeno: Sre Jul 30, 2008 3:45 pm    Naslov sporočila:  
----------------------------------------------------------------------------
program_er je napisal/a:
Pozdravljeni!

Kakšno vlogo za vraga ima pin AREF pri AD pretvorniku?

Tu lahko pripelješ reverenčno napetost za AD pretvornik

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Jul 30, 2008 3:51 pm    Naslov sporočila:  
----------------------------------------------------------------------------
iskra je napisal/a:
Ja boš moral še malo dodelati program : http://www.mcselec.com/index.php?option=com_content&task=view&id=75&Itemid=57


Sem naložil in testiral program. Sem imel priključen 1 senzor, pa je nekaj pisalo, pol pa DSid2 not on bus.

Potem pa sem priključil še en enak senzor, točno poleg njega oziroma na isti pin in enako, pa mi je isto napisalo.

Kode pa na 1 senzor ne znam predelat. Kaj lahko kdo napiše kodo za senzor DS18B20, da bi videl vsaj njegov naslov. Že to bi bilo veselje zame!

Na 9 strani v priponki je njegov datasheet. Ko pa bom enkrat imel eno kodo, pa bom že znal naprej.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Jul 30, 2008 3:52 pm    Naslov sporočila:  
----------------------------------------------------------------------------
robika je napisal/a:
program_er je napisal/a:
Pa pri vsakem sem probal z nogico na Vcc, pa v zraku (parazitno napajanje).


Če ga napajaš parazitno potem Vcc veži na maso. Jaz imam na dvožični liniji dolžine >40 metrov (zvezda vezava) vezanih 7 senzorjev pa vse teče po pravilih.


Ja, tvoja koda je OK. Samo meni ne deluje, ker imam senzor DS18B20 in ne DS1820!!!

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Jul 30, 2008 4:05 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Juhu!!!

Koda od iskra mi deluje!!! Ampak ne ona za branje temperature, ampak ona za branje naslova.

Ugotovil sem, da moram senzor napajat parazitno, Data na PORTB.2, VDD in GND pa na GND.

Na LCDju se mi izpiše bajt za bajtom:

1. Senzor:
1:40
2:68
3:244
4:183
5:1
6:0
7:0
8:178


2. Senzor:
1:40
2:72
3:14
4:184
5:1
6:0
7:0
8:78

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Jul 30, 2008 8:14 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Juhu!!! Razz Laughing

Program od @iskra mi deluje! Moral sem samo parazitno priklopiti napajanje in deluje.

Moral sem še malo popraviti rezultat, ker ko je bilo npr. 21,5°C mi je kazalo 215,8°C ali pa podobno.

Koda:
Koda:

  '///////////////////////////////////////////////////////////////////////////////
'DS1820 Thermo - merjenje temperature z dvema senzorjema
' Za Šolo Programiranja pri OZS .
'
'///////////////////////////////////////////////////////////////////////////////
$regfile = "m8def.dat"
$crystal = 1000000
'$crystal = 4000000

'Dim Ar(8) As Byte , A As Byte ,                             'I As Byte
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db7 = Portb.6 , Db6 = Portb.7 , Db5 = Portd.5 , Db4 = Portd.6 , E = Portd.7 , Rs = Portb.0
Config Portb.1 = Output
Osvetlitev Alias Portb.1
Deflcdchar 0 , 2 , 5 , 2 , 32 , 32 , 32 , 32 , 32           ' replace ? with number (0-7)
Osvetlitev = 1
'$sim

Declare Sub Read1820
Declare Sub Temperature
Declare Sub Temp1
Declare Sub Temp2
Dim T2 As Integer , T4 As Integer
Dim Bd(9) As Byte
Dim I As Byte , Tmp As Byte
Dim T As Integer , T1 As Integer , Tn As Byte
Dim Tz As Byte , Tp As Integer , Tb As Integer
Dim Ar(8) As Byte
T = 0
Config 1wire = Portb.2
Cursor Off Noblink
Cls
Reset Portb
Locate 1 , 1 : Lcd "DS1820 "
Locate 2 , 1 : Lcd " Temperatura"
Wait 2
Do
Temp1
Temperature
Locate 1 , 1 : Lcd "1.temp: "
Tn = T4
 Tp = T / 10
 Tb = T Mod 10
Lcd Tp                                                      'vpis celega dela
Lcd Chr(46)                                                 'vpis pike
Lcd Tb                                                    'vpis decimalnega
Lcd Chr(0)                                                  'vpis stopinj
Lcd "C"
If Err = 1 Then                                             'ce ni senzorja
Locate 1 , 3 : Lcd "-- "                                    'je na LCDju "-- "
End If                                                      'izpis praznega prostora
Temp2
Temperature
Locate 2 , 1 : Lcd "2.temp: "
Tz = T4
 Tp = T / 10
 Tb = T Mod 10
Lcd Tp
Lcd Chr(46)
Lcd Tb
Lcd Chr(0)
Lcd "C"
If Err = 1 Then                                             'ce ni senzorja
Locate 2 , 3 : Lcd "-- "                                    'je na LCDju "-- "
End If
                                                                   'Prizgi diodo
If T <= 2 Then                                              'Ob vrednosti prizgi LED
Reset Portd.5
Wait 1
Elseif T > 2 Then
Set Portd.5
Wait 1
End If
Loop
End
Rem ///////
                                                                     ' read address 1
Sub Temp1                                                   'branje adrese 1
For I = 0 To 8
Ar(i + 1) = Lookup(i , Dta1)
Next
End Sub
Rem /////////////////////////
                                                            ' read address 2
Sub Temp2                                                   'branje adrese 2
For I = 0 To 7
Ar(i + 1 ) = Lookup(i , Dta2)
Next
End Sub
Dta1:
Data 40 , 68 , 244 , 183 , 1 , 0 , 0 , 178                  'naslov 1 Dallasa
Dta2:
Data 40 , 72 , 14 , 184 , 1 , 0 , 0 , 78                    'naslov 2 Dallasa
'///////////////////////////////////////////////////////////////////////////////
Sub Temperature                                             'merjenje temperature
1wreset
1wwrite &H55
1wwrite Ar(1) , 8                                           '1Wire ukaz
1wwrite &H44
Wait 1
Read1820                                                    'read 9 bytes
End Sub
Sub Read1820                                                'bere senzor 'T za 0.1 C
1wreset                                                     'reset
1wwrite &H55                                                '1Wire ukaz
1wwrite Ar(1) , 8
1wwrite &HBE
Bd(1) = 1wread(9)
1wreset
Tmp = Bd(1) And 1                                           '0.1C natancnost
If Tmp = 1 Then
Decr Bd(1)
End If
T = Makeint(bd(1) , Bd(2))
T4 = T / 20                                                 'T4 lahko uporabimo, ce zelimo temp. kot celo stevilo
T = T * 50 : T = T - 25 : T1 = Bd(8) - Bd(7) : T1 = T1 * 100       'za to matematiko je potrebno pogledati datashet
T1 = T1 / Bd(8) : T = T + T1 : T = T / 10                   'tam je formula in opis vseh podatkov ki jih beremo
T1 = T
T = T / 10                                                  ' bom kasneje še razložil vsako vrstico posebej
T2 = T * 10
T1 = T1 - T2
T1 = Abs(t1)
End Sub                                                     ' to je primer branja temperature iz več DS-ov , s tem , da moramo prvo prebrati njihove naslove


Trenutno imam prikaz na xx,x stopinje. Popravek sem naredil kar pred prikazom, ker tiste spodnje matematike ne razumem... Shocked Confused

Glavno da dela. Čeprav bi lahko, kot si rekel, malo razložil tisto matematiko in kake dele kode.

Hvala!

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Čet Jul 31, 2008 11:21 pm    Naslov sporočila:  
----------------------------------------------------------------------------
program_er je napisal/a:
Imam težavo. Rad bi nastavil mojo mego8 na zunanji kvarčni kristal, pa mi ne uspe. Ko sem to hotel narediti na megi16, sem jo s tem zaklenil oz. uničil.
Uporabljam AVRUSB programator (v Bascomu-AVR STK500 extended)

Ko odprem okno za programiranje, mi se poleg ostalega prikaže tudi to:


Ko priključim ATmega8 in pri vsem kliknem Read, mi potem kaže to:


V datasheetu od mege pa piše med drugim to:


Kot se vidi pri 1. sliki, sta pri Fuse bits dva prostorčka oz. kvadratka. Zanima me, kateri kvadratek so CKSEL 3...0 biti. Prvi ali drugi? Če je eden CKSEL, iz česa je potem sestavljen drugi?


Še vedno me to matra. Sad Evil or Very Mad Zdaj mi že gre nenatančnost notranjega oscilatorja na živce. Rabim zunanjega! Mad Exclamation

EDIT: Imam pa navaden kvarčni kristal, za zunaj priklopit oziroma External Crystal/Ceramic Resonator

Avtor: iskraKraj: Lokev ,Boa , KOPER PrispevekObjavljeno: Pet Avg 01, 2008 9:41 am    Naslov sporočila:  
----------------------------------------------------------------------------
Citiram:
Juhu!!!

Program od @iskra mi deluje! Moral sem samo parazitno priklopiti napajanje in deluje.

Moral sem še malo popraviti rezultat, ker ko je bilo npr. 21,5°C mi je kazalo 215,8°C ali pa podobno.

Me veseli , tam sem pa stvari malo bolj natančno razložil, Very Happy pa nihče nima časa čitati Wink . saj ti bo takoj jasno , samo malo se poglobi v datasheet čipa Wink

Avtor: tozirKraj: Celje PrispevekObjavljeno: Čet Avg 07, 2008 3:49 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni!

Upam da sem prav umestil vprašanje. Imam en projekt ,kjer sem uporabil pine na katerih se uporablja JTAG, za prižiganje LEDic. Seveda stvar ne dela in po pregledu datasheeta sem ugotovil da je treba fuse byte sprogramirati tako, da se JTAG izklopi. Muči me pa to da mi STK500 extended noče prebrati zgornjega fuse byta ampak mi samo spodnjega.

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Ned Avg 24, 2008 12:45 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni!

Delam nekaj podobnega kot je tukaj naredil Silvo. Napisal sem program po helpu iz Bascoma za branje A/D. Program deluje,v tej temi sem tudi vse prebral kaj je v zvezi z A/D-jem. Kot referenco imam 5V(AREF imam vezan na +5V),uporabljen imam prvi kanal,vse skupaj pa furam z attiny26.

Spisal sem naslednji program,ki pa po pričakovanjih deluje tako kot treba. Za spreminaje napetosti,sem uporabil 1k trimer,ki lepo dela od 0 pa do 5V.

Koda:

Config Lcdpin = Pin , Db7 = Portb.3 , Db6 = Portb.2 , Db5 = Portb.1 , Db4 = Portb.0 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 1
Cursor Off

Dim W As Word , W2 As Word , Stotinke As Word , Desetinke As Word

Config Adc = Single , Prescaler = Auto
Start Adc

Cls
Do

W = Getadc(0)
W2 = W * 50
W2 = W2 / 1023
Stotinke = W2 / 10
Desetinke = W2 Mod 10

Locate 1 , 1
Lcd Stotinke ; "," ; Desetinke; "V";

Loop


Sedaj me pa zanima kako bi naredil izračune,da bi imel za konkreten primer,da bi meril napetost od 0 pa do 100V? Uporabil sem kar isti napetostni delilnik kot Silvo,se pravi 680 Omega ter 56k Omega

Napetostno razmerje napetostnega delilnika znaša 5/100=1/20=0,05.



R1=56k
R2=680


Avtor: zlaboKraj: Domžale-Kamnik PrispevekObjavljeno: Sre Okt 08, 2008 5:25 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni!

Bom kar tukaj vprašal da nebom nove teme odpiral.
Isto vprašanje sem zastavil tudi na Svet elektronike forumu, pa bom pastal še tukaj.


Delam z grafičnim LCD-jem (KS107/108-) in touchscreenom. Vse mi dela ok, LCD nariše oziroma napiše kar mu naročim.
Imam pa en problem in sicer pri pisanju na točno zaželjeno lokacijo. Namreč pri ukazu "LCDAT y , x , var" me moti ker BascomAVR y kordinato šteje po vrsticah.
Primer:
Koda:
 Lcdat  3 , 5 , "[slovenščina je zame španska vas]" , 0

Bascom interpretira 3-jko kot 3ja vrstica za pisavo 8x8, torej gre na 24-ti pixel po y kordinati (3*8 ), medtem ko po x osi na 5 pixel. Nima veze katero pisavo imaš, vedno bo y kordinato štel po 8 pixlov. Jaz pa bi rabil da mi spremeljivko izpisuje na točno želeno lokacijo v obliki y(pixel), x(pixel), tako kot je to pri ukazu "Showpic x , y , ime_slike"

Se je že kdo ukvarjal s tem? Je namreč zelo nerodno ker po y osi lahko "skačem "samo po 8 pixlov...

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Sre Okt 08, 2008 6:10 pm    Naslov sporočila:  programiranje v Bascom AVR
----------------------------------------------------------------------------
Zlabo,
namesto ukaza LCDAT uporabi ukaz LOCATE. LCDAT je ukaz za color displej!
Tudi Help se splača kdaj pogledati, tam pa piše:

"LOCATE row,column : Will place the cursor at the specified row and column.
The row may vary from 1 to 16 and the column from 1 to 40. This depends on the size and mode of the display".
Vlado

Avtor: zlaboKraj: Domžale-Kamnik PrispevekObjavljeno: Sre Okt 08, 2008 7:47 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ne, LCDAT je tako za barvne kot tudi za enobarvne grafične LCD-je (poglej v bascom help). Ukaz LOCATE je pa namenjen za alfanumerične displeye, kjer sta x in y stolpec in vrstica.
Jaz pa potrebujem postaviti pisanje na točno določeno kordinato, naprimer na pixel 30,50 (y,x), tako kot se to zgodi ob ukazu SHOWPIC, kjer sliko lahko postaviš na točno določeno mesto x , y

Avtor: PobesneliKraj: Ajdovščina PrispevekObjavljeno: Čet Okt 16, 2008 8:26 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Naj mi kdo pomaga.

Na atmega 8 poskusam priključit grafični ekranček,nikakor pa mi ne uspe nič prikazat na njem.

Zaniam me kakšna je razlika med SED lcdji in brez tistega SED.
KEr če ne konfiguriram pod Config Graphlcd 192 * 64sed,mi sploh noče prevest.

in še eno vprašanje,kako nastavit fuse bit da dela z zunanjim 11,059Mhz kristalom?

Avtor: tozirKraj: Celje PrispevekObjavljeno: Ned Okt 19, 2008 4:00 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Lep pozdrav!

Ali se da v Bascom-u več kot enkrat definirati kam naj skoči ob prekinitvi? Namreč mi error napiše ko v programu hočem drugič definirati eno drugo labelo.

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Ned Okt 19, 2008 10:12 pm    Naslov sporočila:  No
----------------------------------------------------------------------------
No, na tvoje direktno vpašanje, ali se da ime interrupt rutine spreminjati, ne vem.

Vendar tudi če se ne da, lahko v tisti eni interrupt rutini imaš programsko kretnico/stikalo, ki preusmeri delovanje interrupt podprograma zdaj sem, zdaj tja.

Avtor: LEDuserKraj: Ljubljana PrispevekObjavljeno: Ned Dec 14, 2008 3:48 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ker sem pred kratkim obupal nad assemblerjem sem preklopil na Bascom. Naučil sem se prižigati LED ... zataknilo pa se mi je pri ADCju. Če napišem program ki mi bere z enega ADCja v spremenljivko W (P = W / 10) in z nekaj IF stavki preverjam ali je P > 5 (10,15,20) mi prižiga izhode 0,1,2,3 se mi ob spreminjanju napetosti na ADC (0-100%) v prvi četrtini prižgejo v zaporedju vse ledice, v drugi četrtini se ugasnejo in se spet prižgejo v zaporedju...
Po moji logiki bi bilo tako:
ADC prebere stanje in ob 100% bi vrgel ven 1023. če to deliš z 10 bi moralo biti potemtakem stanje od 0-102. Če bi to razdelil na 4 enake dele (npr 25) in imam na vhodu ADC 1/4 napetosti (AVCC) bi morala LEDica zasvetiti pri takem stavku:

If P > 25 Then
Portd.0 = 1
Else
Portd.0 = 0
End If

Ne vem kaj delam narobe ampak zdi se mi da me tale Atmega8 malo

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Ned Dec 14, 2008 4:34 pm    Naslov sporočila:  
----------------------------------------------------------------------------
LEDuser je napisal/a:
Ker sem pred kratkim obupal nad assemblerjem sem preklopil na Bascom. Naučil sem se prižigati LED ... zataknilo pa se mi je pri ADCju. Če napišem program ki mi bere z enega ADCja v spremenljivko W (P = W / 10) in z nekaj IF stavki preverjam ali je P > 5 (10,15,20) mi prižiga izhode 0,1,2,3 se mi ob spreminjanju napetosti na ADC (0-100%) v prvi četrtini prižgejo v zaporedju vse ledice, v drugi četrtini se ugasnejo in se spet prižgejo v zaporedju...
Po moji logiki bi bilo tako:
ADC prebere stanje in ob 100% bi vrgel ven 1023. če to deliš z 10 bi moralo biti potemtakem stanje od 0-102. Če bi to razdelil na 4 enake dele (npr 25) in imam na vhodu ADC 1/4 napetosti (AVCC) bi morala LEDica zasvetiti pri takem stavku:

If P > 25 Then
Portd.0 = 1
Else
Portd.0 = 0
End If

Ne vem kaj delam narobe ampak zdi se mi da me tale Atmega8 malo


PIC asm <--> AVR asm

A si preveril AD?Dobro bi bilo,da bi še zraven priklopil LCD pa gledal stanje AD-ja,tako boš lahko opazil kaj se dogaja,samo verjetno je napaka v kodi.

Avtor: LEDuserKraj: Ljubljana PrispevekObjavljeno: Ned Dec 14, 2008 7:11 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ko bom prišel domov bom prilepil kodo. No naj povem da LCDja še nimam ampak mislim da če je 10-bitni pretvornik potem da pri 100% AVCC vrednost 1023. No ali lahko spišeš kratko kodo da vidim kje sem se uštel Confused ? Ko bom zavrtel trimerček do 1/4 bo gorela 1. LED ko bo na polovico 2.LED itd.

Hvala, LP Matej

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Ned Dec 14, 2008 7:32 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Malo višje sem enkrat pripel kodo za pogon AD-ja in uporabo LCD-ja.

Prikazuje ti samo število bitov,to nekam umes med vrsticami vnesi za prikaz na LCD,sicer pa ti bom jutri na faksi malo bolj razložil.

Koda:

Config Lcdpin = Pin , Db7 = Portb.3 , Db6 = Portb.2 , Db5 = Portb.1 , Db4 = Portb.0 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 1
Cursor Off

Dim W As Word , W2 As Word , Stotinke As Word , Desetinke As Word

Config Adc = Single , Prescaler = Auto
Start Adc

Cls
Do

W = Getadc(0)
LCD W

Loop



P.S: ICD2 clon sem oživel in veselo programira Very Happy Tudi ostalo sem ti sprogramiral. Več ti jutri povem Wink

Avtor: MiskoKraj: MS PrispevekObjavljeno: Pon Dec 15, 2008 12:32 am    Naslov sporočila:  
----------------------------------------------------------------------------
Rabim bi nekaj pomoči na LCD zaslonu 2*16 bi rad zapolnil obe vrsti z zvezdicami (*) vendar mi prvo vrstico zapolni samo do 8 znakov preostalo pa je prazno. Druga vrstica je prikazana pravilno.

Koda:
Napis:
Cls
Locate 1 , 1
Lcd "****************"

Locate 2 , 1
Lcd "****************"

Wait 1
Goto Napis

Avtor: lojzek PrispevekObjavljeno: Pon Dec 15, 2008 7:51 am    Naslov sporočila:  
----------------------------------------------------------------------------
Poskusi še nekaj takega:
Koda:
Locate 1,8
Lcd"********"


In poglej, kam ti napiše zvezdice. Nekateri LCDji so definirani, kot da imajo 8 znakov v vrstici.

Avtor: MiskoKraj: MS PrispevekObjavljeno: Pon Dec 15, 2008 8:23 am    Naslov sporočila:  
----------------------------------------------------------------------------
Sedaj sem ga še nekajkrat sprogramiral z isto kodo pa sedaj vredu deluje. LCD je DEM16216.

Avtor: LEDuserKraj: Ljubljana PrispevekObjavljeno: Tor Dec 16, 2008 2:20 am    Naslov sporočila:  
----------------------------------------------------------------------------
No priklopil sem LCD. Sedaj pa eno resno vprašanje zanima me kaj je pri tej kodi narobe da mi na LCD prikaže dvojno število npr. namesto 1023 pokaže 10231023.
Koda:
$regfile = "m8def.dat"

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc

Dim W As Word

Cls
Cursor Off

  W = Getadc(1)
  Lcd W

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Tor Dec 16, 2008 9:04 am    Naslov sporočila:  
----------------------------------------------------------------------------
Koda:
$regfile = "m8def.dat"

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc

Dim W As Word

Cls
Cursor Off
do
  W = Getadc(1)
  locate 1,1
  Lcd W
loop


Dodaj še tisti locate,pa do loop zanko,da uC poveš kam naj piše vrednost,sedaj piše kar vse povsod.

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Tor Dec 16, 2008 9:11 am    Naslov sporočila:  
----------------------------------------------------------------------------
Poskusi z

Locate 1 , 1
Lcd W

Nasplošno moraš vedno pri programiranju narediti neko zanko, tebi program na koncu ne ve kam naprej in možno da ti dvakrat zleti čez (od tu dva zapisa).

Svoj čas smo delali to s

Konec:
Goto konec

V Bascomu pa lahko uporabiš tudi ukaz End.


LP, Grega

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Tor Dec 16, 2008 10:49 am    Naslov sporočila:  Ta tema
----------------------------------------------------------------------------
Ta tema je postala že prevelika, nepregledna.

predlagam, da odprete za vsak problem, ki bi ga bilo potrebno sprogramirat v avr svojo temo

Avtor: red_mambaKraj: Yogyakarta PrispevekObjavljeno: Tor Dec 16, 2008 3:36 pm    Naslov sporočila:  
----------------------------------------------------------------------------
LEDuser je napisal/a:
Ker sem pred kratkim obupal nad assemblerjem sem preklopil na Bascom. Naučil sem se prižigati LED ... zataknilo pa se mi je pri ADCju. Če napišem program ki mi bere z enega ADCja v spremenljivko W (P = W / 10) in z nekaj IF stavki preverjam ali je P > 5 (10,15,20) mi prižiga izhode 0,1,2,3 se mi ob spreminjanju napetosti na ADC (0-100%) v prvi četrtini prižgejo v zaporedju vse ledice, v drugi četrtini se ugasnejo in se spet prižgejo v zaporedju...
Po moji logiki bi bilo tako:
ADC prebere stanje in ob 100% bi vrgel ven 1023. če to deliš z 10 bi moralo biti potemtakem stanje od 0-102. Če bi to razdelil na 4 enake dele (npr 25) in imam na vhodu ADC 1/4 napetosti (AVCC) bi morala LEDica zasvetiti pri takem stavku:

If P > 25 Then
Portd.0 = 1
Else
Portd.0 = 0
End If

Ne vem kaj delam narobe ampak zdi se mi da me tale Atmega8 malo


[cenzurirano] te to da imaš ADC kot 10 bitov nastavljen bereš pa samo spodnjih 8 bitov v byte spremeljivko namesto word

Avtor: TECHNICKraj: Senovo PrispevekObjavljeno: Tor Dec 16, 2008 3:47 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Zdravo!

Po priklopu 1×16 LCD je prišlo do problema:
Koda:
Locate 1,6
LCD "TEST"

LCD izpiše samo TES (torej do 8 črke),

medtem ko koda:
Koda:
LCD "TESTIRANJE"

deluje brez problema.

LCD je 1×16 iz HTE, neosvetljen, DEM16101 če se ne motim.

Je že kdo doživel takšen problem?

Avtor: red_mambaKraj: Yogyakarta PrispevekObjavljeno: Tor Dec 16, 2008 4:09 pm    Naslov sporočila:  
----------------------------------------------------------------------------
lcd se verjetno obnaša kot 2x8 znakovni, kljub temu da je fizično 1x16.
sem že imel tak primer, poglej če je tudi pri tebi tako

Avtor: TECHNICKraj: Senovo PrispevekObjavljeno: Tor Dec 16, 2008 4:58 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tako je, LCD se obnaša kot 2×8

Koda:
Locate 1 , 4
Lcd "TEST"
Wait 2
Locate 2 , 4
Lcd "TEST"
Wait 2


LCD izpiše "____TEST____TEST"

Hvala za pomoč!

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Tor Dec 16, 2008 6:41 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ko konfiguriraš LCD, morač napisati:
Koda:

Config LDC = 16 * 1a


Tako bo Bascom vedel, da imaš LCD, ki se obnaša kot 2 * 8 in potem če boš napisal:
Koda:

Locate 1 , 6
Lcd "TESTIRANJE"
Wait 2
Cls
Locate 1 , 6
Lcd "TEST"


Delovalo bo vse, ker bo bascom sam spisal kodo za 16 * 1a (2 * Cool

Avtor: LEDuserKraj: Ljubljana PrispevekObjavljeno: Tor Dec 16, 2008 6:56 pm    Naslov sporočila:  
----------------------------------------------------------------------------
red_mamba je napisal/a:

[cenzurirano] te to da imaš ADC kot 10 bitov nastavljen bereš pa samo spodnjih 8 bitov v byte spremeljivko namesto word


Joj niti pomislil nisem na to... No to se pa zgodi če imaš tako malo izkušenj. Bom naslednjič bolj pazljiv Very Happy

Avtor: TECHNICKraj: Senovo PrispevekObjavljeno: Tor Dec 16, 2008 7:11 pm    Naslov sporočila:  
----------------------------------------------------------------------------
@ program_er

To je bilo sicer nastavljeno v nastavitvah (Bascom AVR sploh nima možnosti lcd 8×2).
Tudi če v kodo dodam
Koda:
Config Lcd = 16 * 1a

Se problem ponovi.

LCD očitno misli, da je 8×2. Confused

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Tor Dec 16, 2008 7:37 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Podobno krmiliš kot 2x16LCD, le da imaš tukaj 2x8,se pravi da moraš uporabiti ukaz "lowerline" ali "locate 1,1" oz. "locate 2,1", za drugi del besede/vsebine.

Avtor: MiskoKraj: MS PrispevekObjavljeno: Sob Dec 20, 2008 4:31 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Spet jaz Laughing


Imam program napisan da se mi z pritiskom na gumb povečuje ali zmanjšuje vrednost na LCD-ju. Problem pa je ko preštejem na več kot 10 in hočem vrednost zmanjšat mi potem za števila od 1-9 napiše 90, 80 itd Enako je če grem od 100 proti 0 vedno ima eno ničlo preveč.

Koda:
Dim A As Byte

Config Pinb.0 = Input
Config Pind.7 = Input


Cls
Cursor Off
Locate 1 , 1 : Lcd "Stetje s tipko"

A = 0


Do
 If Pinb.0 = 0 Then
  Waitms 20
   If Pinb.0 = 0 Then
    Gosub Naprej
   End If
 End If

 If Pind.7 = 0 Then
  Waitms 20
   If Pind.7 = 0 Then
    Gosub Nazaj
   End If
  End If

Naprej:
 Incr A
 Locate 2 , 5 : Lcd A
Return

Nazaj:
 Decr A
 Locate 2 , 5 : Lcd A
Return

End


hvala[/code]

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Sob Dec 20, 2008 5:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tista nula ti ostane še od prej (ko si imel izpisano 10), saj pišeš vedno na isto mesto.
Enostavno zadevo rešiš, da pišeš

Lcd a ; Lcd " " (par presledkov)

Tako ti presledki pobrišejo morebitni ostanek.
Druga varianta je ukaz Cls po vsaki spremembi, a to za seboj potegne utripanje zaslona.
Še tretja možnost je if stavek, ki v primeru spremembe mest poskrbi za brisanje dotičnega mesta.

Lp, Grega

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Sob Dec 20, 2008 8:19 pm    Naslov sporočila:  
----------------------------------------------------------------------------
mucek je napisal/a:
Tista nula ti ostane še od prej (ko si imel izpisano 10), saj pišeš vedno na isto mesto.
Enostavno zadevo rešiš, da pišeš

Lcd a ; Lcd " " (par presledkov)

Tako ti presledki pobrišejo morebitni ostanek.
Druga varianta je ukaz Cls po vsaki spremembi, a to za seboj potegne utripanje zaslona.
Še tretja možnost je if stavek, ki v primeru spremembe mest poskrbi za brisanje dotičnega mesta.

Lp, Grega


Sam imam tudi problem in sem ga probal po vaših odgovorih,vendar brez uspeha.

Če dam LCD spremenljivka; LCD " " , mi kompajler javla napako zaradi ukaza LCD(drug). Probal sem tudi da bi za vsako spremenljivko uporabil LOCATE x,y,vendar je isti problem.

CLS in if stavek,bi se rad izgonil,sa potem mi vse ustripa.

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Sob Dec 20, 2008 8:25 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Sem že pogruntal,namesto ; uporabi :

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Dec 20, 2008 8:48 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja, poglej:

LCD a : LCD "nekaj" : LCD b : LCD "bla"
LCD a ; "nekaj" ; b ; "bla"

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Sob Dec 20, 2008 9:10 pm    Naslov sporočila:  
----------------------------------------------------------------------------
program_er je napisal/a:
Ja, poglej:

LCD a : LCD "nekaj" : LCD b : LCD "bla"
LCD a ; "nekaj" ; b ; "bla"


Posledica dopusta pri AVR-jih Laughing Laughing

Avtor: MiskoKraj: MS PrispevekObjavljeno: Sre Dec 24, 2008 9:26 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Super sem danes preizkusil pa deluje. Sedaj pa imam še eno vprašanje.
Kako vi naredil da bi se npr. en if stavek izvedel samo enkrat vse dokler se nebi program ponovno zagnal. Upam da sem jasen če ne pa povejte.

Hvala!

Avtor: zlaboKraj: Domžale-Kamnik PrispevekObjavljeno: Sre Dec 24, 2008 9:34 pm    Naslov sporočila:  
----------------------------------------------------------------------------
umestiš ga na začetku pred neskončno zanko (do-loop)

Avtor: MiskoKraj: MS PrispevekObjavljeno: Sre Dec 24, 2008 10:43 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala. Kako da mi to ni padlo v glavo.

Avtor: MiskoKraj: MS PrispevekObjavljeno: Čet Dec 25, 2008 12:46 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Že spet jaz.
Kako naredim da se mi en del zanke izvaja tako dolgo dokler ne pritisnem tipke in se pri naslednjem ciklu zanke ta del preskoči.

Da malo razložim kaj hočem. Na začetku programa nastavim eno vrednost in ko jo potrdim hočem da se zanka izvaja od tu dalje dokler ni dosežena ta vrednost.

Avtor: stursc PrispevekObjavljeno: Čet Dec 25, 2008 2:13 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Nova zanka

Do

if ta vrednost dosežena
ExitDo
end if

Loop

Lp, stursc

Avtor: MiskoKraj: MS PrispevekObjavljeno: Čet Dec 25, 2008 5:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala deluje Smile

Avtor: MiskoKraj: MS PrispevekObjavljeno: Pet Dec 26, 2008 5:45 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Kako pa vklopim notranje pullup upore? Rolling Eyes
Nekaj sem bral datashet za atmego8 pa me zanima če je potrebno povezat AVcc ter Vcc? Tako sem razumel vendar vseeno raje vprašam.

Hvala

Avtor: klemen88Kraj: Slovenj Gradec PrispevekObjavljeno: Pet Dec 26, 2008 5:51 pm    Naslov sporočila:  
----------------------------------------------------------------------------
portx=&B1111_1111

Odvisno na kerem pinu je tipka...če hočeš vklopit pull-up daš 1 če ne pa 0. Šteje se pa iz desne proti levi.

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Pet Dec 26, 2008 6:23 pm    Naslov sporočila:  
----------------------------------------------------------------------------
kaj pa takole:

ddrb=255
set portb.x


Question

Avtor: strobosKraj: Brežice PrispevekObjavljeno: Pet Dec 26, 2008 6:37 pm    Naslov sporočila:  
----------------------------------------------------------------------------
dkone je napisal/a:
kaj pa takole:

ddrb=255
set portb.x


Question

Tako postaviš pine, da so izhodni.
Pine moraš definirat kot vhodne ddrb=0 in
potem npr. z portb=255 vklopiš pull up upore ali pa s set portb.x vključuješ posamezni pull up upor.

Lp

Avtor: MiskoKraj: MS PrispevekObjavljeno: Ned Dec 28, 2008 4:27 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Spet se mi je zataknilo.

Imam dve zanki v prvi določim pogoj koliko krat se naj izvede druga zanka.
Prosim če mi lahko kdo malo nakaže to rešit sem že nekaj delal na tem vendar mi program ne gre v drugo do-loop zanko.
Koda:
...
C = 0

Do
 If Pinc.5 = 0 Then                                       
  Waitms 20
   If Pinc.5 = 0 Then
    Gosub Vec
   End If
 End If

 If Pinc.3 = 0 Then                                         
  Waitms 20
   If Pinc.3 = 0 Then
    Gosub Manj
   End If
 End If

 If Pinc.4 = 0 Then                                         
  Waitms 20
   If Pinc.4 = 0 Then
    Exit Do
   End If
 End If
Loop

Do
                           'Ta zanka bi se naj izvedla C krat.
Loop

Vec:                                                       
 Incr C
 Locate 3 , 5 : Lcd C : Lcd "    "
Return

Manj:                                                   
 Decr C
 Locate 3 , 5 : Lcd C : Lcd "    "
Return


Hvala

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Ned Dec 28, 2008 8:53 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tu je rešitev na hitro:

Prvo se nauči pregledno pisati programe, da boš hitro našel ko boš kaj popravljal !


Koda:

$regfile = "m8def.dat"
$crystal = 11059200

Config Portc = Input
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcd = 20 * 4

Dim C As Byte
Dim C_flag As Bit

Declare Sub Vec
Declare Sub Manj

Reset C_flag

Cls

'****************************************

Do

    If Pinc.5 = 0 Then
       ' Waitms 20
        If Pinc.5 = 0 Then
           Call Vec
        End If
    End If

    If Pinc.3 = 0 Then
       ' Waitms 20
        If Pinc.3 = 0 Then
           Call Manj
        End If
    End If

    If Pinc.4 = 0 Then
       ' Waitms 20
        If Pinc.4 = 0 Then Set C_flag
    End If
 '   If C_flag = 1 Then Lcd "*"

    If C_flag = 1 And C > 0 Then
       If C = 1 Then
          Reset C_flag                                      '        dodaj svojo kodo
          Lcd "#"
       End If
       Decr C
       Lcd C
    End If

Loop

'********************************************
Sub Vec:
    Incr C
    Locate 1 , 1 : Lcd C : Lcd "    "
End Sub
'********************************************
Sub Manj:
    Decr C
    Locate 1 , 1 : Lcd C : Lcd "    "
End Sub
'********************************************





Zelo lepo je to opisano v literaturi , Gregorja Mačka & ostalih
Malo prehitevaš, zato pojdi po vrsti.

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Pon Dec 29, 2008 10:38 am    Naslov sporočila:  
----------------------------------------------------------------------------
Literatura omenjena v gornjem postu je - Bascom AVR začetni tečaj -.

Poišči ga na našem forumu.

Avtor: TECHNICKraj: Senovo PrispevekObjavljeno: Tor Dec 30, 2008 12:45 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Kako bi izvedel tole, da bi delovalo:

Koda:

Dim Number As Word
Number = 1000

...
Waitus Number
...



Rad bi, da program počaka za vrednost Number mikro sekund.

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: Tor Dec 30, 2008 1:47 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Prvič...zakaj kompliciraš?
Drugič Waitus deluje samo do 255 se pravi 255us. Če hočeš čakati v mikrosekundah
moraš čakati 4xpo250us.

LP G

Avtor: TECHNICKraj: Senovo PrispevekObjavljeno: Tor Dec 30, 2008 1:53 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Že rešil drugače.
Vem, da je 255 največ, ampak z waitus 1000 prav tako deluje (počaka 1 ms).

Program je uporabljen v krmiljenju servo-motorja.
Koda:
Servo = 1
Waitus Count
Servo = 0
Waitms 20

Pri čemer se prvi pulz spreminja po dolžini.

Kasneje sem rešil z zanko for-next ter ukazom pulseout. (po primeru na internetu)

Koda:
$crystal = 4000000

Ddrb.0 = 1
Dim A As Word

Do

For A = 2000 To 1000 Step -10
Pulseout Portb , 0 , A
Waitms 20
Next

For A = 1000 To 2000 Step 10
Pulseout Portb , 0 , A
Waitms 20
Next

Loop


Eno vprašanje. Kje program razume, da mora počakati za A mikrosekund ?

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Tor Dec 30, 2008 3:43 pm    Naslov sporočila:  
----------------------------------------------------------------------------
To se naredi z timerji v interuptu. Skonfiguriraš timer na 1ms. V interrupt rutini odštevaš nastavljeni čas do nule . Ko pride dotični števec na vrednost 0 postaviš zastavico. V glavni zanki gledaš kdaj je ta zastavica postavljena, jo pobrišeš nato pa narediš kar hočeš oz. rabiš. Na tak način lahko glavni program dela še ostala opravila, ne pa da čaka iztek časa v zanki.

Koda:


do
   prikaži LCD itd
   
   if pogoj_npr_tipka = pritisnjena  then nastavljen čas = željen čas

   if zastavica= 1 then
     reset zastavica
     izvrši kar hočeš
   endif
loop

timer0_isr:

if nastavljeni čas>0 then
   decr nastavljeni čas
   if nastavljen_čas=0 then set zastavica
endif

return



Tu je samo nakazano kako, se to lahko naredi !

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Tor Dec 30, 2008 7:58 pm    Naslov sporočila:  
----------------------------------------------------------------------------
RGorazd je napisal/a:
Drugič Waitus deluje samo do 255 se pravi 255us. Če hočeš čakati v mikrosekundah
moraš čakati 4xpo250us.

LP G


Ni več tako! Dajte si že enkrat zapomnit, da BASCOM-AVR sam razčleni Wait na 255. Sam sem všasih pisal Waitms 1362 in je delovalo točno.

Avtor: LEDuserKraj: Ljubljana PrispevekObjavljeno: Sre Dec 31, 2008 10:56 am    Naslov sporočila:  
----------------------------------------------------------------------------
Wait deluje tudi v decimalnem številu npr: Wait 1.5

Avtor: tozirKraj: Celje PrispevekObjavljeno: Sob Feb 07, 2009 1:38 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Lp!

Imam en projekt z Atmega32, kjer je poleg druge periferije ki ni bistvena, vezana tipka pa portd.1. Tipka se namreč ne odziva. Če pomerim enosmerno napetost proti masi je ta okrog 0.11 in pade na maso ko pritisnem tipko. Tipko berem pravilno v bascomu, ker imam vse druge skonfigurirane na isti način in dela use lepo in prav. Sem mislil da je težava v tem ker je na tem pinu Txd, pa sem izrecno izklopil serijski vmesnik v bascomu (disable serial), premeril sem tudi vse povezave, da ni slučajno kje kakšen slab stik ampak še kar isti rezultat. Se komu sanja kaj sem spregledal?

EDIT: Popravil sem napako, mislil sem portd.1 ne portd.2!

Avtor: klemen88Kraj: Slovenj Gradec PrispevekObjavljeno: Sob Feb 07, 2009 1:55 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Lp.
Mislim da Rx ter Tx nimata notranjega pullup upora. Dodaj 4.7k Omega upor na Ucc.

Lp

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Sob Feb 07, 2009 2:03 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Po vrsti,
ukaza WAIT in WAITMS so lahko tipa word in so lahko spremenljivka!
Ukaz WAITUS je tudi lahko tipa word vendar v heplu lepo piše (preizkušeno):
Citiram:
The number of microseconds to wait. (1-65535)

This must be a constant. Not a variable!

to pomeni da ne moremo napisati Waitus A !

Tozir, to da si napisal Disable serial, ne pomeni da si izklopil serijsko komunikacijo, s tem izklopiš samo serial interrupts. V primeru da imaš definiran $baud, Bascom postavi Rx in Tx pine za komunikacijo, poglej malo v datashet in kako naj spremeniš register, za 8515 sem uporabljal set/reset UCR.3.
Vlado

Avtor: tozirKraj: Celje PrispevekObjavljeno: Sob Feb 07, 2009 2:14 pm    Naslov sporočila:  
----------------------------------------------------------------------------
klpzm je napisal/a:
Lp.
Mislim da Rx ter Tx nimata notranjega pullup upora. Dodaj 4.7k Omega upor na Ucc.

Lp


Ga že imam, vendar je vrednost 10k Omega . Prevelik?

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Feb 07, 2009 2:20 pm    Naslov sporočila:  
----------------------------------------------------------------------------
tozir je napisal/a:
klpzm je napisal/a:
Lp.
Mislim da Rx ter Tx nimata notranjega pullup upora. Dodaj 4.7k Omega upor na Ucc.

Lp


Ga že imam, vendar je vrednost 10k Omega . Prevelik?


Načeloma ne, kajti potreben je samo zato, da bo pin potegnil na 1. Poiskusi, pa povej, če dela!

Avtor: klemen88Kraj: Slovenj Gradec PrispevekObjavljeno: Sob Feb 07, 2009 2:24 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Poizkusi z manjšim, pa če lahko pripni program, ki ga pišeš. Bereš tipko z PIN potem? Imaš definirano kot vhod? itd. Nevem kako ti delaš vendar jaz notranje pullup upore aktiviram oz. postavim z PORTB=&b0000_0000 če je 1 je pullup vključen, če je 0 je izključen in je izhod.
Kot vhod ali izhod pa postavlam z DDRX=&B1000_0000 - 1 je izhod, 0 pa vhod.

Avtor: tozirKraj: Celje PrispevekObjavljeno: Sob Feb 07, 2009 2:28 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hmm še kar isto. Mora biti nekaj z tipko narobe. Tistih 0.2V pomeni, da mora biti nekje kakšen stik ali pa je tipka pokvarjena. Bom kar celotno vezje razdrl pa debugu vse, pa bomo vidli.

Avtor: tozirKraj: Celje PrispevekObjavljeno: Sob Feb 07, 2009 2:45 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Zanimivo. Nekje v vezju mora biti napaka. Tipka sama kot sama je v redu. Ko jo vključim v vezje pa pri odprti tipki zmerim 170Ohmov upornosti proti masi. Zaradi te upornosti mi potem kaže 0.2V pri "odprti" tipki. Nič kaj drugega kot napetostni delilnik. Hvala za pomoč! Se bom še javil če bom imel programsko napako Wink

Avtor: Ericsson PrispevekObjavljeno: Ned Feb 15, 2009 11:16 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Zanima me če je že komu uspelo komuniciranje med dvema AVR-jema z 1wire protokolom?
Poizkušam vzpostaviti povezavo med Atmega32 in Attiny2313. Sicer se nekaj dogaja, a vsekakor ne tisto kar hočem. Pri sledečem programu dobim izpis:

A=2
A=3
A=3
A=3
A=5
A=0
A=0
A=0
A=1
A=1
A=3
A=3
A=0

program na sprejemniku (rezultat pošlje po RS232)
Koda:
Config 1wire = Portd.2
Dim A As Word , I As Word
Do
A = 1wread(1)
If A < 11 Then
Print "A=" ; A
End If
Loop
End


program na oddajniku
Koda:
Config 1wire = Portd.2
Dim A As Word , I As Word
I = 1
Do
1wreset
1wwrite I
Waitms 250
Waitms 250
Loop
End



Torej izpisovati bi se morale same enice, vendar temu ni tako. Upor iz signalne linije na Vcc je 4K3, sprejemni Uc je mega32 oddajni pa tiny. Ima kdo kakšen nasvet oz. kakšen primer programske kode ki DELUJE.

Avtor: PeterKraj: Pod krvavcem nekje PrispevekObjavljeno: Pon Feb 16, 2009 7:57 am    Naslov sporočila:  
----------------------------------------------------------------------------
Lep pozdrav

Kaj pa ko bi poizkusil s sledečim čipom ki pretvarja serijski protokol v 1-wire
LINK

Peter

Avtor: f1ghterKraj: Celje PrispevekObjavljeno: Sre Feb 25, 2009 5:26 pm    Naslov sporočila:  Prosim za pomoč
----------------------------------------------------------------------------
Prosim, če mi kdo lahko napiše menda,da enostaven program, ker ga sam neznam Smile.

Naloga: Imamo električno zobno ščetko. Na voljo imamo 3 programe, za hitrost delovanja ščetke (rele 1, rele 2, rele 3 ). V prvi vrstici prikazuj izbran program ščetkanja, katerega izberemo z vhodnimi tipkami. V drugi vrstici prikazuj stanje motorja in temperaturo motorja, katero simuliramo z analognim vhodom 1 .

Avtor: klemen88Kraj: Slovenj Gradec PrispevekObjavljeno: Sre Feb 25, 2009 5:36 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Lp
Če bi sam pokazal malo interesa in pokazal kaj si do sedaj naredil za to nalogo ( razen 3-je posti na elektronik.si ) bi ti z veseljem pomago. Vendar, če ti jaz napišem program se iz njega neboš nič naučil.
Učitelj vam nebi dal kar tako naloge in da vam v šoli nebi pokazal kako se bere tipke, kako se nastavijo vhodi/izhodi, pisanje po LCD-ju ali pač?

Avtor: f1ghterKraj: Celje PrispevekObjavljeno: Sre Feb 25, 2009 6:17 pm    Naslov sporočila:  
----------------------------------------------------------------------------
klpzm je napisal/a:
Lp
Če bi sam pokazal malo interesa in pokazal kaj si do sedaj naredil za to nalogo ( razen 3-je posti na elektronik.si ) bi ti z veseljem pomago. Vendar, če ti jaz napišem program se iz njega neboš nič naučil.
Učitelj vam nebi dal kar tako naloge in da vam v šoli nebi pokazal kako se bere tipke, kako se nastavijo vhodi/izhodi, pisanje po LCD-ju ali pač?


Učitelj je pokazal, vendar jaz v tem programu nimam pojma. Ta program z lahkoto nardim v Flowcod-u v BASCOMU pa negre :S.

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Pet Feb 27, 2009 10:24 am    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni!

Rad bi naredil povezavo med dvema uC-jema. Iz odajnega bi pošiljal samo številke iz 0-1023(AD),v master kontroler,kjer bi on preračunal in izpisal na LCD.(Delam VA meter za dvokanalni usmernik,ki mora biti galvansko locen). Tako kot @Ericsson,bi tudi jaz pošiljal po eni liniji. Samo jaz bi pošiljal preko uarta(TX-RX).

Sicer na LCD dobim številke,vendar ne 1023,tako kot v programu. Je mogoče kdo to že preizkusil? Lahko kakšnem primer kode? Predlog...

Povezano imam iz oddajnega TX na sprejemnega RX,ter masa je skupna.

Hvala

V oddajnem:

Koda:

$crystal = 12000000
$baud = 9600
Dim A1 As word


A1 = 1023
Do

 Print A1

Loop


v sprejemnem pa :

Koda:

'$sim
$crystal = 12000000
$baud = 9600
Dim A1 As Word

Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2

Cls

Do

Waitms 10
A1 = Inkey()
Locate 1 , 1
Lcd A1 ; "                    "

Loop

Avtor: eddieKraj: Severna primorska PrispevekObjavljeno: Pet Feb 27, 2009 10:48 am    Naslov sporočila:  
----------------------------------------------------------------------------
Takole na pamet:
Malo pavze med oddajanji nebi škodilo,
Funkcija Inkey pa ti vrne en znak iz uarta!
Funkcija inputbin bi znala biti boljša!
Lp

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Pet Feb 27, 2009 1:43 pm    Naslov sporočila:  
----------------------------------------------------------------------------
eddie je napisal/a:
Takole na pamet:
Malo pavze med oddajanji nebi škodilo,
Funkcija Inkey pa ti vrne en znak iz uarta!
Funkcija inputbin bi znala biti boljša!
Lp


Sem uporabil omenjeno funkcijo. No,prišel sem do te faze da prikazujem vsaj napol pravilen podatek,namreč,iz oddajnika pošiljam vrednost 500,v sprejemniku pa se mi izmenjuje vrednost med 500 in 62465. Pri obeh imam hitro na 8mhz in baudrate na 300. Kako pa sedaj odpraviti tole motnjo?

Prilagam še programa

oddajni:

Koda:

'$sim
$crystal = 8000000
$baud = 300
Dim A1 As Word

A1 = 500
Do

Printbin A1
Waitms 10


Loop


sprejemni:

Koda:

'$sim
$crystal = 8000000
$baud = 300
Dim A1 As Word

Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2

Cls

Do

Waitms 100
Inputbin A1
Locate 1 , 1
Lcd A1 ; "             "


Loop




Avtor: eddieKraj: Severna primorska PrispevekObjavljeno: Pet Feb 27, 2009 1:51 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Sprejemno zanko "vrtiš" 10x bolj počasi kot oddajno!
Morda je že tule problem!

EDIT: Preglej malo še
te stvari !

Lp


Nazadnje urejal/a eddie Pet Feb 27, 2009 1:56 pm; skupaj popravljeno 3 krat

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Pet Feb 27, 2009 1:53 pm    Naslov sporočila:  
----------------------------------------------------------------------------
eddie je napisal/a:
Sprejemno zanko "vrtiš" 10x bolj počasi kot oddajno!
Morda je že tule problem!

Lp


uff,to je pa čisto moja napaka Rolling Eyes Pozabil sem spremeniti. Sedaj dela tako kot treba Wink Sedaj grem na drug del. Hvala eddie za rešitev.

Avtor: eddieKraj: Severna primorska PrispevekObjavljeno: Pet Feb 27, 2009 1:59 pm    Naslov sporočila:  
----------------------------------------------------------------------------
No super!
Sicer so pa vedno take napake najbolj trdovratne.

Lp

Avtor: galex4 PrispevekObjavljeno: Sob Avg 15, 2009 2:34 pm    Naslov sporočila:  
----------------------------------------------------------------------------
kako je pri bascomu tipka če je pritisnena gre proti masi pomeni, da je stanje 0 ali 1?

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Avg 15, 2009 3:39 pm    Naslov sporočila:  
----------------------------------------------------------------------------
galex4 je napisal/a:
kako je pri bascomu tipka če je pritisnena gre proti masi pomeni, da je stanje 0 ali 1?


0

0 je nizko stanje, ko vezana proti GND.

Avtor: SreckoKraj: Okolica Cerkna PrispevekObjavljeno: Sob Avg 15, 2009 3:40 pm    Naslov sporočila:  
----------------------------------------------------------------------------
galex4 je napisal/a:
kako je pri bascomu tipka če je pritisnena gre proti masi pomeni, da je stanje 0 ali 1?


0 Applause

Lp Srečko

Ajej me je @program_er prehitel. Applause Applause

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Sob Avg 15, 2009 5:27 pm    Naslov sporočila:  Aref
----------------------------------------------------------------------------
To je takoimenovana referenčna napetost.
Napetost, ki jo v AD pretvorniku pretvarjaš v digitalno obliko mora biti manjša od AREF.
Če imaš recimo 8-bitni AD pretvornik in ti le ta da rezultat 128, (kar je polovica od 255, kar je maksimalno lahko v enem bajtu) to pomeni, da je napetost polovica od AREF. Če je bila AREF 5V, potem je napetost, ki si jo izmeril 2.5V.

Da dobiš torej napetost v Voltih (ali decivoltih) moraš v mikroprocesor vgraditi malo ukazov, ki bodo izmerjeno veličino pretvorili v željeno obliko. V bistvu moraš količino, ki ti jo da AD pretvornik pomnožiti z referenčno napetostjo in deliti z 255 (oziroma 1024, če je AD pretvornik 10 biten).

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Avg 31, 2009 10:10 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Še jaz z enim vprašanjem:
delam merilnik napetosti, toka in podobnih stvari za usmernik. Uporabil sem atmego 168.
Zanima me pa okoli merjenja toka - namreč največji tok bo 5 A, torej mora biti upor kar majhen da se ne bo pretirano grel, posledično bo napetost na njem majhna. Če prav razumem, lahko uporabim reference=internal in tako pri tem avr-ju dobim referenco 1,1V, kar bi bilo sprejemljivo?
Pa še nekaj - a je mogoče različnih kanalom ADC določiti različno referenco? Namreč jaz bi za merjenje napetosti uporabil Avcc, za tok pa Internal...
Hvala!

Avtor: int47Kraj: Ljubljana PrispevekObjavljeno: Pon Avg 31, 2009 10:40 pm    Naslov sporočila:  
----------------------------------------------------------------------------
BASCOM-a ne poznam.
Načeloma je v uC-ju le en AD pretvornik, na katerega je vezanih več vhodov preko MUX-a. Če vsakič, ko zamenjaš kanal tudi izvedeš inicializacijo AD-ja, lahko preklapljaš med referencami, ki so na voljo.

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Tor Sep 01, 2009 6:53 am    Naslov sporočila:  
----------------------------------------------------------------------------
no, to bi res mogoče šlo. Bom popoldne poskusil. Medtem pa, če ima kdo še kakšno boljšo idejo...
malce sem sicer mislil uporabiti operacijski ojačevalnik za merjenje toka, ampak ne najdem nobenega pametnega načrta na netu. Neka sem sicer našel, a je napajanje samega opamp-a vezano kar na napajanje merjenega toka (torej izhod usmernika), pri meni se pa to napajanje spreminja od 0 do 40V, kar je lahko ali premalo ali preveč...torej bi rabil fiksno napajanje in potem merjenje preko upora...če ima kdo kaj.?

EDIT: če sem prav prebral v help-u od bascoma, je ukaz config ADC neponovljiv, kar pomeni da ga lahko uporabiš samo enkrat, torej rekonfiguracija odpade...?

Avtor: LEDuserKraj: Ljubljana PrispevekObjavljeno: Pet Sep 04, 2009 1:35 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pri bascomu se mi je malo zataknilo. Rad bi izdelal merilec hitrosti a me malo heca timer. Zadevo sem si zamislil tako, da bi imel neko konstanto (2 pi r /r-radij kolesa) in to konstanto ustrezno delil s časom ki ga kolo potrebuje v enem obratu. Tukaj pa se mi pojavi problem. Kako bi uporabil Timer1 in v katerem načinu da bi mi točno preštel koliko impulzov je preteklo med enim obratom kolesa?

Nekaj sem googlal in našel tole kodo a mi ne deluje.
Koda:
$regfile = "2313def.dat"
$crystal = 4000000

'Config Pind.6 = Output
Config Timer1 = Timer , Prescale = 64 , Capture Edge = Rising

Dim Wtime As Byte
Dim Timercounter As Word

On Capture1 Captmr

Wtime = 100
Timercounter = 0

Enable Interrupts
Enable Capture1

Do
  'Set Portd.6
  Waitms Wtime
  'Reset Portd.6
  Waitms Wtime
  Cls
  Lcd "pwidth: " ; " " ; Capture1
Loop

Captmr:
  Timercounter = Capture1
  Timer1 = 0
Return

End

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Pet Sep 04, 2009 2:31 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Sam sem pri mojem kontrolerju naredil naslednje:

Timer0 mi da interrupt vsaki 2 s.
Reed kontakt imam vezan kot eksterni interrupt, ki mi ob vsakem prehodu kolesa poveča nek števec.

Ob vsakem timer0 interruptu (torej, vsaki 2 sekundi) preštejem število impulzov, ki sem jih dobil do takrat in zmnožim (*2 pi r) in dobim pot v teh dveh sekundah. Na koncu števec prehodov kolesa postavim na 0.

Za generiranje timer interrupta lahko uporabiš Avr Timer.exe v priponki (preimenuj PDF v EXE), ki ti direktno generira Bascom kodo - vpišeš hitrost oscilatorja, željen čas za interrupt overflow in to je to Smile.

LP, Grega

Avtor: LEDuserKraj: Ljubljana PrispevekObjavljeno: Pet Sep 04, 2009 2:43 pm    Naslov sporočila:  
----------------------------------------------------------------------------
To sem tudi jaz razmišljal ampak mi ni preveč všeč ker potem je 2s mir na LCDju. Zakaj pa nisi znižal na mili sekunde?

Na neki strani sem zasledil kodo ki sem jo malo prej objavil zraven pa piše:
Citiram:
Timer1 Capture

Timer1 can be configured in the 'Capture' mode. This means that Timer1 counts the controller clock through a prescaler, and when on the ICP input (PortD.6, pin 11) a pulse arrives, the contents of the Timer1 register is copied to the input capture register. In this way it is possible to measure the time between two pulse edges exactly:

Config Timer1 - Timer, Prescale = 1|8|64|256|1024, Capture Edge = Rising|Falling

interrupt-timer1-capture.bas

$regfile = "2313def.dat"
$crystal = 4000000

'Config Pind.6 = Output
Config Timer1 = Timer , Prescale = 64 , Capture Edge = Rising

Dim Wtime As Byte
Dim Timercounter As Word

On Capture1 Captmr

Wtime = 100
Timercounter = 0

Enable Interrupts
Enable Capture1

Do
'Set Portd.6
Waitms Wtime
'Reset Portd.6
Waitms Wtime
Cls
Lcd "pwidth: " ; " " ; Capture1
Loop

Captmr:
Timercounter = Capture1
Timer1 = 0
Return

End

In the interrupt routine the value of Timer1 (Capture1 is just another name for this register) is copied to Timercounter. Timer1 is then reset. The next time that a pulse on the ICP input arrives the same happens. So, Timercounter is a measure of the time between pulses on ICP.


Mislim da je meritev veliko bolj točna če šteje čas v enem obratu in ne obrate v enem časovnem intervalu.

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Pet Sep 04, 2009 5:00 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Lahko narediš tudi tako. Vendar osveževanje na 2s preverjeno povsem zadostuje - celo zelo dobro izpade Smile - bolje kot (pre)hitro osveževanje.

LP, Grega

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: Sob Sep 05, 2009 11:01 am    Naslov sporočila:  
----------------------------------------------------------------------------
Tole na merjenje na 2 sekundi lahko pri zelo majhni hitrosti deluje popolnoma nenatančno. Če se kolo ne zavrti v 2 sekundah za 1 obrat je hitrost 0, če pa se zavrti za 1 obrat in še 9/10 obrata, pa še vedno smatra, kot da se kolo zavrti 1x v 2 seundah. Sam bi števec hitrosti naredil takole, da bi reed vezal na zunanji interrupt, ter meril čas, ki ga potrebuje reed za en obrat. V kolikor je ta čas daljši odnevem 3 ali 4 sekunde, se smatra, kot da kolo stoji. Mislim, da bi bila taka dinamika merjenja dovolj natančna za počasne hitrosti in hkrati tudi dovolj dinamična pri večjih hitrostih. Itak je obseg kolesa znan, se pravi s=obseg, čas se izmeri in iz tega izračuna hitrost. Z mace domišljije se lahko izračuna tudi pospešek, oz. pojemek (sicer ne tako fejst natančno, vendar za kolesarje dovolj ugodno).

LP G

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: Sob Sep 05, 2009 11:05 am    Naslov sporočila:  
----------------------------------------------------------------------------
LEDuser, se bom pol priklopil z mojim računalnikom gor, kjer imam eno aplikacijo v Bascomu, ki meri čas pakiranja in deluje točno na tem principu. Zunanji interrupt proži timer. Časovi merjenja so razreda nekaj sekund, natančnost izmerjena na stotinko sekunde. Timer0 pa mislim da teče kar s CCLK, se pravi s hitrostjo 12MHz...

LP G

Avtor: joze PrispevekObjavljeno: Sob Sep 05, 2009 11:51 am    Naslov sporočila:  
----------------------------------------------------------------------------
LP!

Mucek, zanima me kam oziroma kako ta Avr Timer.exe generira kodo??

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Sob Sep 05, 2009 11:56 am    Naslov sporočila:  
----------------------------------------------------------------------------
Vpišeš potrebne podatke in potem se ti v desni tabeli (8/16 bit timer) izpišejo variante. S klikom na eno izmed njih se ti odpre okno s kodo za Bascom.

RGorazd: pri meni s tem nisem imel problemov, ker je kolo izredno majhno (10''), pri kakšnem kolesu se pa strinjam s teboj ...

LP, Grega

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Sob Sep 05, 2009 1:21 pm    Naslov sporočila:  
----------------------------------------------------------------------------
joze je napisal/a:
LP!

Mucek, zanima me kam oziroma kako ta Avr Timer.exe generira kodo??


Ko ti generira kodo, imaš tipko Copy in ti kopira kodo v odložišče - od koder jo z 'prilepi/paste' spraviš v tvoj program, ki ga imaš odprtega v Bascom-u

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: Sob Sep 05, 2009 8:25 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Mucek: To si najbrž naredil za svoj fensy skuter. Sem videl, da potegne za seboj marsikateri pogled!

No, tale koda šteje čas med dvema interruptoma, sicer ima zraven še drugo solato, vendar deluje, z natančno kalibriranim oscilatorjem je stvar precej natančna. Z malo telovadbe bi se dalo narediti tudi števec hitrosti.

LP G

Koda:

$regfile = "at26def.dat"
$crystal = 8000000


Deflcdchar 1 , 10 , 4 , 14 , 17 , 16 , 17 , 14 , 32
Deflcdchar 0 , 10 , 4 , 15 , 16 , 14 , 1 , 30 , 32

Dim Vrednost As Integer , Desetinke As Byte
Dim Sekunde As Byte , Stotinke As Byte , I As Byte , Flag As Bit
Dim Sekold As Byte , Stotold As Byte , Desold As Byte
Dim X As Byte , S As String * 1

Config Lcd = 16 * 2
Config Timer0 = Timer , Prescale = 8
Config Int0 = Falling


Enable Int0
Enable Timer0

On Int0 Int0isr
On Ovf0 Ovf0isr

Load Timer0 , 250

Stop Timer0
Header:
Cls
Restore Dta1:
For X = 1 To 10
Locate 1 , X
Read S
Lcd "   " : Lcd S
Waitms 150
Next X
Cls
Restore Dta2:
For X = 1 To 10
Locate 2 , X
Read S
Lcd "   " : Lcd S
Waitms 150
Next X
Cls
Enable Interrupts

While Flag = 0
   Lcd "Cakam na prvi   "
   Lowerline
   Lcd "impulz...       "
Wend



Main:
Do
Locate 1 , 1
If Flag = 1 Then
   Cls
   Flag = 0
   End If
Lcd "Trenutni:" : Lcd Sekunde : Lcd ":" : Lcd Stotinke : Lcd Desetinke
Locate 2 , 1
Lcd "Prej" : Lcd Chr(0) : Lcd "nji:" : Lcd Sekold : Lcd ":" : Lcd Stotold : Lcd Desold
Loop

Int0isr:
Disable Int0
Stop Timer0
If Flag = 0 Then
Sekold = Sekunde
Stotold = Stotinke
Desold = Desetinke
End If
Sekunde = 0
Stotinke = 0
Desetinke = 0
Vrednost = 0
Timer0 = 0
Flag = 1
Enable Int0
Start Timer0
Return



Ovf0isr:
Load Timer0 , 250
  Incr Vrednost
   If Vrednost = 40 Then
      Incr Desetinke
      Vrednost = 0
   End If
   If Desetinke > 9 Then
      Incr Stotinke
      Desetinke = 0
   End If
   If Stotinke > 9 Then
      Incr Sekunde
      Stotinke = 0
   End If
Return

Dta1:
Data "(" , "c" , ")" , "R" , "o" , "s" , "b" , "a" , "c" , "h"

Dta2:
Data "M" , "a" , "r" , "e" , "c" , " " , "2" , "0" , "0" , "6"

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Pon Sep 07, 2009 6:51 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni!

Zanima me kako v Bascomu uporabiti decimalna števila? Imam eno konstanto Faktor(vrednost naprimer 0,8333),ki bi jo rad pomnožil z spremenljivko Števec in to prikažem na LCD-ju. Gledal sem help,vendar nisem zasledil. Prosim za izkušene bascomaše za pomoč.

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Pon Sep 07, 2009 7:07 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Glej spremenljivko single.
Sicer je druga opcija, da tvojo konstanto pomnožiš z npr. 1000 in nato rezultat deliš s 1000. Pazi, da ne pride do overflowa pri izračunavanju.

Lp, Grega

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pon Sep 07, 2009 7:43 pm    Naslov sporočila:  
----------------------------------------------------------------------------
dkone je napisal/a:
Pozdravljeni!

Zanima me kako v Bascomu uporabiti decimalna števila? Imam eno konstanto Faktor(vrednost naprimer 0,8333),ki bi jo rad pomnožil z spremenljivko Števec in to prikažem na LCD-ju. Gledal sem help,vendar nisem zasledil. Prosim za izkušene bascomaše za pomoč.


Denis, tukaj imaš. Upam, da sem ti pomagal, če pa bo še kaj narobe, pa mi lahko tudi na Skypu pišeš.

Avtor: LEDuserKraj: Ljubljana PrispevekObjavljeno: Tor Sep 08, 2009 1:49 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Jaz pa se trudim in iščem kako bi vklopil "fast PWM" na megi8 v Bascomu. Največ kot sem lahko dobil z uporabo int. 8MHz frekvence je 16kHz to pa je kar malo premalo...

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Tor Sep 08, 2009 4:57 pm    Naslov sporočila:  
----------------------------------------------------------------------------
LEDuser je napisal/a:
Jaz pa se trudim in iščem kako bi vklopil "fast PWM" na megi8 v Bascomu. Največ kot sem lahko dobil z uporabo int. 8MHz frekvence je 16kHz to pa je kar malo premalo...


Hmm, na Fast PWM se ne spoznam, drugače pa lahko to tudi poboljšaš z le 8-bitnim PWMjev, odvisno zakaj rabiš in če ti je taka natančnost dovolj.

8000000 / 1024 / 1 = 7,812 kHz

8000000 / 256 / 1 = 31,250 kHz

Avtor: LEDuserKraj: Ljubljana PrispevekObjavljeno: Tor Sep 08, 2009 5:11 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja škoda jaz bi potreboval čim višjo frekvenco od 50kHz naprej. Kristal bom uporabil 20MHz. Nekaj sem slišal za spreminjanje registrov TCCR samo tukaj pa ne vem več kateri biti morajo biti postavljeni za hitri PWM.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Tor Sep 08, 2009 6:37 pm    Naslov sporočila:  
----------------------------------------------------------------------------
LEDuser je napisal/a:
Ja škoda jaz bi potreboval čim višjo frekvenco od 50kHz naprej. Kristal bom uporabil 20MHz. Nekaj sem slišal za spreminjanje registrov TCCR samo tukaj pa ne vem več kateri biti morajo biti postavljeni za hitri PWM.


Hmm, v bistvu je frekvenca 8-bitnega PWMja pri 20MHz kvarcu okoli 78,125kHz, ampak to je bolj tak-tak rešitev, sploh če bi rad uporabil 10-bitni ADC.

Sem pa že bral v datasheetu za tale fast PWM, ampak kolikor imam jaz izkušenj v Bascomu in sem ga že kar nekaj prečekiral, ne poznam kakšnega ukaza v stilu Config TimerX = Fast_PWM Confused

Zakaj pa sploh rabiš tako frekvenco, če ni skrivnost?

Avtor: LEDuserKraj: Ljubljana PrispevekObjavljeno: Tor Sep 08, 2009 6:53 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Direktnega ukaza v Bascomu ni za nastavitev PWMja obstaja pa poseg v register timerja TCCRxxx drugače pa potrebujem za TOLE.

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Tor Sep 08, 2009 9:39 pm    Naslov sporočila:  
----------------------------------------------------------------------------
program_er je napisal/a:
dkone je napisal/a:
Pozdravljeni!

Zanima me kako v Bascomu uporabiti decimalna števila? Imam eno konstanto Faktor(vrednost naprimer 0,8333),ki bi jo rad pomnožil z spremenljivko Števec in to prikažem na LCD-ju. Gledal sem help,vendar nisem zasledil. Prosim za izkušene bascomaše za pomoč.


Denis, tukaj imaš. Upam, da sem ti pomagal, če pa bo še kaj narobe, pa mi lahko tudi na Skypu pišeš.


Bojan hvala za pomoč,tale bascom ima pa res "fajne" cukrčke za te stvari,vendar sem rešil bolj na eleganten način,tako da sem uporabil kar cela števila,saj je tako napaka manjša. Uporabljam pa za enkoder,pretvorba enot itd...


P.S: Bojan,drugič skrajšaj ime datoteke(link ki si ga pripel),ter na konci daj .html,saj če klikneš,ti da ven samo HTML kodo in za marsikoga neve kaj to pomeni. Drugače pa lepo spisano Smile

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pet Okt 30, 2009 11:02 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Danes sem preko Skypa nekomu malo razložil delovanje oz. bolj uporabljanje PWMja, ter spisal tudi testno kodo. Verjamem, da bo tudi tukaj marsikomu koristila.

V priponki je zazipana .bas datoteka kode, na linku pa HTML verzija (za bolj hiter ogled).

Koda z veliko komentarji, kako uporabljati PWM ter vse ostalo, kar je v nekem začetnem programu potrebno.

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Sre Nov 04, 2009 11:03 am    Naslov sporočila:  Migracija od ATMEGA 128 na ATMEGA1281
----------------------------------------------------------------------------
Spoštovani forumaši:

Poskušam oživeti ATmega1281 katero sem zlotal namesto Atmega128. Po datashetu sta oba pin to pin kompatibilna. Pred kompajliranjem sem zamenjal tudi def datoteko. ATmega1281 dovoli pisanje fuse bitov in reagira na spremembe fusebitov,vidim spremembe. Program, kateri deluje z 128 pa v 1281 ne deluje. Mogoče ima kdo iskušnje z tako migracijo ? Hvala za pomoč.

Avtor: tozirKraj: Celje PrispevekObjavljeno: Sre Nov 04, 2009 8:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
LP
Imam eno vprašanje za Bascom-aše Wink
V programu imam na začetku definirano polje:
Koda:
dim Spremenljivka(4) as byte

Ter kasneje definirano podrutino:
Koda:
Declare Sub podrutina(byval Spremenljivka As Byte)

Ali bodo tu nastali problemi zaradi istega imena ali bo bascom ločil med tema dvema?

EDIT: Sem že rešil, očitno ne loči med tema dvema. Mi napako javi.

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Sre Nov 04, 2009 11:07 pm    Naslov sporočila:  Ta tema
----------------------------------------------------------------------------
Taa tema je prešla vse normalne okvire.

Predlagam, da se odpre posebna mapa, kamor bomo postavljali bascom vprašanje in odgovore..

Avtor: stursc PrispevekObjavljeno: Pon Nov 09, 2009 7:39 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni baskom-aši.

Nimam razlage zakaj ta primer ne deluje.
Vsak komentar je dobrodošel, seveda v smeri rešitve problema
Priloga je preimenovana v txt

Hvala za namige.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pon Nov 09, 2009 7:52 pm    Naslov sporočila:  
----------------------------------------------------------------------------
stursc je napisal/a:
Pozdravljeni baskom-aši.

Nimam razlage zakaj ta primer ne deluje.
Vsak komentar je dobrodošel, seveda v smeri rešitve problema
Priloga je preimenovana v txt

Hvala za namige.


Kako misliš, ne dela?

Njbrž bi ti rad, da se ti releji prižigajo po vrsti gor/dol in je prižgan samo en na enkrat?

Zdaj pa se ti prižigajo v stilu:
1. rele - 0000000000000000 - 16. rele

1000000000000000 - Gor
1100000000000000 - Gor
1110000000000000 - Gor
1100000000000000 - Dol
1000000000000000 - Dol
1100000000000000 - Gor
1110000000000000 - Gor
1111000000000000 - Gor

Ali ti sploh ne dela?

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Pon Nov 09, 2009 7:53 pm    Naslov sporočila:  
----------------------------------------------------------------------------
napaka je v deklaraciji pinov:

Pravilno je tako:

Rele1 Alias Porta.0
Rele2 Alias Porta.1
.................

Rele9 Alias Portc.7
Rele10 Alias Pinc.6


popravi deklaracijo nato se potrudi z rotacijo bitov ali prireditveno tabelo.


Nazadnje urejal/a rudiP Tor Nov 10, 2009 2:44 pm; skupaj popravljeno 1 krat

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pon Nov 09, 2009 8:31 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Preuredil sem tvojo kodo in zdaj mislim, da bi morala delovati. Na moji testni plošči imam trenutno GLCD, zato koda ne morem preizkusit. Če kaj ne bo delalo napiši tukaj (oz. me dodaj na Skype: potokbojan ali MSN: bojc.potok@ hotmail.com pa se boma podrobneje zmenila in analizirala kodo).

V priponki imaš .zip v katerem je koda. Žal ti nisem dopisal komentarjev (trenutno nimam časa, se moram učit za šolo), ampak boš že nekako razumel (Help).

Avtor: stursc PrispevekObjavljeno: Tor Nov 10, 2009 1:26 pm    Naslov sporočila:  
----------------------------------------------------------------------------
@RudiP
To je poznana rešitev

@Program_err
Tabele so prava rešitev. Problem je iskati pravo tabelo. Namreč, če napisem 200 tabel, nebi rad pisal 200X LOOKUP(i, tabela), ampak (če je sploh mogoče)
1 X LOOKUP(i , x). To mi še ni uspelo.
Ta rešitev bi me rešila pisanja in "prihranka" v čipu.

Če ima še kdo kako idejo, prosim

Hvala


LP, stursc

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Sre Nov 11, 2009 9:14 am    Naslov sporočila:  
----------------------------------------------------------------------------
Tu je rešitev malo drugače z indexi na bite. Primer deluje in je napisan samo za
prikaz in upam da bo tebi in še marsikomu prišel prav.

Koda:


$regfile = "8515def.dat"
$baud = 19200
$crystal = 11059200
$hwstack = 64
$swstack = 64
$framesize = 64


Config Lcd = 16 * 2
Config Lcdpin = Pin , Db7 = Portb.7 , Db6 = Portb.6 , Db5 = Portb.5 , Db4 = Portb.4 , E = Portb.2 , Rs = Portb.1
Cursor Off


Cls
Lcd "Test PORT in PIN"
'Wait 1


'------------------------------------------------------------------------------
'deklaracija subrutin
Declare Sub Prikazi
Declare Sub Xx(byval Ix As Byte)
Declare Sub Gor
Declare Sub Dol
'------------------------------------------------------------------------------

Config Porta = Output
Config Portc = Output
Config Portd = Input

Dim I As Byte
Dim Pa As Byte
Dim Pc As Byte

'*** deklaracija tipk
Tipka1 Alias Pind.0
Tipka2 Alias Pind.1


'*** deklaracija pinov
Rele1 Alias Porta.0
Rele2 Alias Porta.1
Rele3 Alias Porta.2
Rele4 Alias Porta.3
Rele5 Alias Porta.4
Rele6 Alias Porta.5
Rele7 Alias Porta.6
Rele8 Alias Porta.7

Rele9 Alias Portc.7
Rele10 Alias Portc.6
Rele11 Alias Portc.5
Rele12 Alias Portc.4
Rele13 Alias Portc.3
Rele14 Alias Portc.2
Rele15 Alias Portc.1
Rele16 Alias Portc.0


Porta = 0                               'Izklopiš vse releje na portu A
Portc = 0                               'Izklopiš vse releje na portu C

I = 0

Do

 'Zaradi simulacije sem zakomentiral spodnje vrstice

 ' Debounce Tipka1 , 0 , Gor , Sub
   Gor
'  Debounce Tipka2 , 0 , Dol , Sub
'  Dol
  Call Xx(i)
  Call Prikazi

Loop

'-------------------------------------------------------------------------------

Sub Gor:

 Incr I
 If I > 16 Then I = 1

End Sub
'-------------------------------------------------------------------------------
Sub Dol:

 Decr I
 If I < 1 Then I = 16

End Sub
'-------------------------------------------------------------------------------
Sub Xx(ix As Byte)
    Decr Ix
    If Ix > 8 Then
       Ix = Ix - 8
       Porta = 0
       If Pc.ix = 0 Then Set Pc.ix Else Reset Pc.ix
       Portc = Pc
      Else
       Portc = 0
       If Pa.ix = 0 Then Set Pa.ix Else Reset Pa.ix
       Porta = Pa
    End If
End Sub

'-------------------------------------------------------------------------------
Sub Prikazi:
   Cls
   Lcd Bin(pa)
   Locate 2 , 1
   Lcd Bin(pc)
End Sub
'-------------------------------------------------------------------------------
end



Avtor: linelKraj: prekmurje PrispevekObjavljeno: Čet Dec 03, 2009 8:42 pm    Naslov sporočila:  Programiranje v bascom avr
----------------------------------------------------------------------------
pozdravljeni!

mene pa zanima kako pri se pri adc skalira, vhodna napetost 0 - 5V, referenčna napetost 5V resolucija AD 10 bitna....zdaj pa želimo merilno območje ( prikaz na lcd) od 0 - 180*C ... zanima me kako je treba definirati izračun v programu da dobimo takšen prikaz.. lahko prosim gdo napiše enačbe?

Avtor: eddieKraj: Severna primorska PrispevekObjavljeno: Čet Dec 03, 2009 10:17 pm    Naslov sporočila:  
----------------------------------------------------------------------------
y=k*x+n Question

Lp

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Čet Dec 03, 2009 10:55 pm    Naslov sporočila:  
----------------------------------------------------------------------------
če to ne znaš, potem močno dvomim da ti bo uspelo napisati program...10 bitov je 2 na 10, kar znese 1024 različnih vrednosti. Torej bo 0 stopinj 0 in 180 stopinj 1024. Če bo na ADC torej 512, to pomeni temperaturo 90 stopinj...čista osnovnošolska matematika...

AJA...da ne rečem da boš moral temperaturni senzor imeti tak, da bo pri nič stopinj dajal 0 voltov in pri 180 stopinj 5 voltov...

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Čet Dec 03, 2009 11:00 pm    Naslov sporočila:  
----------------------------------------------------------------------------
protoncek je napisal/a:
če to ne znaš, potem močno dvomim da ti bo uspelo napisati program...10 bitov je 2 na 10, kar znese 1024 različnih vrednosti. Torej bo 0 stopinj 0 in 180 stopinj 1024. Če bo na ADC torej 512, to pomeni temperaturo 90 stopinj...čista osnovnošolska matematika...


Z linel-om sva to že predelala. Problem je v sami kodi.

ADC = 0 - 1023

0 = 0
1023 = 180

1023 / 180 = 5,6833
1023 / 5,6833 = 180,0010557

Torej 1 stopinja ima razpon 5,6833 ADC vrednosti.

Torej bi moral biti osnutek kode v stilu tega:
...
Adc_vrednost = Getadc(0)

Vrednost = Adc_vrednost / 5,6833
...

to bi bilo potrebno še zaokrožiti na cele številke in potem prikazati na LCDju. Ampak vedno javi neko napako! Zato on prosi za del delujoče kode.

Torej teorijo sva že predelala, problem je koda v praksi.

Hvala v imenu obeh.

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Čet Dec 03, 2009 11:09 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hja, takole je to težko. Napako...katero? Lahko je spremenljivka narobe definirana, lahko je ....marsikaj...

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Čet Dec 03, 2009 11:21 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Jernej, prilepi kodo Wink

Avtor: linelKraj: prekmurje PrispevekObjavljeno: Čet Dec 03, 2009 11:45 pm    Naslov sporočila:  Programiranje v bascom avr
----------------------------------------------------------------------------
v bistvu narašča od vrednosti 0 - 64% pote pa skoči na 0 in spet narašča do 36%, moralo bi pa normalno od 0 - 100%

Dim Adc_vrednost As Word , Adc_vrednost2 As Single , Vrednost As Single , Izpis As String * 5

Start Adc
Do
Adc_vrednost = Getadc(0)
Adc_vrednost2 = Adc_vrednost

Adc_vrednost = Adc_vrednost * 100
Vrednost = Adc_vrednost / 1023

Izpis = Fusing(vrednost , "#.#")
Locate 1 , 1
Lcd "ADC: " ; izpis ; "%" ; " "

Waitms 10
Loop

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Čet Dec 03, 2009 11:56 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Takole na hitro bi rekel da je od stavka:

Adc_vrednost2=Adc_vrednost

napaka, ker od tam naprej računaš z adc in ne z adc2. Adc je definirana kot word, kar pomeni anjvečjo vrednost 65535. Ko to preseže, gre spet na nulo, zato tako obnašanje. ČE word spremenljivki recimo rečeš da naj bo 65000 plus 10000, potem to ni 75000 ampak 75000-65535=9465, ker preskoči in začne spet od nule. Računaj z ADC2, ki je single in mora delati, saj zato si jo definiral. Najprej si ji dodelil enako vrednost, potem je pa nikjer ne uporabljaš...

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pet Dec 04, 2009 6:43 am    Naslov sporočila:  
----------------------------------------------------------------------------
@protoncek, hvala za opombo, najbrž bo zdaj delalo. Ko sva debatirala preko Skypa sva ravno zato uvedla Single spremenljivko Adc_vrednost2, nato pa sva izgleda pozabila spremeniti nadaljni program d'oh!

Avtor: linelKraj: prekmurje PrispevekObjavljeno: Pet Dec 04, 2009 7:32 am    Naslov sporočila:  Programiranje v bascom avr
----------------------------------------------------------------------------
koda je zdaj taka, in stvar dela, hvala za opombo:)


Dim Adc_vrednost As Word , Adc_vrednost2 As Single , Vrednost As Single , Izpis As String * 5

Start Adc
Do
Adc_vrednost = Getadc(0)
Adc_vrednost2 = Adc_vrednost

Adc_vrednost2 = Adc_vrednost * 100
Vrednost = Adc_vrednost2 / 1023

Izpis = Fusing(vrednost , "#.#")
Locate 1 , 1
Lcd "ADC: " ; Izpis ; "%" ; " "

Waitms 10
Loop

Avtor: Samo87Kraj: Kamnik PrispevekObjavljeno: Pet Dec 04, 2009 10:36 am    Naslov sporočila:  
----------------------------------------------------------------------------
Koda:

Adc_vrednost2 = Adc_vrednost
Adc_vrednost2 = Adc_vrednost * 100

Kaj pa je tukaj "fora" prvega stavka pred drugim?

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pet Dec 04, 2009 12:04 pm    Naslov sporočila:  Re: Programiranje v bascom avr
----------------------------------------------------------------------------
linel je napisal/a:
koda je zdaj taka, in stvar dela, hvala za opombo:)

Ni kaj...samo kot je že Samo rekel, tisti stavek je brez potrebe tam...tudi z njim dela, samo brez veze je...

Avtor: linelKraj: prekmurje PrispevekObjavljeno: Pet Dec 25, 2009 7:47 pm    Naslov sporočila:  Programiranje v bascom avr
----------------------------------------------------------------------------
zanima me,kako se naredi, da se dogodek izvrši če npr gledamo dva pogoja

if pina.0 and pina.1 = 1 then
portc = 1

vendar v bascomu nisem zasledil ukaza and, kako vi naredite v tem primeru?

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pet Dec 25, 2009 7:52 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Je, je...

en primer:
If K = 4 Or K = 5 Or K = 6 Then
Locate 4 , 1
itd...

Avtor: klemen88Kraj: Slovenj Gradec PrispevekObjavljeno: Pet Dec 25, 2009 7:57 pm    Naslov sporočila:  
----------------------------------------------------------------------------
protoncek je napisal/a:
Je, je...

en primer:
If K = 4 Or K = 5 Or K = 6 Then
Locate 4 , 1
itd...


Ti si dal ALI funkcijo! Za AND funkcijo je pa :


IF K=4 AND L=4 THEN
SET XXX
END IF

linel je napisal/a:
zanima me,kako se naredi, da se dogodek izvrši če npr gledamo dva pogoja

if pina.0 and pina.1 = 1 then
portc = 1

vendar v bascomu nisem zasledil ukaza and, kako vi naredite v tem primeru?


Pri tebi je problem ker moreš za vsak pin napisat kdaj je pogoj izpolnjen!

if pina.0 = 1 and pina.1 = 1 then
portc = 1

end if

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pet Dec 25, 2009 8:03 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja, vem...AND ali OR je itak podobno, torej so tudi ukazi enaki. Jaz sem samo prilepil primer.

Avtor: linelKraj: prekmurje PrispevekObjavljeno: Pet Dec 25, 2009 8:30 pm    Naslov sporočila:  Programiranje v bascom avr
----------------------------------------------------------------------------
to zdaj dela... zdaj me še pa zanima kako bu naredil podmeni..
npr. v prvi vrstici bi hodil med različnimi besedilami, temperatura - vlažnost - ventilator.... to mi sicer dela, nevem pa kako bi potem prišel v podmeni da bi se ob pritisku na tipko potrditev še zraven v drugi v drugi vrstici pojavilo nekaj takšega seveda na lcd 2x16 :


<ventilator>
*vklop izklop

za glavni meni imam eno spremenljivko in glede na vrednost te spremenljivke se izpisujejo besedila.. to dela.. neven pa kako bi naredil za pod meni, kaj svetujete? in seveda npr ob pritisku tipke nazaj bi skočil v glavni meni, besedilo v drugi vrstici se izbriše. kako ste vi kaj izvedli menuje?

Avtor: robikaKraj: ajdovščina PrispevekObjavljeno: Pet Dec 25, 2009 9:16 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Bascom pozna "and" in "or". Uporabi in prevedi, pa boš videl, da ne se ne bo pritožil, pa tudi upošteval bo. Res pa v helpu ni nikjer omenjeno.

Avtor: Collat3ralKraj: Velenje PrispevekObjavljeno: Pet Jan 01, 2010 9:21 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Da ne bom nove teme odpiru, bom kr semle napisal.

Torej zanima me, kako v Bascom AVR dobim čas, kako dolgo je bil kontakt na vhodu.

Torej če stisnem gumb in ga držim X sekund, kako dobim tist X v programu, da ga uporabljam za ostale funkcije.

LP

Avtor: fluffy111Kraj: Ptuj PrispevekObjavljeno: Pet Jan 01, 2010 9:53 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Vklopiš timer, šteješ kolikokrat prešteje do konca, izračunaš v kakšem času pride do konca in zadevo izpišeš. Teoretično.

V praksi bi bilo malo drugače. Recimo:

enable intterupts
enable timer0
config timer0=timer,prescale=1
on timer0 pritinsnjena_tipka

dim stevec as byte
dim cas as long
stevec=0
do
loop
pritisnjena_tipka:
if tipka=1 then incr stevec
if tipka=0 then
*
'tukaj napišeš ukaz ki ga želiš izvršiti
stevec=0
end if


*Preračun časa je odvisen od vrednosti oscilatorja. Če imaš 4MHz quartz kristal, čas, ki ga porabi program da prešteje en cikel, dobiš po formuli 1/4'000'000. Če imaš večji quartz pa vpišeš ustrezno večjo cifro. Ko izračunaš to (mislim da pride nekje 0,00025s), potem to pomnožiš z številko, ki jo imas pod števcem. Mislim da zapišeš tako:
cas=0,00025x(število v števcu)
Ko si to rešil, si dobil čas v katerem si držal tipko.
Lahko pa pri prescale vpišeš večjo cifro. Npr. 1024. Če narediš to, ti šteje le vsak 1024-i signal in se cikel posledično podalša in števec potrebuje več časa, da prešteje do konca. Namesto timer0 lahko tudi uporabiš timer1, ki je 16 bitni, med tem ko je timer0 8 bitni.

Saj si želel to?

Avtor: Collat3ralKraj: Velenje PrispevekObjavljeno: Pet Jan 01, 2010 10:17 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Torej dejansko vsakič ko bo šel program čez zanko, bo povečal vrednost števca. Pol pa sam glede na vrednost oscilatorja dobiš koliko časa potrebuje program, da gre čez zanko. In iz tega dobiš čas.
Mislim prav?

LP

Avtor: fluffy111Kraj: Ptuj PrispevekObjavljeno: Pet Jan 01, 2010 10:21 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Da. Dobiš kolikokrat je šel čez zanko in to pomnožiš s časom, ki ga potrebuje za eno zanko.

Lp

Avtor: fluffy111Kraj: Ptuj PrispevekObjavljeno: Pet Jan 01, 2010 10:26 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Aja. Pozabil sem. Dodaj še:

Do
if tipka=1 then
start timer0
else
stop timer0
reset timer0
end if

Za to bi prosil nekoga, da popravi če je potrebno, ker nisem prepričan ali je možno tako.

Lp

Avtor: LEDuserKraj: Ljubljana PrispevekObjavljeno: Pon Jan 11, 2010 5:51 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Trenutno se mučim in iščem kako se izpiše binarno vrednost na LCD. Težava je taka, ko preberem vrednost na neki napravi preko SPI in to vrednost izpišem na LCD, mi izpiše decimalno jaz pa bi rad binarno. Kdo ve kako to storiti?

Koda:


...

    Reset Spi_cs

    XX(1) = Spimove(&H02)                                   
    XX(2) = Spimove(&H00)                                   

    Set Spi_cs

   Locate 1 , 1
   Lcd XX(2)

...


Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Pon Jan 11, 2010 6:55 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Lcd bin(XX(2))

če pa ne gre tako
pa:

a = XX(2)

lcd bin(a)

Avtor: LEDuserKraj: Ljubljana PrispevekObjavljeno: Tor Jan 12, 2010 9:26 am    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala sedaj deluje!

Ko sem poizkusil mi izpiše vrednost 123 in 01111011 kar je pravilno me pa malo čudi zakaj napiše 48 (v drugi vrstici) če v kodo vstavim drugo spremenljivko B = Bin(A) in v drugi vrstici izpišem samo B?

Koda:

   A = 123

   Locate 1 , 1
   Lcd A
   Lowerline
   Lcd Bin(A)


Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Tor Jan 12, 2010 11:11 am    Naslov sporočila:  
----------------------------------------------------------------------------
Ne vem zakaj si deklariral b=bin(a)?
b=a

Avtor: kotnikd3 PrispevekObjavljeno: Sre Apr 28, 2010 10:14 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni!
Učim se bascom osnove, pa me zanima, kako preverim če program dejansko deluje.
V simulatorju se mi ne prižge nobena ledica oz. lučka.
V programu naj bi ledica na portu utripala:

$regfile = "attiny26.dat"
$crystal = 4000000

Config Porta = Output

Do
Set Porta.0
Wait 1
Reset Porta.0
Wait 1
Loop

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sre Apr 28, 2010 11:34 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Bascom-AVR simulatorja za simuliranje LEDic ne uporabljam. No, dejansko, simulatorja sploh ne uporabljam. Razen ko je treba pogledati, koliko ciklov (ali uS) traja nek ukaz ali rutina. Nekako mi ga nikoli ne uspe pripraviti do tega, da bi sploh kaj pokazal v tistem LCD/LED/ADC okencu.

Treba bo kupiti en breadboard in čipek ter preiskušati. Teoretično bi tvoj program moral delovati.

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Čet Apr 29, 2010 3:49 am    Naslov sporočila:  
----------------------------------------------------------------------------
Bascom simulator slabo dela, čim imaš kakršnekoli wait-e, bascom jih sicer simulira, a ne s frekvenco 4M, kot je v kristalu.

Oglej si v helpu, kaj naredi $sim.

Pozdrav
vs

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Čet Apr 29, 2010 8:44 am    Naslov sporočila:  
----------------------------------------------------------------------------
vilko je napisal/a:
Bascom simulator slabo dela, čim imaš kakršnekoli wait-e, bascom jih sicer simulira, a ne s frekvenco 4M, kot je v kristalu.

Oglej si v helpu, kaj naredi $sim.

Pozdrav
vs


To je sicer res, ampak ko se ustavi na Wait stavku lahko stisneš "Jump to next line" in gre naprej. Lahko pa simuliraš program tudi brez $sim stavka in je (teoretično) real time.


Glede Knight Riderja:
Zadnjič je nekdo nekje prilepil link do Binary Angle Control (ali Binary Angle Modulation), ki naj bi delovalo podobno kot PWM a na neomejenem število pinov, kar bi bilo dobro za Knight Riderja.

Avtor: Alex17Kraj: Ljutomer PrispevekObjavljeno: Čet Apr 29, 2010 11:09 am    Naslov sporočila:  
----------------------------------------------------------------------------
Mogoče bi moral dodati še $sim na začetku, da simulator preskoči ukaze za čakanje, ki se drugače izvajajo zeloo dolgo.

Edit: spregledal drugo stran

Avtor: kotnikd3 PrispevekObjavljeno: Čet Apr 29, 2010 3:50 pm    Naslov sporočila:  
----------------------------------------------------------------------------
tudi s $sim sem sprobal. čemu potem sploh služi tist lcd/simulator v bascomu, če pa ne moreš preveriti kaj si sprogramiral?

Avtor: klemen88Kraj: Slovenj Gradec PrispevekObjavljeno: Čet Apr 29, 2010 4:08 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Zato je pa najbolje, da si narediš eno preprosto plato na kateri boš imel par tipk, LED-ic, LCD, ... in boš lahko testiral razne programe. Za začetek čisto dovolj.
Ko boš pa osvojil osnovno znanje pa si narediš drugo ploščico na katero dodaš UART, SPI, I2C, GLCD, Matrična tipkovnica, itd.

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Čet Apr 29, 2010 5:33 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Včasih pomaga če vrednost kristala definiraš veliko manjše, kot boš potem uporabil. Jaz sem recimo v nekem programu, ko je bil kristal drugače 12M nastavil na 180000 (čim manj, dokler ne začne težiti zaradi baud-rate) in je simulacija delovala čisto dobro, ukazi WAIT pa so bili cca realno taki,kot definirani. Samo pred programiranjem čipa ne pozabit popravit kristal, drugače zadeva ne deluje - preverjeno...

Avtor: kotnikd3 PrispevekObjavljeno: Čet Apr 29, 2010 7:11 pm    Naslov sporočila:  
----------------------------------------------------------------------------
evo fantje sem pogruntal. v Bascomu sem naredil program, v programu Proteus pa vezje. program iz Bascoma sem importal v čip attiny26 v programu Proteus, tako da imam delujočo simulacijo v programu Proteus (Isis).
zagotovo vas bom še kaj vprašal, vsaj glede programske kode. hvala za pomoč ter nadaljno pomoč!

Avtor: kotnikd3 PrispevekObjavljeno: Čet Apr 29, 2010 9:05 pm    Naslov sporočila:  
----------------------------------------------------------------------------
evo...tole me zanima, če mi lahko pomagate. Attiny26 oz. Attiny261 ima na portu PB7 reset funkcijo, tako da mi v simulatorju Proteus ledica na tem portu ne zasveti. Kaj moram narediti, da mi bo port PB7 zaznal kot izhod, ne pa kot reset?
Hvala
http://wiki.noone.at/_media/hardware:attiny26.png?w=&h=&cache=cache

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Čet Apr 29, 2010 9:10 pm    Naslov sporočila:  
----------------------------------------------------------------------------
kotnikd3 je napisal/a:
evo...tole me zanima, če mi lahko pomagate. Attiny26 oz. Attiny261 ima na portu PB7 reset funkcijo, tako da mi v simulatorju Proteus ledica na tem portu ne zasveti. Kaj moram narediti, da mi bo port PB7 zaznal kot izhod, ne pa kot reset?
Hvala
http://wiki.noone.at/_media/hardware:attiny26.png?w=&h=&cache=cache


Lahko ga definiraš kot Output in poiskusiš, če bo delalo. Ker najbrž ne bo, moraš še v Fuse bitih izklopiti External Reset (daš na OFF). Vendar pazi, če boš prepogramiral RESET pin oz ga boš uporabil kot izhod, programiranje ne bo več mogoče (razen z paralelnim programatorjem, ampak nisem siguren, če ima tiny26 potrebne pine).

Avtor: kotnikd3 PrispevekObjavljeno: Čet Apr 29, 2010 9:20 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Kje pa ga to definiram? V kodi oz. v Bascomu?
Config Portb.7 = Output imam že. Mogoče je fora v tem, da v Bascomu uporabljam Attiny26, v simulatorju Proteus pa Attiny261, ker v26 ni. Vendar ne verjamem, saj sta si čipa po portih podobna.

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Čet Apr 29, 2010 9:43 pm    Naslov sporočila:  
----------------------------------------------------------------------------
ČE v fuse bitih ne boš izklopil reseta ti pb7 definitivno ne bo delal. Ampak, kot rečeno, potem ne boš mogel več programirati z ISP programatorjem. Če imaš možnost, raje uporabi drug portbit, druge rešitve ni...
Drugače fuse nastavljaš lahko v bascomu, tam kjer programiraš...

Avtor: juremKraj: Ljubljana PrispevekObjavljeno: Čet Apr 29, 2010 11:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
kotnikd3 je napisal/a:
tudi s $sim sem sprobal. čemu potem sploh služi tist lcd/simulator v bascomu, če pa ne moreš preveriti kaj si sprogramiral?


Služi temu, da vidiš, ali LEDica utripa ali ne, vidiš tudi izpis na LCD-ju (če s programom pišeš na LCD)... skratka zadeva je uporabna do določene mere. Za zahtevnejše programe je prav gotovo potrebno uporabiti JTAG ICE razhroščevalnik, ki je serijsko vgrajen v MegaPin razvojno ploščo.

PortB.7 pa rajši pusti pri miru, razen če imaš paralelni programator, s katerim boš preprogramiral mikrokontroler.

Lp
Jure

Avtor: TECHNICKraj: Senovo PrispevekObjavljeno: Ned Jan 02, 2011 10:50 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Skušam naredit soft-start elektromotorja brez uporabe pwm-ja in prekinitev (prekomplicirano zame). Ne rabi biti nič eksotično, samo kakšnih 10 ms spreminjanja širine pulza od nekje 20 do 100%.

Takšna koda bi po pričakovanju morala delovati, vendar je rezultat prav obraten:
Koda:
   Reset Startmotor
      I = 255
      J = 0
      K = 255
   While I > 1
      Pulseout Portb , 1 , J
      Toggle Startmotor
      Pulseout Portb , 1 , K
      Toggle Startmotor
      I = I - 1
      J = J + 1
      K = K - 1
   Wend

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Pon Jan 03, 2011 11:34 am    Naslov sporočila:  
----------------------------------------------------------------------------
kotnikd3 je napisal/a:
tudi s $sim sem sprobal. čemu potem sploh služi tist lcd/simulator v bascomu, če pa ne moreš preveriti kaj si sprogramiral?


Z simulatorjem ne moreš preverjati vsega. Je pa simulator odličen za preverjanje zapletenih računskih operacij.
Kadarkoli programiram kake bolj zapletene izračune, jih programiram kot podprogram, ki ga v programu kličem z Gosub, sam podprogram pa testiram posebej v drugem programu, ki je samo za to narejen, da z znanimi vhodnimi podatki kliče omenjeni podprogram, in potem opazujem na simulatorju korak po korak, ali se izračun odvija tako, kot sem si predstavljal, ko sem programiral.

Za testiranje delovanja programa na mikrokrmilniku, pa si pomagam tako, da v program vključim Print ukaze, ki na kritičnih mestih napišejo vsebine kritičnih spremenljivk in povejo, kje v programu se nahajajo. Kaj napišejo Print ukazi pa gledam na terminal-emulatorji na PC-u. Ko sem z delovanjem zadovoljen, pred Print dam apostrofe, in s tem jih predelam v komentarje, ki na program ne vplivajo, še enkrat prevedem in to je to.

Pa veselo na delo!

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Pon Jan 03, 2011 11:59 am    Naslov sporočila:  
----------------------------------------------------------------------------
TECHNIC je napisal/a:
Skušam naredit soft-start elektromotorja brez uporabe pwm-ja in prekinitev (prekomplicirano zame). Ne rabi biti nič eksotično, samo kakšnih 10 ms spreminjanja širine pulza od nekje 20 do 100%.

Takšna koda bi po pričakovanju morala delovati, vendar je rezultat prav obraten:
Koda:
   Reset Startmotor
      I = 255
      J = 0
      K = 255
   While I > 1
      Pulseout Portb , 1 , J
      Toggle Startmotor
      Pulseout Portb , 1 , K
      Toggle Startmotor
      I = I - 1
      J = J + 1
      K = K - 1
   Wend


Predpostavljam, da je izhod pin, ki je definiran kot Startmotor. Pulseout pa si vgradil samo zato, da si dobil potrebne zakasnitve. Drži?

Jaz bi programiral morda tako:
Koda:
Startmor Alias Portx.y                                      ' kamor je priklopljen rele za start motorja
Config Startmotor = Output
Startmotor = 1
' prepodstavljam, da je motor pod napetostjo, ko je ta pin na 0

For I = 0 To 255
    J = 255 - I
    Reset Startmotor
    Pulseout Port , Pin , J
    Set Startmotor
    Pulseout Port , Pin , I
Next

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Jan 03, 2011 3:25 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ravno testiram EEPROM 24C64 na tiny2313...zanima me če kdo lahko razloži zakaj zadeva ne deluje če izberem SCL/SDA na porta D0 in D1 - na portih D2 in D3 pa deluje...je to kaj v povezavi z dejstvom da sta podta D0 in D1 RXD in TXD?

Avtor: red_mambaKraj: Yogyakarta PrispevekObjavljeno: Pon Jan 03, 2011 3:59 pm    Naslov sporočila:  
----------------------------------------------------------------------------
protoncek je napisal/a:
Ravno testiram EEPROM 24C64 na tiny2313...zanima me če kdo lahko razloži zakaj zadeva ne deluje če izberem SCL/SDA na porta D0 in D1 - na portih D2 in D3 pa deluje...je to kaj v povezavi z dejstvom da sta podta D0 in D1 RXD in TXD?


Ponavadi je potrebno pravilno nastaviti registre tem pinom ki imajo alternativne funkcije, podobno sem se enkrat ubadal na atmega8 z i/o signali kjer ni in ni šla praksa z logiko skupaj. Na koncu sem ugotovil da so po defaultu definirani kot analogni vhodi Very Happy

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Jan 03, 2011 4:17 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Jaz tudi sklepam da so očitno po default-u nastavljeni na RX-TX, ker se ob izvedbi programa ne dogaja nič na njih...samo kako do teh nastavitev... Confused je pa že preveč za mojo pamet...
mogoče bi dal portd= output in nato definiral SCL in SDA...
(AJA---delam z bascom-om).

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: Pon Jan 03, 2011 5:50 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Po default-u bi mogli biti na GPIO. Si poizkusil z zunanjimi pull -up upori?

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Jan 03, 2011 6:47 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja, pull up upore imam. Niti nisem še poskušal brez njih. Razmišljam... Z obzirom da je tu ukaz baudrate=19200 mogoče on sam preklopi funkcijo portov na rx/tx način...

Avtor: SilvoKraj: Koroška-okolica Dravograda PrispevekObjavljeno: Pon Jan 03, 2011 6:58 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Assemblersko gledano so pini po resetu čisto enakovredni. Težava je v tvoji proceduri ali pa se je neka procedura že "vsedla" na pine.

Avtor: blay44 PrispevekObjavljeno: Pon Jan 03, 2011 7:30 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Mene pa zanima, če lahko v baskomu nastaviš timer+pwm, da dela neodvisno(da ne zaseda časa izvajanja programa) in izhod daje na OC0A ali B? Je to sploh mogoče ali timer vedno sproži samo prekinitev in ponovno nalaganje?
Gre za tiny13.

LP

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Jan 03, 2011 7:49 pm    Naslov sporočila:  
----------------------------------------------------------------------------
silvo, ti sicer nisi doma v bascomu, ampak vseeno prilagam kodo...sicer zaenkrat ni življenjsko pomembno, zakaj se to dogaja, je pa zanimivo, ker načeloma ne bi smelo biti. Spodaj je celotna koda...če PIND.2 in PIND.3 zamenjam s PIND.0 in PIND.1 se na teh dveh pinih ne dogaja prav nič - na test plošči megapin pri uporabi portov 2-3 LEDice utripajo, pri 0-1 pa nič...
0 in 12 je adresa, bajt pa polnim s številko 48.
Koda:
$regfile = "attiny2313.dat"                                 ' specify the used micro
$crystal = 1000000                                          ' used crystal frequency
$baud = 19200                                               ' use baud rate
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Pinb.2 , Db5 = Pinb.3 , Db6 = Pinb.4 , Db7 = Pinb.5 , E = Pinb.1 , Rs = Pinb.0



Config Scl = Portd.2
Config Sda = Portd.3




Dim Value As Byte

Cls

'writing
  I2cstart                                                  'start condition
  I2cwbyte &B10101000                                       'slave address
  I2cwbyte 0                                                'asdress of EEPROM
  I2cwbyte 12
  I2cwbyte 48                                               'value to write
  I2cstop                                                   'stop condition
  Wait 1

'reading
  I2cstart
  I2cwbyte &B10101000                                       'slave address
  I2cwbyte 0                                                'asdress of EEPROM
  I2cwbyte 12
  I2cstart                                                  'start condition
  I2cwbyte &B1010_0011                                      'slave address
  I2crbyte Value , Nack                                     'value to write
  I2cstop                                                   'read it back

Lcd "prebrano:" ; Value


End

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Pon Jan 03, 2011 7:56 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Protonček,
ja problem je ker ti Bascom tem pinom dodeli funkcijo rx in tx pinov.
V programu imaš definiran $Baud, poskusi odstraniti tisto iz svoje kode, vendar vseeno mislim da ne bo dovolj ker so te nastavitve tudi v Bascom Options od koder jih Bascom vzame pri prevajanju in se boš moral poigrati z registrom da tem pinom vrneš normalno I/O funkcijo.
Vlado

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Jan 03, 2011 8:34 pm    Naslov sporočila:  
----------------------------------------------------------------------------
aha...no, malce se mi je zdelo da je lahko to...ker tudi če vrinem vrstico portd=output LEdici 0 in 1 ostaneta neaktivni, 2 in 3 utripata (ker sta SCL in SDA), 4,5 in 6 pa gredo na vrednost nič. (sedmice ni pri 2313).
Torej bi moral ročno vnesti nekakšen ukaz za vpis funkcije portov 0 in 1?
Bom moral bolj podrobno pregledati datasheet...

Avtor: strobosKraj: Brežice PrispevekObjavljeno: Pon Jan 03, 2011 8:36 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Odstrani $baud če ga ne uporabljaš (print ukazi).

Lp

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Jan 03, 2011 8:43 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Evo, odstranil sem ukaz baud in zares zadeva deluje! Kar je čudno je to da sem celotno rutino prekopiral iz HELP-a v bascomu...torej sem avtomatično sklepal da mora to biti tam...sem pa zastonj gledal v datasheet-u 24C64 kakršenkoli podatek o hitrosti, razen da podpira 400 khz protokol...
Torej, še en problem rešen. Najlepša hvala vsem za pomoč!

Avtor: strobosKraj: Brežice PrispevekObjavljeno: Pon Jan 03, 2011 8:44 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Sicer vidim, da se SCL in SDA nahajata na Portb.7 in Portb.5

Lp

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Jan 03, 2011 8:53 pm    Naslov sporočila:  
----------------------------------------------------------------------------
hm...zanimivo. Zdaj sem pa v dvomih---v čem je poanta namreč. Če moraš v bascomu navesti kje sta ta dva signala? Če brišem ti dve vrstici, mi prevajalnik javi napako, torej definicija MORA biti tam...

Avtor: strobosKraj: Brežice PrispevekObjavljeno: Pon Jan 03, 2011 10:27 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tam se nahajata hardwerska pina za I2C (Portb.7 in Portb.5). Ampak ti imaš tam definiran LCD. Če ti s to definicijo dela, potem ti verjetno I2C dela softwersko.

Lp

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Jan 03, 2011 10:34 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja, tam imam LCD, to je res. Samo LCD bi lahko prestavil drugam, pa moram v bascomu še vedno imeti tisti dve vrstici za definiranje kje sta SDA in SCL. Mogoče če bi pisal v asemblerju, se ta dva pina smatrata za i2c porte.

Avtor: strobosKraj: Brežice PrispevekObjavljeno: Pon Jan 03, 2011 10:37 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Seveda vrstici za definiranje teh dveh signalov morata biti. Važno je le, ali boš imel hardwerski I2C ali softwerski. Poglej v simulatorju, če ti softwerski I2C uporablja kak timer.

Lp

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Jan 03, 2011 10:55 pm    Naslov sporočila:  
----------------------------------------------------------------------------
aha, torej lahko sklepam da v primeru softwarskega I2C procesor bolj trdo dela, kar pomeni da bi mu v primeru časovne stiske lahko škripalo drugje v izvedbi programa...
Če uporablja timer----uh Think ne znam pogledati.. Brick wall noob pač...

Avtor: strobosKraj: Brežice PrispevekObjavljeno: Pon Jan 03, 2011 11:01 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pogledaš če se spreminjajo vrednosti registrov (TCCR....ali nekaj takega - timer control registri).

Lp

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Jan 03, 2011 11:06 pm    Naslov sporočila:  
----------------------------------------------------------------------------
aha...ne, spreminjata se samo SPL in SREG. TCCR ostajajo nule.

Avtor: TECHNICKraj: Senovo PrispevekObjavljeno: Sob Jan 08, 2011 7:35 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Končno uspel preizkusiti Vilkovo kodo za soft-start motorja. Po parih popravkih (napaka bascoma?) deluje odlično, res odlično. Smile

Če se v programu pojavi Pulseout, port, pin, 0 (torej zakasnitev 0), se celotna for zanka ponovi s stanjem pina v eni vrednosti. Torej je prvič delovalo nekako tako - vklop motorja za 5 ms, 5ms pwm 0-100%, 5ms izklop motorja.

Hvala še enkrat Vilko!

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Sob Jan 08, 2011 9:58 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Rad slišim, da naredim kaj dobrega. Hvala.

Avtor: rokKraj: Dravograd PrispevekObjavljeno: Sob Jul 09, 2011 12:30 am    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdrav!

Kak mesec nazaj sem začel s programiranjem v Bascom-u (predvsem lučke on-off),
ter vse mogoče druge enostavne zadeve. Ker je vedno bolj vroče in pri hiši ni nekega prenosnega termometra sem si zadal nalogo izdelati svojega. Uporabil sem 3 7-seg displejčke, tinny2313 ter DS1820.
Koda za multipleks mi lepo deluje, tudi del kode za branje temperature iz termometra. Zataknilo se mi je pri pretvorbi (oz. že pri branju iz termometra) saj ne znam/nevem kako prebrati temeperaturo,
ter jo razstaviti na posamezne števke (primer 23.4 stopinj-> števke 2,3,4). Kako bi lahko to izvedel?
Sedanja rutina mi ne odgovarja (sem še zelo zelen začetnik). V priponki je shema dosedanjega sistema. Prilagam tudi do sedaj spisano kodo.

Sedanja koda mi na displejčkih prikaže samo 00.0 Kje ga lomim?

Lep pozdrav,
Rok

PS: Sem pogledal primere po internetu in help-u pa si je ne znam razložiti.
Displejčki so CA ne CC ko je podano v shemi. Se prav lepo prižigajo Smile

Koda:
$regfile "attiny2313.dat"

 Config Portd = Output
 Config Portb = Output


 Dim A As Byte
 Dim B As Byte
 Dim C As Byte
 Dim D As Byte
 Dim E As Byte
 Dim F As Byte
 Dim T1 As Byte
 Dim T2 As Byte
 Dim T3 As Byte
 Dim T As Integer





T = 0




 Config 1wire = Portb.0

  A = 0


Do

  For B = 0 To 9
  Pinb.1 = 0
 Portd = Lookup(a , Prikaz)
 Waitms 20
 Pinb.1 = 1


 Pinb.2 = 0
 Portd = Lookup(a , Prikaz)
 Waitms 20
 Pinb.2 = 1

 Pinb.3 = 0
 Portd = Lookup(a , Prikaz)
 Waitms 20
 Pinb.3 = 1

 A = A + 1
 If A > 9 Then
 A = 0
 End If
 Next

 Pinb.1 = 1
 Portd = 0
 Waitms 500
 Portd = 255
 Pinb.1 = 0


 Do

    1wreset
    1wwrite &HCC
    1wwrite &H44
    Waitms 750


    1wreset

    1wwrite &HCC
    1wwrite &HBE

    T = 1wread(2)
    1wreset


    T = T / 2
    T1 = T / 10


    For E = 0 To 5

    For D = 0 To 170

    Pinb.1 = 0
    Portd = Lookup(t1 , Prikaz)
    Waitus 850
    Pinb.1 = 1

    Pinb.2 = 0
    Portd = Lookup(c , Prikaz)
    Waitus 850
    Pinb.2 = 1


    Pinb.3 = 0
    Portd = Lookup( , Prikaz)
    Waitus 850
    Pinb.3 = 1
    Portd = 255

    Next
    Next




    Loop

Avtor: SilvoKraj: Koroška-okolica Dravograda PrispevekObjavljeno: Sob Jul 09, 2011 1:14 am    Naslov sporočila:  
----------------------------------------------------------------------------
Za bascom ti sicer ne znam pomagat. Lahko ti dam edino nasvet glede 1Wire protokola.

Sam protokol zahteva v določenih trenutkih točne timinge (pri branju 1 oz 0, resetu...) V teh trenutkih se NE SMEJO izvajati nobene prekinitve sicer bo prišlo do napak. Celotno branje, konvezrija pa traje ranga nekaj deset ms. V koliko ti tvoje programsko orodje dopušča prekintive ob pravih trenutkih, da boš lahko vršil multipleksiranje potem ok. (nekoč mi je nekdo rekel, da to v bascomu ne gre) Sicer ti bo ob branju senzorja prihajalo do neprijetnega utripanja displeja.

Avtor: rokKraj: Dravograd PrispevekObjavljeno: Sob Jul 09, 2011 1:39 am    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdrav!

Silvo, najlepsa hvala za to informacijo. Jaz imam to reseno tako, da mi vse obstoji.
Po vsakem multipleksu displejcke ugasnem, nato pa vsakih 850 ciklov ponovim branje temperature. Na minipin plosci je zadeva delovala super, a vseeno nisem znal izracunati in prikazati deserinko stopinje. Ravnam se pa po prirocniku Bascom Avr za vse.

Lep pozdrac,
Rok

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Sob Jul 09, 2011 7:01 am    Naslov sporočila:  
----------------------------------------------------------------------------
rok je napisal/a:
Pozdrav!
Kak mesec nazaj sem začel s programiranjem v Bascom-u


Že kar nekaj časa programiram v Bascomu. In če dovoliš, ti toplo priporočam, da v vsakem programu 'žrtvuješ' en pin za pisanje raznih informacij na PC-Brayev terminal emulator. Programer enostavno mora imeti orodje, da vidi, kaj se dogaja v mikroprocesorju, ki ga programira. In ekran PC-a je dobro orodje v ta namen.

Če te zanima, ti bom po elektronski pošti poslal primer in navodila, kako to narediti.
Izdelati si moraš TTL-RS232 adapter, na ttl vhod priklopiš pin, na RS232 pa PC.
Brez tega orodja dandanes ne programiram več...

Pozdrav

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Sob Jul 09, 2011 8:56 am    Naslov sporočila:  
----------------------------------------------------------------------------
Jaz bi poskusil tsko, da bi prebrano temperaturo pretvoril v string (str) potem pa lahko bereš posamezne segmente tega stringa - prvi in drugi bosta temperatura, tretji decimalna pika, četrti pa decimalka temperature. Imaš pa na voljo tudi npr. FRAC, ki ti vrne decimalno vrednost neke spremenljivke, medteko ti ukaz int vrne samo celi del.

Avtor: rokKraj: Dravograd PrispevekObjavljeno: Sob Jul 09, 2011 1:14 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdrav!

Poskušal sem pretvoriti integer v string a mi ni uspelo. Najprej izmerim T (temperatura), nato to pretvorim v string T1. Iz tega nato kličem posamezne pozicije in jih vpisujem v spremenljivke D1-D3.
Te nato uporabim za prikaz vrednosti na posameznem displayu. Ko zadevo poženem, se mi vedno izpiše le 00.0
Kje bi lahko bil problem?
Koda:
$regfile "attiny2313.dat"

 Config Portd = Output
 Config Portb = Output


 
 Dim T1 As String * 4
 Dim T2 As Byte
 Dim T3 As Byte
 Dim T As Integer
 Dim A1 As Byte
 Dim A2 As Byte
 Dim A3 As Byte


 Dim D1 As Byte
 Dim D2 As Byte
 Dim D3 As Byte

 A1 = 1
 A2 = 2
 A3 = 3

T = 23.4
Config 1wire = Portb.0
A = 0

Do
 T1 = "T"
 T1 = Str(t)


 1wreset
 1wwrite &HCC
 1wwrite &H44
 Wait 1

 1wreset
 1wwrite &HCC
 1wwrite &HBE

 T = 1wread(2)
 1wreset



 D1 = Instr(t1 , A1)
 D2 = Instr(t1 , A2)
 D3 = Instr(t1 , A3)



    For E = 0 To 5

    For D = 0 To 170

    Pinb.1 = 0
    Portd = Lookup(d1 , Prikaz)
    Waitus 850
    Pinb.1 = 1

    Pinb.2 = 0
    Portd = Lookup(d2 , Prikaz)
    Waitus 850
    Pinb.2 = 1


    Pinb.3 = 0
    Portd = Lookup(d3 , Prikaz)
    Waitus 850
    Pinb.3 = 1
    Portd = 255

    Next
    Next
   
    Loop



Prav tako nisem prepričan če pravilno ustvarjam string iz T.
Ali lahko prosim nekoga, da mi namigne del kode za konverzijo integerja v string, ter kako se pravilno berejo posamezne pozicije stringa?

Hvala za odgovore!

Vilko, hvala za ta koristen nasvet in hkrati bi vas prosil za načrte za rs232 vmesnik. (vam pošljem ZS).

Lep pozdrav,
Rok

Avtor: SilvoKraj: Koroška-okolica Dravograda PrispevekObjavljeno: Sob Jul 09, 2011 1:45 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Sam vmesnik ni kaka umetnost. Poglej tega proteusovega. Pri meni je v rabi od nastanka tistega članka. (l. 2005) Če nimaš na razpolago serijskega porta potem je najbolje narediti tak USB vmesik z FT232 ali MPC2200

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: 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.

Avtor: rokKraj: Dravograd PrispevekObjavljeno: 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

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: 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.

Avtor: rokKraj: Dravograd PrispevekObjavljeno: 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

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: 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)


Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: 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.

Avtor: int47Kraj: Ljubljana PrispevekObjavljeno: 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.

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: 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!

Avtor: dkoneKraj: Krško PrispevekObjavljeno: 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

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: 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:
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.

Avtor: xzibitxKraj: slovenija PrispevekObjavljeno: 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

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: 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

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: 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

Avtor: xzibitxKraj: slovenija PrispevekObjavljeno: 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.

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Č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.

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Čet Jun 14, 2012 7:05 am    Naslov sporočila:  Re: odgovor
----------------------------------------------------------------------------
xzibitx je napisal/a:
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.


Nimaš pravilnih deklaracij in še kaj bi se našlo !

Koda:
$regfile = "m32def.dat"
$crystal = 4000000
'poišči primer za ta m32 in tu dodaj še steke


'Predvidevam, da imaš na PORTD tipke na PORTA pa ledice
Config Porta = Output
Led_0 Alias Porta.0
Led_1 Alias Porta.1
'itd

Config Portd = Input
Tipka_0 Alias Pind.0
Tipka_1 Alias Pind.1
'itd

Porta = 255                   '
'Config Debounce = 80        ' sedaj še ne rabiš te vrstice
'Dim Led As Byte               '//  LED JE POSAMIČNA ENORA
'Dim Tipka As Byte             '// TIPKA JE POSAMIČNA

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 Tipka_0 = 0 Then Set Led_0 Else Reset Led_0
        'If Pind.0 = 0 Then
          ' Porta = Led
          ' Led = Not Led
        ' NISI ZAKLJUČIL IF STAVKA
    '        Else                      'OZIROMA TA ELSE TU NE PAŠE
    '     End If
    End If
Loop

End

Avtor: xzibitxKraj: slovenija PrispevekObjavljeno: Čet Jun 14, 2012 10:10 pm    Naslov sporočila:  XOR
----------------------------------------------------------------------------
No evo malo sem programiral in nekaj ustvaril vendar nevem če bo prav ker nemorem probat. tukaj je program :

$regfile = "m32def.dat" "
$crystal = 4000000
Config Porta = Output
Config Portb = Input

Main:
Debounce Pinb.7 , 0 , Program , Sub Xor
Debounce Portb.6 , 0 , Program1 , Sub

Program:
Porta = &B01111111
Return


Program1:
Porta = &B01111111
Return

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Čet Jun 14, 2012 11:09 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Main moraš delati v Do-Loop zanki. Tako, kot sedaj, se ti bo program samo enkrat "zapeljal" čez in to bo to.

Pa tisti sub xor mi tudi ni ravno jasen ... Mislim, da tudi compilerju ne bo Smile

Pa če bereš vhod, moraš brati kot PINx.y, ne PORT (to je mene večkrat hecalo Sad ). Torej debounce PINx.y.

Pa zdaj v obeh podprogramih iste ledice prižgeš ... Zamenjaj no v enem &B01111111 s čim drugim ... Če hočeš negacijo bo to &B10000000.

Pa lahko noč Smile

LP, g

Avtor: xzibitxKraj: slovenija PrispevekObjavljeno: Pet Jun 15, 2012 3:25 pm    Naslov sporočila:  odgovor
----------------------------------------------------------------------------
No hvala za odgovor Smile probal sem program v bascomu in mi ni našel napak je pa res da sam program nemorem preizkusit ker nimam ploščice s čipom tako da nimam pojma kako bi se program v praksi obnašal:(. Zato sem tudi prosil koga ki ima ploščico da mi naredi program saj sam nevem kako deluje. Hvala LP

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Pet Jun 15, 2012 5:18 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Citiram:
Debounce Pinb.7 , 0 , Program , Sub Xor


Tole sigurno ne bo prav, sprememba pina B.7 bo izzvala skok v podprogram z imenom PROGRAM. Kaj ti pomeni tisti XOR na koncu?
XOR je rezervirana beseda in je razen za ta namen ne moreš uporabiati.
Tudi če nimaš tiskanine, tvoj program lahko preveriš v simulatorju ki je vgrajen v Bascom.
Poglej v Help-u kaj pomeni $Sim!
Če pa si ga probal v simulatorju, ni razloga da nebi delal na plošči.

Drugič raje prilepi kodo, ne pa jo prepisovat ker lahko pride do napak pri prepisovanju.

Ko si postavil Portd kot vhode, če nimaš zunanjih pull up upororov vklopi notranje:
Portb=255
LP

Avtor: xzibitxKraj: slovenija PrispevekObjavljeno: Sob Jun 16, 2012 9:38 am    Naslov sporočila:  odgovor
----------------------------------------------------------------------------
Da vem da lahko probaš v simulatorju sam a ni tako da programov s tipko v simulatorju nemoreš preizkusit ker simulator nima tipk? vsaj tako nam je profesor reku

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Sob Jun 16, 2012 10:00 am    Naslov sporočila:  
----------------------------------------------------------------------------
Nima tipk, lahko pa stanja portov spreminjaš s klikom na ustrezno ledico v simulatorju.

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: Sob Jun 16, 2012 10:16 am    Naslov sporočila:  
----------------------------------------------------------------------------
Tako kot je rekel protoncek. Na desni imaš set zelenih ledic. Te so vhodi, na levi imaš pa set rdečih ledic (govorim za simulator), te so izhodi. Zelene ledice lahko klikaš in se obnašajo tako kot tipke. Če zelena ledica v simulatorju sveti, pomeni da jo interni pull up vleče navzgor. Ko boš kliknil nanjo, bo potemnela, kar velja enako, kot če bi stisnil tipko, ki je v dejanskem hardveru vezana na maso. Program bo zaznal prehod iz logične "1" v logično "0". Ukaz Debounce Tipka,0,Naredinekaj,sub se bo izvedel.

LP G

Avtor: xzibitxKraj: slovenija PrispevekObjavljeno: Sob Jun 16, 2012 6:25 pm    Naslov sporočila:  odgovor
----------------------------------------------------------------------------
Sme preizkusil in stvar res deluje Smile najlepša vam hvala. Še vedno pa nisem povsem ugotovil oz mi še ni uspelo napisati program pravilno. Ledice se ko pritisnem na tipko vžgejo vendar se ko tipko spustim ne ugasnejo Sad Program pa je tak :

$regfile = "m32def.dat" "
$crystal = 4000000
Config Porta = Output
Config Portb = Input

Main:
Debounce Pinb.7 , 0 , Program , Sub Xor
Debounce Portb.6 , 0 , Program1 , Sub

Program:
Porta = &B10000000
Return


Program1:
Porta = &B00000000
Return

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Sob Jun 16, 2012 6:47 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Namesto main napiši DO, nato LOOP.
pa še tisti XOR zbriši.
lp

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: Sob Jun 16, 2012 8:26 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Koda:

$regfile = "m32def.dat" "
$crystal = 4000000
Config Porta = Output
Config Portb = Input



Main:

do
Debounce Pinb.7 , 0 , Program , Sub  ' tale Xor nima kaj tle iskati
Debounce PINB.6 , 0 , Program1 , Sub 'če imaš posamezen pin definiran kot vhod, potem daj pinb.x

loop

Program:
Porta = &B10000000
Return


Program1:
Porta = &B00000000
Return


Nazadnje urejal/a RGorazd Sob Jun 16, 2012 10:01 pm; skupaj popravljeno 1 krat

Avtor: gumby PrispevekObjavljeno: Sob Jun 16, 2012 9:25 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tale gumb je tam z razlogom. Dajte ga uporabljat, da bodo programi vsaj približno pregledni... Pray

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Ned Avg 12, 2012 9:58 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Imam 16bitno spremenljivko Var3, katero bi rad razbil na dva bayta Var1 in Var2. Kako to narediti?



Koda:

Dim Var3 As Word , Var2 As Byte , Var1 As Byte
Var3 = 12345
Print Bin(var3)
Shift Var3 , Right , 4
Var1 = Var3
Print Bin(var1)
Shift Var3 , Left , 4 ' alternativa :var2= var3<<4 ?
Var2 = Var3
Print Bin(var2)
Var3 = Makeint(var2 , Var1)
Print Var3 ' preverim če je pravilni rezultat


Nazadnje urejal/a dkone Ned Avg 12, 2012 10:15 pm; skupaj popravljeno 1 krat

Avtor: dkoneKraj: Krško PrispevekObjavljeno: Ned Avg 12, 2012 10:15 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Na vprašanje si bom sam odgovoril, še dobro da obstaja simulator v bascomu. Bascom vzame prvo LSB byte in prepiše v novo spremenljivko, potem treba začetno spremenljivko zašiftat za 8 mest v desno, da se 1byte pomakne na mesto 2ga byta in to je to.


Še koda, za pomoč drugim.

Koda:

Dim Var3 As Word , Var2 As Byte , Var1 As Byte
Var3 = 12345
Print Bin(var3)
Var2 = Var3
Print Bin(var2)
Shift Var3 , Right , 8
Print Bin(var3)
Var1 = Var3
Print Bin(var1)
Var3 = Makeint(var2 , Var1)
Print Var3


In še krajša:

Koda:

Dim Var3 As Word , Var2 As Byte , Var1 As Byte
Var3 = 12345 : Var2 = Var3
Shift Var3 , Right , 8 : Var1 = Var3
Var3 = Makeint(var2 , Var1)
Print Var3

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Pon Avg 13, 2012 3:27 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Bascom je zakon!

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Pon Avg 13, 2012 6:52 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Denis,
obstaja še bolj enostavna rešitev,
v Helpu poglej ukaz OVERLAY.
LP

Avtor: tezoKraj: Zgornji brnik PrispevekObjavljeno: Sob Okt 13, 2012 10:05 am    Naslov sporočila:  I2c slave
----------------------------------------------------------------------------
Lep pozdrav!

Izdelujem QuadCopter z Atmega8, pa se je zataknilo pri hitrosti, Namreč če hočem vse narediti z enim mikrokontrolerjem, je stvar zelo počasna. Zato sem se odločil da PWM servo signal generiram z še eno Atmega8, ki bo uporabljal BASCOM slave TWI knjižnico za prejemanje podatkov preko I2C.

MASTER koda
Koda:


$lib "i2c_twi.lbx"                                          ' we do not use software emulated I2C but the TWI

Config Scl = Portc.5                                        ' we need to provide the SCL pin name
Config Sda = Portc.4                                        ' we need to provide the SDA pin name

I2cinit                                                     ' we need to set the pins in the proper state

Config Twi = 100000                                         'clock speed


Do

 Pulsein Motor1 , Pinb , 1 , 1                              ' Na portb prejema PWM vrednosti
 Pulsein Motor2 , Pinb , 2 , 1
 Pulsein Motor3 , Pinb , 3 , 1
 Pulsein Motor4 , Pinb , 4 , 1

                                                             'in jih nato pošlje po I2c

      I2cstart
 I2cwbyte &H70                                              ' Slave address
 I2cwbyte Motor1
 I2cwbyte Motor2
 I2cwbyte Motor3
 I2cwbyte Motor4
 I2cstop

Loop




SLAVE koda

Koda:



   Config Sda = Portc.4
 Config Scl = Portc.5


Config Twislave = &H70 , Btr = 1 , Bitrate = 100000           'Slave Address, clock speed

Const Timer2reload = 156                                    'Timer, ki vsakih 20ms Generira pulz za PWM servo signal
Config Timer2 = Timer , Prescale = 1024
Load Timer2 , Timer2reload
On Ovf2 Timer2_isr
Enable Ovf2
Start Timer2
Enable Interrupts



Do

Loop



   Timer2_isr:                                              'Generira PWM servo signal
   Load Timer2 , Timer2reload

   Portb.1 = 1
   For I = 0 To Motor1

   Waitus 10

   Next
   Portb.1 = 0
''''''''''''''''''''''''''''''''''''''''

      Portb.2 = 1
   For I = 0 To Motor2

   Waitus 10

   Next
   Portb.2 = 0
''''''''''''''''''''''''''''''''''''''''

      Portb.3 = 1
   For I = 0 To Motor3

   Waitus 10

   Next
   Portb.3 = 0

''''''''''''''''''''''''''''''''''''''''
      Portb.4 = 1
   For I = 0 To Motor4

   Waitus 10

   Next
   Portb.4 = 0

 Return






''''''''''''''''''''''''''''''''''''''''''''
Twi_stop_rstart_received:

Return
''''''''''''''''''''''''''''''''''''''''''''''

Twi_addressed_goread:

Return
''''''''''''''''''''''''''''''''''''''''''

Twi_addressed_gowrite:

Return
''''''''''''''''''''''''''''''''''''''''''




Twi_gotdata:



  Select Case Twi_btw
  Case 1 : Motor1 = Twi - 40                                ' Spremenljivke napolni z vrednosti, ki jih prejme po i2c
  Case 2 : Motor2 = Twi - 40
  Case 3 : Motor3 = Twi - 40
  Case 4 : Motor4 = Twi - 40

  End Select


  Print Motor1                                              'In jih pošlje po uart
  Print Motor2
  Print Motor3
  Print Motor4

Return
''''''''''''''''''''''''''''''''''''''''


Twi_master_needs_byte:

Return
''''''''''''''''''''''''''''''''''''''''

Twi_master_need_nomore_byte:

Return


Problem pa je da zato da preko i2c prenese 4byte za motorje porabi "na uč" 50ms.
Je to normalno? Ali ni i2c hitrost nekaj Mbytov/s ?

Avtor: tezoKraj: Zgornji brnik PrispevekObjavljeno: Sob Okt 13, 2012 9:44 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Sem ugotovil , da je master ustavljen dokler program v SLAVEu ne doseže ukaza return, tako da sem izbrisal vrstice print in je sedaj vse veliko hitreje. Very Happy Bom verjetno še branje iz sprejemnika prestavil na slave čip, da se glavni nebo matral z branjem PWMja.

LP

Avtor: zokKraj: Ponikva PrispevekObjavljeno: Pon Okt 15, 2012 10:00 am    Naslov sporočila:  
----------------------------------------------------------------------------
za PWM poskusi raje tole:

Koda:
$regfile = "m8def.dat"
$prog &HFF , &HE1 , &HD9 , &H00

Config Servos = 2 , Servo1 = Portc.1 , Servo2 = Portc.2 , Reload = 10 'konfiguriras servota
Config Portc.1 = Output
Config Portc.2 = Output
Enable Interrupts
Servo(1) = 10                                               '10 times 10 = 100 uS on
Servo(2) = 10                                         

dim podatek1 as word                  'za primer sem dolocil dve spremenljivki
dim podatek2 as word
podatek1 = 25                              'spremenljivkama sem dolocil dve vrednosti (samo za primer, da ve kam postaviti servota ob inicializaciji)
podatek2= 135

do           'malo bomo ponavljali

'tu vmes pride vsa logika - skaliranje, mix komand, itd
'za prvi preizkus pa sem zaenkrat napisal samo naslednji sestavek:

incr podatek1 'premakni servo za en delcek
incr podatek2

if podatek1=210 then                             'ce servo pride do skrajne tocke (vsaj pri mojih servotih je 210 ena skrajna tocka)
podatek1 = 25                                      'ga postavi v drugo skrajno tocko
endif

if podatek2=210 then
podatek2 = 25
endif

Servo(1) = podatek1                       'vrednost posljes na servo, in ti ni potrebno uporabljati waitus komand - tako program tece naprej, PWM pa se izvaja v ozadju
Servo(2) = podatek2
Loop


upam da pomaga. Tako lahko uporabis samo en mikrokontroler in prihranis na kompleksnosti, na masi in ceni.

edit: ah se nekaj:



LP!
Koda:
'Servo's need a pulse in order to operate
'with the config statement CONFIG SERVOS we can specify how many servo's we
'will use and which port pins are used
'A maximum of 16 servos might be used
'The SERVO statements use one byte for an interrupt counter and the TIMER0
'This means that you can not use TIMER0 anymore
'The reload value specifies the interval of the timer in uS
Config Servos = 2 , Servo1 = Portc.1 , Servo2 = Portc.2 , Reload = 10
'we use 2 servos with 10 uS resolution(steps)

Avtor: tezoKraj: Zgornji brnik PrispevekObjavljeno: Tor Okt 30, 2012 3:57 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Sem ugotovil, da je branje vhodov z pulsein tudi prepočasno. Mogoče kdo ve kako brati PWM vhode na hitrejši način?

MOJ POIZKUS:
Naročil sem atmego88 ki ima "pin change interrupte", In naredil program da vsakič ko se pojavi pulz, se sproži interrupt. V interruptu sprožim timer0 , in ob koncu pulza spet sproži interrupt v katerem preberem vrednost timerja in spremenim PCMSK (da bo interrupt zaznaval na naslednjem pinu). To lepo bere pwm če se spreminja le en pwm naenkrat, ostali pa imajo sredinsko vrednost. Če vrednosti večih PWM vhodov spreminjam hkrati , začnejo vplivati eden na drugega, in vse prebrane vrednosti so čudne. Že 3 dni iščem napako, ampak se vse zdi vredu.



Koda:
  On Pcint2 Isr_pcint0
  Pcmsk2.6 = 1                                      'določim na katerem pinu bo prvič PCINT
  Enable Pcint2
  Config Timer0 = Timer , Prescale = 64
  Enable Interrupts

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  Do

  Waitms 100
  Print In3
  Loop

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

  Isr_pcint0:

  If Pind.t = 1 Then                                        'preveri če je interrupt sprožen na prednjem ali zadnjem robu pulza
  Goto Naprej                                               'če je na prdnjem, potem samo resetira timer0 in se vrne
  End If
                                                             'Če je na zadnjem robu, potem gre naprej v program za branje vrednosti timerja



  Select Case T

  Case 4 : In1 = Timer0                                     'izbere pravo spremenljivko in jo napolni z vrednsostjo timerja
  Case 5 : In2 = Timer0
  Case 6 : In3 = Timer0
  Case 7 : In4 = Timer0

  End Select




   T = T + 1                                                'spremenljivko t vsakič poveča za 1
   If T > 7 Then
   T = 4
   End If

   Pcmsk2 = 0                                               'spremenljivka t določi na katerem pinu bomo čakali pulz
   Pcmsk2.t = 1


   Naprej:                                                  'resetiranje timerja
   Timer0 = 0

  Return


Če nebo šlo drugače bi lahko na pwm vhode dal rc filter, in bral vrednosti z ADC, samo nevem kakšna bi bila natančnost.

Avtor: linelKraj: prekmurje PrispevekObjavljeno: Sre Feb 27, 2013 9:56 pm    Naslov sporočila:  Programiranje v bascom avr
----------------------------------------------------------------------------
Pozdravljeni!

Rad bi povezal mikrokontrolerja med sabo, in sicer tako da bi na uc1 (oddajni) pritisnil tipko 1 za vklop oz. 2 za izklop led diode. led dioda bi pa bila na uc2 (sprejemni).

Komunikacija z terminalom deluje, ko pritisnem tipko 1 pošlje na terminal znak A ko pa tipko 2 pa znak B.

Tudi ko iz terminala pošiljam znak A se vključi led dioda, če pa kaj ostalega se pa izključi.

Tx povežem z RX. prilagam programa. zanima me pa kaj je narobe.

Koda:

oddajni mikrokontroler

$regfile = "m8def.dat"


$baud = 4800

$hwstack = 32
$swstack = 8
$framesize = 24

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

Dim A As String * 1
Dim B As String * 1
A = Chr(65)
B = Chr(66)
Do
If Pinb.0 = 1 Then
Waitms 150
Print A
Set Portb.2
End If
If Pinb.1 = 1 Then
Waitms 150
Print B
Reset Portb.2
End If


Loop




Koda:

sprejemni mikrokontroler

$regfile = "m8def.dat"

$baud = 4800

$hwstack = 32
$swstack = 8
$framesize = 24

Config Portd = Output

Dim A As String * 1

Do


    A = Waitkey()

   If A = "{065}" Then
      Set Portd.7
      Else
      Reset Portd.7
   End If

Loop


Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Sre Feb 27, 2013 10:20 pm    Naslov sporočila:  
----------------------------------------------------------------------------
IF stavek v sprejemnem delu. Ti imaš narejeno če je sprejem 65 potem vklopi portd.7, sicer ga izklopi. Torej karkoli drugega dobi RAZEN 65 ga izklopi. Imeti moraš na način:

If A = "{065}" Then Set Portd.7
If A = "{066}" Then Reset Portd.7

loop

Tako bo 65 vklopil, 66 izklopil, ostalo pa ignorira.

Avtor: linelKraj: prekmurje PrispevekObjavljeno: Sre Feb 27, 2013 10:37 pm    Naslov sporočila:  Programiranje v bascom avr
----------------------------------------------------------------------------
saj to glih hočem, zato sem dal vse kar nebo 65 izklopi led. ( tipka dva je 66 (ker ni 65 izkopi led)), mislim da je drugje nekaj narobe

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Sre Feb 27, 2013 11:28 pm    Naslov sporočila:  
----------------------------------------------------------------------------
hm...potem pa ne razumem, kaj je narobe, oziroma, kaj dela, kar ne bi smelo?

Avtor: CuleKraj: Šentjur PrispevekObjavljeno: Pon Mar 04, 2013 10:29 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Imam težavo v Bascomu.
Koda:

.....
Dim Os_x As Dword
Dim Kot_x As Dword
Dim Ux_skal As Dword
Dim Adc_x As Dword
Dim Ux As Dword

Dim X_vred As Single
Dim X As Single   
.....
Adc_x = Getadc(4)
Adc_y = Getadc(3)
Adc_z = Getadc(2)
.....
Ux_skal = Adc_x * 1000
Ux = Ux_skal / 1023
Ux = Ux * 500

Kot_x = Ux - 165000
X_vred = Kot_x / 80000

X_vred = Kot_x : X = Asin(x_vred)
X = Deg2rad(x)



To je le del programa, program deluje, težava pa je v vrstici: " X_vred = Kot_x / 80000" , saj nevem kako naj definiram spremenljivko X_vred.

Spremenljivka Ux ima lahko vrednost med 165000 pa 245000, torej bo X_vred med 0 in 1.
Iz teh vrednosti bom izračunal asin (v radijanih) in jih spremenil v stopinje in s tem dobil kot med 0 in 90°
Torej kako naj spremenim program, da bo delovalo pribljižno tako kot je napisano zgoraj.

Avtor: davyd1994Kraj: Šentjur pri Celju-Ponikva PrispevekObjavljeno: Sob Mar 09, 2013 5:58 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Imam eno tažavo. Na mikrokrmilnik bi moral naložiti iz Bascoma program ki je za demo prevelik. Dobil sem neko starejšo krekano različico, ampak ta različica mi pa noče naložiti oz. neka napaka pri povezavi. Čip je ATmega32, nalagam preko ISP, s programatorjem pololu AVR ISP.

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Sob Mar 09, 2013 6:11 pm    Naslov sporočila:  
----------------------------------------------------------------------------
a) Kupiš licenco za program (ki je, mimogrede, res presneto poceni glede na lifetime support)
b) Pošlješ komu, ki licenco ima, pa ti skompajla. To narediš, če res programiraš 1x na leto.

LP, g

(p.s. Za B opcijo lahko pošlješ tudi meni Smile

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Mar 09, 2013 11:17 pm    Naslov sporočila:  
----------------------------------------------------------------------------
davyd1994 je napisal/a:
Imam eno tažavo. Na mikrokrmilnik bi moral naložiti iz Bascoma program ki je za demo prevelik. Dobil sem neko starejšo krekano različico, ampak ta različica mi pa noče naložiti oz. neka napaka pri povezavi. Čip je ATmega32, nalagam preko ISP, s programatorjem pololu AVR ISP.


Pošlji mi .bas kodo (v .zip pod ZS) in ti jo brez problema scompilam z najnovejšo verzijo Bascoma (imam kupljeno licenco) ter pošljem nazaj.

Pa tudi če boš rabil kdaj kaj za urediti, ni problem ta minuta dela. Če pa hočeš dejansko programirati, pa je res najbolje kupiti licenco.

EDIT: Pravkar videl, da se je že mucek ponudil za compilat.

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Sob Mar 09, 2013 11:24 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Cule je napisal/a:

...
To je le del programa, program deluje, težava pa je v vrstici: " X_vred = Kot_x / 80000" , saj nevem kako naj definiram spremenljivko X_vred.

Spremenljivka Ux ima lahko vrednost med 165000 pa 245000, torej bo X_vred med 0 in 1.
Iz teh vrednosti bom izračunal asin (v radijanih) in jih spremenil v stopinje in s tem dobil kot med 0 in 90°
Torej kako naj spremenim program, da bo delovalo pribljižno tako kot je napisano zgoraj.


Kaj točno pa ne dela? Ti javi error (kakšen), ti narobe računa?

Avtor: CuleKraj: Šentjur PrispevekObjavljeno: Ned Mar 10, 2013 9:19 am    Naslov sporočila:  
----------------------------------------------------------------------------
program_er je napisal/a:

Kaj točno pa ne dela? Ti javi error (kakšen), ti narobe računa?

Je že v redu. Sem popravil. Narobe sem definiral spremenljivke pa mi je javljalo napako.

Avtor: CuleKraj: Šentjur PrispevekObjavljeno: Ned Mar 24, 2013 6:59 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tri digitalne vrednosti, najprej kvadriram in jih seštejem nato pa še vse skupaj korenim, pri tem pa mi vrže napako katero ne znam razvozlati.

Error: 35 Line: 45 - 3 parameters expected , ...
Koda:

Dim Os_x As Word
Dim Os_y As Word
Dim Os_z As Word
Dim Acc As Single
Dim S As Single
...
Os_x = Getadc(4)
Os_y = Getadc(3)
Os_z = Getadc(2)
...
Acc = Os_x ^ 2 + Os_y ^ 2 Os_z ^ 2            <-Error
S = Sqr(acc)

Avtor: gumby PrispevekObjavljeno: Ned Mar 24, 2013 7:19 pm    Naslov sporočila:  
----------------------------------------------------------------------------
+ manjka?

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Ned Mar 24, 2013 7:45 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Bascom dovoljuje v eni vrstici samo eno računsko operacijo. Torej recimo n=A+B-C ne sme biti, ampak N=A+B ter naprej N=N+C
Pa vklopi si številke vrstic. Takole se nič ne vidi katera vrstica je 45.

Avtor: tigerKraj: Škofja Loka PrispevekObjavljeno: Ned Mar 24, 2013 7:51 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Dim Os_x As Word
Dim Os_y As Word
Dim Os_z As Word
Dim Acx As Dword
Dim Acy As Dword
Dim Acz As Dword
Dim Acc As double
Dim S As Double


'///////////////////////////////////////////////////////////////////////////////
Do
Os_x = Getadc(4)
Os_y = Getadc(3)
Os_z = Getadc(2)
Acc = 0
Acx = Os_x ^ 2
Acy = Os_y ^ 2
Acz = Os_z ^ 2
Acc = Acc + Acx
Acc = Acc + Acy
Acc = Acc + Acz
S = Sqr(acc)
Loop

Bolj na počas to dela Bascom.

LP

Avtor: CuleKraj: Šentjur PrispevekObjavljeno: Ned Mar 24, 2013 8:14 pm    Naslov sporočila:  
----------------------------------------------------------------------------
protoncek je napisal/a:
Bascom dovoljuje v eni vrstici samo eno računsko operacijo.


No tega pa nisem vedel. Hvala za odgovore.

Avtor: tigerKraj: Škofja Loka PrispevekObjavljeno: Sre Apr 03, 2013 9:43 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni

Z Mega88 merim AD vrednost, vse uredu. Ko pa procesor dam v spanje + watchdog, da ga zbudim je pa AD vrednost drugačna (tudi precej razmetuje vrednosti pri isti merjeni napetosti), kot takrat, ko procesorja ne dajem v spanje. Kaj bi to bilo?

LP

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Sre Apr 03, 2013 9:55 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Sicer še nisem delal tako, ampak a ni v datasheetu napisano nekaj okoli tega da ko se zbudi, je lahko prvih nekaj meritev netočnih in jih je treba sicer prebrati, a zavreči? Nekaj časa traja, da se AD stabilizira. Poskusi v tej smeri.

Avtor: tigerKraj: Škofja Loka PrispevekObjavljeno: Sre Apr 03, 2013 9:59 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala protoncek, 5 vrednosti ADC zavržem, potem je OK.

LP

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Čet Apr 04, 2013 12:07 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Applause

Avtor: CuleKraj: Šentjur PrispevekObjavljeno: Pet Apr 05, 2013 11:29 am    Naslov sporočila:  
----------------------------------------------------------------------------
Eno vprašanje.
V Demo Bascom-AVRju prekoračim 4096 bytov kode, zato sem poskušal programirat s starejšo crackano verzijo bascoma. Program mi lepo "scompila", vendar mi po tem noče sprogramirat čip.
Ideja je, da bi program v Hex obliki s drugim programom poslal na čip, vendar ne najdem pravega programa da bi to storil.
Potrebujem pa takšnega da bi podpiral Avr ISP programatorje.

*Vem da bi lahko kupil original verzijo Bascoma, pa recimo da v tem trenutku to ni opcija.

Avtor: MesicekAKraj: KK in MB PrispevekObjavljeno: Pet Apr 05, 2013 11:34 am    Naslov sporočila:  
----------------------------------------------------------------------------
Atmel Studio 6.0 Wink

Edit: Meni podpira Darkotov AVRISPmkII programator. Smile

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Pet Apr 05, 2013 11:36 am    Naslov sporočila:  
----------------------------------------------------------------------------
Ena od varjant je optimiziranje kode in tako zmanjšaš prevedeno kodo. Zelo požrešni so texti za LCD in Print .

Avtor: anze90Kraj: Šentjur PrispevekObjavljeno: Pet Apr 05, 2013 11:44 am    Naslov sporočila:  
----------------------------------------------------------------------------
Cule je napisal/a:
Eno vprašanje.
V Demo Bascom-AVRju prekoračim 4096 bytov kode, zato sem poskušal programirat s starejšo crackano verzijo bascoma. Program mi lepo "scompila", vendar mi po tem noče sprogramirat čip.
Ideja je, da bi program v Hex obliki s drugim programom poslal na čip, vendar ne najdem pravega programa da bi to storil.
Potrebujem pa takšnega da bi podpiral Avr ISP programatorje.

*Vem da bi lahko kupil original verzijo Bascoma, pa recimo da v tem trenutku to ni opcija.


Povej, kateri programator imaš.

Avtor: zokKraj: Ponikva PrispevekObjavljeno: Pet Apr 05, 2013 11:44 am    Naslov sporočila:  
----------------------------------------------------------------------------
Tudi kotne funkcije niso cisto nedolzne.

Poigraj se z nastavitvami BascomAVR-ja, vcasih se moras malo =bati da pravilno nastavis tip in delovanje programatorja. Smile Vcasih sem uporabljal PonyPROG - ce ti v BascomAVR-ju ne uspe. Wink

Avtor: CuleKraj: Šentjur PrispevekObjavljeno: Pet Apr 05, 2013 12:02 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Uporabljam POLOLU AVR programmer - http://www.pololu.com/catalog/product/1300
in kitajski programator AVR STK500 - http://www.ebay.com/itm/Mini-ATMEL-AVR-ATMEGA-STK500-USB-ISP-Programmer-/350591415556?pt=LH_DefaultDomain_0&hash=item51a0e07504

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pet Apr 05, 2013 12:14 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Jaz vedno programiram preko AVR studia, skoraj nikoli z Bascom-ovim vmesnikom. Ne vem, nekako mi ne leži. Če uspeš narediti hex, potem sprogramiraš z AVR studio, pa je. Če ti novi ne podpira programatorja, si namesti AVR verzijo 4, ki še podpira recimo Darkotov stari programator.

Avtor: zokKraj: Ponikva PrispevekObjavljeno: Pet Apr 05, 2013 12:19 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Sam uporabljam tega: http://www.ebay.com/itm/USB-ISP-USBASP-Programmer-for-ATMEL-AVR-51-ATMega-ATTiny-ATMEGA8-ATMEGA128-/151004354206?pt=LH_DefaultDomain_0&hash=item23288f969e

Programiram direktno z BascomAVR, verzija 2.0.7.5 DEMO, in deluje zelo lepo. Kako deluje s starejsimi verzijami ne vem, glede na to da sva si dokaj blizu ti ga pa lahko posodim da ga dodobra preizkusis kako in kaj. Glede na ceno, se ga splaca kupiti ze za rezervo - jaz sem ga pred vec kot enim letom zbiddal za 4,5 USD s postnino vred, in deluje brez vsakih problemov ves ta cas - se diplomsko sem naredil z njegovo pomocjo. Laughing

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Pet Apr 05, 2013 2:17 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Fantje !

Vi lahko menjavate takšne ali drugačne programatorje, vendar če ti demo prevajalnik ne prevede več kot 4k kode je vse vaše pametovanje okoli programatorjev zastonj.

Avtor: zokKraj: Ponikva PrispevekObjavljeno: Pet Apr 05, 2013 2:32 pm    Naslov sporočila:  
----------------------------------------------------------------------------
se enkrat preberi. Wink

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Pet Apr 05, 2013 4:18 pm    Naslov sporočila:  
----------------------------------------------------------------------------
protoncek je napisal/a:
Jaz vedno programiram preko AVR studia, skoraj nikoli z Bascom-ovim vmesnikom.


Heh, tudi jaz. Če ne zaradi drugega zato, ker ti programiranje iz Bascoma eeprom povozi po defaultu Smile Pa seveda nimaš dostopa do fuse bitov itd. Je pa priročen za takrat, ko kaj aktivno razvijaš, da ne rabiš preklapljat med programi.

LP, g

Avtor: CuleKraj: Šentjur PrispevekObjavljeno: Pet Apr 05, 2013 4:27 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Sem sprogramiral preko AVR studia 4 Smile
Hvala za pomoč.

Avtor: tretjicKraj: Postojna PrispevekObjavljeno: Pet Apr 05, 2013 8:06 pm    Naslov sporočila:  
----------------------------------------------------------------------------
mucek je napisal/a:
protoncek je napisal/a:
Jaz vedno programiram preko AVR studia, skoraj nikoli z Bascom-ovim vmesnikom.

Če ne zaradi drugega zato, ker ti programiranje iz Bascoma eeprom povozi po defaultu Smile Pa seveda nimaš dostopa do fuse bitov

Zakaj pa to dvoje? Jaz nimam takih izkušenj. Mogoče odvisno od programatorja?

Avtor: MadMax PrispevekObjavljeno: Pet Apr 05, 2013 9:04 pm    Naslov sporočila:  
----------------------------------------------------------------------------
A ni ukaz $prog za fuse bite?

Avtor: davyd1994Kraj: Šentjur pri Celju-Ponikva PrispevekObjavljeno: Sob Apr 06, 2013 1:29 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Kateri ukaz naj uporabim v Bascomu da je izhod aktiven za določen čas.
Koda:
If S_la = 1 Then

 If Tempc < 22.0 Then
 Portd.6 = 1
 Else
 Portd.6 = 0
 End If

 If Tempc > 25.0 Then
 Portd.7 = 1
 Portb.1 = 1
 Else
 Portd.7 = 0
 Portb.1 = 0
 End If


End If


If S_la = 0 Then

 If S_pec = 1 Then
 Portd.6 = 1
 Else
 Portd.6 = 0
 End If

 Portd.2 = 1
 Portd.3 = 1
 Portd.4 = 1
 Portd.5 = 1

End If


Konkretno bi rad, da sta PORD.7 in PORTB.1 aktivna x sekund.
Lahko to naredim s Timer0?

Avtor: MesicekAKraj: KK in MB PrispevekObjavljeno: Sob Apr 06, 2013 1:48 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Dodaj "wait" in potem postavi ta dva pin-a na 0.

Koda:

If Tempc > 25.0 Then
 Portd.7 = 1
 Portb.1 = 1
 wait 10       //Počaka 10 sekund, ali pa waitms 10
 Portd.7 = 0
 Portb.1 = 0
 Else
 Portd.7 = 0
 Portb.1 = 0
 End If


Probaj tako Wink

Avtor: davyd1994Kraj: Šentjur pri Celju-Ponikva PrispevekObjavljeno: Sob Apr 06, 2013 2:11 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja, ampak program bo napisan tako da ko bo vrednost Tempc > 25.0 se morata izhoda aktivirati za 5 sekund, ko bo Tempc > 27.0 morata biti izhoda spet aktivna za 5 sekund in tako naprej. Če pa ostane Tempc med 25.0 in 27.0 pa izhoda nista aktivna.

Avtor: Blaz 555Kraj: Ponikva PrispevekObjavljeno: Pon Apr 08, 2013 8:26 pm    Naslov sporočila:  matrična tipkovnica
----------------------------------------------------------------------------
zdravo,

imam matrično tipkovnico 3x4 rad bi naredil ključavnico. napisal sem že nekaj programa. v programu moram uporabiti tudi ukaz getkbd ki pa mi ni jasno kako ta ukaz sploh deluje. tule pa imam program ki sem ga do sedaj napisal.

hvala

$regfile = "m8def.dat"
$crystal = 1000000
'_______________________________________________________________________________

'_______________________________________________________________________________
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.5 , Rs = Portd.6
Config Lcd = 16 * 2
'_______________________________________________________________________________
Dim Keyread As Byte
Dim Mycode As Word
Dim Code As Word
Dim Digits As Byte
Dim Point As Byte
Dim Key As Byte

Ddrd = 255
Portc = 0


Led_zelena Alias Portc.0
Led_rdeca Alias Portc.1


Config Kbd = Portb , Debounce = 40
Mycode = 1234

Do

Cls
Cursor Off Noblink
Lcd " PONIKVA"
Lowerline
Lcd " Podgaj 8a"
Wait 3

Cls

Set Led_zelena
Waitms 100
Reset Led_zelena
Waitms 100


Begin:
Code = 0
Digits = 0
Point = 0

Scan:
Cls
Lcd " Vnesite geslo"
Wait 3
Do
Keyread = Getkbd(portb)
If Keyread <> 16 Then Gosub Gotkey
Waitms 100
If Digits = 4 Then
If Code = Mycode Then
Goto Odprivrata
Else
Goto Napacno Geslo
End If
End If

Loop
Loop



Gotkey:

Set Led_zelena
Waitms 100
Reset Led_zelena
Waitms 100

Key = Lookup(keyread , Dta)


Incr Digits
Point = Digits + 6
Locate 2 , Point
Lcd "*"
Code = Code * 10
Code = Code + Key
Return

Dta:
Data 12 , 9 , 6 , 3 , 0 , 8 , 5 , 2 , 11 , 7 , 4 , 1


Napacnogeslo:

Cls
Lcd " Napacno geslo"
Waitms 100
Set Led_rdeca
Wait 3
Reset Led_rdeca
Wait 20
Goto Begin

Ok:
Waitms 100
Set Led_zelena
Waitms 200
Reset Led_zelena
Waitms 200
Set Led_zelena
Waitms 200
Reset Led_zelena
Return

Odprivrata:
Cls
Lcd " Koda sprejeta"
Gosub Ok
Lowerline
Lcd " odprto"
Waitms 300
Set Led_zelena
Wait 1
Reset Led_zelena
Wait 1
Goto Begin

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Apr 08, 2013 8:56 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ukaz getkbd ti vrne številko od 0 do 16 in je namenjen za tipkovnico 4x4. Pri tem je 16 če nobena od tipk ni pritisnjena. Potem ti vrne 0 če pritisneš 1, 1 za 2, 2 za 3, 3 za tipko desno od trojke, potem 4 za 4 itd. Saj imaš v HELP-u tipkovnico narisano. ČE ne uporabljaš skrajne desne kolone pač ne boš dobil tistih vrednosti.
Torej če je tipkovnica takale

1 2 3 F1
4 5 6 F2
7 8 9 F3
* 0 # F4

boš dobil ven vrednosti:

0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15


ter 16, če ni nič pritisnjeno.

Avtor: Blaz 555Kraj: Ponikva PrispevekObjavljeno: Pon Apr 08, 2013 9:12 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala,

Sepravi da tega ukaza ne morem uporabiti na tipkovnici 3x4. Kako pa bi potem lahko naredi da lahko spremenim in napišem geslo??

Avtor: program_erKraj: Maribor (Pohorje) PrispevekObjavljeno: Pon Apr 08, 2013 9:19 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Lahko. Odpri Help -> Index -> Config KBD

Config Kbd = Portb , Debounce = 40, Cols = 3

Sicer pa preizkusi, ker za ta način ne vem ali boš dobil:

1 2 3
4 5 6
7 8 9
10 11 12

ali

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Apr 08, 2013 9:20 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Seveda lahko, zakaj ne? Saj sem rekel, da če nimaš četrtega stoplca, ga pač ne upoštevaš. V tem primeru ukaz getkbd nikoli ne bo vrnil vrednosti 3, 7, 11 in 15 (F1 do F4), to je vse. Teh štirih ne upoštevaš, pa je.
Bereš pritisnjene tipke in jih recimo sestavljaš v en string (besedo). Potem to besedo primerjaš z obstoječo, ki je prava in si zmagal.

BTW, tipkovnico lahko s tem ukazom uporabljaš do 6x4 tipk. Preberi ukaz config kbd.

Avtor: Blaz 555Kraj: Ponikva PrispevekObjavljeno: Pon Apr 08, 2013 10:30 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala,
za pomoč sem rešil problem Very Happy

Avtor: CuleKraj: Šentjur PrispevekObjavljeno: Pon Sep 02, 2013 6:33 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni!
Zanima me ali v Bascom-AVRju obstaja ukaz, ki bi nekako razdelil določen port na "leve" 4 in "desne" 4 bite (&B1111_0000) ? Nekaj takšnega bi lahko bil ukaz BCD, vendar mi z njim ne uspe.

Delam uro s 7-segmentnimi led displeji, le te pa krmilim z BCD dekoderji. tako za 2 displeja porabim le 1 port (PortA).

Pri pisanju programa pa zaradi tega pride do težav, saj zaradi tega ne morem normalno prikazovati na displeje.
Za vsak displej moram imeti napisano svojo konfiguracijo (beri ukaz DATA), da se bodo prižigali pravi segmenti. Pri enem jasno ni problema, pri dveh na enem portu pa seveda na gre.
Kako rešiti ta problem?

Koda:
Digit_1:
Data &B00000000 , &B00001000 , &B00000001 , &B00001001 , &B00000010 , &B00001010 , &B00000011 , &B00001011 , &B00000100 , &B00001100
          '0            1            2            3            4            5            6            7            8            9

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Sep 02, 2013 7:37 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Lahko poskusiš z ukazom XOR. Izhode lahko tudi bereš!
Torej port a preberreš z ukazom pina, potem pa gornje tri z XOR blindiraš. Recimo če gornje 4 želiš pustiti tako, kot so in recimo prebereš 0110, na spodnje štiri pa želiš zapisati 1100, potem gornje štiri bindiraš: najprej prebereš port a:

A=pina
B=A XOR &B00000000
B tako postane gornji del 0110, spodnje štiri pa so prejšnje stanje.

Potem spodaj dodaš novo vrednost, ki jo želiš vpisati na spodnje 4 bit(torej 1100):

V c recim vpišeš željeno novo stanej spodnjega dela:
C=&B00001100

B=B XOR C
Tako b postane: gornji del ostane 0110, spodnji pa 1100
Zdaj samo še vpišeš na port
Porta=b

Tole je na hitro samo bistvo, lahko da je narobe...malce preštudiraj. Upam, da veš, kako deluje XOR

Avtor: CuleKraj: Šentjur PrispevekObjavljeno: Pon Sep 02, 2013 7:54 pm    Naslov sporočila:  
----------------------------------------------------------------------------
protoncek je napisal/a:
Upam, da veš, kako deluje XOR

Vem, vem. Bom preštudiral in sporočim če deluje.

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Sep 02, 2013 8:04 pm    Naslov sporočila:  
----------------------------------------------------------------------------
No, lahko seveda pišeš tudi na vsak pin posebej: porta.0=, porta.1=...
Preveri, kaj je hitreje.

Avtor: CuleKraj: Šentjur PrispevekObjavljeno: Pon Sep 09, 2013 4:42 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Zanima me kako lahko na ATmega 16 izključim JTAG port, da bom lahko PORTC uporabil normalno kot vhod/izhod.
Bral sem datasheete a mi ni čisto jasno kako, oziroma kje to naredim. Ko gledam po fuse-ih nikjer ne najdem OCDEN in JTAGEN fuse, katera naj bi bila onemogočena. Programiram v Bascom-avr, čip pa prepoznam s pomočjo Studia 4. Uporabljam AVR ISP programator (STK500).

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Sep 09, 2013 4:45 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Med fusebiti MORA biti eden z imenom JTAGEN. Z stk500 lahko pogledaš fusebite tudi direktno v bascomu

Avtor: SirijKraj: Središče ob Dravi PrispevekObjavljeno: Pon Dec 16, 2013 10:33 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni.
Sem nov v programiranju v Bascomu. V bistvu je to moj prvi bolj resen primer...
Z Attiny2313 hočem krmiliti koračni motor. Zadeva deluje tako, da ko pritisnem tipko na portd.4, se začne vrteti ''nazaj'', ko pa pritisnem tipko na portd.2, pa se motor začne vrteti ''naprej''. Toda če zopet pritisnem tipko na portd.4, se motorju smer vrtenja ne spremeni, ampak ostane enaka kot pri pritisku na portd.2. V čem je štos? Še koda.
Koda:
$crystal = 1000000
$regfile = "ATtiny2313.dat"
$hwstack = 32
$swstack = 8
$framesize = 32


Dim Premor As Long

Config Portb = Output
Config Pind.2 = Input
Portd.2 = 1
Config Pind.4 = Input
Portd.4 = 1

On Int0 Int0_sub
Config Int0 = Change
Enable Int0

On Int1 Int1_sub
Config Int1 = Change
Enable Int1
Enable Interrupts

Premor = 10

Do
   Debounce Pind.2 , 0 , Naprej , Sub
   Debounce Pind.4 , 0 , Nazaj , Sub
Loop
End


Int0_sub:
   Debounce Pind.2 , 0 , Naprej , Sub
Return

Int1_sub:
   Debounce Pind.4 , 0 , Nazaj , Sub
Return

' pol koraka
Naprej:
   Do
      Portb = &B11111101
      Waitms Premor
      Portb = 0

      Portb = &B11110101
      Waitms Premor
      Portb = 0

      Portb = &B11110111
      Waitms Premor
      Portb = 0

      Portb = &B11110011
      Waitms Premor
      Portb = 0

      Portb = &B11111011
      Waitms Premor
      Portb = 0

      Portb = &B11101011
      Waitms Premor
      Portb = 0

      Portb = &B11101111
      Waitms Premor
      Portb = 0

      Portb = &B11101101
      Waitms Premor
      Portb = 0
   Loop
Return

Nazaj:
   Do
      Portb = &B11101101
      Waitms Premor
      Portb = 0

      Portb = &B11101111
      Waitms Premor
      Portb = 0

      Portb = &B11101011
      Waitms Premor
      Portb = 0

      Portb = &B11111011
      Waitms Premor
      Portb = 0

      Portb = &B11110011
      Waitms Premor
      Portb = 0

      Portb = &B11110111
      Waitms Premor
      Portb = 0

      Portb = &B11110101
      Waitms Premor
      Portb = 0

      Portb = &B11111101
      Waitms Premor
      Portb = 0
   Loop
Return


Izkušenejše v programiranju tudi prosim, če malo pregledajo program in ga pokomentirajo.
Lep pozdrav,
Mitja

Avtor: malciKraj: Polhov Gradec PrispevekObjavljeno: Tor Dec 17, 2013 7:04 am    Naslov sporočila:  
----------------------------------------------------------------------------
Ob pritisku na tipko ti program skoči v podprogram, iz njega pa zaradi do-loop zanke ne zna. Uporabi do-loop-until zanko.

Pa tudi v glavi ti manjka deklariranje podprogramov (declare sub. ...)

Lp
Uroš

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Tor Maj 27, 2014 5:17 pm    Naslov sporočila:  
----------------------------------------------------------------------------
zdravo ker sem (popoln) začetnik me zanima če bi lahko nekdo bolj po domače razložil kako lahko sprogramiram da naprimer tipka 1 (PORTB.0) ob pritisku nanjo vklopi LED1 (PORTD.0) in ko pritisnem še enkrat da jo izklopi.

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Tor Maj 27, 2014 5:46 pm    Naslov sporočila:  
----------------------------------------------------------------------------
mato1111 je napisal/a:
zdravo ker sem (popoln) začetnik me zanima če bi lahko nekdo bolj po domače razložil kako lahko sprogramiram da naprimer tipka 1 (PORTB.0) ob pritisku nanjo vklopi LED1 (PORTD.0) in ko pritisnem še enkrat da jo izklopi.


Koda:

tipka alias pinb.0
led1 alias portd.0
config tipka = input
config led1 = output

do
   debounce tipka,0,tipkasr,SUB
loop

tipkasr:
   toggle led1
return


Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sob Avg 30, 2014 7:14 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Koda:
Dim Number As Eram String * 13 At 10


Mi lahko kdo pojasni kakšen pomen ima tukaj At 10 ?

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Sob Avg 30, 2014 7:34 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Če se ne motim je to direktna lokacija, kje naj se nahaja spremenljivka, oziroma od kje naprej naj se nahaja. V konkretnem primeru se bo spremenljivka "number" začela v EEPROMu od lokacije 10 naprej. Ker je to string dolžine 13 znakov, bo zasedel 14 mest, torej od 10 do 23. (14 zato ker je pri stringu vedno še en dodatni bajt, ki označuje konec stringa).

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sob Avg 30, 2014 7:41 pm    Naslov sporočila:  
----------------------------------------------------------------------------
aha se pravi če hočem v eeprom dodati še number2 in number3 dolžine 13 znakov moram narediti tako?
Koda:
Dim Number As Eram String * 13 At 10
Dim Number2 As Eram String * 13 At 24
Dim Number3 As Eram String * 13 At 38


Nazadnje urejal/a mato1111 Sob Avg 30, 2014 8:37 pm; skupaj popravljeno 1 krat

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Sob Avg 30, 2014 7:59 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tako nekako. Čeprav niti ne vem, zakaj bi bilo to potrebno...saj bascom sam določa, kam shraniti definirane spremenljivke (na prvo prosto mesto), tako da bi bilo v redu tudi brez vseh teh "AT" . Edino kar je treba pazit je to da če kasneje dodaš spremenljivko, jo dodaj na koncu definicij, ne pa na začetku ali na sredini, ker bi se v tem primeru shranjene vrednosti izgubile - pomešale. To velja v primeru, da imaš že delujočo aplikacijo, pa se odločiš, da bi dodal neko funkcijo...

Jaz bi v tvojem primeru naredil samo takole:
Koda:

Dim Number As Eram String * 13
Dim Number2 As Eram String * 13
Dim Number3 As Eram String * 13


Potem ob prvem programiranju čipa v fusebitih omogočiš funkcijo "preserve EEPROM", tako da ob kasnejšem ponovnem programiranju (popravljanju programa) ohrani vsebino eeproma.

Ne vem, jaz bi rekel da je to uporabno recimo če imaš kakšen kos programa napisan v strojni kodi in le-ta piše direktno v eeprom. V tem primeru moraš seveda vedeti, kje to prebrati v bascomu. Sicer je nepotrebno kompliciranje.

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Sob Avg 30, 2014 8:39 pm    Naslov sporočila:  
----------------------------------------------------------------------------
mato1111 je napisal/a:
Koda:
Dim Number As Eram String * 13 At 10


Mi lahko kdo pojasni kakšen pomen ima tukaj At 10 ?


Določanje direktne pozicije spremenljivke v Eramu ima redko smisel.
Ima pa smisel relativno repozicioniranje spremenljivke.

Primer:
Koda:
dim tekst as eram string*20
dim znaki(21) as eram byte at tekst overlay

Na ta način definiram bajte v samem tekstualnem nizu in lahko recimo z
Koda:
znaki(3)
naslovim tretji znak v tekstu.

Seveda gre to tudi brez Erama, v ramu. Celo bolj pogosto se to uporablja v Ramu, kot Eramu.

Osebno, tako vedno sestavljam niz bajt po bajt, ko pride na vhodna vrata UART in ga prestrežem z prekinitvenim podprogramom.
Ko zaznam, da je prišel bajt &H0D ga predelam v &H00 kar pomeni konec niza in potem cel niz predam v obdelavo glavnemu programu.

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Sob Avg 30, 2014 9:50 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Citiram:
Osebno, tako vedno sestavljam niz bajt po bajt, ko pride na vhodna vrata UART in ga prestrežem z prekinitvenim podprogramom.


Vilko, za tole idejo ti pa čestitam! Sam se nikoli ne bi spomnil tega sistema. Tako imaš zelo hitro in priročno sestavljen prejet string.... človek vedno izve kaj novega...

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Avg 31, 2014 12:31 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Imam enostaven program ki mi preko UART-a izpisuje na terminal na PC-ju stanje vhoda (vklopljen ali izklopljen).
To naredi vsakič ko gre skozi zanko. Rad pa bi naredil tako da bi mi poslal tekst samo ob spremembi stanja iz 0 v 1 oz. iz 1 v 0, torej ko bi se vhod sklenil bi napisal tekst "vhod sklenjen" samo 1x potem pa bi čakal dokler se vhod ne razklene in potem bi poslal tekst vhod razklenjen.

Koda:
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600

$hwstack = 32
$swstack = 8
$framesize = 24

Config Portb.1 = Input

Vhod Alias Portb.1

Do

If Vhod = 1 Then
Print "Vhod sklenjen"
End If

If Vhod = 0 Then
Print "Vhod razklenjen"
End If

Loop

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Ned Avg 31, 2014 12:37 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Se pravi, da ob spremembi na vhodu želiš reakcijo, obvestilo.
Spremembo zaznaš lahko le, če si v neki variabli beležiš staro stanje in ga ob branju novega stanja na vhodu primeraš ali je prišlo do spremembe, in takrat reagiraš in si v variabil ponovno zapomniš staro stanje za primerjanje.

Koda:
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600

$hwstack = 32
$swstack = 8
$framesize = 24

Config Portb.1 = Input

Vhod Alias Portb.1
dim ss as bit   ' staro stanje

Do

If Vhod = 1 and ss = 0 Then
Print "Vhod sklenjen"
ss = 1
End If

If Vhod = 0 and ss = 1 Then
Print "Vhod razklenjen"
ss = 0
End If

Loop

Avtor: tigerKraj: Škofja Loka PrispevekObjavljeno: Ned Avg 31, 2014 12:40 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Dodaj if stavek, ki preverja, če je nov dogodek enak prejšnemu, če ni se izpiše nekaj, če je enako, se nič ne izpiše. Enostavno.

LP

Avtor: SirijKraj: Središče ob Dravi PrispevekObjavljeno: Sob Sep 06, 2014 3:49 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Že nekaj časa se ukvarjam z uporabo pin change interrupta. Zgledoval sem se po primeru, ki sem ga našel v Bascomovi pomoči (v kodi spodaj je vsavljen med blok komentar), vendar mi bascom v vrstici 24 javi napako 117 (Unknown interrupt [PCINT0]), v vrstici 26 pa napako 85 (Uknown interrupt source [PCINT0]). Namen programa je, da ob pritisku na tipko na pinb.0 prekine utripanje ledice na pinb.1 in za 1 s prižge ledico na pinb.2. Kje je težava?


Koda:

$crystal = 10000000
$regfile = "ATtiny2313.dat"
$hwstack = 32
$swstack = 8
$framesize = 32
Config Clockdiv = 1


Config Pinb.2 = Output
Pinb.2 = 1
Config Pinb.1 = Output
Pinb.1 = 1

'(
Pcmsk = &B00000001                                          'PIN Change Int
ON PCINT0 pin_change_isr
Set Gimsk.5
Enable  Interrupts
')


Pcmsk = &B00000001
On Pcint0 Pcint0_rutina
'Set Gimsk.1
Enable Pcint0
'Enable Interrupt

Do

   Pinb.1 = 0
   Waitms 100
   Pinb.1 = Not Pinb.1

Loop
End

Pcint0_rutina:
   Pinb.1 = 1
   Pinb.2 = 0
   Wait 2
   Pinb.2 = 1
Return

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Sob Sep 06, 2014 6:18 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tiny2313 ima samo en port ki ima PCINT.
Poskusi spremeniti PCINT0 v PCINT, bi moralo delati.

LP

Avtor: SirijKraj: Središče ob Dravi PrispevekObjavljeno: Sob Sep 06, 2014 7:57 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Najlepa hvala. Bom preizkusil.

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Ned Sep 07, 2014 2:07 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tako dela:

Koda:

On Pcint0 Isr_pcint0                                        'we jump to this label when one of the pins is changed
Pcmsk0 = &B00011011                                         'enable pcint0-pcint3  (portb.0-portb.3)
Eimsk = 0
Eicra = &B00000010                                          'rising edge generates interrupt
Enable Pcint0                                               'we enable pcint0 as this has pcint0-pcint7

enable interrupts

'*******************************************************************************
Isr_pcint0:
 Disable Pcint0

  ' tu naredi nekaj
  Enable Pcint0
Return
'*******************************************************************************


Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Ned Sep 07, 2014 3:06 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Rudi,
ali si tole preizkusil za Tiny2313?
Pri meni prijavi enako napako kot jo je opisal predhodnik (Bascom 2077).
ATiny2313 nima PCINT0, PCINT1 . . ., ima samo PCINT
LP

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Sep 07, 2014 3:13 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Imam izsek iz programa za pošiljanje/prejemanje sms ki mi deluje z eno tel. številko.
Narejen je tako da ko pošljem sms z geslom microcontroller1 si zapomni mojo tel. številko.
Rad bi ga predelal tako da bi si z geslom microcontroller2 zapomnil še drugo številko,
in potem pošiljal povratni sms na tisto številko s katere je dobil sms z ukazom. nekaj sem poizkušal tako da sem dodal Dim Number2 As Eram String * 13 At 24, Dim Pass_stored2 As String vendar ne deluje. prilagam original izsek programa.

Prosim za kakšen nasvet - usmeritev kaj bi moral spremeniti

Koda:

Dim Number As Eram String * 13 At 10
Dim Num As String * 80
Dim Msg As String * 160
Dim Inmsg As String * 160
Dim Gps As Byte
Dim Pass_stored As String * 13


Koda:
 Pass_stored = Number


Koda:
 Print "AT"
      Wait 2
      Print "AT+CMGF=1"                                     'Sprememba v text mode
      Wait 2
      Print "AT+CMGR=1"                                     ' get the message
      Getline

      If Inmsg <> "OK" Then
         Rled = 1
         Gled = 1
         Num = Inmsg
         Getline
         Gps = Split(num , Ar(1) , ",")
         Num = Ar(2)
         Gps = Len(num)
         Gps = Gps - 2
         Num = Mid(num , 2 , Gps)
         Inmsg = Lcase(inmsg) 

 If Inmsg = "microcontroller1" Then                  'Geslo za shranitev številke
             Pass_stored = Num
             Number = Pass_stored
             Msg = "Password 1 Accepted"
             Send_sms

         Elseif Num = Pass_stored Then
             If Inmsg = "light on" Then
                Relay1 = 1
                Status1 = 1
                Num = Pass_stored
                Msg = "Light Switched ON"
                Send_sms
             Elseif Inmsg = "light off" Then
                Relay1 = 0
                Status1 = 0
                Num = Pass_stored
                Msg = "Light Switched OFF"
                Send_sms   



Koda:
 Sub Send_sms
       Rled = 1
          Wait 3
          Print "AT+CMGS=" ; Chr(34) ; Num ; Chr(34)        'pošlji SMS
          Waitms 200
          Print Msg ; Chr(26)
          Wait 5
          Print "AT"
          Wait 2
       Rled = 0
End Sub 


Koda:

 Sub Getline
 Inmsg = ""
 Do
    Gps = Inkey()
    If Gps > 0 Then
       Select Case Gps
        Case 13 : If Inmsg <> "" Then Exit Do               ' Če kaj dobimo
        Case 10 : If Inmsg <> "" Then Exit Do               ' Če kaj dobimo
        Case Else
            Inmsg = Inmsg + Chr(gps)                        ' Naredi string
        End Select
    End If
 Loop

End Sub   

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Ned Sep 07, 2014 3:53 pm    Naslov sporočila:  
----------------------------------------------------------------------------
[quote="Vlado"]Rudi,
ali si tole preizkusil za Tiny2313?
Pri meni prijavi enako napako kot jo je opisal predhodnik (Bascom 2077).
ATiny2313 nima PCINT0, PCINT1 . . ., ima samo PCINT
LP[/quote

ne vem zakaj uporabljate najmanjši od najmanjših AVRjev. Razlika v ceni ne pokrije
zaj......., kiatero imaš pri implementiranju vseh želja.

preizkušeno deluje na ATMEGA644P.

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Ned Sep 07, 2014 4:09 pm    Naslov sporočila:  
----------------------------------------------------------------------------
ammm...zato, ker ga ima(mo) doma, ostalo bi pa moral kupiti? ali pa mogoče zato, ker je mega644 dimenzijsko bogato večja od tiny-a?

poleg tega je neumno dajati 64k kontroler za 1k kode... tiny-a ni prav nič bolj za=bano programirati kot vse ostale. Kot tudi pri megi644 in ostalih moraš pri tiny-u narediti domačo nalogo in pogledati, kaj ima in kaj nima, pa gre brez problema.

in, nazadnje ...ne vem, če je cena tiny-a slaba dva evra ravno NEPOMEMBNO manjša od mege644, ki stane dobrih 11.24 (cene HTE). OK; če ti ni problem denar metati stran, potem izvoli, ampak mislim da je vseeno manj za=bancije izbrisati ničlo pri INT kot plačati 5x več za mego...

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Ned Sep 07, 2014 4:50 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Vse je res, ampak ko pride debata na ceno, je ATmega8 (ebay varianta - cena pod 1$!) cenejša od vsakega Tinyja ... Resda me vsakič boli srce, ko dam M8 za kakšno malenkost, ki ima par 10 vrstic kode, a vseeno ...

Tinyji dejansko imajo par grdih "fint", ki jih seveda pogruntaš, ko študiraš datasheet in ugotavljaš, zakaj ti nekaj ne dela ... Smile

@Mato:
Narediti moraš dodatne stringe za dodatne številke in narediti preverjanje (OR) za vse številke. Spodaj kratek odsek s komentiranimi deli, ki sem jih spremenil

Koda:

If Inmsg = "microcontroller1" Then                  'Geslo za shranitev številke
             Pass_stored = Num
             Number = Pass_stored
             Msg = "Password 1 Accepted"
             Send_sms
'   Elseif Inmsg = "microcontroller2" Then
'             Pass_stored2 = Num
'             Number2 = Pass_stored2
'             Msg = "Password 1 Accepted"
'             Send_sms


'         Elseif Num = Pass_stored Or Num = Pass_stored2 Then
             If Inmsg = "light on" Then
                Relay1 = 1
                Status1 = 1
                Num = Pass_stored
                Msg = "Light Switched ON"
                Send_sms
             Elseif Inmsg = "light off" Then
                Relay1 = 0
                Status1 = 0
                Num = Pass_stored
                Msg = "Light Switched OFF"
                Send_sms


LP, Gregor

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Sep 07, 2014 4:56 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala bom preizkusil

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Ned Sep 07, 2014 5:07 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ne bi smetil v temi, zato raje privat vprašam...me zanima pri katerem trgovcu si kupil mege...namreč, na ebayu je menda lahko tvegano...zaradi fake-ov...

LP; Pavle

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Sep 07, 2014 5:30 pm    Naslov sporočila:  
----------------------------------------------------------------------------
5x ATMEGA328P-PU za 11$ Mr. Green

@mucek

Hvala sedaj mi sprejme oba uporabnika Wink
Vendar vsi povratni sms-i hodijo samo na uporabnika ki zasede "number", in ko z prvim vklopim izhod ga z drugim nemorem izklopiti in obratno

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Ned Sep 07, 2014 7:33 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pripni kodo da ne ugibamo kaj si naredil.
LP

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Sep 07, 2014 7:43 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Spremenil sem tako kot je rekel @mucek. V programu sem spremenil/dodal samo to kar sem pripel spodaj.

Koda:
Dim Number As Eram String * 13 At 10
Dim Number2 As Eram String * 13 At 24

Koda:
Dim Pass_stored As String * 13
Dim Pass_stored2 As String * 13

Koda:
If Inmsg = "microcontroller1" Then                 'Geslo za shranitev številke
             Pass_stored = Num
             Number = Pass_stored
             Msg = "Password 1 Accepted"
             Send_sms
         Elseif Inmsg = "microcontroller2" Then
             Pass_stored2 = Num
             Number2 = Pass_stored2
             Msg = "Password 2 Accepted"
             Send_sms


         Elseif Num = Pass_stored Or Num = Pass_stored2 Then
             If Inmsg = "light on" Then
                Relay1 = 1
                Status1 = 1
                Num = Pass_stored
                Msg = "Light Switched ON"
                Send_sms
             Elseif Inmsg = "light off" Then
                Relay1 = 0
                Status1 = 0
                Num = Pass_stored
                Msg = "Light Switched OFF"
                Send_sms

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Ned Sep 07, 2014 7:49 pm    Naslov sporočila:  
----------------------------------------------------------------------------
protoncek je napisal/a:
ammm...zato, ker ga ima(mo) doma, ostalo bi pa moral kupiti? ali pa mogoče zato, ker je mega644 dimenzijsko bogato večja od tiny-a?

poleg tega je neumno dajati 64k kontroler za 1k kode... tiny-a ni prav nič bolj za=bano programirati kot vse ostale. Kot tudi pri megi644 in ostalih moraš pri tiny-u narediti domačo nalogo in pogledati, kaj ima in kaj nima, pa gre brez problema.

in, nazadnje ...ne vem, če je cena tiny-a slaba dva evra ravno NEPOMEMBNO manjša od mege644, ki stane dobrih 11.24 (cene HTE). OK; če ti ni problem denar metati stran, potem izvoli, ampak mislim da je vseeno manj za=bancije izbrisati ničlo pri INT kot plačati 5x več za mego...


Protonček: rekel sem samo, da pripeta koda na atmega644p dela. Tega uporabljam ker ima dva serijska kanala. Izbor mikrota pa je vsekakor osebna odločitev.

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Ned Sep 07, 2014 8:01 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Narobe. Ti si samo objavil kodo, kjer se ne vidi tip kontrolerja in napisal "takole dela". Govora je bilo o Tiny2313, kar posledično pomeni da to ni res, saj koda NE dela na tem procesorju. Da gre za mego644 si povedal šele potem, ko te je Vlado vprašal...
Izbor mikrota je seveda osebna odločitev, samo jaz sem dobil občutek, da nekdo nekomu vsiljuje mego644 za 6xno ceno tiny-a...

BTW...se opravičujem za zgornji post, mišljen je bil privatno mucku, na koncu pa je izpadlo točno to, kar nisem hotel: smetenje teme...

Kar je tudi tole vse skupaj, tako da bom kar nehal.

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Ned Sep 07, 2014 8:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
No, pa bom še jaz malo posmetil, da odgovorim, ker bo mogoče odgovor zanimiv še ostalim ... Wink

Na eBayu je najti kar precej AVRjev (predvsem "popularne" modele: ATmega8, ATmega16, ATmega128 ...) za dobro ceno (dosti boljšo, kot se jo da dobiti preko uradnih dobaviteljev, tudi za večje količine!!!). Po mojih izkušnjah za hobi projekte ti procesorčki povsem ustrezajo, saj se mi še ni zgodilo, da kateri od njih ne bi delal ali kaj podobnega.

AMPAK!!! Ne kupujte teh procesorjev, če želite delati zadeve industrijsko (PnP, peč), saj zna priti do "hecnih" situacij. Problema sta dva: nekontrolirana vlaga in pa oksidacija kontaktov. Prvo lahko privede do tega, da se pri PnP postopku med peko v pečici procesorček "napihne" kot balon! (brez heca!!!), drugo pa seveda do mrzlih lotov in nezanesljivih spojev. Moj občutek je, da gre za procesorje, ki niso prestali kakšnih internih kontrol.

Lp, g

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Ned Sep 07, 2014 8:27 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Citiram:
Elseif Num = Pass_stored Or Num = Pass_stored2 Then
If Inmsg = "light on" Then
Relay1 = 1
Status1 = 1
Num = Pass_stored
Msg = "Light Switched ON"
Send_sms
Elseif Inmsg = "light off" Then
Relay1 = 0
Status1 = 0
Num = Pass_stored
Msg = "Light Switched OFF"
Send_sms

V peti in enajsti vrstici si določil da se bo SMS poslal na prvo shranjeno številko.
Zakaj pa to, če že na začetku preverjaš ali je številka enaka shranjeni številki ena ali shranjeni številki dve.
Te vrstice so odveč, če to odstraniš bo SMS šel na številko ki je poslala SMS (seveda če je shranjena v EEP), tako kot je zdaj gre vedno na prvo številko.

Drugič ko pripenjaš kodo pripni celotno da se ne sprehajamo nekaj strani nazaj da bi videli kaj počne program.

LP

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Čet Sep 11, 2014 9:34 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala @Vlado deluje Dancing

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sob Sep 13, 2014 6:58 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Zdravo

Mogoče kdo ve kako se naredi sprejem oz. zavrnitev klica ?

L.p.

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Sob Sep 13, 2014 7:29 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Mato,
določene stvari si boš zapomnil samo če jih boš prebral (tudi večkrat če je treba).
Poišči na Simcom-ovi strani dokument AT command V105 (ali nasplošno AT command), tam vse piše, zraven boš našel še veliko uporabnih ukazov.
Poišči razlago za ukaze ATH in ATA.
LP

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Čet Sep 25, 2014 5:25 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Zdravo

Na UART dobim niz +xxxx:xxxxx...

Kateri način je boljši za nadaljno uporabo prvih 6 znakov z ukazom left ali z ukazom instr ?

l.p.

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Čet Sep 25, 2014 5:42 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Gre za različna ukaza: en ti vzame iz leve strani stringa x karakterjev in jih kopira v drug string, drugi pa ti vrne pozicijo nekega iskanega podstringa v večjem stringu.
Beri help ...

Lp, g

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Čet Sep 25, 2014 5:46 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala @mucek

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Pet Sep 26, 2014 11:20 am    Naslov sporočila:  
----------------------------------------------------------------------------
Mi lahko kdo prosim pojasni razliko med primerom 1 in primerom 2. Prvi mi deluje drugi pa ne vendar v obeh primerih iščem RING. Drugi primer je iz MCS spletne strani

Inmsg je kar prejmem preko UART

Primer 1:
Koda:

If Inmsg = "RING" Then
         Print "ATH"
         Rele1 = 0
         Wait 5
         Rele1 = 1
End if


Primer2:
Koda:

I = Instr(inmsg , "RING")                             ' look for CLIP
      If I > 0 Then                                         'found it
         Print "ATH"
         Rele1 = 0
         Wait 5
         Rele1 = 1
      End If

Avtor: oobucoKraj: Šentvid pri Stični PrispevekObjavljeno: Pet Sep 26, 2014 11:26 am    Naslov sporočila:  
----------------------------------------------------------------------------
V prvem mora biti Inmsg točno enak stringu RING

v drugem pa mora inmsg vsebovati substring RING

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Pet Sep 26, 2014 11:27 am    Naslov sporočila:  
----------------------------------------------------------------------------
hvala.
Imaš mogoče kakšno idejo zakaj mi primer 2 ne deluje? Preko uart namreč dobim samo ukaz RING

Avtor: oobucoKraj: Šentvid pri Stični PrispevekObjavljeno: Pet Sep 26, 2014 11:34 am    Naslov sporočila:  
----------------------------------------------------------------------------
Res že dolgo nisem delal v Bacomu in nisem prepričan v par stvari.

Ali je Inmsg zanesljivo ista spremenljivka kot inmsg, mogoče je case sensitive.


Ali je index prvega znaka zanesljivo 1 in 0 pomeni nisem našel ali je mogoče index prvega znaka 0 pa -1 pomeni nisem našel, ker potem bi moralo biti I>=0 ali pa I<>-1.

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Čet Okt 30, 2014 7:50 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Mi lahko kdo prosim malo pomaga pri uporabi ADC-ja? Imam Mega8

Rad bi meril napetost do 12,5V (DC)
Vem da moram uporabiti napetostni delilnik iz 12,5V na 5V

Ne vem pa kaj moram uporabiti v programu kot REFERENCE

Avtor: red_mambaKraj: Yogyakarta PrispevekObjavljeno: Čet Okt 30, 2014 8:02 pm    Naslov sporočila:  
----------------------------------------------------------------------------
mato1111 je napisal/a:
Mi lahko kdo prosim malo pomaga pri uporabi ADC-ja? Imam Mega8

Rad bi meril napetost do 12,5V (DC)
Vem da moram uporabiti napetostni delilnik iz 12,5V na 5V

Ne vem pa kaj moram uporabiti v programu kot REFERENCE


ce delis napetost z 4 ti bo predstavljalo 20V na vhodu full scale ce bo referenca 5V.
ce lahko nastavis referenco recimo 4V bo 16V na vhodu full scale....

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Čet Okt 30, 2014 8:12 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Mega8 ima notranjo refernco 2.56V ali pa zunanjo, ki jo lahko pripelješ na aref pin. Najenostavneje pa je če izbereš avcc in je kot referenca napajanje čipa. Seveda moraš pri tem imeti čimbolj stabilno 5V napajanje. Torej pri config daj reference = Avcc, pa napetostni delilnik. Če ga boš izračunal tako, da bo vrednost 1000enaka 5V, bo to kar OK. Jaz ponavadi za take stvari dam kar multiturn trimer, s katerim nastavim delilnik.

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Pet Okt 31, 2014 5:40 pm    Naslov sporočila:  
----------------------------------------------------------------------------
hvala Smile

Rabim kak namig...
V Glavni prog. zanki sem dodal kontrolo vhodov. Na vhodu je stalno "brika" ko pa se razklene mi štarta podprogram. Narejeno je tako, da mi podprogram štarta samo 1x
ss3 je staro stanje vhoda
Koda:

            If Vhod3 = 1 And Ss3 = 0 Then
               Alarm_sprozen
               Ss3 = 1
            End If
            If Vhod3 = 0 And Ss3 = 1 Then
               Ss3 = 0
            End If


Imam problem da mi ne deluje Brick wall

Če pa naredim v zanki še zanko za vhode mi vhodi delujejo vendar mi ostalo v glavni zanki ne deluje Brick wall

Avtor: simeonKraj: Šentjernej PrispevekObjavljeno: Pet Okt 31, 2014 7:08 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Kaj pa da bi naredil prekinitev ob 0? Potem bi v prekinitvenem programu zapisal samo en if stavek.

Koda:

If  Ss3 = 0 Then
Alarm_sprozen
Ss3 = 1
End If

Avtor: tigerKraj: Škofja Loka PrispevekObjavljeno: Ned Nov 02, 2014 12:42 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Raziskujem xmego, ko hočem uporabit zunanji quartz mi ne dela xmega.
Takole imam nastavitve za quartz, prosim, kaj sem spregledal?

$regfile = "xm128a3def.dat"
$crystal = 16000000
$hwstack = 64
$swstack = 64
$framesize = 64

$lib "xmega.lib"
$external _xmegafix_clear
$external _xmegafix_rol_r1014
Config Portf = Output

Config Osc = Disabled , Extosc = Enabled , Range = 12mhz_16mhz '32MHz

Config Sysclock = External , Prescalea = 1 , Prescalebc = 1_1


Config Com1 = 38400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8

Open "COM1:" For Binary As #1

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Ned Nov 02, 2014 2:28 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Fusebite si nastavil na zunanji kvarc? Zdajle se ne spomnim natanko, a se mi zdi da je to treba nastavit...

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sob Nov 15, 2014 11:20 am    Naslov sporočila:  
----------------------------------------------------------------------------
Mi lahko kdo pomaga kaj delam narobe?
Ko se vhod1 prvič sklene mi mora poslati sms. Potem se lahko še 240x sklene vendar mi nebi smel poslati sms-a. Vhod se bo sklenil vsako minuto vendar nočem da mi pošilja sms vsako minuto, ampak enkrat na 240 ciklov.

Sedaj pa mi pošlje sms vsakič ko se vhod sklene

Koda:

If Vhod1 = 1 And Ss1 = 0 Then
    Stetje
    Ss1 = 1
Elseif Vhod1 = 0 And Ss1 = 1 Then
    Ss1 = 0
End if

Sub Stetje
    Incr A
    If A = 1 Then
       Num2 = Pass_stored
       Msg = "240x sklenjeno"
       Send_sms
    Elseif A = 240 Then
       A = 0
    End If
End Sub


Nazadnje urejal/a mato1111 Sob Nov 15, 2014 11:48 am; skupaj popravljeno 1 krat

Avtor: tigerKraj: Škofja Loka PrispevekObjavljeno: Sob Nov 15, 2014 11:47 am    Naslov sporočila:  
----------------------------------------------------------------------------
Manjka ti zaključek ( End If ) prvega If stavka.

LP

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sob Nov 15, 2014 11:51 am    Naslov sporočila:  
----------------------------------------------------------------------------
hvala, pozabil sem skopirat tu notri Mr. Green

Avtor: igo PrispevekObjavljeno: Sob Nov 15, 2014 1:48 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Oba "Elseif" nadomesti samo z "If". Seveda mora imeti tudi vsak svoj "End if".

Dodano:
Če sporočilo "240x sklenjeno" pomeni, da se mora prvi sms poslati šele po 240 impulzih, prestavi pošiljanje v tisti pogoj:

if A=240 then
pošiljanje sms-a
A=0
end if

Trenutno je narejeno tako, da se sms pošlje že ob prvem impulzu, naslednji sms pa po 240 impulzih.

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sob Nov 22, 2014 2:07 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala zdaj mi deluje samo incr A sem nadomestil z A = A + 1
Imam pa problem z tipkami ( imam občutek da se program nekje ustavi in ne gre naprej, ker mi drugega potem ne dela ampak samo vhode, pa sem samo to dodal k ostalimi 3 vhodi ) pa me zanima če je to prav napisano:
Koda:

If Tipka3 = 0 Then
      Wait 1
      If Tipka3 = 0 Then
         Cls
         Cursor Off
         Locate 2 , 2
         Lcd "tipka3 pritisnjena"
         Wait 2
         Cls
      End If
End If


dodano: se opravičujem za dvojni post ampak mi je kazalo napako pri pošiljanju...

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Sob Nov 22, 2014 2:48 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Poskusi se znebit telih Wait ukazov ... To ti je smrt za vsak program, saj takrat procesor ne počne prav nič drugega kot čaka (ok, pustimo interrupte na tem nivoju ) ... Tale "ustavitev" programa se dogaja najverjetneje prav zaradi vsega tega čakanja.

Tudi Cls ukaza se ne poslužuj pogosto, saj takrat display "utripne", kar ni lepo. Raje prepisuj vsebino displaya s kombinacijo ukaza "Locate" (da poveš pozicijo) in "Lcd" (izpis). Sam ju navadno dam kar v isto vrstico, npr.
Locate 1 , 1 : Lcd "test"

Lp, g

Avtor: tigerKraj: Škofja Loka PrispevekObjavljeno: Pet Dec 05, 2014 12:55 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni

Na mizo sem dal ATXMEGA 128A3U, jo počasi spoznavam. Na serijskem vhodu hočem sprejeti en byte v prekinitvenem načinu, vendar ga ne sprejme.
Ideja: ko sprejme byte, zasveti ledica.
Priloga programa, prosim za pomoč.

LP

Koda:

$regfile = "xm128a3def.dat"
$crystal = 16000000
$hwstack = 64
$swstack = 64
$framesize = 64

$lib "xmega.lib"
$external _xmegafix_clear
$external _xmegafix_rol_r1014

Config Osc = Disabled , Extosc = Enabled , Range = 12mhz_16mhz , Startup = Xtal_256clk       ', 32khzosc = Enabled
Config Sysclock = External , Prescalea = 1 , Prescalebc = 1_1

Config Com2 = 38400 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8
Open "Com2:" For Binary As #2

Dim Spr As Byte
Dim Rxc1_b As Bit


Config Portf = Output
Led Alias Portf.0
Led1 Alias Portf.2

On Usartc1_rxc Rxc_isr
Enable Usartc1_rxc , Lo
Enable Interrupts
'///////////////////////////////////////////////////////////////////////////////
Do
   If Rxc1_b = 1 Then
      Print #2 , "Sprejeto=" ; Spr
      Reset Rxc1_b
   End If
   Waitms 200
   Reset Led1
Loop
'//////////////////////////////////////////////////////////////////////////////
End
'//////////////////////////////////////////////////////////////////////////////
Rxc_isr:
   Spr = Inkey(#2)
   Set Rxc1_b
   Set Led1
Return
'/////////////////////////////////////////////////////////////////////////////


Nazadnje urejal/a tiger Pet Dec 05, 2014 5:40 pm; skupaj popravljeno 1 krat

Avtor: tigerKraj: Škofja Loka PrispevekObjavljeno: Pet Dec 05, 2014 12:56 pm    Naslov sporočila:  Atxmega
----------------------------------------------------------------------------
Prosim, kako moram narediti, da je koda v belem okvirju?

LP

Avtor: MadMax PrispevekObjavljeno: Pet Dec 05, 2014 1:54 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Koda:
Prosim, kako moram narediti, da je koda v belem okvirju?

Tole?
"Code".

Avtor: tigerKraj: Škofja Loka PrispevekObjavljeno: Pet Dec 05, 2014 5:55 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala Mad Max.

Isti program (nastavitve procesorja so drugačne), ki je napisan zgoraj deluje na Atmegi 16, na ATXMEGI128 pa ne, ne vem v čem je haklc. Think

LP

Avtor: kose19Kraj: okolica Kobarida PrispevekObjavljeno: Pet Dec 05, 2014 6:12 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Jaz imam v prekinitveni rutini tako.

Koda:

A = Inkey()
   'Lcd Hex(a)
   'Cls
If A = 2  Then                       
   ...
           
End If


Sem pa z lcd hex(a) si veliko pomagal, da sem videl kaj mi bere v buffer.
Mi pa to dela na Atmega8.

Avtor: tigerKraj: Škofja Loka PrispevekObjavljeno: Sob Dec 06, 2014 10:11 am    Naslov sporočila:  
----------------------------------------------------------------------------
Prekinitvena rutina naj bi imela čim manj kode, samo potrebno, da se obdela rutina.
Vsi izpisi in podobno naj se vršijo v glavnem programu ali podprogramu. Dokler se prekinitvena rutina ne zaključi, ne more sprejeti nove prekinitve.
V tem primeru ne more sprejeti novega podatka iz serijskih vrat.
Ali res nihče ne programira ATXMEG v Bascomu? Ne uspe mi sprogramirati serijskega vhoda v prekinitvenem načinu. Primer nekaj postov nazaj.

LP

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Sob Dec 06, 2014 12:32 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Z XMego nisem še delal ker ni bilo potrebe, sem pa malo bral na Nemškem forumu.
Če ti nemščina ni toliko tuja poglej ta link:
http://bascom-forum.de/showthread.php?2198-ATXMEGA-kleines-einmaleins-Erste-Schritte-mit-ATxmega

med drugim sem zasledil tole:
Citiram:
For the other UARTS, the variables are named similar. But they do have a
different number.
A 1 for the second UART, a 3 for the third UART and a 4 for the fourth
UART. Yes, the '2' is skipped.


LP

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Sob Dec 06, 2014 9:54 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Kontaktiraj Protončka - mislim, da je on svoj ta hud napajalnik naredil na Xmega128.

LP, g

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Sob Dec 06, 2014 10:05 pm    Naslov sporočila:  
----------------------------------------------------------------------------
No, moj "tahud" napajalnik je sicer res z xmego, a ne uporabljam serijske komunikacije, oziroma sem jo uporabljal samo enosmerno - iz xmege na terminal za potrebe debug-a.
Bom jutri naložil gornji program in se malce poigral, če kaj ugotovim, pa sporočim. Sicer imam doma samo xmega128a1u, ampak po moje ni neke hude razlike.

Avtor: tigerKraj: Škofja Loka PrispevekObjavljeno: Ned Dec 07, 2014 12:00 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Za pomoč pri spoznavanju z Xmego. Klik

LP

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Dec 07, 2014 1:55 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Zdravo

Kako se naredi, da mi program normalno teče, na vsake npr. 10 minut pa bi izvedel neko akcijo?

L.p.

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Ned Dec 07, 2014 2:15 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tiger:
Evo, meni je zadeva stekla, ko sem vstavil naslednji stavek:
Koda:
Config Priority = Static , Vector = Application , Lo = Enabled , Med = Enabled


Sicer sem com port spremenil v COM1, ker imam tako na demo plati, ampak bi moralo delati tudi na ostalih portih. Preveri in javi.

Mato:
narediš timer in tam šteješ. Recimo timer s prekinitvijo na 1 sekundo. Potem šteješ sekunde, minute. po 10 minutah pa pač tisto narediš.

primer za kvarc 8MHz in timer1:

Koda:
const Timer1Reload = 7812
config timer1=timer,prescale = 1024
load timer1 , Timer1Reload
on ovf1 Timer1_isr
enable timer1
start timer1
enable interrupts



'TUKAJ IMAŠ TVOJ PROGRAM, zraven dodaj:
if sekunde=60 then
   sekunde=0
   incr minute
endif

if minute=10 then
   minute=0
   'narediš tisto na 10 minut
end if

'--------------------------------------
Timer1_ISR:
   load timer1, Timer1Reload
   incr sekunde
  return

Avtor: tigerKraj: Škofja Loka PrispevekObjavljeno: Ned Dec 07, 2014 2:40 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Protoncek, sem vstavil manjkajočo konfiguracijo in DELAAAA.
Hvala, pivo pa vejca.

LP

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Ned Dec 07, 2014 2:53 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Applause Applause

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Jan 25, 2015 8:45 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Se je že kdo igral z (dvosmerno) brezžično komunikacijo dometa tam nekje do 20m?

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Ned Jan 25, 2015 9:01 pm    Naslov sporočila:  
----------------------------------------------------------------------------
V kakšnem smislu? In predvsem s čim? RF, Bluetooth...?
Jaz nameravam narediti nekaj z 868MHz moduli HM-TRP od Hopeja. Menda imajo doseg tam 3-5 km. So dragi, ampak imajo UART komunikacijo, zato je delo z njimi otročje lahko. Pošlješ string (Print....) ter poslušaš odgovor z input (inkey...). Vse ostalo so detajli

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Jan 25, 2015 9:20 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tako da bi bilo čim lažje Razz V mislih sem imel nekaj kar priklopiš na uart. Pa da je nekako cenovno ugodno max 15eur.
Kaj takega? http://www.ebay.com/itm/Wireless-Transceiver-HM-TRP-433Mhz-HopeRF-w-simple-UART-Program-Interface-xf-/151525667126?pt=LH_DefaultDomain_0&hash=item2347a23136

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Ned Jan 25, 2015 9:36 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Točno tega sem imel v mislih, ja. Ta je tak, kot si ga želiš: priklopiš na uart. Imaš par ukazov, s katerimi ga konfiguriraš, ampak v glavnem ne rabiš nič spreminjati, razen oddajno moč, če želiš. Ta modul dobiš tudi pri nas (SE). Sicer je malo dražji, ga pa ne boš čakal dva meseca, če se ti "mudi".
Edino pazit moraš, za katero frekvenco se boš odločil. Jaz sem raje nabavil 868MHz. Namreč, nisem prepričan, če evropska zakonodaja sploh dovoljuje 100mW oddajanja na 433MHz. Za 868 vem, da je dovoljeno v pasu 869,4 – 869,65 MHz do 500mW.

Sicer je vsak modul mogoče sprogramirati na katerokoli frekvenco, samo vsak modul ima izhodni antenski filter uglašen na nastavljen pas, zato bo delovanje v drugem pasu slabše, zato je že v startu bolje izbrati pravo frekvenco.

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Ned Jan 25, 2015 10:02 pm    Naslov sporočila:  
----------------------------------------------------------------------------
protoncek je napisal/a:
Imaš par ukazov, s katerimi ga konfiguriraš, ampak v glavnem ne rabiš nič spreminjati, razen oddajno moč, če želiš.


Velja omeniti še, da ima modul CONFIG pin, ki ga moraš krmiliti, če hočeš v način za nastavitve. Nastavljanje pa je še najlažje (če imaš le par modulov) kar preko PCja, saj ima Hope en programček za nastavljanje vseh parametrov.

Lp, g

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Ned Jan 25, 2015 10:12 pm    Naslov sporočila:  
----------------------------------------------------------------------------
hihi...samo nekako moraš "ugotoviti" da se te nastavitve ohranijo tudi po izpadu napajanja. Dancing Jaz tega nisem vedel in sem na začetku v programu najprej napisal vse potrebne ukaze za nastavitve (frekvenco, moč...). Brick wall kar po moje ni nič narobe, samo brez potrebe je.
Pa med TX in RX mora biti malce pavze, kot kaže modul rabi nekaj časa da "preklopi". Vsaj tako je bilo pri meni.

Avtor: LerKraj: NM PrispevekObjavljeno: Tor Apr 28, 2015 2:01 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tale modul HM-TRP 433Mhz - HopeRF gre z PCB anteno ali mora imeti zunanjo. Namreč rad bi spravil modul + vezje v dozozo fi60, pa sem omejen z prostorom. Kaka žička za anteno bi še šla kaj več pa bo že prostora zmanjkalo.

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Tor Apr 28, 2015 3:30 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Mislim da ni važno, oddajna moč ni tak velika, da bi lahko kaj skuril brez antene, Pač po sistemu boljša antena, večji domet. Pri tem moduli lahko slabo anteno kompenziraš z večjo oddajno močjo.

Avtor: LerKraj: NM PrispevekObjavljeno: Tor Apr 28, 2015 10:11 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Fino potem hitro v nabavo in sprobat. Hvala protoncek.

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Tor Apr 28, 2015 10:29 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Mogoče bi razmislil o frekvenci 868MHz... je manj nabita z urami, termometri in podobno navlako...sicer je vse te module mogoče nastaviti na obe frekvenci (niso zaklenjeni na nastalvljeno F), finta pa je v izhodnem filtru, ki je izračunan in nalotan za določeno frekvenco. Ampak po moje bi na ne predolge razdalje šlo...

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Sre Apr 29, 2015 8:31 am    Naslov sporočila:  
----------------------------------------------------------------------------
Ler je napisal/a:
Tale modul HM-TRP 433Mhz - HopeRF gre z PCB anteno ali mora imeti zunanjo. Namreč rad bi spravil modul + vezje v dozozo fi60, pa sem omejen z prostorom. Kaka žička za anteno bi še šla kaj več pa bo že prostora zmanjkalo.


Žička bo več kot dovolj! Po možnosti prave dolžine ... Wink

LP, g

Avtor: Andro82Kraj: Maribor PrispevekObjavljeno: Čet Maj 21, 2015 7:49 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Pozdravljeni!

Kako rešiti problem z LCD-jem (4X20), ko na zaslonu ostaja stara vrednost. S CLS ekran utripa. Zapolnjevanje s presledki po celotnem ekranu? Ali obstaja še kateri drugi način?



Druga težava:

Merjenje temperature s petimi senzorji DS18b20. Zaradi konverzije je potrebna sekunda zakasnitve. S tipkami nastavljam željeno temperaturo problem pa je, ker tipka zaradi potrebne zakasnitve sedaj ni več dovolj odzivna.


Hvala za pomoč!


LP, Andrej

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Čet Maj 21, 2015 9:04 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Uporabi ukaz LOCATE x,y.
Prepisuj vrednost samo če se nova vrednost razlikuje od že prikazane (tako bo LCD manj utripal). Pa meritve, če ni potrebno ne izvajaj prepogosto (predvidevam da gre za prikaz temperature).

DS1820 ne rabi čakati pri konverziji če ima priklopljeno napajanje, če pa se napaja prek data pina potem je zakasnitev nujna.
Če to ne bo dovolj, lahko uporabiš prekinitev za delo s tipkami za nastavitve.

Avtor: Jaka57Kraj: Grosuplje PrispevekObjavljeno: Čet Maj 21, 2015 9:27 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Andro82 je napisal/a:
Druga težava:

Merjenje temperature s petimi senzorji DS18b20. Zaradi konverzije je potrebna sekunda zakasnitve. S tipkami nastavljam željeno temperaturo problem pa je, ker tipka zaradi potrebne zakasnitve sedaj ni več dovolj odzivna.

Sekunda zakasnitve ni potrebna, odvisno od nastavitve resolucije DSa je čas, ki ga potrebuje senzor za konverzijo cca. 750ms ali manj. Toda programu ni potrebno čakat, da se konverzija izvrši, temveč, če senzor še ni izvršil konverzije, ga enostavno preskočiš. To na sliki je iz podatkovnega lista DS18B20. Z rumeno sem označil bistveno, vendar bodi pozoren na to, kar sem že nekaterim znanstvenikom na drugem forumu napisal:
Citiram:
V glavnem, linija DQ bo šla na 0, ko bo master poslal slaveu ti. read slot (vse kar pišem velja za direktno napajanje in ne za parazitno) in bo DS zaseden, brez tega bo ta linija na 1. Torej je branje v smislu digitalRead(sensor) popolnoma brez pomena, ker je sigurno v tistem trenutku na 1. In to pomeni, da, ko boš dal ukaz READ SCRATCHPAD (BEh), boš v času konverzije (44h) bral prejšnjo konverzijo in to toliko časa dokler nova konverzija ni izvršena, kar pomeni, da so bili odčitki, ki si jih dobil, enaki nekaj strani izpisa (kolikokrat je uspel v 750mS prebrati SCRATCHPAD).
Se je pa mogoče temu izogniti, če za določen senzor izvršiš samo read (read time slot in ne read scratchpad).
To sicer ni težava, če te ne moti, da tolikokrat prebere že izmerjeno vrednost, saj običajno program funkcionira na spremembo temperature.

Avtor: RGorazdKraj: Ig PrispevekObjavljeno: Pet Maj 22, 2015 4:45 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Andro82 je napisal/a:

Druga težava:

Merjenje temperature s petimi senzorji DS18b20. Zaradi konverzije je potrebna sekunda zakasnitve. S tipkami nastavljam željeno temperaturo problem pa je, ker tipka zaradi potrebne zakasnitve sedaj ni več dovolj odzivna.


Hvala za pomoč!


LP, Andrej


Uporabi timer, konfiguriraj ga tako, da ti na 1 s proži prekinitev, ki ti bo periodično klicala vsak DS posebej (spiši svojo subrutino). Ko imaš prebran rezultat, ga izpišeš na LCD, v glavni zanki pa preverjaj tipke, tako ne bo več zadeva neodzivna. Lahko pa narediš obratno. Vsak signal, ki gre iz tipke proti uC, veži še na INT0/INT1 pin. Ko se zgodi zunanja prekinitev, poglej katera tipka jo je sprožila in izvedi del programa, ki je vezan na dotično tipko.

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Pon Maj 25, 2015 8:29 pm    Naslov sporočila:  
----------------------------------------------------------------------------
zdravo poizkušam naslednje pa mi zmeraj meče napako:
Koda:

Dim A As Byte
Dim B As Byte
Dim C As String * 10
C = "111255abcd"
A = Left(C , 3) 'Rad bi dobil vrednost 111
B = Mid(C,4,6) 'Rad bi dobil vrednost 255


Rad bi uporabil pri komunikaciji z PC, da bi iz prejetega stringa dobil številke.
(Upam da se da narediti brez dodatnih spremenljivk ali pa z minimalnim številom, ker imam že skoraj pol SRAM Mr. Green )

Avtor: mucekKraj: Domzale PrispevekObjavljeno: Pon Maj 25, 2015 9:07 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tudi spremenljivki A in B morata biti deklarirani kot stringa. Left (in druge komande za stringe) lahko uporabljaš le na stringih. Če pa potem hočeš dobiti ven vrednost, pa uporabiš Val:

Koda:

Dim A As String*5
Dim B As String*5
Dim C As String * 10
Dim A_val as word

C = "111255abcd"
A = Left(C , 3) 'Rad bi dobil vrednost 111
B = Mid(C,4,6) 'Rad bi dobil vrednost 255

A_val = val(A)   'Tu pretvoriš string A v vrednost A_val


Če pa je SRAM problem, potem pa skušaj komunikacijo zoptimizirati: namesto, da pošiljaš "111255abcd", bi lahko za vsako vrednost poslal samo en byte (ASCI(111) namesto treh znakov 1)

LP, g


Nazadnje urejal/a mucek Pon Maj 25, 2015 9:09 pm; skupaj popravljeno 1 krat

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Pon Maj 25, 2015 9:09 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Itak da ti javi napako. rezultat ukaza LEFT ali RIGHT je string (preberi HELP!). Mislim, da brez dodatne spremenljivke ne bo šlo:

Koda:

Dim A As Byte
Dim B As Byte
Dim C As String * 10
Dim C as string * 3

C = "111255abcd"
D = Left(C , 3)
A = Val(D)
D = Mid(C,4,6)
B = Val(D)

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Jun 07, 2015 7:22 pm    Naslov sporočila:  
----------------------------------------------------------------------------
To pretvarjanje string->byte se mi ne obnese najbolje.
Koda:

Dim Uart As String * 20
Dim Stringtobyte As String * 4
Dim Izh1set As Byte
Dim Time1 As Word

Uart = "201100"

Do

Stringtobyte = Mid(uart , 3)
Izh1set = Val(stringtobyte)
Stringtobyte = Mid(uart , 4 , 7)
Time1 = Val(stringtobyte)

Print "/izh1set" ; Izh1set ; "/time1" ; Time1

Wait 1
Loop

Iz stringa uart(201100) bi moral razčleniti 20(tega ne rabim), 1(to vrednost bi morala dobiti spremenljivka stringtobyte), 100(to vrednost bi morala dobiti spremenljivka time1)
Vendar se mi na uart izpiše tole:
Koda:
/izh1set76/time1100
Ni mi jasno kje je spremenljivka izh1set dobila vrednost 76? Brick wall

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Ned Jun 07, 2015 7:29 pm    Naslov sporočila:  
----------------------------------------------------------------------------
hm... v stavku
Stringtobyte = Mid(uart , 3)
ti po moje manjka ena številka...

v drugem pa si kompilerju rekel tole:
stringtobyte naj bo del spremenljivke UART, prvi zank naj bo četrti, potem vzemi sedem znakov od tam.

PAZI! Prva številka je prvi string, ki ga hočeš, druga pa NI zadnji string, ampak je ŠTEVILO znakov, ki jih hočeš zajeti. Torej bolj takole:

Stringtobyte = Mid(uart , 3,4) : prvi znak je tretji (to je enica), potem vzemi štiri znake od tam.

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Jun 07, 2015 7:38 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Jaz bi samo rad iz stringa uart razbral tretji znak v stringu (ki bo zmeraj številka od 0-9) in ga pretvoril v byte.

Ali drugače: Uart="123456" jaz pa bi rad iz tega stringa razbral številko 3 in jo pretvoril v byte

PS:Moral bi narediti takole
Koda:
Stringtobyte = Mid(uart , 3 , 1)
Izh1set = Val(stringtobyte)
Mr. Green Zmeraj mi nagaja kakšna malenkost Brick wall

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Ned Jun 07, 2015 7:46 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Natanko tako, ja.
Vedno moraš pazljivo prebrat help za nek ukaz, če ne razumeš pa vpisati demo program zanj (je praktično vedno zraven) in preizkusit. Če ukaza ne razumeš ali ga razumeš narobe, je pa hudič, ja...

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Pet Jun 19, 2015 8:44 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Že nekaj časa razmišljam kako, bi naredil, da če tiščim tipko recimo 2 sekundi naredi program1 če pa tiščim 4 sekunde pa naredi program2 brez da bi izvršil program1.
Nič pametnega mi ne pade na pamet Eh?

Avtor: BorisKKraj: Ljubljana PrispevekObjavljeno: Pet Jun 19, 2015 11:24 pm    Naslov sporočila:  
----------------------------------------------------------------------------
mato1111 je napisal/a:
Že nekaj časa razmišljam kako, bi naredil, da če tiščim tipko recimo 2 sekundi naredi program1 če pa tiščim 4 sekunde pa naredi program2 brez da bi izvršil program1.
Nič pametnega mi ne pade na pamet Eh?


Tole imaš predlog algoritma, naprej boš pa že sam. Smile

Avtor: Profesor EinsteinKraj: Rogaška Sl. PrispevekObjavljeno: Sre Avg 19, 2015 11:16 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Zdravo

Zanima me kako prepričati bascom, da bo sprejel zunanjo referenčno napetost na AD pretvorniku pri (attiny 26).

PA.3 (AREF) deklariram kot vhod ?

Potem pa bo potrebno verjetno nastaviti preko registra ADMUX ?

Hvala za pomoč.

Lp.

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sre Avg 19, 2015 11:23 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Koda:
 Config Adc = Single , Prescaler = Auto , Reference = Avcc


Jaz imam tako pri atmega8

Avtor: Profesor EinsteinKraj: Rogaška Sl. PrispevekObjavljeno: Čet Avg 20, 2015 12:03 am    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala za odgovor.

Že deluje...

Lp.

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Čet Avg 20, 2015 8:17 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Imam vprašanje glede programa za tipkovnico 3x4. Za osnovo sem vzel program iz primera AN #144 - CodeLock AVR
Rad bi naredil, da ko vtipkam 4 številke in pritisnem # da si program zapomne kombinacijo oz jo shrani v spremenljivko "code". Sproti se na LCD izpisuje vrednost spremenljivke "code" ko tipkam številko napr: 1234 ko pa pritisnem # in bi moralo napisati "geslo sprejeto" in vrednost spremenljivke "code" napr: 1234 pa izpiše 0.

Koda:

$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , Rs = Portb.3 , E = Portb.2
Config Lcd = 16 * 2

Dim Keyread As Byte
Dim Key As Byte
Dim Code As Word
Dim Mycode As Word
Dim Code1 As Word
Dim Digits As Byte

Ddrd = 255
Portd = 0


Config Kbd = Portc , Debounce = 40

Cls
Cursor Off Noblink

Begin:
    Code = 0
    Digits = 0
    Point = 0

Scan:
    Cls
    Lcd "VNESI KODO"
Do
    Keyread = Getkbd()
        If Keyread <> 16 Then Gosub Gotkey
            Waitms 100

Loop





Gotkey:
    Ddrb = 255
    Waitms 200

    Key = Lookup(keyread , Dta)

    If Key <> 11 Then                                       'CE NI #
      If Key <> 15 Then                                     'CE NI *
      If Digits < 4 Then                                    'ce je manj kot 4 znaki
         Incr Digits
         Point = Digits + 6
         Code = Code * 10
         Code = Code + Key
         Cls
         Locate 2 , 1
         Lcd Code
      End If
      End If
    End If

    If Key = 11 And Digits = 4 Then                         'CE JE pritisnena # in 4 znaki potem POTRDI PIN
    Code = Code1
    Cls
    Upperline
    Lcd "KODA SPREJETA"
    Lowerline
    Lcd Code
    Wait 3
    Goto Begin
    End If

    If Key = 15 And Digits <= 4 Then                        'CE JE pritisnjena * IZBRISI VNESENO
    Lowerline
    Lcd "               "
    Code = 0
    Digits = 0
    Point = 0
    Goto Scan
    End If

Return

Dta:
Data 1 , 4 , 7 , 15
Data 2 , 5 , 8 , 0
Data 3 , 6 , 9 , 11
Data 65 , 66 , 67 , 68


Nazadnje urejal/a mato1111 Čet Avg 20, 2015 9:18 pm; skupaj popravljeno 1 krat

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Čet Avg 20, 2015 9:12 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Mato,
kodo ne moreš potrditi in shraniti z isto tipko (#).
Za shranjevanje kode uporabi *, za potrditev kode pa uporabi #.
Prav tako shranjeno kodo shrani v eeprom, na začetku programa jo preberi,
drugače boš po vsakem izklopu izgubil shranjeno kodo - kode če jih bo več.
Ko sem delal tipkovnico, sem imel eno kodo ki je služila za dodajanje in brisanje kod.
Taki kodi ponavadi rečejo master, ali pa servisna koda.
Tako kot imaš ti narejeno bi vsak lahko prišel vpisal štiri mestno kodo jo potrdil in uporabil tvojo tipkovnico.
LP

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Čet Avg 20, 2015 9:17 pm    Naslov sporočila:  
----------------------------------------------------------------------------
ja potrebujem jo samo shraniti in prikazati na lcd z pritiskom na #, pozneje bom dodelal podrobnisti ampak sedaj me zanima zakaj si ne zapomni vrednosti v spremenljivki "code"
Ja poznam ravno to hočem narediti tukaj ko bi prvic zagnal MCU bi vtipkal "servisno geslo" ki bi se shranilo v spremenljivko code1. Pa se že tu zatakne ker ne shrani vrednosti code ali code1

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Pet Avg 21, 2015 7:39 am    Naslov sporočila:  
----------------------------------------------------------------------------
Mato, ali nisi slučajno zamenjal # in *.
Ce si pravilno povezal tipkovnico bi #morala imeti vrednost 15 in * 11.

Citiram:
If Key = 11 And Digits = 4 Then 'CE JE pritisnena # in 4 znaki potem POTRDI PIN
Code = Code1

verjetno bi moralo biti
code1=code
ker je code1=0

LP

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Pet Avg 21, 2015 8:59 am    Naslov sporočila:  
----------------------------------------------------------------------------
O ja to je bil vzrok. čisto sem spregledal Brick wall
code=code1, zato je code je dobila vrednost 0 Brick wall

Avtor: MioKraj: Sebenje PrispevekObjavljeno: Sob Dec 05, 2015 12:28 pm    Naslov sporočila:  Re: Poizkusi tako, kot piše v help-u
----------------------------------------------------------------------------
[quote="vilko"]Poizkusi tako, kot piše v help-u:

Koda:
'configure single mode and auto prescaler setting
'The single mode must be used with the GETADC() function
'The prescaler divides the internal clock by 2,4,8,16,32,64 or 128
'Because the ADC needs a clock from 50-200 KHz
'The AUTO feature, will select the highest clockrate possible

Config Adc = Single , Prescaler = Auto

'Now give power to the chip
Start Adc
'With STOP ADC, you can remove the power from the chip
'Stop Adc

Dim W As Word , Channel As Byte
Channel = 0

'now read A/D value from channel 0
Do
  W = Getadc(channel)
  Print "Channel " ; Channel ; " value " ; W
Loop



Pozdravljeni!
Na forumu sem nov. Začel bom s konkretno težavo. Attiny2313 mi je uspešno "vozil" 7-segmentne in lcd prikazovalnike, meril temperaturo s pomočjo tcn75, komuniciral preko UART-a ipd. Zataknilo se je pri analognem vhodu. Na kodo:

$regfile = "attiny2313.dat"
$crystal = 800000
Config Adc = Single , Prescaler = Auto , Reference = Off
Dim A As Word
Do
A=Getadc(0)
Wait 1
Loop

v Bascomu mi javlja napako: [ADC_MUX entry not found in DAT file]
Pri regfile-u "m8def.dat" kompajla normalno. Poskusil sem tudi s citirano kodo iz help-a od Vilkota, enako napako vrže. Ideje?

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Sob Dec 05, 2015 1:15 pm    Naslov sporočila:  attiny2313 adc
----------------------------------------------------------------------------
Mislim, da attiny2313 nima analog to digital converter ja.

Avtor: MioKraj: Sebenje PrispevekObjavljeno: Sob Dec 05, 2015 2:05 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala za hiter odgovor.
Še enkrat sem pogledal v datasheet, marsikaj piše o Analog comparator-ju. Če prav razumem z attiny2313 lahko nastavim prag pri katerem naj se nekaj zgodi, ne morem pa izvajati meritev?

Avtor: rudiPKraj: KOPER PrispevekObjavljeno: Sob Dec 05, 2015 2:44 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Tako je kot si ugotovil. Malček pa nima analog to digital converterja.

Nazadnje urejal/a rudiP Ned Dec 06, 2015 8:16 am; skupaj popravljeno 1 krat

Avtor: MioKraj: Sebenje PrispevekObjavljeno: Sob Dec 05, 2015 3:18 pm    Naslov sporočila:  
----------------------------------------------------------------------------
hvala!

Bom začel delati z mego osmico.

Avtor: MioKraj: Sebenje PrispevekObjavljeno: Ned Dec 13, 2015 7:07 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Analogna pretvorba ni tako enostavna. Priključil sem navadni 1k potenciometar. Na megi8 izvajam kodo:

$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim A As Word
Start Adc
Do
A = Getadc(0)
Print A
Wait 2
Loop


Pri 5V je res vrednost 1023, pri 0V pa 0. Pričakoval bi pri da pri vrednosti 512 imam cca 2,5V - ampak NE. Takrat je dejansko 2,09V. Poskušal sem tudi z zunanjo referenco na AREF pinu, rezultat čisto nelinearan in nepričakovan.
Koda:
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim A As Word , B As Word , V As Byte , S As Byte
Start Adc
Do
A = Getadc(0)
B = A * 4.9
B = B * 10
B = B / 1024
V = B / 10
S = B Mod 10
Print "U=" ; V ; "," ; S ; " V"
Wait 2
Loop


je dala popolnoma nenatančne rezultate (napajanje je 4.9V). Rad bi obvladoval analogni vhod zaradi priključitve 4-20mA senzorja preko uporovega delilnika.
Kaj delam narobe?

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Dec 13, 2015 8:04 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ali si priklopil aref, avcc in gnd pin kot na tej shemi?

Avtor: MioKraj: Sebenje PrispevekObjavljeno: Ned Dec 13, 2015 9:27 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Nimam priključeno kot je na sliki. Vidim da bo treba še malo prebrati okrog tega.

Kako naj definiram Reference da bo koverter uporabljal notranjo referenco? Ali je to vedno 2.56V? Začel bi bolj preprosto, če se da.

mato1111, hvala za hiter odgovor

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Dec 13, 2015 9:49 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Koda:
'Config Adc = Single , Prescaler = Auto, Reference = Internal

'The reference param may be :

'OFF      : AREF, internal reference turned off

'AVCC     : AVCC, with external capacitor at AREF pin

'INTERNAL : Internal 2.56 voltage reference with external capacitor ar AREF pin

Avtor: MioKraj: Sebenje PrispevekObjavljeno: Pon Dec 14, 2015 7:47 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala za odgovor.

Že deluje kot urica...

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sob Jan 30, 2016 10:35 am    Naslov sporočila:  
----------------------------------------------------------------------------
Se je že kdo ukvarjal z PID regulacijo?

Avtor: cipkoKraj: velenje PrispevekObjavljeno: Sob Jan 30, 2016 11:40 am    Naslov sporočila:  
----------------------------------------------------------------------------
PID na atmega8 bi zanimala tudi mene

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Sob Jan 30, 2016 12:44 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Nekaj na to temo lahko najdete na:
http://www.mcselec.com/index.php?option=com_content&task=view&id=211&Itemid=57

http://www.mcselec.com/index.php?option=com_content&task=view&id=73&Itemid=57
LP

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sob Jan 30, 2016 1:38 pm    Naslov sporočila:  
----------------------------------------------------------------------------
V mislih sem imel PID za nadzor temperature

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Mar 13, 2016 4:28 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Imam težave z ATmega32 in RTC DS1307.
Iz SDA in SCL imam dva 10K upora na 5V ter ustrezen kristal na DS1307.
Ure, minute in sekunde mi kaže pravilno, dan, mesec in leto pa ne.
Testiram pa tako, da na uart vnesem čas in datum program to zapiše v DS1307 in potem prebere z njega in mi podatke pošlje nazaj na uart.

Primer, pošljem mu podatke 02112015223344 (02-dan, 11-mesec, 2015-leto, 22-ura, 33-minute, 44-sekunde), odgovori pa mi z 01022011223344 ki pa bi moral biti v istem zaporedju kot ko sem jih poslal jaz. ura je v redu (zadnjih 6 številk - 223344) datum pa je kar nekaj (01022011 Eh? ).
Uporabljam knjižnico ds1307clock.lib

Še del programa kjer mislim, da je napaka:
Koda:

Podatkicas = Mid(podatki_prejeto , 11 , 15)             'podatkicas=02112015223344
      Stringtobyte = Mid(podatkicas , 1 , 2)                'dobi dan
       _day = Val(stringtobyte)
       Stringtobyte = Mid(podatkicas , 3 , 2)               'dobi mesec
       _month = Val(stringtobyte)
       Stringtobyte = Mid(podatkicas , 7 , 2)               'dobi leto (samo zadnji dve številki: 15)
       _year = Val(stringtobyte)
      Stringtobyte = Mid(podatkicas , 9 , 2)                'dobi ura
       _hour = Val(stringtobyte)
      Stringtobyte = Mid(podatkicas , 11 , 2)               'dobi minuta
       _min = Val(stringtobyte)
       Stringtobyte = Mid(podatkicas , 13 , 2)              'dobi sekunda
       _sec = Val(stringtobyte)

      Gosub Setdate
      Waitms 100
       Gosub Settime
      Waitms 100
      Gosub Getdatetime

   If _day < 10 Then
   Strday = "0" + Str(_day )
   Else
   Strday = Str(_day )
   End If
   If _month < 10 Then
   Strmonth = "0" + Str(_month )
   Else
   Strmonth = Str(_month )
   End If
   Stryear = "20" + Str(_year )
   If _hour < 10 Then
   Strhour = "0" + Str(_hour )
   Else
   Strhour = Str(_hour)
   End If
   If _min < 10 Then
   Strmin = "0" + Str(_min )
   Else
   Strmin = Str(_min )
   End If
   If _sec < 10 Then
   Strsec = "0" + Str(_sec )
   Else
   Strsec = Str(_sec )
   End If

   Print Strday ; Strmonth ; Stryear ; Strhour ; Strmin ; Strsec

Getdatetime:
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 0                                                ' start address in 1307

  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307r                                          ' send address
  I2crbyte _sec , Ack
  I2crbyte _min , Ack                                       ' minute
  I2crbyte _hour , Ack                                      ' ure
  I2crbyte _day , Ack                                       ' dan
  I2crbyte _month , Ack                                     ' mesec
  I2crbyte _year , Nack                                     ' leto
  I2cstop
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Setdate:
  _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 4                                                ' starting address in 1307
  I2cwbyte _day                                             ' dan
  I2cwbyte _month                                           ' mesec
  I2cwbyte _year                                            ' leto
  I2cstop
  Waitms 10
Return

  Settime:
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 0                                                ' starting address in 1307
  I2cwbyte _sec                                             ' sekunde
  I2cwbyte _min                                             ' minute
  I2cwbyte _hour                                            ' ure
  I2cstop
  Waitms 10
Return

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Ned Mar 13, 2016 5:26 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ti imaš dan-mesec-leto. kaj pa "day of week"? Datum je v obliki:
Nedelja (=day of week), 13 (=dan), 3(=mesec) 2016 (leto se računa samo 16).
Nikjer ne vidim, da bi vpisal dan v tednu...posledično si datum vpisal narobe in dobil ven
01022011223344, kar pomeni 01=recimo ponedeljek, 02.20.(20)11, ura=22:33:44.

Glej tabelo v datasheetu, stran 8. Saj vpisuješ prav (no, ne vpišeš dneva, ampak na prave adrese), samo pri branju preskočiš "day of week"...

Dan v tednu je od 1 do 7, kaj je kaj, določiš sam, jaz ponavadi rečem, da je 1 ponedeljek, 7 pa nedelja (dan se pri nas začne s ponedeljkom).

Avtor: joze PrispevekObjavljeno: Ned Mar 13, 2016 7:02 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Dan v tednu je od 1 do 7, kaj je kaj, določiš sam, jaz ponavadi rečem, da je 1 ponedeljek, 7 pa nedelja (dan se pri nas začne s ponedeljkom).

Kako določiš sam, kaj ni vezan na datum (dan)?

Če pogledaš na kolendar za določeni datum (dan), vidiš kateri dan v tednu je.

Se motim?

Avtor: vilkoKraj: Dragomer PrispevekObjavljeno: Ned Mar 13, 2016 7:19 pm    Naslov sporočila:  
----------------------------------------------------------------------------
joze je napisal/a:
Dan v tednu je od 1 do 7, kaj je kaj, določiš sam, jaz ponavadi rečem, da je 1 ponedeljek, 7 pa nedelja (dan se pri nas začne s ponedeljkom).

Kako določiš sam, kaj ni vezan na datum (dan)?

Če pogledaš na kolendar za določeni datum (dan), vidiš kateri dan v tednu je.

Se motim?


Nee. Sam s seboj se dogovoriš, kaj pomeni številka med 0 in 6 oziroma med 1 in 7.
RTC samo skrbi, da se ob prelomu dneva števec dvigne za ena, in na koncu prevrne na 0 oziroma 1. Ne vem kako je to pri konkretnem RDT čipu. Osebno uporabljam starega PCF8583

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Mar 13, 2016 8:14 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ja hvala stvar sedaj deluje Dancing
Dodal sem vrstico
Koda:
I2crbyte _Weekday , Ack


Koda:

Getdatetime:
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 0                                                ' start address in 1307

  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307r                                          ' send address
  I2crbyte _sec , Ack                                       ' sekunde
  I2crbyte _min , Ack                                       ' minute
  I2crbyte _hour , Ack                                      ' ure
  I2crbyte _Weekday , Ack             ' < GLEJ TUKAJ
  I2crbyte _day , Ack                                       ' dan
  I2crbyte _month , Ack                                     ' mesec
  I2crbyte _year , Nack                                     ' leto
  I2cstop
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sob Maj 14, 2016 10:11 am    Naslov sporočila:  
----------------------------------------------------------------------------
Imam problem z UART komunikacijo dveh mikrokontrolerjev Atmega32.
RX in TX je povezan pravilno. Masa je tudi skupna. Pri obeh enak baud rate 2400 in enaka frekvenca kristala 3,6864MHz.
Če mikrokontroler posebej povežem z računalnikom in na terminalu simuliram ukaze drugega mikrokontrolerja deluje tako kot je treba. Vsak zase delujeta lepo ko pa ju povežem skupaj se nič ne dogaja Eh?
Prosim za kakšen nasvet
L.p. Mato

Avtor: protoncekKraj: Mengeš PrispevekObjavljeno: Sob Maj 14, 2016 11:37 am    Naslov sporočila:  
----------------------------------------------------------------------------
Kako pa imaš napisan program? Imaš sprejem izveden z interruptom (on urxc sprejem_telegrama) ali imaš serial konfiguriran kot "buffered"? Če samo občasno bereš inkey ni v redu, ker tako izgubljaš sprejete znake. Sam avr nima nobenega baferja (no, ima za en znak).
S terminalom poslušaj tisti kontroler, ki naj bi oddajal, če res to počne.

Avtor: VladoKraj: Ljubljana PrispevekObjavljeno: Sob Maj 14, 2016 11:38 am    Naslov sporočila:  
----------------------------------------------------------------------------
Mato,
brez kode lahko samo ugibamo kje si ga polomil.
Kako sprejemaš podatek (inkey, witkey, input)??

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sob Maj 14, 2016 5:15 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Z prekinitveno rutino od vilkota Mr. Green
Saj pravim da kontrolerja lepo delujeta ce vsakega posebej priklopim na racunalnik in podatke pisem na roke preko bray terminala.

Avtor: igo PrispevekObjavljeno: Sob Maj 14, 2016 7:15 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ti si za hece, ja.

Prilepi oba programa.
Na koncu se bo ugotovilo, da oba MCU-ja samo čakata, da kaj prileti na RX, za začetek komunikacije mora biti pa vsaj eden dovolj nesramežljiv, pogumen in zgovoren, da vpraša tisti znameniti: "Živijo, kako si?"

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sre Sep 20, 2017 12:01 pm    Naslov sporočila:  
----------------------------------------------------------------------------
No da malo obudim temo Mr. Green

Potrebujem kakšen nasvet.
Imam nek dolg string podatkov v katerem iščem številko ki bi jo rad zapisal v drugi string. Problem pa je da ta številka ni vedno na istem mestu in ni vedno enako dolga.
Primer kaj bi rad prepisal v drug string (podčrtano):
+CMGR: "REC UNREAD","+38651123456","","14/09/17,21:52:51+08"
+CMGR: "REC READ","+38651123456","","14/09/17,21:52:51+08"
+CMGR: "REC UNREAD","10086","","14/09/17,21:52:51+08"

Avtor: frenkiKraj: Ljubljana (JN76GB) PrispevekObjavljeno: Sre Sep 20, 2017 1:30 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Če z instr() poiščeš prvo pojavljanje separatorja polja => "," <= , nato pa od tu dalje naslednje, boš dobil startno pozicijo in dolžino, ki jo z mid() potegneš ven?

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sre Sep 20, 2017 6:06 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala z malo igranja mi je uspelo Dancing

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Pet Dec 22, 2017 9:36 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Naredil sem primer ce koga zanima kako se naredi casovno prekinitev.
Uporabil sem Timer1.
Vrednost Timer1reload se izracuna po formuli:
Timer1reload = (f*t)/pr kjer je
f = frekvenca uporabljenega kristala (v Hercih)
t = zeljena casovna enota (v sekundah)
pr = prescale oz. delilnik, ki deli frekvenco kristala, Izbiramo lahko med vrednostmi 1,8,64,256 in 1024.
Pomembno je da je vrednost Timer1reload med 1 in 65535 saj je Timer1 16-biten in zato je njegova max vrednost 65535.

izracun 1:
f = frekvenca uporabljenega kristala = 3686400 Hz
t = zeljena casovna enota = 100 ms = 0,1 s
pr = prescale = 1 (poskusimo z vrednostjo 1)
Timer1reload = (f*t)/pr = (3686400*0,1)/1 = 368640
dobljen rezultat 368640 je vecji kot je najvecja dovoljena vrednost 65535 zato poskusimo z vecjo vrednostjo prescale.

izracun 2:
f = frekvenca uporabljenega kristala = 3686400 Hz
t = zeljena casovna enota = 100 ms = 0,1 s
pr = prescale = 1024 (poskusimo z vrednostjo 1024)
Timer1reload = (f*t)/pr = (3686400*0,1)/1024 = 360
dobljen rezultat 360 je manjsi od 65535 zato je izracun v redu.

Nekje na zacetku programa napisemo tole nastavitev:
Koda:
'***Casovna prekinitev vsakih 100ms***
Const Timer1reload = 360
Config Timer1 = Timer , Prescale = 1024
Load Timer1 , Timer1reload
On Ovf1 Timer1_int
Enable Timer1
Start Timer1
Enable Interrupts


Cisto na koncu programa pa primer tele prekinitvene rutine:
Koda:
Timer1_int:
Ledica = Not Ledica 'Ledica (Nek izhodni pin) spremeni stanje vsako casovno enoto.
Load Timer1 , Timer1reload
Incr stevec 'Nek stevec, ki se vsako casovno enoto poveca za 1 in definiran mora biti na zacetku programa.
Return

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Pon Jan 08, 2018 4:00 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Sele sedaj sem ugotovil da uporaba stavka "elseif (pogoj) then" znotraj if stavka ni tako logicna (vsaj meni ne) kot se zdi na prvi pogled Think
V bascom help-u piše:
Koda:
IF expression THEN
[ ELSEIF expression THEN ]
[ ELSE ]
END IF

po tem sem sklepal da lahko elseif normalno uporabljas kot naprimer:
Koda:
Dim A As Byte
A = 25
If A < 30 Then
    Print A < 30
Elseif A = 25 Then
    Print A = 25
Elseif A > 23 Then
    Print A > 23
End If

Izkazalo pa se je da se v tem primeru izvede samo ukaz "Print A < 30" kjub temu da sta izpolnjena tudi pogoja A = 25 ter A > 23.
V bistvu se izvede samo prvi pogoj ki je izpolnjen ostale pa ocitno ignorira.
Pa tudi v bascom help-u ne napisano nič na to temo

Avtor: kose19Kraj: okolica Kobarida PrispevekObjavljeno: Pon Jan 08, 2018 4:08 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Kaj se ti izvede pa, če prvi pogo A<30j ni izpolnjen?
Pomoje se šele takrat preverja ELSEIF vrstica.

Kdaj se izvaja drugi ELSEIF stavek pa tudi meni ni jasno tako na pamet brez poizkusit.

Avtor: cimerKraj: Ljubljana PrispevekObjavljeno: Pon Jan 08, 2018 4:39 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ojla

If stavek se izvaja točno tako kot si sledijo zapisani pogoji.

Najprej preverja prvi IF, če je pogoj izpolnjen, se izvede koda znotraj IF stavka in ko konča z izvajanjem kode skoči na konec IF stavka.

Če pogoj ni izpolnjen se izvede ELSIF ali ELSE. V primeru ELSIF velja isto kot za IF. Če je pogoj izpolnjen, se izvede koda znotraj IF stavka spet skok na konec IF stavka.

S tvojim primerom pravzaprav ne vem kaj si želel s programom. Če napišeš konkretno situacijo, ti lahko pomagamo / svetujemo.....

Avtor: Jaka57Kraj: Grosuplje PrispevekObjavljeno: Pon Jan 08, 2018 5:29 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Kakor ti to razumeš velja za SELECT-CASE-END SELECT.

Avtor: kose19Kraj: okolica Kobarida PrispevekObjavljeno: Pon Jan 08, 2018 7:48 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ker je bilo prej govora o timerjih in njihovih izračunih sem v TO TEMO pripel enostaven kalkulatorček.

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sre Feb 07, 2018 12:35 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Zdravo imam sledečo situacijo.
Atmega328 imam priklopljen na rezervno napajanje tako da ko zmanjka napajalne napetosti imam baterijo. Ker pa hočem imeti tudi zaščito proti preizpraznjenosti baterije imam podprogram ki mi izklopi vse porabnike ko pade napetost baterije pod določeno vrednost tako da ostane vklopljen samo še mikrokontroler sam.
Zanima me ali bi lahko naredil da gre mikrokontroler v tem primeru v kakšen način delovanja ki porabi zelo malo energije in se potem nekako spet zbudi ko pride napajalna napetost nazaj? Za meritev baterije uporabljam en ADC kanal za meritev napajalne napetosti pa drug ADC kanal.

Avtor: Jaka57Kraj: Grosuplje PrispevekObjavljeno: Sre Feb 07, 2018 2:49 pm    Naslov sporočila:  
----------------------------------------------------------------------------
328p pozna šest načinov spanja.
V priloženem pdfju glej stran 39.

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Sre Feb 07, 2018 3:19 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Sem si pogledal pa mi ni jasno kaj uporabit za moj primer. Ocitno bi ga moral nekako zbudit z ADC? Tudi nobenega programskega primera na ta nacin ne najdem?

Avtor: Jaka57Kraj: Grosuplje PrispevekObjavljeno: Čet Feb 08, 2018 2:43 am    Naslov sporočila:  
----------------------------------------------------------------------------
Odvisno v kateri način spanja ga postaviš, toda za vse načine ga lahko zbudiš z INT0 ali INT1, ko se na enem od teh pinov spremeni vrednost,
to se pravi, ko se spremeni od 1->0 ali obratno in ta signal mora biti prisoten vsaj toliko ciklov oscilatorja, kot je določeno s SUT v nastavitvah fuse bitov (opcije oscilatorja).
Preberi si to poglavje vsaj do strani 43.

Avtor: marko11Kraj: Dobrepolje PrispevekObjavljeno: Ned Avg 25, 2019 1:33 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hi
Spet malo Bascom-a.

Kako napisati tale pogoj ?

ko je T_k večji (>) za 3 od T_b naj vklopi Rele1

in

ko je T_k enak (=) ali manjši kot T_b naj izključi Rele1

Poskušam s Select Case pa mi ne uspe. Prosim za kakšno pomoč.

LP,marko

Avtor: mato1111Kraj: Vrhnika PrispevekObjavljeno: Ned Avg 25, 2019 1:45 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Dva if stavka?

Avtor: marko11Kraj: Dobrepolje PrispevekObjavljeno: Ned Avg 25, 2019 1:58 pm    Naslov sporočila:  
----------------------------------------------------------------------------
mato1111 je napisal/a:
Dva if stavka?


Sem poskušal pa mi ne uspe. Ali lahko napišeš?

Avtor: Jaka57Kraj: Grosuplje PrispevekObjavljeno: Ned Avg 25, 2019 2:15 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Ne poznam Bascoma, toda naj bi šlo takole:
Koda:
If T_k > (T_b + 3) Then vklopi_Rele1
elseIf T_k <= T_b Then izklopi_Rele1
EndIf


Če ne pozna operatorja <= potem še en if stavek ali logični OR ( If (T_k<T_b) OR (T_k=T_b) Then........ ).

Avtor: marko11Kraj: Dobrepolje PrispevekObjavljeno: Ned Avg 25, 2019 2:25 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Operatorje pozna nesprejme pa tega v oklepaju.

Avtor: Jaka57Kraj: Grosuplje PrispevekObjavljeno: Ned Avg 25, 2019 4:30 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Kot sem napisal, ne poznam Bascoma, vendar lahko rešiš vse skupaj s tremi If stavki:
Koda:
If večje Then....
ElseIf enako Then ......
ElseIf manjše Then .....
EndIf

Avtor: Krampus PrispevekObjavljeno: Ned Avg 25, 2019 7:57 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Jaka57 je napisal/a:
Ne poznam Bascoma, toda naj bi šlo takole:
Koda:
If T_k > (T_b + 3) Then vklopi_Rele1
elseIf T_k <= T_b Then izklopi_Rele1
EndIf


Če ne pozna operatorja <= potem še en if stavek ali logični OR ( If (T_k<T_b) OR (T_k=T_b) Then........ ).


Koda:

T_b1 = T_b + 3

If T_k > (T_c) Then vklopi_Rele1
elseIf T_k <= T_b Then izklopi_Rele1
EndIf

Avtor: Jaka57Kraj: Grosuplje PrispevekObjavljeno: Ned Avg 25, 2019 8:21 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Krampus, verjetno si mislil:

If T_k > T_b1 in ne T_c

ali Bascom ne prenaša aritmetike v If stavkih?

Avtor: Krampus PrispevekObjavljeno: Pon Avg 26, 2019 7:16 am    Naslov sporočila:  
----------------------------------------------------------------------------
Ja, štima

Avtor: BojanRKraj: Vnanje Gorice PrispevekObjavljeno: Pon Avg 26, 2019 7:59 am    Naslov sporočila:  
----------------------------------------------------------------------------
Uvedeš še eno spremenljivko.
B=T_b+3
if T_k>B then set Rele1
if T_k =< T_b then reset Rele1

Stran 1 od 1

Powered by phpBB © 2001,2002 phpBB Group